5分钟搞定!在Ubuntu 20.04上快速部署Gogs私有Git仓库(含MySQL配置)
在Ubuntu 20.04上快速部署Gogs私有Git仓库从零到可用的极简实践对于开发者团队而言一个稳定、可控的代码托管环境是高效协作的基石。虽然GitHub、Gitee等公有平台提供了便利但出于代码安全、网络隔离或定制化需求许多团队开始寻求私有化部署方案。在众多自建Git服务中Gogs以其Go语言带来的轻量、快速和低资源消耗特性脱颖而出尤其适合中小型团队或个人开发者。如果你手头恰好有一台运行Ubuntu 20.04 LTS的服务器无论是云主机还是本地虚拟机那么搭建一套专属的Git仓库服务可能比你想象的要简单得多。这篇文章将带你绕过冗长的文档和复杂的配置聚焦于最核心的部署路径特别是如何与MySQL数据库无缝集成让你在极短的时间内获得一个功能完备的私有代码托管平台。1. 部署前的环境审视与准备在按下第一个命令之前花几分钟理清环境状况能避免后续许多“坑”。Ubuntu 20.04 LTS是一个长期支持版本其软件源中的软件包版本稳定且兼容性好这为我们快速部署Gogs提供了良好的基础。首先确保你的系统是最新的。打开终端执行以下更新命令是一个好习惯sudo apt update sudo apt upgrade -y这个操作会更新软件包列表并升级所有可升级的软件。完成后建议重启一次系统以确保所有更新生效sudo reboot。接下来我们需要确认或安装几个核心依赖。Gogs本身是一个二进制程序但它运行需要一些基础环境Git这是Gogs服务的核心依赖用于处理所有版本控制操作。Ubuntu 20.04默认可能未安装。数据库Gogs支持SQLite3、MySQL和PostgreSQL。对于生产环境或团队使用MySQL因其成熟度和性能通常是更稳妥的选择。我们将使用MySQL 8.0Ubuntu 20.04默认仓库提供。SSH服务可选但推荐如果你希望通过SSH协议克隆和推送代码这是Git的常用方式那么服务器需要运行SSH服务。Ubuntu通常默认安装了openssh-server。你可以通过一个快速命令检查这些组件是否存在git --version systemctl status mysql 2/dev/null || echo MySQL not installed systemctl status ssh 2/dev/null || echo SSH service not found如果输出显示“command not found”或服务未运行不用担心我们会在下一步逐一解决。提示建议使用一个具有sudo权限的非root用户来执行后续安装和配置操作这比直接使用root账户更安全。2. 核心依赖的一键式安装与配置这一节我们将用最简洁的命令流完成Git、MySQL和必要系统用户的安装与初始化。2.1 安装Git与创建系统用户安装Git非常简单sudo apt install git -y安装完成后验证版本git --version确保版本高于1.8.3Ubuntu 20.04提供的版本完全满足。虽然Gogs可以以任何用户身份运行但创建一个专用的系统用户是更规范的做法sudo adduser --system --group --disabled-password --shell /bin/bash --home /home/git --gecos Gogs Git Service git这条命令创建了一个名为git的系统用户家目录在/home/git并且不能用于密码登录更安全。后续我们可以将Gogs程序文件放置于此。2.2 MySQL数据库的自动化部署与初始化我们将使用MySQL 8.0作为Gogs的后端数据库。以下脚本涵盖了安装、安全初始化及为Gogs创建专用数据库和用户的全过程。你可以将以下内容保存为一个脚本文件例如setup_mysql_for_gogs.sh然后执行也可以分步运行。#!/bin/bash # 安装MySQL服务器 sudo apt install mysql-server -y # 启动MySQL服务并设置开机自启 sudo systemctl start mysql sudo systemctl enable mysql # 运行MySQL安全安装脚本设置root密码并移除不安全默认项 # 注意以下命令会进入交互式配置建议设置一个强密码 sudo mysql_secure_installation # 登录MySQL为Gogs创建数据库和用户 # 请将以下 your_strong_password 替换为你想要为gogs用户设置的密码 MYSQL_ROOT_PWD你设置的root密码 # 如果上一步设置了root密码这里需要填写 GOGS_DB_PWDyour_strong_password sudo mysql -u root -p${MYSQL_ROOT_PWD} EOF CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER gogslocalhost IDENTIFIED BY ${GOGS_DB_PWD}; GRANT ALL PRIVILEGES ON gogs.* TO gogslocalhost; FLUSH PRIVILEGES; EOF echo MySQL数据库gogs及用户创建完成。注意务必记住你为gogs数据库用户设置的密码your_strong_password在后续Gogs安装向导中需要填写。执行完上述步骤后可以使用sudo mysql -u gogs -p命令尝试用新创建的gogs用户登录以验证数据库权限配置正确。2.3 防火墙与SSH配置确保可访问性Ubuntu 20.04默认使用ufw作为防火墙管理工具。Gogs默认使用3000端口提供Web服务。我们需要开放此端口sudo ufw allow 3000/tcp sudo ufw allow ssh # 确保SSH端口开放否则可能失去连接 sudo ufw enable sudo ufw status verbose # 查看规则是否生效如果你的服务器在云平台如AWS、阿里云、腾讯云等还需要在云平台的安全组/防火墙规则中手动添加一条允许3000端口的入站规则这一点至关重要否则外部无法访问。SSH服务通常已安装。如果没有安装它sudo apt install openssh-server -y。确保其运行sudo systemctl status ssh。3. 获取、安装与首次启动GogsGogs提供了编译好的二进制包这使得安装过程异常简单无需处理复杂的Go语言编译环境。3.1 下载与解压Gogs首先切换到我们之前创建的git用户的家目录并下载最新稳定版的Gogs二进制包。你可以访问 Gogs官方网站的下载页面 查看最新版本号。以下以某个版本为例请替换为最新版本号# 切换到git用户使用sudo以git身份执行命令 sudo -u git -i # 此时shell提示符应变为 githostname:~$ # 下载Gogs二进制包以0.13.0版本为例请替换为实际最新版本 cd /home/git wget https://dl.gogs.io/0.13.0/gogs_0.13.0_linux_amd64.tar.gz # 解压到当前目录 tar -zxvf gogs_0.13.0_linux_amd64.tar.gz解压后你会得到一个名为gogs的目录其结构如下gogs/ ├── gogs # 主程序二进制文件 ├── LICENSE ├── README.md ├── README_ZH.md ├── scripts/ # 包含启动脚本、数据库迁移脚本等 ├── public/ # 静态资源文件CSS, JS, 图片 └── templates/ # 页面模板至此Gogs的“安装”实际上已经完成了——它就是一个独立的可执行文件加上一系列资源文件。3.2 首次启动与Web安装向导在git用户的家目录下直接运行Gogs即可启动服务cd /home/git/gogs ./gogs web这个命令会在前台启动Gogs并将日志输出到终端。如果看到类似Listen: http://0.0.0.0:3000的日志说明服务已成功启动。现在打开你的浏览器访问http://你的服务器IP地址:3000。你应该会看到Gogs的首次安装配置页面。安装向导关键配置项说明配置区块关键项建议值/说明数据库设置数据库类型MySQL主机127.0.0.1:3306(如果MySQL在本机)用户gogs密码之前为gogs用户设置的密码数据库名称gogsSSL模式disable(内网环境)应用基本设置应用名称你的Git服务名称如“公司代码库”仓库根目录/home/git/gogs-repositories(默认即可)运行系统用户git域名填写你的服务器IP或域名SSH端口22(如果使用系统SSH) 或2022(如果启用Gogs内置SSH)HTTP端口3000应用URLhttp://你的服务器IP:3000/管理员账户设置管理员用户名/密码等务必在此创建第一个管理员账号否则后续需要手动在数据库中添加。填写完毕后点击“立即安装”。如果所有配置正确几秒钟后就会跳转到登录页面。用你刚刚设置的管理员账号登录一个属于你自己的私有Git仓库就正式可用了首次启动成功后你可以按CtrlC停止前台运行的服务。接下来我们需要将其配置为系统服务实现后台运行和开机自启。4. 配置系统服务与生产环境优化让Gogs像nginx或mysql一样作为系统服务运行是投入生产使用的标准做法。这能保证服务在服务器重启后自动启动并且方便地用systemctl命令进行管理。4.1 创建Systemd服务单元文件Gogs在scripts/systemd/目录下已经提供了一个模板服务文件gogs.service。我们需要将其复制到系统目录并稍作修改。首先退出git用户的shell按CtrlD或输入exit回到有sudo权限的用户。# 将模板服务文件复制到systemd系统目录 sudo cp /home/git/gogs/scripts/systemd/gogs.service /etc/systemd/system/ # 编辑该服务文件使其适配我们的环境 sudo nano /etc/systemd/system/gogs.service关键修改项如下基于模板[Unit] DescriptionGogs (Go Git Service) Aftersyslog.target Afternetwork.target Aftermysql.service # 确保在MySQL之后启动 [Service] Typesimple Usergit # 运行用户 Groupgit # 运行用户组 WorkingDirectory/home/git/gogs # Gogs程序所在目录 ExecStart/home/git/gogs/gogs web # 启动命令 Restartalways EnvironmentUSERgit HOME/home/git # 以下是一些安全强化选项可根据需要启用或注释掉 # ProtectSystemfull # PrivateDevicesyes # PrivateTmpyes # NoNewPrivilegestrue [Install] WantedBymulti-user.target主要修改是User、Group、WorkingDirectory和ExecStart的路径确保指向我们实际的安装位置。Aftermysql.service确保了数据库就绪后再启动Gogs。4.2 启动、管理与验证服务保存并退出编辑器后执行以下命令# 重新加载systemd配置使新服务文件生效 sudo systemctl daemon-reload # 启动Gogs服务 sudo systemctl start gogs # 设置开机自启 sudo systemctl enable gogs # 查看服务状态 sudo systemctl status gogs如果状态显示为active (running)并且日志没有报错说明服务已成功在后台运行。现在你可以随时通过sudo systemctl stop/start/restart gogs来管理服务。再次访问http://你的服务器IP:3000应该能看到正常运行的Gogs界面。4.3 进阶配置与优化建议基本的Gogs已经可以工作但为了更好的体验和安全性可以考虑以下几点修改默认端口长期使用可能不希望带端口号访问。你可以通过配置Nginx反向代理将Gogs的3000端口代理到80或443(HTTPS)端口。这不仅能隐藏端口还能方便地配置SSL证书实现HTTPS加密。Nginx配置示例片段server { listen 80; server_name git.yourdomain.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; } }数据目录与备份Gogs的所有数据仓库、附件、数据库默认在安装目录下。建议规划好备份策略特别是/home/git/gogs/data目录和MySQL中的gogs数据库。邮件通知配置在Gogs的管理后台站点管理-配置-邮件服务中配置SMTP这样用户就能收到注册、Issue等通知。性能调优对于仓库数量多、访问量大的情况可以调整/home/git/gogs/custom/conf/app.ini中的缓存、Git超时等设置。整个过程从系统更新到服务稳定运行如果网络顺畅且熟悉命令确实可以在五分钟内完成核心部署。关键在于步骤清晰避免在某个环节如数据库权限、防火墙卡住。现在你可以开始创建你的第一个私有仓库邀请团队成员享受完全自主掌控的代码协作体验了。

相关新闻

Win11 网络诊断利器:Wireshark 从零安装到实战抓包

Win11 网络诊断利器:Wireshark 从零安装到实战抓包

1. 为什么说Wireshark是Win11网络工程师的“听诊器”? 如果你在Windows 11上遇到过网页死活打不开、游戏延迟飘红、或者自己写的网络程序怎么都连不上服务器的情况,那你肯定体会过那种对着屏幕干瞪眼的无力感。Ping命令告诉你“请求超时”,浏…

2026/7/5 2:37:08 阅读更多 →
3步极速部署:MTKClient全平台配置指南

3步极速部署:MTKClient全平台配置指南

3步极速部署:MTKClient全平台配置指南 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient MTKClient是一款功能强大的联发科设备逆向工程与刷机工具,支持固件读写、设备…

2026/7/4 22:48:15 阅读更多 →
KOOK真实幻想艺术馆部署教程:gc.collect+cuda.empty_cache显存管理

KOOK真实幻想艺术馆部署教程:gc.collect+cuda.empty_cache显存管理

KOOK真实幻想艺术馆部署教程:gc.collectcuda.empty_cache显存管理 1. 项目概述:当AI遇见艺术殿堂 想象一下,你走进一个数字艺术馆,这里没有冰冷的技术界面,只有温暖的画廊氛围。KOOK真实幻想艺术馆(Starr…

2026/5/17 8:25:42 阅读更多 →

最新新闻

抖音内容高效采集工具:如何用开源方案解决批量下载与管理的技术挑战

抖音内容高效采集工具:如何用开源方案解决批量下载与管理的技术挑战

抖音内容高效采集工具:如何用开源方案解决批量下载与管理的技术挑战 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser f…

2026/7/5 6:29:52 阅读更多 →
JMeter-Bzm-Plugins进阶指南:从安装部署到性能调优实战

JMeter-Bzm-Plugins进阶指南:从安装部署到性能调优实战

1. 项目概述:为什么Bzm-Plugins是JMeter进阶的必经之路如果你已经用了一段时间的JMeter,从录制几个简单的HTTP请求,到学会使用CSV参数化、正则表达式提取器,再到搭建分布式压测环境,你可能会觉得这个工具已经玩得差不多…

2026/7/5 6:27:51 阅读更多 →
包装线跨品牌通讯:EtherCAT 转 ProfiNet 网关实现 NJ501 读取 1734-AENT 计数与温度

包装线跨品牌通讯:EtherCAT 转 ProfiNet 网关实现 NJ501 读取 1734-AENT 计数与温度

一、项目背景与挑战某食品包装企业新建一条高速枕式包装生产线,用于糕点、面包等食品的自动化包装,产线要求稳定运行、数据实时采集、包装精度与效率同步提升。该生产线采用欧姆龙NJ501型EtherCAT主站PLC作为核心控制器,负责协调包装机、输送…

2026/7/5 6:25:51 阅读更多 →
本地AI智能体组合:Hermes与Codex打造自动化“赛博牛马”

本地AI智能体组合:Hermes与Codex打造自动化“赛博牛马”

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们来看一个关于 Hermes 和 Codex 的本地 AI 智能体组合方案。这个组合的核心目标,是打造一个能够长时间、自动化处理…

2026/7/5 6:19:50 阅读更多 →
FreeCAD源码分析: Selection Model

FreeCAD源码分析: Selection Model

本文从业务分析与逻辑推理出发,旨在研究FreeCAD中Selection Model的相关实现原理。 注1:限于研究水平,分析难免不当,欢迎批评指正。 注2:文章内容会不定期更新。 一、概述 在图形交互系统中,“选择”通常是用户意图进入系统内部处理链路的第一个明确动作。对于 FreeCA…

2026/7/5 6:17:50 阅读更多 →
Beyond Compare 5永久激活终极指南:开源密钥生成器完整使用教程

Beyond Compare 5永久激活终极指南:开源密钥生成器完整使用教程

Beyond Compare 5永久激活终极指南:开源密钥生成器完整使用教程 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 还在为Beyond Compare 5的30天试用期而烦恼吗?当你正专注…

2026/7/5 6:15:50 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻