小长假最后一天,听完得到的「学习计划」和樊登的《能力陷阱》,忽然想起前几个月在 TickTick 添加的任务「升级 Open Project」。
原计划升级后睡个午觉,想不到女儿从 Disney 回到家才完成 :(
Docker Image
Open Project 官方镜像使用 PostgreSQL,中文支持不友好,因此做了自定义镜像。
Dockerfile
FROM openproject/community:7
MAINTAINER Jonathan Gu <gucs.net@gmail.com>
# timezone
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone
COPY database.yml /usr/src/app/config/database.yml
database.yml
production:
adapter: mysql2
database: op5_db
host: db
username: root
password: 123456
encoding: utf8
variables:
# These are the default MySql Modes for rails 5.0 only excluding
# ONLY_FULL_GROUP_BY which would interfere with the current implementation
# of the query grouping by custom fields.
sql_mode:
"no_auto_value_on_zero,\
strict_trans_tables,\
no_zero_date,\
strict_all_tables,\
no_zero_in_date,\
error_for_division_by_zero,\
no_auto_create_user,\
no_engine_substitution"
生成镜像
docker build -t gucs/open-project-7 .
Docker Compose
记不住长长的命令,又做了个 docker compose 文件:
- 日志映射到 host,便于查询错误
- 附件映射到 host,便于定时备份
docker-compose.yml
version: '3'
services:
openproject:
image: gucs/open-project-7
container_name: op7
ports:
- "80:80"
environment:
- SECRET_KEY_BASE=secret
- DATABASE_URL=mysql2://user:pwd@host/op_db
volumes:
- $DOCKER_VOLUMES_ROOT/op7/logs:/var/log/supervisor
- $DOCKER_VOLUMES_ROOT/op7/static:/var/db/openproject
stdin_open: true
tty: true
启动
docker-compose up -d
查看日志
docker-compose logs -f
问题 1:不能连接 MySQL
当前版本是 Open Project 7.4,计划升级到最新镜像 Open Project 8.3.1。
docker pull openproject/community:8
启动时提示以下错误信息:
LoadError: Error loading the 'mysql2' Active Record adapter. Missing a gem it depends on? mysql2 is not part of the bundle. Add it to your Gemfile.
在官网搜索到以下回复:
Try the version 8.3.0, for some reason mysql was removed in 8.3.1
重新拉 8.3.0 镜像:
docker pull openproject/community:8.3.0
问题 2:Web 服务反复重启
终于连上了 MySQL,完成了数据库升级,Web 服务又开始反复重启……
错误信息
INFO success: web entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
INFO exited: web (exit status 1; not expected)
进入容器,查看日志:
docker exec -it op7 bash
cd /var/log/supervisor
cat web-stderr.log
错误信息
No Space Left on Device
折腾了半天,以为 Open Project 的问题,没想到是硬盘没空间了……
删除无用的备份,重启,成功!
参考资料
Install OpenProject with Docker https://www.openproject.org/docker/
Docker image for OpenProject Community Edition https://hub.docker.com/r/openproject/community/tags
Docker MySQL: gem file not loaded https://community.openproject.com/projects/docker/work_packages/29788/activity
supervisord not taking proper actions upon failure of its services https://community.openproject.com/projects/docker/work_packages/24378/activity
Docker fails starting web-service https://community.openproject.com/topics/6274
网友评论