Ubuntu搭建Gitea服务器
我这里服务器都是
root权限,所以没有加入sudo,当我们在自己虚拟机的的时候,不一定是root权限,所以每条指令前面需要加入sudo参考文章:https://blog.csdn.net/linshengxuan113/article/details/136722891
如下 Gitea版本 1.22.1
给Gitea添加一个专用的用户管理
方法一:
1. 创建一个用户,管理Gitea项目
1 | adduser git |
2.给Gitea用户添加文件的写权限
- 使用vim编辑
/etc/sudoers(如果第3步设置了别的用户名,那么这里也需要设置别的用户明)
1 | vim /etc/sudoers |
- 找到
User privilege specification部分,添加如下内容:
1 | git ALL=(ALL:ALL) ALL |
如下图所示:

方法二:
- 创建一个用户,管理Gitea项目
1 | useradd git |
useradd 添加一般用户
usermod -a -G sudo 将git用户添加sudo组和权限 usermod是修改账号的指令,-a代表添加或者附加,-G代表一个群组
- 给该用户添加密码
1 | ---- |
查看已存在的用户
- 这个命令会列出系统上所有用户的信息,包括用户名和其他相关信息。
1 | getent passwd |
1 | cat /etc/passwd |
该命令会显示每个用户的详细信息,包括用户名、密码、用户ID、组ID、用户家目录、登录Shell等
- 这个命令对于查找特定用户所属的用户组或特定用户组的成员非常有用,没有上面命令那么多信息
1 | getent group |
安装Gitea
Gitea我放在/opt/gitea目录中;mkdir -p: 确保目录名称存在,不存在的就建一个。
1 | mkdir -p /opt/gitea |
1 | cd /opt |
- 修改 gitea 权限 (可读可写可执行)
1 | chmod 777 ./gitea |
- 切换 git 用户,进入gitea目录
1 | su git |
1 | cd gitea |
- 下载
Gitea文件,这里使用了sudo需要输入密码
1 | sudo wget -O gitea https://dl.gitea.com/gitea/1.22.1/gitea-1.22.1-linux-amd64 |
- 修改
Gitea权限,添加可执行权限
1 | sudo chmod +x gitea |
Mysql安装以及检查
安装依赖
1 | wget http://repo.mysql.com/mysql-apt-config_0.8.32-1_all.deb |
会进入如下界面,可以通过上下 ↑↓ 控制光标,通过 TAB 选中,回车确认。
图中上下移动到 MySQL Server & Cluster (Currently selected: mysql-8.4-lts) 通过 TAB 选中,光标会自动到 OK 上,点击回车,到下一步按照图片操作
上下移动到 MySQL Server & Cluster (Currently selected: mysql-8.4-lts) 通过 TAB 选中,光标会自动到 OK 上,点击回车
上下移动到 mysql-8.4-lts 通过 TAB 选中,光标会自动到 OK 上,点击回车
上下移动到 OK 通过 TAB 选中,光标会自动到 OK 上,点击回车
执行更新程序
1 | sudo apt-get upgrade |
当执行更新指令后,可能会出现如下情况
1 | E: 无法下载 http://repo.mysql.com/apt/ubuntu/dists/noble/InRelease 明文签署文件不可用,结果为‘NOSPLIT’(您的网络需要认证吗?) |
mysql 授权码 ; 获取并添加缺失的GPG密钥,可以试试如下密钥
1 | sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B7B3B788A8D3785C |
1 | sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32 |
安装 mysql
1 | sudo apt install mysql-server -y |
- 安装会出现如图,需要你输入一个
root密码,这个密码后面要使用,要记下来,通过上下移动光标选择确认,然后回车。这里需要输入两次密码。
输入密码前
输入密码后
- 会提示让你重新输入密码,输入密码后,按下上下按键到确认,按下回车
- 如下界面按
TAB按键,再按回车按键
4. 如下图所示,选择身份验证,加密方式。
- 接下来等待安装完成即可,
Mysql就安装完成了。
检查 Mysql 是否安装成功
1 | sudo systemctl status mysql |
安装成功照片
使用 Mysql 数据库创建用户
使用 root 用户连接数据库
1 | sudo mysql -u root -p |
效果如下图所示:
创建用户 用户和密码可以更改
1 | CREATE USER 'gitealib' IDENTIFIED BY 'gitealib123@'; |
效果如下图所示:
创建数据库 授权 刷新权限
1 | CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'; |
效果如下图所示:
尝试 gitealib 用户登录
1 | mysql -u gitealib -p giteadb |
效果如下图所示:
通过SQL查询来确认数据库文件的位置
登录到MySQL,然后执行以下命令:
1 | SHOW VARIABLES LIKE 'datadir'; |
备份MySQL指定数据库
1 | mysqldump -u root -p --databases gitea > gitea_backup.sql |
输入root密码后生成备份文件 gitea_backup.sql
迁移MySQL中Gitea数据库到指定位置(待测试)
停止MySQL服务
终止MySQL进程
1 | sudo systemctl stop mysql |
通过 systemctl status mysql 确认服务已停止
定位原数据库存储路径
查询当前数据目录:
1 | sudo mysql -u root -p |
输入root密码进入mysql,输入以下命令查看数据目录位置
1 | SHOW VARIABLES LIKE 'datadir'; |
默认路径为 /var/lib/mysql,目标数据库文件位于 /var/lib/mysql/gitea(查看一下该文件权限)
复制数据库文件到新位置
将目标数据库文件夹迁移到新路径(如 /new_path/mysql):
1 | sudo rsync -av /var/lib/mysql/gitea /new_path/mysql/ |
确保所有文件(包括隐藏文件)被完整复制
删除原数据库文件(可选)
1 | sudo rm -rf /var/lib/mysql/gitea |
配置符号链接(关键步骤)
创建软链接指向新位置
1 | sudo ln -s /new_path/mysql/gitea /var/lib/mysql/gitea |
此操作使MySQL仍通过原路径访问实际存储在新位置的数据
修正权限
1 | sudo chown -R mysql:mysql /new_path/mysql/gitea |
确保所有权和权限与MySQL服务匹配
重启MySQL并验证
启动服务
1 | sudo systemctl start mysql |
验证数据完整性
- 检查数据库列表:
1 | sudo mysql -e "SHOW DATABASES;" |
确认 gitea 数据库存在。
- 查询数据记录:
1 | sudo mysql -e "USE gitea; SHOW TABLES;" |
回滚方案(可选)
若迁移后出现异常,可通过以下步骤恢复:
- 停止MySQL服务。
- 删除符号链接:
1 | sudo rm /var/lib/mysql/gitea |
- 将备份文件移回原路径:
1 | sudo rsync -av /new_path/mysql/gitea /var/lib/mysql/ |
- 重启MySQL服务
修改文件夹或文件用户
方式一:登入该用户,再修改权限
1 | su yourUsers |
方式二:直接修改
1 | sudo chown -R yourUsers:yourUsers FileFolderOrFile |
yourUsers 你要指定的用户
FileFolderOrFile 需要修改权限的文件夹以及文件
Gitea 默认配置
一般设置初始配置
我把 Gitea 文件放在 opt/gitea 目录下
仓库根目录
所有远程 Git 仓库将保存到此目录
1 | /opt/gitea/data/gitea-repositories |
LFS根目录
存储为Git LFS的文件将被存储在此目录。留空禁用LFS
1 | /opt/gitea/data/lfs |
日志路径
日志文件将写入此目录。
1 | /opt/gitea/log |
禁止git用户通过SSH登录服务器
方法一:
切换到root用户
1 | su root |
输入用户密码进入root权限;
查看git的passwd配置
1 | getent passwd |
记录下来,接下来修改配置文件:
原始passwd中git的值
1 | git:x:1002:1002:,,,:/home/git:/bin/bash |
配置git用户禁止登录
- 第一种方法
1 | sudo usermod -s /bin/nologin git |
验证更改:
1 | getent passwd git |
- 第二种方法
1 | sudo usermod -s /bin/false git |
通过git运行用户gitea程序
到gitea程序存放的目录当中
1 | sudo -u git ./gitea web |
方法一:恢复git用户登录
- 打开
passwd文件
1 | nano nano /etc/passwd |
- 恢复
git用户
1 | git:x:1002:1002:,,,:/home/git:/bin/bash |
方法二:恢复git用户登录
1 | sudo usermod -s /bin/bash git |
方法二:修改PAM配置(适用于SSH登录)
如果你想要禁止通过SSH登录但允许运行程序,可以修改SSH的PAM配置文件。
- 编辑
/etc/pam.d/sshd文件,添加或修改以下行:
1 | account required pam_access.so access=deny list=git |
这行配置将阻止用户git通过SSH登录。
- 确保你的SSH服务配置文件中也禁用了该用户的访问,例如在
/etc/ssh/sshd_config中添加:
1 | DenyUsers git |
通过DenyUsers限制交互式登录权限
- 重启SSH服务使更改生效:
1 | sudo systemctl restart ssh |
Gitea app.ini 配置文件
参考
1 | --- |
使用 Nginx 作为反向代理服务
具体章节可以点击此处查看
使用 Nginx 作为 Gitea 的反向代理服务,可以参照以下 Gitea.conf 配置中 server 的 HTTP或 HTTPS 部分。
确保 client_max_body_size 足够大,否则在上传大文件时会出现 “client_max_body_size” 错误。
1 | --- |
Ubuntu Gitea后台运行
要在Ubuntu上使Gitea以后台服务的方式运行,你可以使用systemd来创建一个服务单元。以下是简化的步骤和示例代码:
创建一个systemd服务文件:
创建一个新的服务单元文件 /etc/systemd/system/gitea.service。
官网文件:参考
1 | # Gitea version: 1.22.1 |
User=这里设置创建用户的用户 git
Environment=USER=这里设置创建用户的用户 git
Restart=always: 只要不是通过systemctl stop来停止服务,任何情况下都必须要重启服务,默认值为no
RestartSec=20: 重启间隔,比如某次异常后,等待20(s)再进行启动,默认值0.1(s)
StartLimitInterval: 无限次重启,默认是10秒内如果重启超过5次则不再重启,设置为0表示不限次数重启
1
StartLimitInterval = 0
<Gitea的安装路径>:这里不要省略路径,比如我的路径是
/opt/gitea;ExecStart=/opt/gitea/gitea
重新加载systemd配置:
1 | sudo systemctl daemon-reload |
设置Gitea服务开机自启:
1 | sudo systemctl enable gitea |
启动Gitea服务:
1 | sudo systemctl start gitea |
以上步骤会将Gitea配置为一个后台服务,并在系统启动时自动运行。
systemctl停止运行某个任务
systemctl 是一个控制 systemd 系统和服务管理器的命令行工具。要停止运行服务,可以使用 systemctl stop 命令。
停止一个名为 service_name 的服务的命令:
1 | sudo systemctl stop service_name |
如果你遇到问题,检查gitea服务的状态来获取更多信息:
1 | sudo systemctl status gitea |
如果你想禁用这个服务,使得它不会在下次启动时自动启动,可以使用 disable 命令:
1 | sudo systemctl disable service_name |
如果你想同时停止并禁用服务,可以使用 stop 和 disable 命令的组合:
1 | sudo systemctl stop service_name |
请确保将 service_name 替换为你想要停止的服务的实际名称。
如停止上面Gitea,将service_name替换成Gitea;
我遇到的错误情况
Gitea 无法启动提示 (code=exited, status=203/exec) 错误
是因为 gitea.serive 配置不对
Gitea 数据库位置以及自动备份
Gitea 数据库位置
1 | /var/lib/mysql |
Gitea 数据库移动到指定位置存储
1 | mv /var/lib/mysql/giteadb |
Gitea 数据库备份以及恢复
1 | --- |
Gitea 仓库迁移
Gitea 数据库迁移
- 打包数据库,还要知道原始数据库位置
备份数据库:使用mysqldump工具备份数据库到一个SQL文件。
1 | mysqldump -u 用户名 -p 数据库名 > backup.sql |
Gitea 迁移
Gitea 静态资源
1.下载对应版本源码包
2.安装 go 编译器,
1 | --- |
3.下载对应 gitea 源码包,对应版本源码包下载点击此处
1 | --- |
3.在源码包中复制 public/assets 中的所有文件存储到你想要存储的位置
1 | cp -rfp public/assets directory |
directory 目标位置可以是本机,也可以是其他服务器或者存储桶,只是对应 Nginx 配置不同
4. 使用 Nginx 直接提供静态资源,nginx 配置,参考对应 Gitea 版本,
通过将资源分为静态和动态两种类型来调节性能。
CSS 文件、JavaScript 文件、图片和字体是静态内容。首页、仓库视图和工单列表是动态内容。
Nginx 可以直接提供静态资源,并且只代理动态资源请求给 Gitea。 Nginx 为提供静态内容进行了优化,而代理大响应可能与这一优化行为相反。 (见https://serverfault.com/q/587386)
将 Gitea 源代码仓库的一个快照下载到 /path/to/gitea。 在此之后,在本地仓库目录运行 make frontend 来生成静态资源。在这个情况下,我们只对 public/ 目录感兴趣,您可以删除剩下的其他目录。 (为了生成静态资源,您需要安装一个带 npm 的 Node 和 make)
取决于您的用户量的大小,您可以将流量分离到两个不同的服务器,或者为静态资源配置一个 cdn。
1 | --- |
1.单服务器节点,单域名
将 [server] STATIC_URL_PREFIX = /_/static/ 写入您的 Gitea 配置文件,并配置 nginx:
1 | server { |
/path/to 替换成 gitea 存放的目录,例如 gitea 存放在 /mnt 路径下,那么 /path/to 替换成 /mnt;
2.双服务器节点,双域名
将 [server] STATIC_URL_PREFIX = http://cdn.example.com/gitea 写入您的 Gitea 配置文件,并配置 nginx:
使用非服务器提供静态资源
如果可以,最好使用服务器提供静态资源,
1 | --- |
5.重新加载和重启 Nginx
1 | sudo nginx -s reload |
添加自定义 Gitea页面[自选]
参考此处
界面链接到gitea中,先创建到如下目录
1 | custom/templates/custom/ |
该目录下放置的模板如下,在这些文件中添加链接到自定义界面
1 | header.tmpl |
header.tmpl,在<head>标记结束之前的模板,例如添加自定义CSS文件body_outer_pre.tmpl,在<body>标记开始处的模板body_inner_pre.tmpl,在顶部导航栏之前,但在主 container 内部的模板,例如添加一个<div class="full height">body_inner_post.tmpl,在主 container 结束处的模板body_outer_post.tmpl,在底部<footer>元素之前.footer.tmpl,在<body>标签结束处的模板,可以在这里填写一些附加的 Javascript 脚本。
添加自定义界面放置的目录:custom/public/assets/
修改 Gitea已存在的页面[自选]
修改后存放在Gitea的/custom/templates目录下,示例:home.tmpl
1 | {{template "base/head" .}} |
添加链接和页签
如果您只是想添加额外的链接到顶部导航栏或额外的选项卡到存储库视图,您可以将它们放在您 custom/templates/custom/ 目录下的 extra_links.tmpl 和 extra_tabs.tmpl 文件中。
举例说明:假设您需要在网站放置一个静态的“关于”页面,您只需将该页面放在您的 “custom/public/“目录下(比如 custom/public/impressum.html)并且将它与 custom/templates/custom/extra_links.tmpl 链接起来即可。
这个链接应当使用一个名为“item”的 class 来匹配当前样式,您可以使用 {{AppSubUrl}} 来获取 base URL: <a class="item" href="{{AppSubUrl}}/assets/impressum.html">Impressum</a>
同理,您可以将页签添加到 extra_tabs.tmpl 中,使用同样的方式来添加页签。它的具体样式需要与 templates/repo/header.tmpl 中已有的其他选项卡的样式匹配 (source in GitHub)