返回列表 发布新帖
查看: 16|回复: 0

Xiuno BBS 容器化实战:Docker 部署与 Compose 编排全指南

988

主题

0

回帖

833

积分

高级会员

积分
833
发表于 2026-6-24 23:35:02 | 查看全部 |阅读模式
最近折腾了好几天,终于把 Xiuno BBS 用 Docker + Compose 的方式跑起来了,过程中踩了不少坑,这里整理一下分享给有需要的朋友,也算是给自己留个备忘。

先说说为什么要折腾容器化。Xiuno 是一个很轻量的 PHP 论坛程序,直接扔在宝塔或者裸机 LNMP 环境下跑其实没什么问题,但一旦你有多台服务器、或者经常需要迁移环境,传统部署方式就显得很麻烦了。每次都要装 PHP 扩展、配 nginx、调 MySQL 权限,稍微哪个版本对不上就报错,头疼得很。换成 Docker 之后,整个环境打包进去,到哪儿都能跑,省心不少。

容器化的思路其实很清晰,整体分三个服务:nginx 做反向代理、php-fpm 跑 Xiuno 的 PHP 代码、MySQL 存数据。用 Compose 把三个容器编排在一起,共享同一个网络,外部只暴露 80 或者 443 端口就行。

具体来说,php 镜像我选了 php:7.4-fpm,Xiuno 对 PHP 8.x 的兼容性不算完美,7.4 是目前最稳的选择。需要手动装几个扩展:pdo_mysql、mysqli、gd、zip 这几个是必须的,不装的话页面要么白屏要么功能残缺。Dockerfile 里用 docker-php-ext-install 逐个装就行,不复杂,就是第一次构建镜像慢了点,耐心等。

nginx 那边配置文件要单独挂载进去,不要直接写进镜像,这样后期改配置不用重新构建。location 块里记得加上 try_files,Xiuno 的 URL rewrite 依赖这个,少了这一行访问二级页面全是 404。fastcgi_pass 指向的是 php-fpm 容器的服务名,Compose 同网络下直接用服务名做域名解析,很方便。

MySQL 这块有个细节很多人忽略——容器第一次启动会初始化数据库,这需要一点时间,如果 php 容器启动太快去连数据库,可能会连接失败导致 Xiuno 安装页面报错。Compose 里虽然有 depends_on,但它只保证启动顺序,不保证服务就绪。比较稳妥的做法是在入口脚本里加一个简单的等待循环,或者干脆用 wait-for-it.sh 这类工具来检测 MySQL 端口通了再继续。

数据持久化这块一定要想清楚,MySQL 的数据目录、Xiuno 的 data 目录、上传附件目录,这几个全部用 volume 挂载到宿主机上。不然容器一删数据全没了,血的教训,第一次测试的时候忘了挂 data 目录,配置写完删容器就没了,又重新装了一遍。

跑起来之后整体体验还是不错的,资源占用很低,Xiuno 本身就很轻,加上容器的开销也微乎其微。迁移的时候只需要打包一下 Compose 文件、Dockerfile 和挂载的数据目录,到新机器上 docker compose up -d 就能直接恢复,比传统方式省了太多时间。

最后说一点,如果你的站要上 HTTPS,建议在 nginx 容器里集成 certbot,或者用 Traefik 做最外层的反向代理来统一管理证书,后者对多站点场景更友好。Xiuno 本身不需要改什么,SSL 交给前端代理处理就行,程序层面完全无感。

折腾容器化的成本确实比直接装高一些,但长期来看维护成本低多了,特别是对于喜欢折腾多个小项目的朋友,Docker 这套东西是真的值得投入时间去学。
回复 转播

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表