本教程将涵盖在 Ubuntu 22.04|20.04|18.04 服务器上安装 Gogs 自托管 Git 服务所需的所有步骤。 Gogs 项目是用 Go 编写的,旨在通过轻松的设置过程构建一个简单、稳定和可扩展的自托管 Git 服务。 Gogs 作为独立的二进制发行版进行分发,并在 Go 支持的所有平台上运行,包括 Linux、macOS、Windows 和 ARM。
Gogs 性能出色,而且非常轻。它的 RAM 和 CPU 利用率非常低。具有 1 个 CPU 核心和 256MB RAM 的 VPS 足以开始使用该服务。
Gogs 的功能
Gogs 自托管 Git 服务具有以下一组功能(来自 Git)
- 活动时间表
- SMTP/LDAP/反向代理身份验证
- 帐户/组织/存储库管理
- 存储库 Git 挂钩/部署密钥
- SSH 和 HTTP/HTTPS 协议
- 带子路径的反向代理
- 添加/删除存储库协作者
- 用于存储库文件和 wiki 的 Web 编辑器
- 迁移和镜像存储库及其 wiki
- 存储库/组织 webhook(包括 Slack 和 Discord)
- 存储库问题拉取请求、wiki 和受保护的分支
- 双因素身份验证
- Gravatar 和具有自定义源的联合头像
- Jupyter笔记本
- 管理面板
- 邮件服务
- 支持 MySQL、PostgreSQL、SQLite3、MSSQL 和 TiDB(通过 MySQL 协议)
- 多语言支持(29种语言)
Gogs 开源组件
Gogs 组件包括:
- Web 框架:马卡龙
-
用户界面组件:
- 语义用户界面
- GitHub Octicons
- 字体真棒
-
前端插件:
- DropzoneJS
- 标记的
- 剪贴板.js
- 高亮.js
- emojify.js
- jQuery MiniColors
- jQuery 日期时间选择器
- 笔记本.js
- 码镜
- ORM:Xorm
-
数据库驱动程序:
- github.com/go-sql-driver/mysql
- github.com/mattn/go-sqlite3
- github.com/lib/pq
- github.com/denisenkom/go-mssqldb
- 以及所有其他 Go 包依赖项
在Ubuntu 22.04|20.04|18.04上安装Gogs Git服务
按照以下步骤在您的 Ubuntu 服务器上安装 Gogs。
第1步:安装MariaDB数据库服务器
Gogs需要MySQL服务器来存储数据。我们将使用以下命令安装 MariaDB 服务器:
sudo apt update
sudo apt install mariadb-server mariadb-client
安装数据库服务器后,以 root 用户身份登录 MariaDB 控制台
sudo mysql -u root -p
设置下面的全局变量
SET GLOBAL innodb_file_per_table = ON;
然后创建 gogs
数据库
DROP DATABASE IF EXISTS gogs;
CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
创建专用数据库用户来管理 gogs
数据库。
GRANT ALL PRIVILEGES ON gogs.* TO 'gogs'@'localhost' IDENTIFIED BY "StrongPassword";
FLUSH PRIVILEGES;
\q
第 2 步:从 Github 下载 Gogs
检查 Gogs 版本页面 https://github.com/gogs/gogs/releases 以获取最新版本。
sudo apt install wget curl vim -y
curl -s https://api.github.com/repos/gogs/gogs/releases/latest | grep browser_download_url | grep '\linux_amd64.tar.gz' | cut -d '"' -f 4 | wget -i -
提取下载的文件
tar xvf gogs_*_linux_amd64.tar.gz
第 3 步:配置 Gogs 自托管 Git 服务
创建 git 用户来运行 gogs 服务
$ sudo adduser git
Adding user `git' ...
Adding new group `git' (1001) ...
Adding new user `git' (1001) with group `git' ...
Creating home directory `/home/git' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for git
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
创建日志目录
sudo mkdir /var/log/gogs
sudo chown -R git:git /var/log/gogs/
将 gogs
systemd 服务文件复制到 /etc/systemd/system
目录
sudo cp gogs/scripts/systemd/gogs.service /etc/systemd/system
您可以编辑该文件来设置自定义设置:
sudo vim /etc/systemd/system/gogs.service
如果您有使用端口 3000
的其他服务,您可以设置自定义端口
ExecStart=/home/git/gogs/gogs web -port 3001
将 gogs 目录内容移动到 /home/git 中
sudo mv gogs /home/git/
将 /home/git/
的所有权更改为 user.git
sudo chown -R git:git /home/git/
重新加载 systemd 并启动 gogs
服务
sudo systemctl daemon-reload
sudo systemctl start gogs
启用该服务在启动时启动
sudo systemctl enable gogs
您可以通过运行来检查服务状态
$ systemctl status gogs
● gogs.service - Gogs
Loaded: loaded (/etc/systemd/system/gogs.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-05-08 09:14:51 UTC; 11s ago
Main PID: 2592 (gogs)
Tasks: 5 (limit: 4537)
Memory: 34.9M
CPU: 260ms
CGroup: /system.slice/gogs.service
└─2592 /home/git/gogs/gogs web -port 3001
May 08 09:14:51 jammy gogs[2592]: 2023/05/08 09:14:51 [TRACE] Log mode: Console (Trace)
May 08 09:14:51 jammy gogs[2592]: 2023/05/08 09:14:51 [ INFO] Gogs 0.13.0
May 08 09:14:51 jammy gogs[2592]: 2023/05/08 09:14:51 [TRACE] Work directory: /home/git/gogs
May 08 09:14:51 jammy gogs[2592]: 2023/05/08 09:14:51 [TRACE] Custom path: /home/git/gogs/custom
May 08 09:14:51 jammy gogs[2592]: 2023/05/08 09:14:51 [TRACE] Custom config: /home/git/gogs/custom/conf/app.ini
May 08 09:14:51 jammy gogs[2592]: 2023/05/08 09:14:51 [TRACE] Log path: /home/git/gogs/log
May 08 09:14:51 jammy gogs[2592]: 2023/05/08 09:14:51 [TRACE] Build time: 2023-02-25 02:30:34 UTC
May 08 09:14:51 jammy gogs[2592]: 2023/05/08 09:14:51 [TRACE] Build commit: 8c21874c00b6100d46b662f65baeb40647442f42
May 08 09:14:51 jammy gogs[2592]: 2023/05/08 09:14:51 [ INFO] Run mode: Development
May 08 09:14:51 jammy gogs[2592]: 2023/05/08 09:14:51 [ INFO] Available on http://localhost:3001/
以 git 用户身份在终端上输入命令 gogs 应该会打印帮助页面。
$ /home/git/gogs/gogs
NAME:
Gogs - A painless self-hosted Git service
USAGE:
gogs [global options] command [command options] [arguments...]
VERSION:
0.13.0
COMMANDS:
web Start web server
serv This command should only be called by SSH shell
hook Delegate commands to corresponding Git hooks
cert Generate self-signed certificate
admin Perform admin operations on command line
import Import portable data as local Gogs data
backup Backup files and database
restore Restore files and database from backup
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--help, -h show help
--version, -v print the version
第 4 步:配置 Gogs 自托管 Git 服务
打开网址http://serverip:3001/install完成Gogs的安装
设置数据库验证
提供的用户名和密码应与数据库配置部分中提供的用户名和密码匹配。如果数据库服务器位于不同的主机上,请在主机部分下提供 IP 地址。
设置应用程序常规设置
提供应用程序 URL,这可以是可路由的服务器 IP 地址或解析为 IP 的域名。 SSH 也应该进行同样的设置。
禁用用户自行注册
您可以在“服务器和其他服务设置”下禁用用户自行注册。这意味着管理员用户将手动创建用户帐户。
您可以选择创建管理员用户帐户。默认情况下,root 用户将自动获得管理员访问权限。
完成配置后,点击“安装 Gogs ”按钮完成安装。成功安装后,您应该登录 Gogs 管理控制台。
创建额外的用户帐户
要添加用户帐户,请打开右上角面板的管理面板
然后,您可以使用“创建新帐户”链接向 Gogs 添加新用户。
步骤:5 测试 Gogs 自托管 Git 服务
创建一个名为 test-repo
的新存储库
尝试克隆存储库
$ git clone http://192.168.18.40:3000/jmutai/test-repo.git
Cloning into 'test-repo'...
Username for 'http://192.168.18.40:3000': jmutai
Password for 'http://[email :3000': <Enter Password>
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done
要避免密码身份验证,请在“您的个人资料 > SSH 密钥 > 添加密钥”下添加您的 SSH 公钥
提供密钥名称,并将您的 SSH 公钥粘贴到内容框中。
ssh git 克隆不应要求输入密码
$ git clone [email :jmutai/test-repo.git
Cloning into 'test-repo'...
Warning: Permanently added '192.168.18.40' (ECDSA) to the list of known hosts.
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4/4), done.
第6步:配置Nginx反向代理
如果您想使用没有端口的域名访问Gogs,则需要配置Apache或NGINX反向代理
sudo apt install nginx
创建 VirtualHost 反向代理配置文件
sudo vim /etc/nginx/conf.d/gogs.conf
添加 :
server {
listen 80;
server_name git.example.com;
location / {
proxy_pass http://localhost:3000;
}
}
如果使用 SSL 并且希望将 http
重定向到 https
,请使用:
server {
listen 80;
server_name git.example.com;
location / {
rewrite ^ https://git.example.com$request_uri? permanent;
}
}
server {
listen 443 ssl;
server_name git.example.com;
ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.example.com/privkey.pem;
location / {
proxy_pass http://localhost:3000;
}
}
将 git.example.com 替换为您的实际域名。有关 Gogs 管理和使用的更多信息,请查看官方文档。
有关的 :
- 如何在登录页面禁用 GitLab 用户注册
- 配置 GitLab FreeIPA LDAP 身份验证
- 如何使用 SSL 证书保护 GitLab 服务器