OhMyForm项目基于Docker和Nginx的部署指南
2025-07-10 05:38:24作者:卓炯娓
OhMyForm是一个开源的在线表单构建工具,本文将详细介绍如何使用Docker Compose和Nginx来部署完整的OhMyForm应用系统。
系统架构概述
该部署方案采用了微服务架构,包含以下核心组件:
- PostgreSQL数据库服务:存储所有表单数据和用户信息
- OhMyForm API服务:提供GraphQL接口处理业务逻辑
- OhMyForm UI服务:提供用户界面
- Nginx反向代理:作为前端接入层,统一处理请求分发
详细配置解析
数据库服务配置
db:
image: postgres:10-alpine
volumes:
- ./pg_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: root
POSTGRES_DB: ohmyform
restart: unless-stopped
- 使用PostgreSQL 10的Alpine版本,体积小巧
- 通过volume挂载实现数据持久化
- 预设了数据库用户、密码和数据库名称
- 配置了自动重启策略
Nginx服务配置
nginx:
image: nginx:alpine
volumes:
- "./default.conf:/etc/nginx/conf.d/default.conf"
ports:
- "8080:80"
depends_on:
- ui
- api
restart: unless-stopped
- 使用Nginx Alpine镜像
- 挂载自定义Nginx配置文件
- 将容器80端口映射到宿主机8080端口
- 依赖UI和API服务
- 配置了自动重启策略
UI服务配置
ui:
image: ohmyform/ui
environment:
SERVER_ENDPOINT: http://api:5000/graphql
PORT: 5000
restart: unless-stopped
- 使用官方UI镜像
- 配置API服务端点指向API容器
- 设置服务端口为5000
- 配置了自动重启策略
API服务配置
api:
image: ohmyform/api
environment:
CREATE_ADMIN: "true"
ADMIN_EMAIL: admin@local.host
ADMIN_USERNAME: admin
ADMIN_PASSWORD: admin
DATABASE_DRIVER: postgres
DATABASE_URL: postgresql://root:root@db:5432/ohmyform
MAILER_URI: smtp://local.host
REDIS_URL: redis://redis
PORT: 5000
links:
- db
depends_on:
- db
restart: unless-stopped
- 使用官方API镜像
- 自动创建管理员账户(用户名/密码均为admin)
- 配置数据库连接信息
- 设置邮件服务(示例中使用本地SMTP)
- 配置Redis连接
- 设置服务端口为5000
- 显式链接到数据库服务
- 配置了自动重启策略
部署步骤详解
-
准备环境:
- 确保已安装Docker和Docker Compose
- 创建项目目录并进入
-
配置文件准备:
- 创建
docker-compose.yml
文件,内容如上 - 准备Nginx配置文件
default.conf
(需自行配置路由规则)
- 创建
-
启动服务:
docker-compose up -d
-
验证部署:
- 访问
http://localhost:8080
应能看到OhMyForm界面 - 使用admin/admin登录管理系统
- 访问
生产环境建议
-
安全加固:
- 修改默认管理员凭据
- 配置HTTPS证书
- 使用更复杂的数据库密码
-
性能优化:
- 根据负载调整服务资源限制
- 配置数据库连接池参数
- 启用Redis缓存
-
高可用考虑:
- 配置数据库备份策略
- 考虑多节点部署方案
- 设置监控告警系统
常见问题排查
-
服务启动失败:
- 检查端口冲突
- 查看容器日志
docker-compose logs [service]
-
数据库连接问题:
- 验证数据库服务是否正常启动
- 检查连接字符串配置
-
管理员账户未创建:
- 确保
CREATE_ADMIN
环境变量设置为"true" - 检查API服务日志中的账户创建信息
- 确保
通过以上配置和说明,您应该能够成功部署一个功能完整的OhMyForm实例。根据实际需求,您可以进一步调整配置参数以满足特定的业务场景。