WriteFreely 生产环境 Docker Compose 部署指南
2025-07-08 05:15:03作者:邵娇湘
WriteFreely 是一个简洁优雅的开源博客平台,专注于写作体验。本文将详细介绍如何使用 Docker Compose 在生产环境中部署 WriteFreely 服务。
核心服务架构
WriteFreely 的生产环境部署主要包含两个核心服务:
- 应用服务:运行 WriteFreely 主程序
- 数据库服务:使用 MariaDB 作为数据存储
这种分离式架构遵循了现代应用部署的最佳实践,确保了服务的高可用性和可维护性。
配置文件详解
应用服务配置
app:
image: writefreely
container_name: writefreely
volumes:
- ./data:/data
ports:
- 127.0.0.1:8080:8080
depends_on:
- db
restart: unless-stopped
关键配置说明:
- 数据持久化:通过
./data:/data
卷挂载,确保应用数据不会因容器重启而丢失 - 网络隔离:绑定到 127.0.0.1 确保服务仅限本地访问,建议配合 Nginx 反向代理使用
- 自动恢复:
restart: unless-stopped
策略保证服务异常退出后自动重启
数据库服务配置
db:
image: lscr.io/linuxserver/mariadb
container_name: writefreely-mariadb
volumes:
- ./db:/config
environment:
- PUID=65534
- PGID=65534
- TZ=Etc/UTC
- MYSQL_DATABASE=writefreely
- MYSQL_USER=writefreely
- MYSQL_PASSWORD=P@ssw0rd
restart: unless-stopped
关键配置说明:
- 官方镜像:使用 linuxserver 维护的 MariaDB 镜像,稳定性有保障
- 时区设置:默认 UTC 时间,可根据实际需求调整
- 安全建议:示例中的密码
P@ssw0rd
仅为演示,生产环境必须修改为强密码 - 用户权限:使用 65534 用户运行,这是 Linux 系统中的 nobody 用户,安全性更高
生产环境部署建议
-
安全加固:
- 修改默认数据库密码
- 考虑使用 Docker secret 管理敏感信息
- 为应用服务添加 HTTPS 支持
-
性能优化:
- 根据负载情况调整数据库资源限制
- 考虑添加 Redis 缓存层
-
备份策略:
- 定期备份挂载的 ./data 和 ./db 目录
- 实现数据库的定期导出备份
-
监控方案:
- 添加容器健康检查
- 集成 Prometheus 监控指标
部署步骤
-
创建项目目录并进入:
mkdir writefreely && cd writefreely
-
创建 docker-compose.prod.yml 文件,内容参考上文
-
启动服务:
docker-compose -f docker-compose.prod.yml up -d
-
验证服务:
docker ps -a
-
配置反向代理(以 Nginx 为例):
server { listen 80; server_name yourdomain.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
常见问题排查
-
数据库连接失败:
- 检查数据库容器是否正常运行
- 验证环境变量配置是否正确
- 查看应用容器日志获取详细错误信息
-
权限问题:
- 确保挂载目录对 Docker 用户可写
- 检查 PUID/PGID 设置是否与主机用户匹配
-
性能问题:
- 监控数据库资源使用情况
- 考虑添加数据库连接池配置
通过以上配置和最佳实践,您可以在生产环境中稳定运行 WriteFreely 服务,为创作者提供流畅的写作体验。