OhMyForm 项目使用 Docker Compose 与 Caddy 的极简部署指南
2025-07-10 05:36:32作者:彭桢灵Jeremy
概述
本文将详细介绍如何使用 Docker Compose 配合 Caddy 服务器来部署 OhMyForm 项目。OhMyForm 是一个开源的在线表单构建工具,允许用户快速创建和分享各种类型的表单。通过容器化部署,可以大大简化安装和配置过程。
部署架构解析
这个 Docker Compose 配置采用了微服务架构,包含两个主要服务:
- Caddy 服务:作为高性能的 Web 服务器和反向代理
- OhMyForm 服务:提供核心的表单构建功能
两个服务通过 Docker 网络进行通信,实现了网络隔离和安全性。
网络配置详解
networks:
web:
external: true
internal:
external: false
driver: bridge
- web 网络:设置为外部网络,通常用于暴露服务到外部访问
- internal 网络:内部桥接网络,用于容器间安全通信
这种网络隔离设计提高了安全性,只有 Caddy 可以同时访问内外网络。
Caddy 服务配置
caddy:
container_name: caddy
image: caddy:2-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- /data/caddy/Caddyfile:/etc/caddy/Caddyfile
- /data/caddy/data:/data # Optional
- /data/caddy/config:/config # Optional
networks:
- web
- internal
关键配置点:
- 使用 Alpine 版本的 Caddy 镜像,体积小效率高
- 映射 80 和 443 端口,支持 HTTP 和 HTTPS
- 挂载配置文件和数据卷,便于持久化存储
- 同时加入 web 和 internal 网络
OhMyForm 服务配置
ohmyform:
container_name: ohmyform
image: ohmyform/ohmyform
volumes:
- "./data:/data"
environment:
CREATE_ADMIN: "TRUE"
ADMIN_EMAIL: admin@local.host
ADMIN_USERNAME: admin
ADMIN_PASSWORD: admin
DATABASE_DRIVER: sqlite
DATABASE_URL: "sqlite:///data/data.sqlite"
MAILER_URI: smtp://local.host
LOGIN_NOTE: "Either login with admin:admin or create your own account to test OhMyForm"
restart: unless-stopped
networks:
- internal
关键配置点:
- 使用官方 OhMyForm 镜像
- 挂载数据卷确保数据持久化
- 环境变量配置:
- 自动创建管理员账户
- 使用 SQLite 作为数据库
- 配置邮件服务(示例中使用本地 SMTP)
- 仅加入 internal 网络,通过 Caddy 反向代理访问
部署步骤
-
创建必要的目录结构:
mkdir -p /data/caddy
-
创建
docker-compose.yml
文件,内容如上述配置 -
创建 Caddy 配置文件
/data/caddy/Caddyfile
,配置反向代理规则 -
启动服务:
docker-compose up -d
安全建议
- 修改默认凭证:部署后立即修改管理员用户名和密码
- 配置 HTTPS:利用 Caddy 自动 HTTPS 功能
- 定期备份:定期备份挂载的数据卷
- 更新策略:设置容器自动更新策略
常见问题解决
- 端口冲突:确保主机 80 和 443 端口未被占用
- 权限问题:确保挂载目录有正确的读写权限
- 数据库问题:首次启动可能需要等待数据库初始化完成
扩展配置
对于生产环境,建议:
- 使用 PostgreSQL 或 MySQL 替代 SQLite
- 配置真实的邮件服务
- 设置定期备份策略
- 配置监控和日志收集
通过以上配置,您可以快速搭建一个功能完整的 OhMyForm 实例,适用于测试或小型生产环境。对于大型部署,建议参考官方文档进行更详细的配置优化。