当前位置: 首页 > news >正文

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 /usr/local/gogs/scripts/systemd/gogs.service /usr/lib/systemd/system/
然后就可以很方便的在任何目录下启动和停止Gogs服务了。

复制好启动脚本后,就执行它
sudo systemctl start gogs.service # 启动服务

如果需要开机启动话执行(设置永久启动):
sudo systemctl enable gogs.service

查看服务运行状态
sudo systemctl status gogs.service

启动成功后会看到以下信息
● 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用户及所属组访问
2. 配置绑定挂载
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)
3. 持久化挂载配置
绑定挂载默认在系统重启后失效,需将配置写入 /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'
4. 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


http://www.mrgr.cn/news/96185.html

相关文章:

  • ZeroMQ介绍及如何交叉编译在嵌入式Linux下使用
  • ESP32-CAM在PlatformIO IDE里实现OTA的几个小TIPS
  • 骨密度以及骨密度测量,测量方案,意义;提高;实现方案
  • jmeter 镜像构建
  • C语言学习关键笔记
  • 数据结构C语言练习(顺序表)
  • 论文阅读笔记:Denoising Diffusion Implicit Models
  • nara wpe去混响学习笔记
  • 力扣刷题第一遍
  • Microi吾码界面设计引擎之基础组件用法大全【内置组件篇·中】
  • Leetcode算法方法总结
  • 生成器的应用 async与await实现
  • 【leetcode hot 100 347】前 K 个高频元素
  • centos8上实现lvs集群负载均衡nat模式
  • mysql--主从复制--部署
  • 循环神经网络(RNN)
  • 大数据(2)Hadoop架构深度拆解:HDFS与MapReduce企业级实战与高阶调优
  • STM32F103_LL库+寄存器学习笔记08 - DMA串口发送,开启DMA传输完成中断
  • java程序员实用英语学习总结
  • STM32F103_LL库+寄存器学习笔记07 - 串口接收缓冲区非空中断