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-repositories
Run User
使用默认的git
Domain
填写Docker宿主机的主机名或物理地址 类似于192.168.137.140
SSH Port
不要勾选使用内置SSH服务器(Don’t userUse Builtin SSH Server
) 如果你映射Docker外部端口如10022:22
那么这里填写10022
HTTP Port
如果映射外部端口10080:3000
这里仍然使用3000
Application URL
使用域和公开的HTTP端口值的组合 如http://192.168.137.140:10080
Log 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