by Devin Yang

建立于: 6年前 ( 更新: 6年前 )

前言

如何快速创建一个开箱即用的Gogs环境呢? 
本文介绍采用docker-compose.yml快速创建gogs环境。

想玩玩看,可至我的repo下载来试用看看:
https://github.com/DevinY/gogs

说明

在MacOs系统上,基本上就非常标准的docker-compose命令即可:
docker-compose up -d

完全不需要创建数据库或进行安装画面及任何设置。

启动后,即可用浏览器,开启localhost:10080,进行注册。

第一个注册的使用者即是系统管理者。

我初步测试,这套目前满符合我的需求,比起gitlab,gogs是较简单的。

在big5文件编码的soruce code也可以经由设置后etc/app.ini,正常显示。
ANSI_CHARSET= big5

 
这里提供官方的分配说明:
https://gogs.io/docs/advanced/configuration_cheat_sheet

关於架构

为何要把/etc/app.ini及git等数据夹使用host挂载方式,而不是弄成volume挂载.

我的原因如下:

一、我没有要分享挂载的数据到远程主机。

二、对我来说在同一个目录下较好进行rsync增量备份。

三、可以轻松的对设置档进行修改。
像是在git/.ssh目录新建Open Ssh公私钥对config等设置。

四、分享到不同的container或是调整git的post-recieive较容易。

Simple git push deployment 

由於我於我采用D-Laravel container环境开发,本地与正式有著相同的环境,
因此本地端确认没问题后,直接push,并透过post-receive的hook,
立刻部署到正式环境。

/sites为放项目的数据夹,gogs与D-Laravel的container共用此数据夹。

gogs与正式环境同一台主机时

post-receive

如何进行远程布署呢? 这里提供我的方式。

如果您还不是很清楚ssh的公钥验证如何设置,请自行Google关键字学习。
一、先生成oepn ssh的公私钥对,放入git/.ssh目录。
id_rsa  (私钥)
id_rsa.pub (公钥)
config  (连线设置)

二、直接用docker-compose命令,进入gogs的git使用者环境,命令如下:
docker-compose exec -u git web bash
需在gogs的目录或子目录运行,该命令会用递归的方式找寻目录下是否有docker-compose.yml设置档。
在这里-u代表了,我使用container内的git使用者身份运行bash。
web则时docker-compose.yml中定义的服务名称。

三、在gogs的container内,进入到要进行远程部署的项目
cd ~/gogs-repositories/<组织>/<项目>.git/hooks

四、hooks在最后一行加上远程的push,这里的demoserver是,设置在config(连线设置)的名称。

ssh的config内容,如下:


五、在远程的source,就设置把source checkout到production的环境。
#!/bin/sh
GIT_WORK_TREE=/sites/ccc git checkout -f


六、所以在自己的环境push时,即可看见类似如下的信息,完成远程的部署。
这里我使用zsh,因此有简易的gss、gaa、gcmsg等alias进行commit的动作。


上图的流程大概是这样:
Client(自己的电脑)==>push到gogs repo===>gogs的hooks在push到远程demoserver==>远程demoserver的post-receive的hook将最新的修正,checkout到正式环境。

以上情境只提供参考,您可以用任何您想的到的方式布署,例如rsync..
在这里,我不讨论安全问题,例如防火墙相关设置,或sshd_config应如何设置,像是AllowUsers git@<ip位置>
或.git目录不应该在网页的DocumentRoot数据夹,
假如您使用Laravel的框架,应该不会碰到这个问题,因为.git会在project的目录下,非public。


 

Tags: docker git

Devin Yang

文章内容无法一一说明,如果您有什么不了解处,欢印提问哦:)

No Comment

Post your comment

需要登入才可留言!

类似文章


git

git别名之昨日报表

我们可以透过 git config --global alias.[别名] "将常常要运行的长长git子命令"缩减成简化的别名。 所以您也可以透过git别名设置,将自己常用的git命令添加到全局的git别名中。 让我们来看看我的实际范例,如何将长长的子命令简化成简单易用的别名。

gitlab,reset password

重设gitlab密码

用docker建的gitlab太久没用,忘记密码了,如何重设呢。 我们应该能透过下方命令,进入到gitlab容器内...

docker,phpenv

在Linux上ping不到host.docker.internal

可用docker version检查,确认版本在Docker v20.10+即可添加extra_hosts如下: