4.2 Docker 部署
Docker 部署
部署后首次使用的关键前置:创建正式短链前,先完成公开短域名的 DNS、HTTPS 和反向代理。程序按应用实际收到的
Host + 短码精确查找;标准80/443使用Host $host,公开 URL 带非标准端口时使用$http_host。只设置X-Forwarded-Host不会生效。
官方镜像包含已构建的管理端与后端,默认暴露容器端口 8080。必须持久化配置、上传数据和日志目录。
最小单机示例
services:
dwz-server:
image: docker.cnb.cool/mliev/dwz/dwz-server:latest
restart: unless-stopped
ports:
- "8080:8080"
environment:
TZ: Asia/Shanghai
volumes:
- ./config:/app/config
- ./data:/app/data
- ./logs:/app/logs mkdir -p config data logs
docker compose up -d
docker compose logs -f dwz-server
浏览器访问 http://服务器地址:8080/,在向导中选择 SQLite、内存缓存和本地发号器。SQLite 文件和 install.lock 会保存在主机的 ./config。
MySQL 与 Redis 示例
下面示例把数据库和 Redis 留在 Compose 私有网络中,不对主机映射 3306 或 6379:
services:
dwz-server:
image: docker.cnb.cool/mliev/dwz/dwz-server:latest
restart: unless-stopped
ports:
- "8080:8080"
environment:
TZ: Asia/Shanghai
HTTP_ADDR: ":8080"
DATABASE_DRIVER: mysql
DATABASE_HOST: mysql
DATABASE_PORT: "3306"
DATABASE_DBNAME: dwz
DATABASE_USERNAME: dwz
DATABASE_PASSWORD: "${DWZ_DB_PASSWORD}"
CACHE_DRIVER: redis
ID_GENERATOR_DRIVER: redis
REDIS_HOST: redis
REDIS_PORT: "6379"
REDIS_PASSWORD: "${DWZ_REDIS_PASSWORD}"
JWT_SECRET: "${DWZ_JWT_SECRET}"
volumes:
- ./config:/app/config
- ./data:/app/data
- ./logs:/app/logs
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
mysql:
image: mysql:8.4
restart: unless-stopped
environment:
MYSQL_DATABASE: dwz
MYSQL_USER: dwz
MYSQL_PASSWORD: "${DWZ_DB_PASSWORD}"
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-p${MYSQL_ROOT_PASSWORD}"]
interval: 10s
timeout: 5s
retries: 10
redis:
image: redis:7-alpine
restart: unless-stopped
command: ["redis-server", "--appendonly", "yes", "--requirepass", "${DWZ_REDIS_PASSWORD}"]
volumes:
- redis-data:/data
healthcheck:
test: ["CMD-SHELL", "redis-cli -a \"${DWZ_REDIS_PASSWORD}\" ping | grep PONG"]
interval: 10s
timeout: 5s
retries: 10
volumes:
mysql-data:
redis-data:将密码放入权限受控的 .env 或密钥管理系统,不要提交到代码仓库。容器中的 localhost 指容器本身,因此数据库主机应填写服务名 mysql,Redis 主机填写 redis。
反向代理
代理应保留原始 Host,短链会用请求 Host 匹配后台配置的域名:
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}公开短链使用应用实际收到的 Host + 短码 精确匹配记录。标准 80/443 使用 $host;只有公开 URL 确实带非标准端口时才改用 $http_host,并在后台域名中填写相同端口。只设置 X-Forwarded-Host 不能代替真正的 Host。完整 Q/A 和双入口验收命令见宝塔面板安装教程。
升级
docker compose pull
docker compose up -d
docker compose logs --tail=200 dwz-server
curl --fail http://127.0.0.1:8080/health升级前备份数据库、config/ 和 data/。服务启动时会自动执行待应用的 Goose 迁移;不要并行启动大量新版本实例执行首次升级。
相关说明:数据库与迁移、缓存、Redis 与 ID 发号器。