Appearance
Gogs 部署指南
概述
Gogs 是一款基于 Go 语言开发的极易搭建的自助 Git 服务。它的目标是构建一个最简单、最快速、最轻松的方式搭建自助 Git 服务。Gogs 以其轻量级和易用性著称,特别适合个人开发者和小型团队。
Gogs 简介
核心功能
- Git 托管: 完整的 Git 仓库管理
- Web 界面: 友好的用户界面
- 协作功能: Issue 追踪、Pull Request
- 权限管理: 用户和组织管理
- Webhook: 支持多种 Webhook
- Wiki: 项目文档管理
技术特点
- 极致轻量: 最低配置要求极低
- 快速部署: 几分钟即可完成安装
- 跨平台: 支持 Linux、macOS、Windows
- 开源免费: MIT 许可证
安装部署
系统要求
yaml
最低配置:
CPU: 单核
内存: 128MB
磁盘: 1GB
推荐配置:
CPU: 双核+
内存: 512MB+
磁盘: 10GB+
软件依赖:
- Git (>= 1.8.3)
- SSH Server (可选)
- 数据库 (可选: MySQL/PostgreSQL/SQLite3)Debian/Ubuntu 安装
1. 创建用户
bash
sudo adduser --system --shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git git2. 下载 Gogs
bash
# 创建安装目录
sudo mkdir -p /usr/local/gogs
cd /usr/local/gogs
# 下载二进制文件
wget https://dl.gogs.io/0.13.0/gogs_0.13.0_linux_amd64.tar.gz
# 解压文件
tar -zxvf gogs*.tar.gz --strip-components=1
# 设置权限
sudo chown -R git:git /usr/local/gogs3. 配置系统服务
创建 /etc/systemd/system/gogs.service:
ini
[Unit]
Description=Gogs
After=syslog.target
After=network.target
After=mysqld.service
[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/usr/local/gogs
ExecStart=/usr/local/gogs/gogs web
Restart=always
Environment=USER=git HOME=/home/git
[Install]
WantedBy=multi-user.targetbash
# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable gogs
sudo systemctl start gogs
# 查看状态
sudo systemctl status gogsCentOS/RHEL 安装
1. 安装 Git
bash
# 安装依赖
sudo yum install -y epel-release
sudo yum install -y git
# 验证版本
git --version2. 创建用户
bash
sudo groupadd git
sudo useradd -g git -s /bin/bash -d /home/git git3. 下载安装
bash
sudo mkdir -p /usr/local/gogs
cd /usr/local/gogs
wget https://dl.gogs.io/0.13.0/gogs_0.13.0_linux_amd64.tar.gz
sudo tar -zxvf gogs*.tar.gz --strip-components=1
sudo chown -R git:git /usr/local/gogs4. 防火墙配置
bash
# 开放端口
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload
# 或使用 SELinux
sudo setsebool -P httpd_can_network_connect 1Docker 安装
简单部署
bash
# 拉取镜像
docker pull gogs/gogs
# 创建数据目录
mkdir -p /var/gogs
# 运行容器
docker run -d \
--name=gogs \
-p 10022:22 \
-p 3000:3000 \
-v /var/gogs:/data \
gogs/gogsDocker Compose 部署
yaml
# docker-compose.yml
version: "3"
services:
gogs:
image: gogs/gogs
container_name: gogs
restart: always
ports:
- "3000:3000"
- "222:22"
volumes:
- ./gogs:/data
environment:
- SOCAT_LINK=false
depends_on:
- db
db:
image: mysql:5.7
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=gogs
- MYSQL_USER=gogs
- MYSQL_PASSWORD=gogs
volumes:
- ./mysql:/var/lib/mysqlbash
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f配置管理
初始配置
首次访问 http://your-server:3000 进行安装配置:
yaml
数据库设置:
数据库类型: SQLite3 (推荐) / MySQL / PostgreSQL
主机: 127.0.0.1:3306
用户: gogs
密码: your-password
数据库名: gogs
应用基本设置:
域名: your-domain.com
SSH 端口: 22
HTTP 端口: 3000
应用 URL: http://your-domain.com:3000/
可选设置:
管理员账号: admin
管理员密码: your-password
管理员邮箱: admin@example.com配置文件
配置文件位于 /usr/local/gogs/custom/conf/app.ini:
ini
[server]
APP_DATA_PATH = /usr/local/gogs/data
DOMAIN = your-domain.com
HTTP_PORT = 3000
ROOT_URL = http://your-domain.com:3000/
DISABLE_SSH = false
SSH_PORT = 22
START_SSH_SERVER = false
[database]
DB_TYPE = sqlite3
PATH = /usr/local/gogs/data/gogs.db
[repository]
ROOT = /usr/local/gogs/repository
[security]
INSTALL_LOCK = true
SECRET_KEY = your-secret-key
[service]
DISABLE_REGISTRATION = false
REQUIRE_SIGNIN_VIEW = false
[mailer]
ENABLED = true
HOST = smtp.example.com:587
FROM = gogs@example.com
USER = your-email@example.com
PASSWD = your-email-password反向代理配置
Nginx 配置
nginx
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 50M;
}
}Apache 配置
apache
<VirtualHost *:80>
ServerName your-domain.com
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>HTTPS 配置
bash
# 使用 Let's Encrypt
sudo apt install certbot python3-certbot-nginx
# 获取证书
sudo certbot --nginx -d your-domain.com
# 自动续期
sudo crontab -e
# 添加以下行
0 0 * * * /usr/bin/certbot renew --quiet使用指南
创建仓库
bash
# 通过网页创建
# 1. 登录 Gogs
# 2. 点击 "+" 按钮
# 3. 选择 "新建仓库"
# 4. 填写仓库信息:
# - 仓库名称
# - 描述
# - 可见性
# - 初始化选项
# 通过 Git 命令
git init my-project
cd my-project
git remote add origin git@your-domain.com:username/my-project.git
git add .
git commit -m "Initial commit"
git push -u origin master用户管理
bash
# 通过网页创建用户
# 管理员面板 -> 用户管理 -> 添加新用户
# 通过 API 创建用户
curl -X POST \
-H "Authorization: token YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"username":"newuser","password":"password","email":"user@example.com"}' \
http://your-domain.com/api/v1/admin/users组织管理
bash
# 创建组织
# 点击 "+" -> "新建组织"
# 组织设置
# - 成员管理
# - 团队管理
# - 仓库权限Webhook 配置
yaml
# 仓库设置 -> Webhooks -> 添加 Webhook
Webhook 类型:
- Slack
- Discord
- Dingtalk
触发事件:
☑ Push
☑ Create
☑ Delete
☑ Issues
☑ Pull Request备份与恢复
备份
bash
#!/bin/bash
# backup.sh
BACKUP_DIR="/backup/gogs"
DATE=$(date +%Y%m%d)
BACKUP_FILE="gogs-backup-${DATE}.tar.gz"
# 创建备份目录
mkdir -p ${BACKUP_DIR}
# 备份数据
tar -czf ${BACKUP_DIR}/${BACKUP_FILE} \
/usr/local/gogs/custom \
/usr/local/gogs/data \
/usr/local/gogs/log
# 备份数据库(如果使用 MySQL)
mysqldump -u gogs -p'password' gogs > ${BACKUP_DIR}/gogs-db-${DATE}.sql
# 删除旧备份
find ${BACKUP_DIR} -mtime +30 -delete
echo "Backup completed: ${BACKUP_FILE}"恢复
bash
# 停止服务
sudo systemctl stop gogs
# 恢复数据
tar -xzf gogs-backup.tar.gz -C /
# 恢复数据库
mysql -u gogs -p'password' gogs < gogs-db-backup.sql
# 启动服务
sudo systemctl start gogs性能优化
数据库优化
sql
-- MySQL 优化
SET GLOBAL innodb_buffer_pool_size = 536870912;
SET GLOBAL max_connections = 100;缓存配置
ini
[cache]
ENABLED = true
ADAPTER = memory
INTERVAL = 60
HOST =日志配置
ini
[log]
ROOT_PATH = /usr/local/gogs/log
MODE = file
LEVEL = Info
[log.file]
FILE_NAME = gogs.log
MAX_SIZE_SHIFT = 26
DAILY_ROTATE = true
MAX_DAYS = 7升级指南
升级步骤
bash
# 1. 备份数据
./backup.sh
# 2. 停止服务
sudo systemctl stop gogs
# 3. 下载新版本
cd /usr/local/gogs
wget https://dl.gogs.io/VERSION/gogs_VERSION_linux_amd64.tar.gz
# 4. 备份旧版本
cp gogs gogs.bak
# 5. 解压新版本
tar -zxvf gogs*.tar.gz --strip-components=1
# 6. 恢复配置
cp -r custom/conf/app.ini custom/conf/app.ini.bak
# 7. 启动服务
sudo systemctl start gogs
# 8. 验证升级
# 访问 http://your-server:3000常见问题
忘记管理员密码
bash
# 方法1: 重置密码
# 登录数据库
sqlite3 /usr/local/gogs/data/gogs.db
-- 更新密码
UPDATE user SET passwd='new-password-hash' WHERE name='admin';
-- 或删除用户重新创建
DELETE FROM user WHERE name='admin';SSH 连接问题
bash
# 检查 SSH 配置
cat /etc/ssh/sshd_config | grep -i "AllowUsers"
# 添加 git 用户
echo "AllowUsers git" >> /etc/ssh/sshd_config
sudo systemctl restart sshd
# 检查 SSH 密钥
ls -la /home/git/.ssh端口占用问题
bash
# 检查端口占用
sudo netstat -tlnp | grep :3000
# 修改端口
vim /usr/local/gogs/custom/conf/app.ini
# 修改 HTTP_PORT
# 重启服务
sudo systemctl restart gogs性能问题
bash
# 检查系统资源
top
free -h
df -h
# 优化建议:
# 1. 使用 MySQL 替代 SQLite
# 2. 增加服务器内存
# 3. 使用缓存
# 4. 定期清理日志与 Gitea 的对比
| 特性 | Gogs | Gitea |
|---|---|---|
| 开发活跃度 | 较低 | 活跃 |
| 功能丰富度 | 基础 | 丰富 |
| CI/CD | 无 | 内置 Actions |
| 包管理 | 无 | 支持 |
| 性能 | 极致轻量 | 轻量 |
| 社区支持 | 较少 | 活跃 |
总结
Gogs 是一个极致轻量的 Git 托管平台:
优势:
- 极致轻量: 资源占用极少
- 快速部署: 几分钟即可完成安装
- 简单易用: 界面简洁,易于上手
- 开源免费: MIT 许可证
局限性:
- 功能较少: 相比 Gitea/GitLab 功能较少
- 维护较少: 开发活跃度较低
- 扩展性: 缺少 CI/CD 等高级功能
适用场景:
- 个人开发者
- 小型团队
- 资源受限的环境
- 简单的代码托管需求
对于追求极致轻量和简单部署的场景,Gogs 是一个不错的选择。如果需要更多功能和更好的社区支持,建议考虑 Gitea。
