织梦网站迁移服务器步骤

服务器迁移是织梦运维中的高风险操作,涉及文件、数据库、配置、域名解析多个环节。任何一个步骤遗漏都可能导致迁移后白屏、数据库连接失败、图片 404、生成静态异常。下面是一套经过实战验证的迁移流程,可最大限度降低风险。

一、迁移前的准备

1. 信息盘点

  • 当前织梦版本:cat /include/common.inc.php | grep cfg_version
  • PHP 版本与扩展:新服务器 PHP 版本必须与原服务器兼容(建议同为 7.4 或 8.0);
  • 数据库版本与字符集:SHOW VARIABLES LIKE 'character_set%';
  • 域名与 SSL 证书到期时间。

2. 新服务器环境准备

  • 安装相同或兼容版本的 PHP、MySQL、nginx;
  • 创建站点目录 /www/wwwroot/dede/
  • 创建数据库 dedecms,字符集 utf8mb4
  • 创建数据库用户并授权。

3. 选择低峰期

迁移会暂停写入,建议选在凌晨或周末低峰期,并在站点公告维护时间。

二、第一步:备份源站

# 文件备份
cd /www/wwwroot
tar -czf dede_full_$(date +%F).tar.gz dede/

# 数据库备份
mysqldump -u root -p --single-transaction --default-character-set=utf8mb4 \
    dedecms | gzip > dedecms_$(date +%F).sql.gz

# nginx 配置备份
cp /etc/nginx/conf.d/dede.conf /root/dede_nginx.conf.bak

三、第二步:传输到新服务器

# 通过 rsync 传输(推荐)
rsync -avzP --progress /www/wwwroot/dede_full_$(date +%F).tar.gz \
    newuser@new-server:/tmp/

rsync -avzP dedecms_$(date +%F).sql.gz \
    newuser@new-server:/tmp/

四、第三步:新服务器部署文件

cd /www/wwwroot
tar -xzf /tmp/dede_full_$(date +%F).tar.gz
chown -R www:www dede/
find dede -type d -exec chmod 755 {} \;
find dede -type f -exec chmod 644 {} \;
# 写权限目录
chmod -R 775 dede/uploads/ dede/data/cache/ dede/data/sessions/ dede/data/backupdata/ dede/a/

五、第四步:导入数据库

# 创建数据库
mysql -u root -p -e "CREATE DATABASE dedecms DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

# 创建用户并授权
mysql -u root -p -e "CREATE USER 'dedeuser'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON dedecms.* TO 'dedeuser'@'localhost';
FLUSH PRIVILEGES;"

# 导入数据
gunzip < /tmp/dedecms_$(date +%F).sql.gz | mysql -u dedeuser -p dedecms

六、第五步:修改数据库连接配置

编辑 /www/wwwroot/dede/data/common.inc.php

<?php
// 数据库连接信息
$cfg_dbhost='localhost';
$cfg_dbname='dedecms';
$cfg_dbuser='dedeuser';
$cfg_dbpwd='strong_password';
$cfg_dbprefix='dede_';
$cfg_db_language='utf8mb4';
?>

七、第六步:修改站点配置

1. 修改域名与路径

登录数据库更新 dede_sysconfig

-- 站点根网址
UPDATE dede_sysconfig SET value='https://www.example.com' WHERE varname='cfg_basehost';
-- 站点根目录
UPDATE dede_sysconfig SET value='/' WHERE varname='cfg_cmspath';
-- 文档保存目录
UPDATE dede_sysconfig SET value='/a' WHERE varname='cfg_arcdir';

2. 修改 data 目录路径

若新服务器 data 目录路径与原服务器不同,需修改 /include/common.inc.php

define('DEDEDATA', '/www/wwwroot/dede/data/');

3. 清空缓存

cd /www/wwwroot/dede/data
rm -rf cache/* sessions/* tplcache/*
迁移后必须清空缓存目录,否则旧路径的缓存会导致前台白屏或样式错乱。

八、第七步:配置 nginx

server {
    listen 80;
    server_name www.example.com;
    root /www/wwwroot/dede;
    index index.php index.html;
    
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ \.php$ {
        fastcgi_pass unix:/tmp/php-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    
    # 安全加固
    location ^~ /data/     { deny all; return 404; }
    location ^~ /include/  { deny all; return 404; }
    location ^~ /templets/ { deny all; return 404; }
    location ^~ /install/  { deny all; return 404; }
    location ~* /uploads/.*\.(php|phtml)$ { deny all; return 404; }
}

九、第八步:本地验证

修改本地 hosts 把域名指向新服务器 IP,验证:

  1. 首页、栏目页、文章页正常打开;
  2. 图片、CSS、JS 加载正常;
  3. 后台可登录,可生成 HTML;
  4. 采集、上传、评论等模块正常;
  5. 验证码能正常显示。

十、第九步:切换域名解析

  1. 原服务器设为只读,停止写入;
  2. 同步最新增量数据到新服务器;
  3. DNS 解析切换到新服务器 IP;
  4. TTL 设置为 300 秒,加速全球生效;
  5. 观察 24 小时,确认无异常后下线原服务器。

十一、注意事项

  • PHP 版本差异是迁移失败高发原因,7.x → 8.x 可能导致老插件不兼容;
  • 数据库字符集必须一致,utf8 与 utf8mb4 混用会导致中文乱码;
  • 静态化目录 /a/ 若未迁移,需重新生成全站 HTML;
  • SSL 证书需重新部署,或从原服务器导出 .pfx 后导入;
  • CDN 回源 IP 需更新为新服务器 IP。
织梦站点迁移看似复杂,但拆解为"备份—传输—部署—配置—验证—切换"六步后并不难。关键是把每步都验证到位,尤其是缓存清理、数据库连接、域名配置三个最易出错的环节。建议迁移前先在新服务器跑通完整流程,再选择低峰期切换解析。完成后保留原服务器 7 天作为回滚保障,确认无异常再正式下线。