You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Ubuntu18.04上的Drupal8站点迁移至Ubuntu20.04新服务器?

迁移Drupal 8站点到Ubuntu 20.04服务器的完整指南

嘿,我懂你之前迁移Drupal 7的流程驾轻就熟,但Drupal 8因为引入了Composer管理依赖,目录结构确实有不少变化,别慌,我给你梳理一套适配的迁移步骤,保证能顺利搞定:

一、前期准备:复用SSH密钥配置

这部分和你之前迁移Drupal 7的操作完全一致,不用改:

  • 在新Ubuntu 20.04服务器生成密钥:
    sudo ssh-keygen -t rsa -b 4096 -C root@www-example-com
    sudo cat /root/.ssh/id_rsa.pub
    
  • 把生成的公钥添加到旧服务器的/root/.ssh/authorized_keys文件里,确保scp能无密码传输,省得反复输密码。

二、旧服务器端操作

1. 启用站点维护模式

避免迁移过程中用户修改内容,先把站点设为维护模式:
如果装了Drush,直接执行:

drush state:set system.maintenance_mode 1

没装Drush的话,登录Drupal后台,在「配置」→「维护模式」里开启。

2. 导出数据库

和Drupal 7的命令类似,但建议加--single-transaction参数避免锁表,更安全:

mysqldump -u root -p --single-transaction www_example_com > /var/www/www-example-com/share/www-example-com_$(date +%F).sql

3. 准备站点文件

Drupal 8用Composer安装的话,目录结构通常是这样的:

/var/www/www-example-com/
├── composer.json       # 依赖配置文件
├── composer.lock       # 锁定依赖版本的文件
├── vendor/             # Composer安装的核心、contrib模块等依赖
└── web/                # 站点文档根目录,包含自定义模块/主题、站点配置、上传文件
    ├── modules/
    │   └── custom/     # 你的自定义模块
    ├── themes/
    │   └── custom/     # 你的自定义主题
    └── sites/
        └── default/
            ├── files/  # 用户上传的文件
            └── settings.php # 站点配置文件

推荐直接迁移整个项目目录(虽然vendor目录较大,但能保证依赖版本完全一致),如果想节省传输时间,也可以只迁移:

  • composer.json和composer.lock
  • web/目录下的所有内容
  • 其他自定义配置文件(比如.env如果有的话)

三、新服务器端操作

1. 搭建适配的运行环境

Ubuntu 20.04默认的PHP 7.4完全符合Drupal 8的要求(Drupal 8支持PHP 7.2~8.0),先装好必要的组件:

# 安装LAMP环境为例(Nginx的话替换apache2为nginx)
sudo apt update && sudo apt install apache2 mariadb-server php7.4 php7.4-mysql php7.4-gd php7.4-xml php7.4-mbstring composer

记得配置MySQL,创建好对应的数据库用户和权限(和旧服务器保持一致更省心)。

2. 取回站点文件

用scp把旧服务器的项目目录拉过来:

sudo scp -r -p root@旧服务器IP:/var/www/www-example-com/ /var/www/www-example-com/

3. 安装Composer依赖(可选,如果没迁移vendor目录的话)

进入项目根目录,执行:

cd /var/www/www-example-com
composer install

这会根据composer.lock文件自动安装所有需要的Drupal核心、模块和依赖,版本和旧服务器完全一致。

4. 导入数据库

先创建空数据库(字符集用utf8mb4更适配Drupal):

mysql -u root -p -e "CREATE DATABASE www_example_com CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

然后导入备份的数据库:

mysql -u root -p www_example_com < /var/www/www-example-com/share/www-example-com_2020-08-10.sql

(替换成你实际的数据库备份文件名)

5. 配置站点权限和连接信息

  • 检查web/sites/default/settings.php里的数据库连接信息,确保和新服务器的MySQL配置一致。
  • 设置正确的文件权限,避免上传文件或缓存写入失败:
sudo chown -R www-data:www-data /var/www/www-example-com/web/sites/default/files
sudo chmod -R 755 /var/www/www-example-com/web/sites/default/files

6. 配置Web服务器虚拟主机

如果是Apache,编辑虚拟主机配置文件(比如/etc/apache2/sites-available/www-example-com.conf),确保文档根目录指向web目录:

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/www-example-com/web

    <Directory /var/www/www-example-com/web>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/www-example-com-error.log
    CustomLog ${APACHE_LOG_DIR}/www-example-com-access.log combined
</VirtualHost>

然后启用站点并重启Apache:

sudo a2ensite www-example-com.conf
sudo a2enmod rewrite
sudo systemctl restart apache2

Nginx的话,配置文档根目录为/var/www/www-example-com/web,并设置对应的rewrite规则。

7. 清除缓存并关闭维护模式

用Drush清除缓存最方便:

drush cache:rebuild
drush state:set system.maintenance_mode 0

没装Drush的话,可以访问站点的/update.php页面完成更新,或者手动删除web/sites/default/files/php目录下的缓存文件,再关闭维护模式。

四、额外注意事项

  • 如果旧服务器的Drupal 8是手动安装(非Composer),目录结构和Drupal 7类似,迁移步骤可以参考Drupal 7,但建议迁移后用Composer重新管理依赖,方便后续升级。
  • 别忘了迁移SSL证书(如果有的话),把旧服务器的证书文件复制到新服务器,配置到Web服务器中。
  • 迁移完成后,访问站点测试所有功能,比如自定义模块、主题、用户上传的文件是否正常显示。

内容的提问来源于stack exchange,提问作者user13995839

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 19:47:28