赞片CMSDocker
照这篇做完,你能在一台干净的 Linux 服务器上用 Docker 跑起赞片CMS,不用手动编译 PHP、不用单独装 Nginx 和 MySQL,重装系统也不怕丢数据。
赞片CMS 官方没有提供 Docker 镜像,所以要自己写一个 Dockerfile 把 PHP 环境打进去,再用 docker compose 把 Nginx、PHP、MySQL 三个容器串起来。下面以 CentOS 7 / Ubuntu 22.04 通用流程演示。
第一步:确认 Docker 环境
这一步要确认服务器上装了 Docker 24 以上版本和 compose v2 插件,装完才能用 docker compose 命令。执行:
docker -v
docker compose version
如果第二条报错,说明只有老版 docker-compose(带横杠)。建议按官方源重装:
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
注意:不要用系统自带的
yum install docker,版本通常在 1.13 左右,不支持 compose v2 的新语法。
第二步:建目录、放源码
这一步把项目文件和配置分开放,方便以后单独备份源码。执行:
mkdir -p /opt/zanpian/{php,nginx,www}
cd /opt/zanpian
从你购买或下载的渠道拿到赞片CMS 源码包,解压到 /opt/zanpian/www 目录下,确认该目录里能直接看到 index.php、install 文件夹(而不是多套了一层压缩包目录)。
注意:来源不明的源码包常带加密后门文件(如
*.php里只有一行eval(...)),上线前务必扫一遍,只搭建你有权发布的内容。
第三步:写 PHP 的 Dockerfile
这一步构建一个带 MySQL 扩展和图片处理扩展的 PHP 7.4 镜像。新建 /opt/zanpian/php/Dockerfile:
FROM php:7.4-fpm
RUN apt-get update && apt-get install -y \
libfreetype6-dev libjpeg62-turbo-dev libpng-dev libzip-dev unzip \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd pdo_mysql mysqli zip
RUN echo "date.timezone=Asia/Shanghai" > /usr/local/etc/php/conf.d/timezone.ini
注意:必须用 PHP 7.4。赞片CMS 大量使用旧语法,换
php:8.2-fpm会直接白屏或报Deprecated错误。
第四步:写 Nginx 配置
这一步解决「除首页外全部 404」的问题,因为赞片CMS 基于 ThinkPHP,需要伪静态。新建 /opt/zanpian/nginx/default.conf:
server {
listen 80;
server_name _;
root /var/www/html;
index index.php index.html;
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
}
第五步:写 docker-compose.yml 并启动
这一步把三个容器编好队,一条命令全部拉起来。新建 /opt/zanpian/docker-compose.yml:
services:
web:
image: nginx:1.25-alpine
ports: ["8080:80"]
volumes:
- ./www:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on: [php]
php:
build: ./php
volumes:
- ./www:/var/www/html
depends_on: [mysql]
mysql:
image: mysql:5.7
command: --sql_mode="" --character-set-server=utf8mb4
environment:
MYSQL_ROOT_PASSWORD: ZanPian#2024
MYSQL_DATABASE: zanpian
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
然后启动:
cd /opt/zanpian
docker compose up -d --build
docker compose ps
三个容器都是 running 即成功。
注意:数据库主机名必须填容器服务名
mysql,填127.0.0.1一定连不上。MySQL 密码里的#在 yml 中无需转义,但在命令行用-p时要加引号。
第六步:跑安装向导
这一步完成建表和初始账号创建。浏览器打开 http://服务器IP:8080/install/,依次填写:
- 数据库地址:
mysql,端口3306 - 数据库名:
zanpian,用户名root,密码ZanPian#2024 - 管理员账号自行设置
装完把 ./www/install 整个目录删掉,再给上传目录放权:
rm -rf /opt/zanpian/www/install
docker compose exec php chown -R www-data:www-data /var/www/html
第七步:备份与收尾
这一步保证数据可恢复,并降低被扫后台的风险。备份数据库:
docker compose exec mysql mysqldump -uroot -p'ZanPian#2024' zanpian > /root/zanpian-$(date +%F).sql
同时建议:修改后台入口文件名为随机字符串;不要把 8080 端口直接暴露公网,前面套一层带 HTTPS 的反代;定期检查 docker compose logs -f php 里的异常报错。
小结
- 赞片CMS 无官方镜像,用「Nginx + php:7.4-fpm + mysql:5.7」三容器自建最省事。
- PHP 必须 7.4,MySQL 必须关掉
ONLY_FULL_GROUP_BY,否则必然报错。 - 数据库地址写
mysql(服务名),不是127.0.0.1。 - 必须配伪静态 rewrite,否则内页全部 404。
dbdata数据卷是唯一的数据本体,删容器可以,别删卷。- 装完立刻删
install目录、改后台路径、加 HTTPS。
原文链接:https://www.gj0.com/thread-284.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。