今天给我的 Discourse 社区做了一次域名迁移,把域名从 wenxin.me 正式更换为了 yangyang.si。整个过程虽然遇到了一点小插曲,但最终顺利搞定!特此记录一下完整的操作步骤和踩坑心得,方便日后查阅。
换域名完整步骤
阶段一:修改配置文件并重建容器
- 登录服务器并进入 Discourse 的安装目录:
cd /var/discourse
- 编辑
containers/app.yml配置文件,找到DISCOURSE_HOSTNAME参数,将其修改为新域名:
DISCOURSE_HOSTNAME: 'yangyang.si'
- 重新构建容器(此过程会自动为新域名申请 Let's Encrypt SSL 证书):
./launcher rebuild app
踩坑与排错
在更换完配置并重建容器后,需要将数据库里旧域名的历史链接批量替换为新域名,并重构帖子的 HTML 缓存。
最初我直接在宿主机(服务器本机)终端里运行了 discourse remap 和 rake posts:rebake 命令,结果终端直接报错:
-bash: discourse: command not found
-bash: rake: command not found
原因分析:
discourse 和 rake 这类命令是封装在 Docker 容器内部环境中的,无法直接在宿主机上调用。
正确做法:
必须先通过 ./launcher enter app 命令进入容器内部,再执行替换操作。
阶段二:数据库域名替换与缓存重构
- 进入容器环境:
./launcher enter app
进入容器后,命令行提示符会变为 root@wenxin-app:/var/www/discourse#。
- 全局替换数据库中的旧域名:
discourse remap wenxin.me yangyang.si
命令会提示确认,输入 yes 即可。本次批量替换涵盖了帖子内容(posts)、站点设置(site_settings)、浏览器浏览事件(browser_pageview_events)、话题链接(topic_links)等多个表。
- 重新生成帖子的 Markdown 缓存(Rebake):
rake posts:rebake
顺利将论坛现有的 10 个帖子全部重构完毕(100% 完成度)。
- 退出容器:
exit
总结
这次换域名的核心在于数据的一致性清理。通过 Discourse 官方提供的 remap 和 rebake 工具,能非常干净地把数据库里的旧域名引用全部抹平,避免了手动改数据库导致索引损坏的风险。
新域名 yangyang.si 现已正式启用并上线,运行一切正常!🎉