在 Synology 群晖 NAS 上部署与升级 OpenProject:Docker 全容器安装实战指南
【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject
本文基于 OpenProject 官方文档中面向群晖(Synology)NAS 的安装指引,讲解如何在群晖 DSM 的 Docker 图形界面中拉取openproject/openproject镜像、正确挂载pgdata与assets数据卷、固定端口并配置自动重启,从而安全地完成首次部署与后续升级。读完本文,你将掌握一套"数据不丢、升级不慌"的 NAS 容器运维方案,并理解这些操作背后的容器数据目录与镜像标签设计原理。
为什么群晖用户可以直接复用 Docker 安装方式
Synology 群晖 NAS 的一大特点是自带了完整的 Docker 容器管理界面(DSM 中的Docker套件,新版 DSM 中为Container Manager),用户可以像在 Linux 服务器上一样启动、停止和更新容器,而不必记忆大量命令行。OpenProject 官方明确说明:在群晖上运行 OpenProject,使用方式与 Docker 安装指南 完全一致,群晖只是提供了一个图形化的容器运行环境。
也就是说,你不需要为群晖准备任何特殊版本或特殊镜像,直接使用官方的openproject/openprojectall-in-one 镜像即可。该镜像内部已经打包了应用进程、内置 PostgreSQL 数据库与 memcached 缓存,并通过 Apache 对外提供 Web 服务,适合快速上手和中小规模使用。官方同时提醒:all-in-one 方式便于快速启动,但由于数据库等组件耦合在单个容器内,不利于组件的独立升级,因此不推荐在生产环境的大规模场景下使用。
准备工作:理解镜像标签与容器数据目录
在动手之前,先理解两个关键概念,它们直接决定了你在群晖界面上该选什么、该挂什么。
镜像标签(Tag)的选择
群晖文档建议在 Registry 中下载时选择最新稳定版的具体标签,例如openproject/openproject:17。从 Docker 安装指南 可以了解到 OpenProject 的标签遵循语义化版本规则:
| 标签形式 | 是否浮动 | 说明 |
|---|---|---|
X.Y.Z(如17.0.1) | 固定 | 精确对应某一个发布版本,升级需手动改标签 |
X.Y(如17.0) | 浮动 | 每次发布新补丁版本时自动更新 |
X(如17) | 浮动 | 每次发布新补丁或次版本时自动更新,可能带来应用行为变化 |
dev | 浮动 | 每晚构建的开发版本,仅用于测试和早期反馈 |
官方建议生产环境使用非浮动标签,并借助内置版本检查或发布说明来获知更新。在群晖界面中,选择openproject/openproject:17这样的主版本浮动标签,可以在拉取时始终获得该主版本线的最新补丁;若希望完全锁定,则应选择形如17.0.x的精确标签。
另外需要注意:自 OpenProject 12.5.6 起,容器同时提供 AMD64(x86)与 ARM64 两种架构;如果你的群晖是 ARM 架构机型(例如部分 DS 系列),同样可以正常拉取运行,但 BIM 版本仅支持 AMD64。
两个必须挂载的数据目录
all-in-one 镜像将数据保存在容器内的两个固定路径,这一点可以从仓库的镜像构建文件中直接得到印证:
- docker/prod/Dockerfile 第 23 行:
ENV APP_DATA_PATH=/var/openproject/assets——存放上传的附件(files)、git、svn 等数据; - 第 147 行:
ENV PGDATA=/var/openproject/pgdata——存放 PostgreSQL 数据库的完整数据目录; - 第 164 行:
VOLUME ["$PGDATA", "$APP_DATA_PATH"]——镜像声明这两个目录为卷。
容器入口脚本 docker/prod/entrypoint.sh 还会主动检查旧版路径(如/var/lib/postgresql/9.6/main、/var/db/openproject),一旦发现会直接报错退出,提示用户改用新路径挂载。这意味着pgdata与assets两个卷是数据持久化的生命线:只有把它们挂载到群晖存储空间上,容器被删除重建后数据才得以保留。
第一步:从 Registry 下载 OpenProject 镜像
在群晖 DSM 中打开 Docker(或 Container Manager)套件:
- 进入左侧的Registry(注册表)页面;
- 搜索
openproject; - 选中
openproject/openproject,点击下载; - 在弹出的标签选择中,填入或选择你想要的标签(文档撰写时推荐的最新稳定版标签为
openproject/openproject:17),点击确定开始拉取。
拉取完成后,镜像会出现在Image(映像)列表中,选中它并点击启动,即可进入容器创建向导。
第二步:启动容器时的三个关键设置
群晖的容器启动向导会把 Docker 的常用参数拆成多个标签页。官方文档特别强调以下三点,缺一不可。
1. Volumes(卷)——最重要的设置
在向导的高级设置 → 卷标签页中,你必须为容器内的两个目录添加挂载卷(mounted volumes):
| 容器内路径 | 挂载目标建议 | 作用 |
|---|---|---|
/var/openproject/pgdata | 群晖共享文件夹下的一个目录,如/volume1/docker/openproject/pgdata | PostgreSQL 数据库全部数据 |
/var/openproject/assets | 如/volume1/docker/openproject/assets | 附件、静态资源与 git/svn 数据 |
操作方式与群晖其他容器相同:点击"添加文件夹",在群晖共享文件夹中选择或新建目标目录,然后将其映射到容器内的对应路径。如果不配置这两个卷,更新容器时一旦旧容器被删除,全部项目数据、附件和数据库内容都会随之消失——这是群晖文档中最强调的注意事项。
从底层看,挂载卷的本质等价于 Docker 命令中的-v参数。例如在 Linux 主机上,官方生产启动命令是这样的(Docker 安装指南):
sudo mkdir -p /var/lib/openproject/{pgdata,assets} docker run -d -p 8080:80 --name openproject \ -e OPENPROJECT_HOST__NAME=openproject.example.com \ -e SECRET_KEY_BASE=<your-secret-key-base> \ -v /var/lib/openproject/pgdata:/var/openproject/pgdata \ -v /var/lib/openproject/assets:/var/openproject/assets \ openproject/openproject:17群晖界面的卷配置,就是在图形化地完成其中的-v部分。
2. Ports(端口)——固定对外端口
在网络标签页中,为容器配置一个固定的本地端口(例如8080)映射到容器内的80端口。这样无论容器如何重启,你的访问地址(如http://<群晖IP>:8080)都不会变化;否则群晖可能在容器重启后自动分配新的端口,导致地址漂移、书签失效。
3. Restart policy(重启策略)——勾选"始终重启"
在启动向导中勾选"always restart"(始终重启)选项。这样当群晖 NAS 重启或 Docker 服务重启时,OpenProject 容器会被自动拉起,无需人工干预——这也是 NAS 上长驻服务的基本要求。
第三步:首次启动与初始化
容器首次启动需要一段时间完成数据库初始化与种子数据写入(从群晖文档与 Docker 安装指南可知,这一过程需要几分钟)。初始化完成后:
- 默认管理员账号:
admin - 默认密码:
admin
启动浏览器,访问http://<群晖IP>:<你配置的端口>,即可看到登录页面并开始使用 OpenProject。
若需要设置主机名、关闭 HTTPS 等高级环境变量,可以在群晖容器的环境标签页中添加变量。常用的几个(取自 Docker 安装指南):
| 环境变量 | 作用 |
|---|---|
SECRET_KEY_BASE | Rails 的密钥基础,必须设置为高强度随机值(如openssl rand -hex 64生成),并在每次启动时保持一致,否则会话与加密数据将无法读取 |
OPENPROJECT_HOST__NAME | 应用对外主机名,用于生成表单链接和邮件链接,需与浏览器访问的地址一致 |
OPENPROJECT_HTTPS=false | 关闭默认开启的 HTTPS 模式,用于纯 HTTP 内部访问场景;生产环境强烈建议保持 HTTPS 并由前置网关做 TLS 终结 |
OPENPROJECT_DEFAULT__LANGUAGE | 首次安装时基础数据(类型、状态名称等)的创建语言,同时作为新用户的默认回退语言 |
升级 OpenProject 容器
群晖文档给出的升级流程非常简单,前提是你已经按照上文配置好了pgdata与assets两个挂载卷:
- 进入Registry(注册表);
- 搜索 OpenProject,点击下载,选择要升级到的标签(例如
17或latest); - 等待新镜像下载完成后,停止正在运行的 OpenProject 容器;
- 在容器上点击清除(clear)并重启(restart)。
此时容器会以新镜像重新启动并自动执行数据库迁移,你的 OpenProject 数据保持完好——前提正是那两个卷始终被挂载。这也与 升级指南 中 all-in-one 容器的命令行升级思路一致:docker pull新镜像 →docker stop+docker rm旧容器 → 用相同参数重新docker run。
强烈建议:每次升级前先对pgdata与assets两个文件夹做一次备份,做到万无一失。官方在 备份指南 中同样强调:Docker 方式部署时,只需备份你用-v绑定的本地卷目录即可——对群晖而言,就是挂载目标所在的两个共享文件夹。
FAQ:没有挂载卷就启动了,如何挽救数据?
这是群晖用户最常踩的坑:已经用默认方式启动过 OpenProject,但当时没有配置卷挂载。此时更新容器会导致数据丢失吗?不会,只要旧容器还在,就有补救办法。官方给出的路径是:
- 在群晖上通过SSH 或终端登录 DiskStation(需要在控制面板中开启 SSH 功能);
- 参照 升级指南的对应小节 操作。
其核心思路(升级指南中的完整操作)是从现存容器中把数据复制出来,再用正确的挂载配置重建容器:
# 1. 先停止容器,防止数据在复制过程中变化(停止不会删除数据) # 2. 用 docker ps 查出容器名(示例中为 openproject-community1) # 将数据复制到持久卷目录,例如 /volume1 下的目录 docker cp openproject-community1:/var/openproject/assets /volume1/openproject/assets docker cp openproject-community1:/var/openproject/pgdata /volume1/openproject/pgdata # 3. 确保目录属主正确,新容器才能读写(注意是 UID 102,即容器内的 app 用户) sudo chown -R 102 /volume1/openproject/*完成数据迁移后,删除旧容器,用新的、带卷挂载的配置重新启动容器,再确认新容器运行正常,最后才删除旧容器。这一流程与上文"第二步:卷配置"中描述的方式完全一致——先补救数据,再让后续升级走上正轨。
运维提醒与进阶方向
- 备份是升级的前提:在 备份指南 中,官方建议定期备份,尤其是升级前。对 Docker 方式部署,直接备份你绑定挂载的本地目录(群晖上即
pgdata与assets对应的共享文件夹)即可,可将它们复制到其他磁盘、S3 或 FTP 服务器。 - 跨大版本升级需谨慎:OpenProject 只支持相邻大版本之间的直接迁移(如 16.x → 17.x),跨两个及以上大版本时需要通过 升级指南 提供的分步数据库迁移脚本来处理;群晖场景下的多版本跨越建议先在命令行环境中完成数据迁移再重建容器。
- 进阶配置:如需设置反向代理、子目录访问、自定义 SSL 证书、导入自签名根证书(如连接使用自签名证书的 SMTP 或 Nextcloud 服务)等,请参考完整的 Docker 安装指南 与 配置指南,这些内容在群晖上同样适用——群晖只是容器运行平台,容器内部的行为与通用 Docker 完全一致。
小结
在群晖 NAS 上运行 OpenProject,本质就是把 Docker 安装指南 的流程搬到图形界面中执行。只要抓住三条主线——Registry 中选对镜像标签、启动时挂载pgdata与assets两个卷、固定端口并开启自动重启——后续无论是日常使用还是版本升级,数据安全与服务的可用性都能得到保障;万一早期未挂卷,也可以通过docker cp配合 升级指南 的步骤无损补救。
【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考