OpenProject Docker部署关键在于镜像选择与依赖配置:测试用all-in-one(内置数据库,禁用于生产),生产必须用slim(需外接PostgreSQL等服务)并配置数据卷、环境变量及反向代理。

在Docker中部署OpenProject,关键在于选对镜像、配好依赖、留出持久化路径。社区版完全免费,部署不复杂但容易忽略细节——比如all-in-one只适合试用,生产必须用slim配合独立数据库。
选对镜像版本:测试用all-in-one,生产必须slim
OpenProject官方提供两种Docker镜像:
-
all-in-one:内置PostgreSQL、Memcached,一条命令就能跑起来,适合本地演示、PoC或小团队临时使用。命令示例:
docker run -d -p 8080:80 --name op-test openproject/openproject:14。但它的数据库和应用耦合,无法水平扩展,严禁用于正式业务。 - slim:只含OpenProject应用本身,必须搭配外部PostgreSQL、Redis(可选)和反向代理。虽然配置步骤多一步,但资源更省、升级更灵活、备份更可控,是生产环境的唯一推荐方案。
准备基础服务:数据库与数据卷不能省
用slim镜像前,先搭好PostgreSQL并创建专用数据库和用户:
- 拉取并运行PostgreSQL:
docker run -d --name op-db -e POSTGRES_PASSWORD=op123456 -v op-db-data:/var/lib/postgresql/data -p 5432:5432 postgres:15 - 进容器初始化数据库:
docker exec -it op-db createdb -U postgres openproject,再建用户:docker exec -it op-db psql -U postgres -c "CREATE USER openproject WITH PASSWORD 'op123456';" - 创建两个数据卷,分别存应用配置和附件:
docker volume create op-config和docker volume create op-attachments
启动OpenProject容器:环境变量决定行为
运行slim容器时,必须通过环境变量告诉它数据库在哪、语言怎么设、是否启用HTTPS:
- 基本启动命令(假设数据库在同主机):
docker run -d --name openproject -p 8080:80 \-e OPENPROJECT_DATABASE_URL=postgresql://openproject:op123456@host.docker.internal:5432/openproject \-e OPENPROJECT_SECRET_KEY_BASE=your-32-byte-random-string \-e OPENPROJECT_DEFAULT__LANGUAGE=zh-CN \-e OPENPROJECT_HTTPS=false \-v op-config:/app/config \-v op-attachments:/var/openproject/assets \openproject/openproject:slim-14.3 -
注意:
host.docker.internal在Linux上需加--add-host=host.docker.internal:host-gateway才可用;如用Docker Compose,直接写服务名即可。
后续必要操作:反向代理、首次登录与安全加固
容器跑起来只是第一步,真正可用还需几步:
- 用Nginx做反向代理,把
https://pm.yourdomain.com转到容器8080端口,并启用HTTPS(Let’s Encrypt自动签发); - 浏览器访问后,初始账号为
admin/admin,首次登录强制改密; - 进后台 → 管理 → 系统设置 → 邮件,配置SMTP才能发通知;
- 定期备份:导出
op-db-data卷 +op-config卷内容,比单纯docker commit可靠得多。


















