gogs私服搭建

一.介绍:

gogs是一个用Go语言开发的自助Git服务,目标是简单、快速搭建Git服务,

支持多种平台,包括Linux、Windows等。它类似于GitHub,但更轻量,适合个人或小团队使用,

在简化git服务搭建流程的同时,平衡资料消耗和功能完整性 ,是轻量级私有代码托管的优质方案

gogs的作用

2.1.私有化代码托管:gogs提供与GitHub类似的仓库管理功能,支持本地化部署,适合存放敏感或私有项目代码。

2.2.灵活权限控制:支持仓库、组织、团队三级权限管理,可细化到读写、审查、合并请求等操作;

同时也提供分支功能,防止未经授权的代码提交。

2.3.协作开发支持:内置工单(Issue)、合并请求(Pull Request)、Wiki等功能,满足代码审查和文档协作

需求、支持通过组织管理多仓库,方便团队划分项目模块。

2.4.持续集成/部署:通过Web钩子与Jenkins、Drone等工具集成,实现自动化构建和测试。

二.部署:

在gogs官方有介绍,不建议直接使用root账户运行,这样风险太高了,平时我们发布应用也不建议这样

sudo adduser git

添加用户后需要修改一下/etc/sudoers 在文件以下位置加入

Allow root to run any commands anywhere

root ALL=(ALL) ALL # 这个是系统原有的

git ALL=(ALL) ALL

修改/etc/sudoers文件前需要把它改为可读写状态,不然编辑了无法保存,该文件默认是只读。

sudo chmod u+w /etc/sudoers 改为读写

sudo chmod u-w /etc/sudoers 只读

编辑完成后,建议把/etc/sudoers改为只读状态

su git 切换为git用户,我操作的时候发现切换为git用户,默认的home 属于root 组及root用户,

git用户没有操作权限,这个时候我们就需要把home改为git及对应的组

sudo chown git:git -R /home/git/**

安装基础环境

这里需要安装一下git

sudo apt-get install git

tar xvf 解压对应的目录

sudo tar xvf gogs_0.11.86_linux_amd64.tar.gz -C /home/git/

这里建议把文件解压到git用户的home里面,因为gogs里面很多的配置都是放在git用户的home里面,这样可以减少我们修改的成本。

解压完成后,建议创建目录及文件custom/conf/app.ini,custom属于gogs文件的子目录。

touch -c custom/conf/app.ini # 使用该命令即可

官方有解释为什么要创建这样一个目录及配置文件,这个配置文件是让我们修改默认配置而建立的。

因为不建议直接修改原配置文件。具体的配置模板见GitHub app.ini

配置完成后我们可以在gogs目录下执行 ./gogs web,看到以下信息就可以经行安装了,但是建议这样启动,

因为命令行一关闭,gogs服务就停止了,官方已经给出了很多的守护线程执行脚本,在scripts文件夹下

git@VM_1_2_centos gogs$ ./gogs web

2019/04/03 17:42:39 TRACE Custom path: /home/git/gogs/custom

2019/04/03 17:42:39 TRACE Log path: /home/git/gogs/log

2019/04/03 17:42:39 TRACE Log Mode: Console (Trace)

2019/04/03 17:42:39 INFO Gogs 0.11.86.0130

2019/04/03 17:42:39 INFO Cache Service Enabled

2019/04/03 17:42:39 INFO Session Service Enabled

2019/04/03 17:42:39 INFO SQLite3 Supported

2019/04/03 17:42:39 INFO Run Mode: Development

2019/04/03 17:42:39 INFO Listen: http://0.0.0.0:8002

设置systemctl启动原因

每次使用 nohup ./gogs web & 进行后台启动比较麻烦,不仅需要进入安装目录,还得敲这么麻烦的命令。

配置使用systemctl方式启动gogs,可以很方便的在任何目录下执行启动。

设置systemctl启动

这里,使用官方的启动脚本gogs.service(这里gogs.service脚本文件在你的gogs安装目录下),

使用以下命令,把启动脚本复制到Linux system目录下

cp /home/git/gogs/scripts/systemd/gogs.service /etc/systemd/system/

然后就可以很方便的在任何目录下启动和停止Gogs服务了。

复制好启动脚本后,就执行它

复制代码
sudo systemctl daemon-reload
sudo systemctl enable gogs
sudo systemctl start gogs

启动成功后会看到以下信息

● gogs.service - Gogs

Loaded: loaded (/etc/systemd/system/gogs.service; disabled; vendor preset: disabled)

Active: active (running) since Wed 2019-04-03 17:49:14 CST; 5s ago

Main PID: 32650 (gogs)

CGroup: /system.slice/gogs.service

└─32650 /home/git/gogs/gogs web

Apr 03 17:49:14 VM_1_2_centos systemd1: Started Gogs.

Apr 03 17:49:14 VM_1_2_centos gogs32650: 2019/04/03 17:49:14 TRACE Custom path: /home/git/gogs/custom

Apr 03 17:49:14 VM_1_2_centos gogs32650: 2019/04/03 17:49:14 TRACE Log path: /home/git/gogs/log

Apr 03 17:49:14 VM_1_2_centos gogs32650: 2019/04/03 17:49:14 TRACE Log Mode: Console (Trace)

Apr 03 17:49:14 VM_1_2_centos gogs32650: 2019/04/03 17:49:14 INFO Gogs 0.11.86.0130

Apr 03 17:49:14 VM_1_2_centos gogs32650: 2019/04/03 17:49:14 INFO Cache Service Enabled

Apr 03 17:49:14 VM_1_2_centos gogs32650: 2019/04/03 17:49:14 INFO Session Service Enabled

Apr 03 17:49:14 VM_1_2_centos gogs32650: 2019/04/03 17:49:14 INFO SQLite3 Supported

Apr 03 17:49:14 VM_1_2_centos gogs32650: 2019/04/03 17:49:14 INFO Run Mode: Development

Apr 03 17:49:15 VM_1_2_centos gogs32650: 2019/04/03 17:49:15 INFO Listen: http://0.0.0.0:8002

/usr/lib/systemd/system/gogs.service文件内容:

Unit

Description=Gogs

After=syslog.target

After=network.target

After=mariadb.service mysqld.service postgresql.service memcached.service redis.service

Service

Modify these two values and uncomment them if you have

repos with lots of files and get an HTTP error 500 because

of that

#LimitMEMLOCK=infinity

#LimitNOFILE=65535

Type=simple

User=git

Group=git

WorkingDirectory=/home/git/gogs

ExecStart=/home/git/gogs/gogs web

Restart=always

Environment=USER=git HOME=/home/git

Some distributions may not support these hardening directives. If you cannot start the service due

to an unknown option, comment out the ones not supported by your version of systemd.

ProtectSystem=full

PrivateDevices=yes

PrivateTmp=yes

NoNewPrivileges=true

Install

WantedBy=multi-user.target

启动后通过客户端网页访问:192.168.127.130:3000 即可登录

首次配置需要匹配IP、账户用git,数据库选择sqlite3,数据库使用绝对路径/home/git/gogs/data,其他保持默认设置即可

三.特殊需求及实现方法

特殊需求:

Gogs支持通过组织(organization)和团队(team)来管理项目,并且可以为每个团队分配不同的仓库权限。

然而,当前的需求是将两个团队的文件分别存储到两个不同的物理盘中,以实现更高效的资源管理和隔离。

具体需求,项目分组:

将所有项目分为两个组织(例如:组织A和组织B),每个组织下可以包含多个团队。

每个团队可以拥有自己的管理员,负责管理团队成员及权限分配。

文件存储要求:

组织A的文件存储在第一个物理盘(例如:/data1)中。

组织B的文件存储在第二个物理盘(例如:/data2)中。

权限与管理:

确保每个团队的管理员能够独立管理其团队成员和仓库权限。

需要支持对不同存储路径的配置,以便将文件正确地存储到指定的物理盘中。

实现方法:

绑定挂载(Bind Mount)的详细配置说明

绑定挂载(Bind Mount)是一种将同一物理存储目录挂载到多个位置的技术,通过此方法可以实现目录的透明映射,

使得两个路径访问相同的数据。在Gogs的场景中,可以通过绑定挂载将不同组织的仓库根目录映射到不同的物理盘,

从而实现存储隔离。以下是具体步骤:

  1. 准备工作

1.1 挂载物理盘

确保两个物理盘已正确挂载到目标路径(例如 /data1 和 /data2)。

假设物理盘1对应设备 /dev/sdb1,物理盘2对应设备 /dev/sdc1:

挂载物理盘1到/data1

sudo mkdir -p /data1

sudo mount /dev/sdb1 /data1

挂载物理盘2到/data2

sudo mkdir -p /data2

sudo mount /dev/sdc1 /data2

1.2 创建组织目录

在物理盘上为每个组织创建专用目录:

在/data1中为组织A创建目录

sudo mkdir -p /data1/orgA

在/data2中为组织B创建目录

sudo mkdir -p /data2/orgB

1.3 设置目录权限

确保Gogs运行用户(通常为 git)对目录有读写权限:

sudo chown -R git:git /data1/orgA /data2/orgB

sudo chmod -R 750 /data1/orgA /data2/orgB # 仅允许git用户及所属组访问

  1. 配置绑定挂载

2.1 挂载到Gogs仓库目录

假设Gogs的默认仓库根目录为 /home/git/gogs-repositories,需将物理盘目录绑定到该路径下的子目录:

绑定/data1/orgA到Gogs仓库目录下的orgA

sudo mount --bind /data1/orgA /home/git/gogs-repositories/orgA

绑定/data2/orgB到Gogs仓库目录下的orgB

sudo mount --bind /data2/orgB /home/git/gogs-repositories/orgB

2.2 验证挂载

使用 mount 或 df -h 检查挂载状态:

查看绑定挂载点

mount | grep -E 'orgA|orgB'

输出示例:

/dev/sdb1 on /home/git/gogs-repositories/orgA type ext4 (rw,relatime)

/dev/sdc1 on /home/git/gogs-repositories/orgB type ext4 (rw,relatime)

  1. 持久化挂载配置

绑定挂载默认在系统重启后失效,需将配置写入 /etc/fstab 实现开机自动挂载:

编辑/etc/fstab文件

sudo vim /etc/fstab

添加以下两行:

/data1/orgA /home/git/gogs-repositories/orgA none bind 0 0

/data2/orgB /home/git/gogs-repositories/orgB none bind 0 0

验证持久化配置

重新挂载所有fstab条目

sudo mount -a

再次检查挂载点

mount | grep -E 'orgA|orgB'

  1. Gogs组织与仓库配置

4.1 创建组织

登录Gogs,进入 「用户设置」→「组织管理」。

创建组织 orgA 和 orgB。

4.2 创建仓库

在组织 orgA 下创建仓库时,Gogs会自动将其存储在 /home/git/gogs-repositories/orgA,实际数据位于 /data1/orgA。

同理,组织 orgB 的仓库数据实际位于 /data2/orgB。

四.其他

gogs关闭注册按钮的方法

将app.ini中得以下参数的false改成 true,重启,再次登录页面,注册按钮已隐藏

DISABLE_REGISTRATION = false

添加用户错误时的相关操作:

添加错了用户,删除操作:

强制终止所有属于 git 的进程

sudo pkill -u git

删除用户及其主目录、邮件池

sudo userdel -r git

如果仍有残留,强制删除(慎用)

sudo userdel -f -r git

使用命令停止gogs服务

systemctl stop gogs.service

相关推荐
事变天下18 分钟前
冲刺港三所,如何选则香港申请机构?香港留学机构对比及避坑指南
大数据·人工智能
ACP广源盛1392462567333 分钟前
YLB3118 存储桥接芯片完整机会点@ACP#联动曙光 8000
大数据·人工智能·分布式·单片机·嵌入式硬件
TDengine (老段)36 分钟前
已有TSDB?一条配置,免费解锁AI数据管理平台
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
牛企老板俱乐部1 小时前
企跃龙门 GEO 智能优化系统正式发布 抢占 AI 搜索时代企业获客新赛道
大数据·人工智能
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-07-28
前端·神经网络·react.js·搜索引擎·前端框架
企业智能研究12 小时前
企业如何落地企微私域智能客服来降本增效:从技术选型到实施落地的完整指南
大数据·人工智能·企业微信·智能客服
delishcomcn12 小时前
边缘计算+AI模型:电化铝分切装备的智能化改造路径
大数据·人工智能·边缘计算
太原geo小侦探12 小时前
2026门店AI流量实测测评:同为实体门店,AI问答曝光差距在哪?
大数据·人工智能·生活·流量运营·内容运营
AI大法师12 小时前
一个机场如何被做成 IP 场景:宝可梦机场的设计方法总结
大数据·人工智能·设计模式·新媒体运营
朴马丁15 小时前
从制造到智造:PLM如何赋能企业研发创新
大数据·运维·人工智能·食品行业·流程行业plm·化工新材料行业·新能源材料行业