Docker Gogs 用更简单的方式部署、升级或迁移Gogs容器服务。
Docker-Ubuntu-Gogs 系列文章主要记录我在Docker下部署Gogs代码管理项目的过程。系列文章包括Gogs容器的部署过程,部署时遇到的问题及解决方法,个性化配置等。
这里底层系统选择了 Ubuntu16.04 版本,之前也曾尝试在 Alpine 系统下来部署Gogs,但安装完成后会报 ./gogs web is not found 之类的错误,暂未找到解决方法。遂最后决定采用Ubuntu来部署。
对于 Alpine 系统下的部署方法,待后期再来完善。
另外,Gogs作者在Github中发布的Gogs容器版本是用Alpine系统来做的,如果比较在意容器的大小,可以直接用之。
测试操作步骤
操作记录:Ubuntu16.04 系统
1 | docker run -it --name ugg1 -p 3000:3000 -p 8080:22 ubuntu /bin/bash |
1 | # Link volumed data with app data |
参考自gogs官方github中的dockerfile,使用gosu调用git用户:
1 | export USER=git |
问题一:不能使用 gosu 调用 git 用户来启动
发现不能使用 gosu 调用 git 用户来启动,gosu git /home/git/gogs/gogs web 会报如下错误:
1 | gogs 运行系统用户非当前用户:git > |
不推荐的解决方法是: 切换到git账户下执行:su - git $ ./gogs web
通过测试,可以采用如下的方式来使用 gosu 调用 git 用户(参考自gogs官方github中的dockerfile):
1 | export USER=git |
问题二:Fail to start SSH server: listen tcp 0.0.0.0:22: bind: permission denied
启用内置SSH服务器会报该错误,暂未找到解决方法。
通过测试,将默认的 22 端口改成其他端口即可。
但是 gogs官方的docker配置中建议不要在Docker容器中使用内置的SSH服务器。
问题三:PANIC: session(start): mkdir data: permission denied
详细错误信息如下:
1 | [Macaron] 2017-03-21 06:05:40: Started GET / for 192.168.137.1 |
该问题导致的原因是,当 git 用户运行 ./gogs web 时,会在 gogs 项目的主目录下 ( 这里是 /home/git/gogs)创建一个 data 目录用于存放session缓存等临时文件。如果当前工作的主目录不是在 /home/git/gogs 目录,则git账户就没有权限来创建目录,从而导致权限错误。
解决方法是在Dockerfile中指定工作目录 WORKDIR /home/git/gogs 即可。
后经查证,在 Gogs 项目目录下的 custom data 和 log 三个目录是用来存放项目运行期间产生的日志、配置文件、数据等信息的。当Gogs项目需要升级时,直接拷贝这三个目录到新项目目录下即可。
这里的 data 目录需要提前创建好。
相关参考
- 在ubuntu上安装gogs
- 用Gogs搭建自己的Git服务器 - LibHappy
- How To Set Up Gogs on Ubuntu 14.04 | DigitalOcean
- chmod 777 修改权限 - 日光之下无新事 - 博客园
- linux - 安装gogs时报错:运行系统用户非当前用户:git -> root。 不知道是什么意思 - SegmentFault
Install时注意事项
Database Type选择SQLite3(目前仅测试了sqlite3数据库)Sqlite Database Path使用固定路径/app/gogs/data/gogs.db(后期改成默认目录也可以,详见Github)Repository Root Path使用固定路径/app/gogs-repositoriesRun User使用默认的gitDomain填写Docker宿主机的主机名或物理地址 类似于192.168.137.140SSH Port不要勾选使用内置SSH服务器(Don’t userUse Builtin SSH Server) 如果你映射Docker外部端口如10022:22那么这里填写10022HTTP Port如果映射外部端口10080:3000这里仍然使用3000Application URL使用域和公开的HTTP端口值的组合 如http://192.168.137.140:10080Log Path填写固定路径/app/gogs/log(后期改成默认目录也可以,详见Github)
注意:
Dockerfile中必需添加 WORKDIR /home/git/gogs 即必需指定当前工作目录为 gogs 目录下,因为gogs在install完成后会在当前目录下创建一个 data 目录保存 sessions 信息。如果当前目录不是这里,则会报 [Macaron] PANIC: session(start): mkdir data: permission denied 的错误。
成果
最终项目见:GitHub - Leafney/ubuntu-gogs: Docker + Ubuntu + Gogs