如何将Ubuntu18.04上的Drupal8站点迁移至Ubuntu20.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.lockweb/目录下的所有内容- 其他自定义配置文件(比如.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

