Docker系列 自建代码托管和版本控制平台Gogs
本文最后更新于 35 天前,如有失效请评论区留言。

前言

由于最近都在准备医学相关的博文,再加上前段时间某些特殊的个人原因,博客停更了大半个月,已经好久没有更新Docker系列的内容了。今天给大家介绍的应用与版本控制有关!

相信大家对GithubGitee这类第三方商业平台不陌生。特别是Github,来自全世界的大多数优秀开发者都在Github上托管他们的代码。因为我平时工作与文档更新迭代密切相关,并且有合作者一起编写文档的应用场景,所以对Github这类基于Git的版本控制的需求十分旺盛。

既然商业版本控制平台如此强大和成熟,自建版本控制平台的必要性是什么呢?我认为,自建版本控制平台有以下优点:

  • 数据安全性强只对目标人群(比如登陆用户)开放。在公共平台,虽然也可以设置Private Repo,但其性能有较大限制。此外,第三方平台对内容的控制受公司运营和政策影响,托管数据可能会被冻结;而数据托管在自己的手里则没有这种顾虑。
  • 性能可拓性强:家用设备的储存空间和带宽即有远超公共平台免费用户的性能。

我觉得类似科研工作者、软件开发者中的小型团队还是很需要自建文档版本控制的,可以在追求性价比的同时极大地提升工作效率和安全性。起初我是想折腾GitLab的,但是目前版本的Gitlab docker版本存在不少问题,还处于测试阶段;而且Gitlab是个比较复杂和臃肿的应用,个人维护起来不太容易。感谢Derek大佬向我推荐了一个叫Gogs的版本控制平台。Gogs使用 Go语言并通过 Go 支持Linux、macOS、Windows等平台和基于 ARM 的系统(甲骨文大鸡可以装!),目前在Github上有40.8k的Star,算是明星应用,质量和性能有保障。当然,类似的应用还有Codeberg等,就不一一介绍了。大家有好的推荐,欢迎评论区留言。

本文准备演示如何安装Docker版Gogs,并且基于TortoiseGit(一款Windows Git工具)演示一下基本使用。之后发现有什么比较实用的技巧会继续分享给大家。Gogs是一款很容易安装的Docker应用,对小白用户很友好!下面我们康康怎么玩吧!

测试环境

果断用之前申请的甲骨文大盘鸡测试,x86机器估计也没问题:

uname -a # Linux instance-20220712-0742 5.15.0-1011-oracle #15-Ubuntu SMP Fri Jun 10 12:21:49 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux

docker --version # Docker version 20.10.17, build 100c701

docker-compose --version # Docker Compose version v2.4.1

准备工作

工作目录,按需修改:

work=~/docker/gogs && mkdir -p $work && cd $work

在防火墙开放端口号,按需修改。如果VPS后台有入站规则(腾讯云、甲骨文之类的VPS一般都有后台防火墙),记得添加10881/10023的TCP规则:

sudo ufw allow 10881 comment 'gogs' && sudo ufw allow 10023 comment 'gogs' && sudo ufw reload

在DNS托管商后台解析好给Gogs用的域名。本教程用gogs.hwb0307.com进行演示。

另外,你还要在本地电脑安装Git。不过,我觉得既然你想安装Gogs这类应用,相信Github肯定是用过了,Git应该已经安装过了。否则,你还是先用Github熟悉一下吧,不建议新手玩自建代码托管和版本控制应用

配置yaml

新建yml文件:

vim $work/docker-compose.yml

添加以下内容(端口等按需修改):

version: '3'
services:
  app:
    image: 'gogs/gogs:latest'
    restart: unless-stopped
    ports:
      - '10881:3000' # 按需修改
      - '10023:22' # 按需修改
    volumes:
      - ./app:/data
    links:
      - db:db
    networks:
      - default

  db:
    # x86的机器, 请将mysql:oracle改成mysql:5.7
    image: mysql:oracle
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root_password # 按需修改
      MYSQL_DATABASE: gogs
      MYSQL_USER: gogs
      MYSQL_PASSWORD: gogs_password # 按需修改
    volumes:
      - './db:/var/lib/mysql'
    networks:
      - default

networks:
  default:
    name: gogs

上线应用:

cd $work && docker-compose up -d

查看日志(个人感觉没啥必要):

cd $work && docker-compose logs -f

Gogs的优化很好,暂未发现某些重要的bug及其相关日志。

ddns-go & NPM

不了解Nginx Proxy Manager用法的小伙伴,请看《Docker系列 两大神器NPM和ddns-go的安装》。

设置无特别。具体如下图所示(自己想想为什么要填写10881这个端口号):

image-20220826203605436

设置好NPM的Proxy后,访问:https://gogs.hwb0307.com,可以看到下列页面,说明安装成功:

chrome_Kt78e5Q0K7

初始化Gogs

数据库信息

如图所示。用户名和密码按自己docker-compose.yml里设置的填写即可:

image-20220826204303498

从这里可以看出,Gogs支持的数据库类型还蛮多的。在本教程中,我使用的是MySQL数据库。

基本设置

如下图所示,无特别设置:

image-20220826204854676

下面还有一些可选设置,但我不准备在这里演示,有兴趣的童鞋可以试试看。我会在app.ini里演示类似的设置。按下保存后,就会出现注册页面,表示安装成功:

chrome_ezYaSexTIj

到这一步,自己先注册一个帐户。第一个帐户会默认为管理员帐户,且不建议以admin取名。我也注册一个帐户:

帐户:[email protected]
密码:test0test

登陆后界面大致如下:

chrome_jq6OSQN0Ly

界面很简洁,极简主义者最喜欢这种风格!

添加ssh指纹

如果你用ssh,添加这个比较方便。用https应该不需要这个。

在你的本地电脑中找到.ssh文件夹,里面有个id_rsa.pub文件,内容类似于:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDq07m3cZPMw71hbtQzsKEBqTuldSgcn6K2cWWG7hN/mWYyDKRxDnnZH+7bIeUc5dfq3cJ/O1a0extogAZ8aThJG94AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7o3UEKnqSC4f7gmOQSHls6o+nxOfgmhYtTfa15m6qMCS7p4IpaBzhTWfmAWMG2sz5+FD2OtRYP5oVQSM13Fdr+X9R1wsYLP9B/0zLLKToPM= [email protected]

每个人的都不一样。你将它copy到用户设置——帐户设置——SSH密钥里:

chrome_dEn152CESb

这样处理后,以后这个Gogs平台就会信任你的设备,通过ssh交流文件时则不需要密码。

多用户

只有管理员可以添加新用户,普通用户没有管理面板的选项。操作很简单,在管理面板——用户管理里自己添加就行。

chrome_8DrVzIZCqG

设置app.ini

主要根据官方app.ini模板进行调整。

app.ini文件主要用于进行一些细致的设置,它往往有助于构建想要的日常使用习惯。你完全可以按需进行修改;不过,如果你没有什么偏好,可以用我的设置。值得注意的是,根据官方help文档,用户不应该直接编辑conf/app.ini,而应该创建创建 custom/conf/app.ini 托管自定义配置。不过,我目前暂未发现如何在Docker容器里添加custom/conf/app.ini;而直接编辑conf/app.ini似乎并未带来什么问题。有什么建议或问题,大家也可以在评论区留言。

首先,打开conf/app.ini文件:

vim $work/app/gogs/conf/app.ini

app.ini本身已经带了一些默认设置,你可以按需添加或修改为以下内容:

[mailer]
; Whether to enable the email service. 改为true就是允许使用SMTP服务。有与他人合作搞项目的小伙伴可以开启。
ENABLED = true
; The prefix prepended to the subject line.
SUBJECT_PREFIX = [%(BRAND_NAME)s] 
; The SMTP server with its port, e.g. smtp.mailgun.org:587, smtp.gmail.com:587, smtp.qq.com:465
; If the port ends is "465", SMTPS will be used. Using STARTTLS on port 587 is recommended per RFC 6409.
; If the server supports STARTTLS it will always be used.
; 这里我是以QQ邮箱为例。大家记得改自己的密码(在QQ邮箱里,叫授权码)
HOST = smtp.qq.com:587
; The email from address (RFC 5322). This can be just an email address, or the "Name" <[email protected]> format.
FROM = [email protected]
; The login user.
USER = [email protected]
; The login password.
PASSWORD = XXXXXXXXXXX

[auth]
; Whether to disallow anonymous users visiting the site. 
; 设置为true则只有登陆用户才可以访问网站内容。
REQUIRE_SIGNIN_VIEW = true
; Whether to disable self-registration. When disabled, accounts would have to be created by admins. 
; 关闭登陆注册。不然所有知道网址的人都可以注册。
DISABLE_REGISTRATION = true
; Whether to enable captcha validation for registration 
; 注册时启用验证码。关闭登陆注册后,这个选项可有可无。
ENABLE_REGISTRATION_CAPTCHA = true

[picture]
; 国内用户可以改一个GRAVATAR镜像地址。不改也没关系,问题不大。
GRAVATAR_SOURCE = https://sdn.geekzu.org/avatar/

重启Gogs即可生效:

docker-compose restart

注意,随着Gogs版本更迭,这些设置可能会取消或者失效。如果真的有那么一天,我再来更新吧!

联用TortoiseGit

我们知道,如果用Github,可以用Github Desktop之类的可视化Git应用。像Gogs这类应用,如果你的生产力环境是Windows,可以用TortoiseGit。Linux直接用Git就行了。下面的教程是默认你安装好TortoiseGit了,不会的童鞋自己百度Google一下,教程很多。我在Nextcloud整理了TortoiseGit的安装包和简体中文包,大家也可以到官网下载最新版;其实就是2个msi文件,安装很简单。其它类型的Git工具就不另行介绍了,我估计这类应用的操作是差不多的。

新建仓库

比如,我新建一个名为Beyond的仓库,用来存放歌词:

chrome_FrqpPYtDZz

创建仓库的过程也是蛮简单的。如果你不太懂授权许可啥的,使用默认设置即可。毕竟这是个私人平台,这些内容不重要。

chrome_84BjUHX8Co

创建成功后自动跳转到这个页面,有Github那味了:

image-20220826211858090

仓库本地化

这里演示的是https克隆和推送。

我们复制一下新建仓库的https链接:

chrome_CGZu0i3snY

现在,我们将刚刚创建的仓库clone到本地。在文件夹里右键调用Git 克隆命令:

TortoiseGitProc_cEzIuvYwEL

第一次操作需要输入帐户和密码,自己按实际情况填写即可:

git-credential-manager-core_bU16pkf2vW

很快就可以成功(因为这个仓库没有内容):

TortoiseGitProc_LmpPAxkfCc

推送内容

这个时候,我们可以往仓库里添加一些本地内容。比如,我放了2个文件在里面:

explorer_t3JN9Fk4L2

在文件夹内按右键调出Git提交(C)—>“master”,填好信息选好文件,提交即可:

TortoiseGitProc_jGK6Mv05MG

最后,右键——TortoiseGit——推送,文件就推送到Gogs里了:

TortoiseGitProc_k8rYBUIJ56

TortoiseGitProc_hnC40LELbl

我们刷新一下网页,看到仓库已经更新了:

chrome_D0WK3DSUEd

更多TortoiseGit的相关操作就不介绍了,可以自己摸索一下,或者看一看文档。用过Github的人基本都知道是怎么回事了。

小结

和chevereto、nextcloud之类的应用相比,Gogs的安装真得简单太多,毫无压力!Gogs是一个很轻量的版本控制平台,功能简洁,而且是开源和免费的。希望它可以越做越好喽!在本教程中,我并未测试http,也并不推荐使用。如果有小伙伴使用http有问题的话,欢迎留言。

参考

版权声明:除特殊说明,博客文章均为Bensz原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。 如有需要,请至学习地图系统学习本博客的教程。加Telegram群可获得更多帮助喔! | 博客订阅:RSS | 广告招租:留言板 | 博客VPS |

评论

  1. Windows Edge 105.0.1343.42
    1周前
    2022-9-22 11:11:50

    感觉和Gitea一模一样😂

    • 博主
      落雨不悔
      Windows Chrome 105.0.0.0
      1周前
      2022-9-22 11:13:02

      都是类似的工具呀,只是说这是私人仓库。有些团队或个人可能需要这种小仓库嘛!比较方便些。

      • Bensz
        Windows Edge 105.0.1343.42
        1周前
        2022-9-22 19:21:19

        主要是连界面都一模一样😂,只有logo不一样,我差点以为是同一个(╯‵□′)╯︵┴─┴

      • 博主
        落雨不悔
        Windows Chrome 105.0.0.0
        1周前
        2022-9-22 21:44:42

        其实对于私有的小团队来说,这个玩意搭一下还挺好的。比如,我与合作者一起写论文,有些数据不宜托管到公共平台,这种版本控制仓库就很有必要了😅

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇