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 systemd\[1\]: Started Gogs. Apr 03 17:49:14 VM_1_2_centos gogs\[32650\]: 2019/04/03 17:49:14 \[TRACE\] Custom path: /home/git/gogs/custom Apr 03 17:49:14 VM_1_2_centos gogs\[32650\]: 2019/04/03 17:49:14 \[TRACE\] Log path: /home/git/gogs/log Apr 03 17:49:14 VM_1_2_centos gogs\[32650\]: 2019/04/03 17:49:14 \[TRACE\] Log Mode: Console (Trace) Apr 03 17:49:14 VM_1_2_centos gogs\[32650\]: 2019/04/03 17:49:14 \[ INFO\] Gogs 0.11.86.0130 Apr 03 17:49:14 VM_1_2_centos gogs\[32650\]: 2019/04/03 17:49:14 \[ INFO\] Cache Service Enabled Apr 03 17:49:14 VM_1_2_centos gogs\[32650\]: 2019/04/03 17:49:14 \[ INFO\] Session Service Enabled Apr 03 17:49:14 VM_1_2_centos gogs\[32650\]: 2019/04/03 17:49:14 \[ INFO\] SQLite3 Supported Apr 03 17:49:14 VM_1_2_centos gogs\[32650\]: 2019/04/03 17:49:14 \[ INFO\] Run Mode: Development Apr 03 17:49:15 VM_1_2_centos gogs\[32650\]: 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

相关推荐
星光璀璨山河无恙11 分钟前
【Hadoop】Hadoop3.1.4完全分布式集群搭建
大数据·hadoop·分布式
GIS数据转换器1 小时前
在机器人和无人机时代,测绘人的出路在哪里?
大数据·人工智能·信息可视化·机器人·自动驾驶·汽车·无人机
不辉放弃2 小时前
Spark 在 Python 大数据中的作用
大数据·python
Gvemis⁹2 小时前
Scala总结(二)
大数据·开发语言·scala
Elastic 中国社区官方博客3 小时前
Elasticsearch:使用 Azure AI 文档智能解析 PDF 文本和表格数据
大数据·人工智能·elasticsearch·搜索引擎·pdf·全文检索·azure
Lansonli5 小时前
大数据Spark(五十六):Spark生态模块与运行模式
大数据·分布式·spark
hf2000125 小时前
技术深度报道:解析云器Lakehouse如何实现超越Spark 10倍性能提升
大数据·分布式·spark
光仔December6 小时前
【Elasticsearch入门到落地】10、初始化RestClient
elasticsearch·搜索引擎·全文检索·ik分词器·restclient
不辉放弃9 小时前
Flink/Kafka在python中的用处
大数据·python
薇晶晶9 小时前
虚拟机安装linux系统无法上网的解决方法
大数据