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.mzph.cn/diannao/75790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数位和相等

问题描述 如果一个正整数转化成二进制与转换成八进制后所有数位的数字之和相等,则称为数位和相等的数。 前几个数位和相等的正整数为 11, 88, 99, 6464,…… 请问第 2323 个数位和相等的正整数是多少? import java.util.Scanner; public …

Java-servlet(九)前端会话,会话管理与Cookie和HttpSession全解析

Java-servlet(九)前端会话,会话管理与Cookie和HttpSession全解析 前言一、什么是会话二、会话管理1. 隐藏的表单域2. 网址重写3. 使用 Cookie3.1 Cookie 的工作流程3.2 Java 中的方法,Cookie 类 三、Cookie 的实现1. 创建 Cookie2…

uniapp开发中store的基本用法和模块化详解

在 UniApp 开发中,状态管理是非常重要的一部分,尤其是在复杂的应用场景下。Vuex 是 Vue.js 的官方状态管理库,可以帮助开发者集中管理应用的状态数据。UniApp 作为基于 Vue.js 的跨平台开发框架,也支持使用 Vuex 进行状态管理。 以下是关于 Vuex 在 UniApp 中的详细用法介…

手写数据库MYDB(一):项目启动效果展示和环境配置问题说明

1.项目概况 这个项目实际上就是一个轮子项目,现在我看到的这个市面上面比较火的就是这个首先RPC,好多的机构都在搞这个,还有这个消息队列之类的,但是这个是基于MYSQL的,我们知道这个MYSQL在八股盛宴里面是重点考察对象…

基于Spring Boot的电动车智能充电服务平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

【AI学习】人工神经网络

1,人工神经网络(Artificial Neural Networks,ANNs,连接模型,Connection Model) 模仿动物神经网络行为特征(突触联接的结构),进行分布式并行信息处理的算法数学模型。依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。 2,前馈神…

场馆预约小程序的设计与实现

摘 要 时代在进步,人们对日常生活质量的要求不再受限于衣食住行。现代人不仅想要一个健康的身体,还想拥有一身宛如黄金比例的身材。但是人们平常除了上下班和上下学的时间,其余空余时间寥寥无几,所以我们需要用体育场馆预约来节省…

笔记:纯真IP库

最近需要使用到ip解析成对应的地域,查找了一些资料,发现纯真ip库,这个比较好用,而且社区版可以获得免费授权。 纯真ip库官网地址:https://www.cz88.net/ python版本git地址:https://github.com/tagphi/cz…

骨密度以及骨密度测量,测量方案,意义;提高;实现方案

骨密度及骨密度测量 骨密度(Bone Mineral Density, BMD) 是指骨骼单位体积或单位面积内矿物质(主要是钙和磷)的含量,是评估骨骼强度的重要指标。骨密度降低可能导致骨质疏松,增加骨折风险。 简单分析效果&…

MySQL 体系结构与存储引擎

目录 一、MySQL 体系结构 1. 连接层 (Connection Layer) 2. 服务层 (Server Layer) 3. 存储引擎层 (Storage Engine Layer) 二、MySQL 核心存储引擎比较 1. InnoDB (默认引擎) 2. MyISAM 3. Memory (HEAP) 4. 其他存储引擎 三、InnoDB 存储引擎深度解析 1. 核心架构组…

知识就是力量——物联网应用技术

基础知识篇 一、常用电子元器件1——USB Type C 接口引脚详解特点接口定义作用主从设备关于6P引脚的简介 2——常用通信芯片CH343P概述特点引脚定义 CH340概述特点封装 3——蜂鸣器概述类型驱动电路原文链接 二、常用封装介绍贴片电阻电容封装介绍封装尺寸与功率关系&#xff1…

vue复习1~45

1.关于vue 要理解记忆规则,可以到官网上去找 vue的两种使用方式 vue核心包开发 场景:局部模块改造vue核心包 & vue插件 工程化开发 场景:整站开发 2.创建vue实例 构建用户页面->创建vue实例初始化渲染 学习阶段用开发版本 3.插值…

Netty和Project Reactor如何共同处理大数据流?

在处理大数据流时,Netty和Project Reactor可以协同工作,充分利用Netty的高性能非阻塞IO和Project Reactor的响应式编程模型,实现高效的数据处理和背压控制。以下是如何共同处理大数据流的详细步骤和示例代码: ### 1. Netty和Proj…

【Nginx】location匹配模式与规则

文章目录 一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大小写敏感)5. 正则模式(大小写不敏感) 三、需要注意的地方1. 命中多…

JavaScript基础-定时器

在Web开发中,有时我们需要延迟执行某些操作或者定期重复执行某段代码。JavaScript提供了强大的定时器功能,使得这些需求变得简单易行。本文将详细介绍JavaScript中的定时器,包括setTimeout和setInterval函数的使用方法、注意事项以及一些实际…

【Python】and 和 or 的返回值

文章目录 选项 A选项 B选项 C选项 D正确答案 以下哪些选项输出结果为True ( ) A、print(2 0 or True) B、print(2 ! 0 or True) C、print(str(2) and str(0) or True) D、print(str(2) or str(0) or True)要确定哪些选项的输出结果为 True,我们需要分析每个表达式的…

【deepseek 学c++】weakptr引用场景

std::weak_ptr 是 C 中与 std::shared_ptr 配合使用的智能指针,它本身不拥有资源的所有权,仅观察资源的状态,主要用于解决 shared_ptr 的循环引用问题和临时访问共享资源的需求。以下是 weak_ptr 的典型应用场景和核心价值:![ 为…

新手SEO优化实战快速入门

内容概要 对于SEO新手而言,系统化掌握基础逻辑与实操路径是快速入门的关键。本指南以站内优化为切入点,从网站结构、URL设计到内链布局,逐层拆解搜索引擎友好的技术框架;同时聚焦关键词挖掘与内容策略,结合工具使用与…

如何用Redis统计网站的UV

在 Java 项目中使用 Redis 统计网站的 UV(独立访客数),我们可以利用 Redis 提供的 HyperLogLog 数据结构。HyperLogLog 适合用来做基数统计,它在空间复杂度上非常高效,可以在存储大量数据的情况下,提供非常…

Android系统的安全问题 - Android的启动时验证

Android 启动时验证(Verified Boot) Android 的 启动时验证(Verified Boot) 是一项关键安全机制,用于确保设备启动过程中加载的所有系统镜像(如 Bootloader、内核、系统分区)未被篡改&#xff…