跳转到正文

Docker 安装 ​

Docker Compose 管理 PHP 运行环境、MySQL 和 Nginx。服务端源码放在宿主机 /srv/popoim,以目录挂载方式供容器读取;安装生成的配置、日志和资源仍保留在宿主机。

1. 准备 Docker ​

使用 Docker Engine 与 Compose 插件。Ubuntu 24.04 可安装发行版提供的软件包:

bash
sudo apt update
sudo apt install -y docker.io docker-compose-v2
sudo systemctl enable --now docker
sudo docker compose version

其他发行版参考 Docker 官方安装说明。以下命令均在服务端源码目录执行。

2. 设置数据库密码 ​

bash
cd /srv/popoim
cp deploy/docker.env.example .env
chmod 600 .env

编辑 .env,分别为 MYSQL_PASSWORD 和 MYSQL_ROOT_PASSWORD 设置不同的随机强密码。保留 MYSQL_DATABASE=popoim、MYSQL_USER=popoim,或按需修改。

默认入口为 127.0.0.1:8080,由宿主机 Nginx 提供 HTTPS。仅在隔离网络中需要直接访问时,将 HTTP_BIND 改成所需的宿主机地址。

3. 构建运行环境 ​

bash
sudo docker compose build app
sudo docker compose run --rm --no-deps app \
  composer install --no-dev --prefer-dist --no-interaction
sudo docker compose up -d
sudo docker compose ps

PHP 环境包含聊天、图片和媒体处理需要的扩展、FFmpeg 和 Composer;构建上下文排除了业务源码。MySQL 自动设置 ngram_token_size=1,数据保存在 mysql-data 卷。Nginx 只把站点公开目录作为静态资源入口。

第一次启动需等待 MySQL 健康检查通过:

bash
sudo docker compose logs --tail=80 mysql app
curl -s -L -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/install

4. 反向代理与安装 ​

宿主机 Nginx 将 example.com 代理到 127.0.0.1:8080。location / 需要保留 WebSocket 升级头:

nginx
location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 3600s;
    proxy_buffering off;
}

站点同时设置 client_max_body_size 128m,配置 HTTPS 后访问 https://example.com/install。

安装向导中填写:

字段填写值
数据库地址mysql,不是 127.0.0.1
数据库端口3306
数据库用户名.env 的 MYSQL_USER
数据库密码.env 的 MYSQL_PASSWORD
数据库名.env 的 MYSQL_DATABASE

Docker 安装:数据库服务地址

5. 更新与维护 ​

替换宿主机源码时保留 .env、部署配置、资源及会话。依赖变更后重新安装,再重启:

bash
sudo docker compose run --rm --no-deps app \
  composer install --no-dev --prefer-dist --no-interaction
sudo docker compose restart app

只有 PHP 扩展或 Dockerfile 变更时才需要重新构建环境镜像。不要在普通更新中执行 docker compose down -v,它会删除数据库卷。

备份范围包括 MySQL、宿主机 public/uploads/、config/database.php、plugin/sdk/config/auth.php 和 .env。详细步骤见备份与恢复。