部署自托管 Git 站点
MeteorCat之前公司内部都是采用 Gitea 做自己平台的内网脱管, 但是自从 Gitea 被其他公司收购后为了避免后续的商业纷争,
原版本 Gitea 额外分出 Forgejo 这个开源分支.
官方网站: forgejo
这里还是需要说明下个人的 Git 自托管服务系统配置:
- 系统: 主流 Linux 发行版(Ubuntu 22.04/Debian 12/CentOS Stream 9 以上版本等)
- 硬件: 最低
1GB 内存, 1 CPU 核心, 10GB 磁盘(生产环境建议 2GB+ 内存,当然内存越大越好)
- 网络: 服务器需开放 22(SSH, 可以自定义端口设定), 80(HTTP)|443(HTTPS),3000(Forgejo 默认端口)端口
- 依赖:
Git(必须), 数据库(可选,SQLite/MySQL/MariaDB/PostgreSQL), Docker(采用容器部署才需要)
这里采用 debian/ubuntu 系统搭建, redhat 系的搭建方式可能有所不同
首先是必须要的组件, 我这里采用的 MariaDB 数据库配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| # 安装 Git 是必须, 我这边后续默认内网采用 http, 然后 nginx 转发到内网处理 # 暴露在外网的时候建议采用 nginx 代理一下, 方便识别 nginx 日志之后直接封禁一些非法IP # git-lfs 是做大文件托管时候要用到的组件 sudo apt install git git-lfs wget
# 首先创建系统托管用户 # 这个托管用户需要支持 shell 操作并且关闭密码处理 sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' \ --group --disabled-password --home /home/git git
# 需要注意, 建议采用外部扩展硬盘来管理空间, 避免提交文件过大把系统空间拥爆 # 这里我是托管到 /repository 目录下, 所以都是基于这个扩展外部硬盘目录来处理 # 首先目录权限需要赋予给他处理 sudo chown git:git /repository && sudo chmod 750 /repository
# 之后的配置文件的目录管理 sudo mkdir /etc/forgejo sudo chown root:git /etc/forgejo && sudo chmod 770 /etc/forgejo
# 需要注意, 如果配置 MariaDB/PostgreSQL 之类数据库, 需要去官方处理SQL配置 # SQL: https://forgejo.org/docs/latest/admin/installation/database-preparation/ # 其实主要是创建好默认的数据库和数据库用户, 注意编码需要用 utf8mb4_bin 格式 # 我这里采用的数据库名称和数据库账号都是 forgejo, 注意只允许这个用户访问自己的 forgejo 仓库
# 之后就是下载远程二进制包, Forgejo 内部有 releases(标准版) 和 LTS(长期支持) # Releases: https://forgejo.org/releases/ # 两个版本其实都见仁见智, 标准版对于组件支持比较快, 而长期支持版则是稳定性更高 # 我这里采用的是 released 版本, 先下载到 /tmp/forgejo-linux # 如果你是采用 arm64 架构可能就需要对切换到对应平台 wget -O /tmp/forgejo-linux https://codeberg.org/forgejo/forgejo/releases/download/v13.0.3/forgejo-13.0.3-linux-amd64
# 移动二进制包到系统执行目录并授权 sudo cp /tmp/forgejo-linux /usr/local/bin/forgejo sudo chmod 755 /usr/local/bin/forgejo
# 获取 systemd 的系统单元脚本 # 官方系统单元脚本一般够用的, 除非需要自己定义一些相关配置 sudo wget -O /etc/systemd/system/forgejo.service https://codeberg.org/forgejo/forgejo/raw/branch/forgejo/contrib/systemd/forgejo.service # 不过很不巧的是我们用的是扩展的硬盘, 而官方配置写死的采用 /var/lib/forgejo # 所以我们需要去编辑处理下 /etc/systemd/system/forgejo.service 系统单元文件 sudo -u git touch /etc/forgejo/app.env # 配置环境配置文件 sudo chmod 770 /etc/forgejo/app.env # 配置环境配置权限 sudo vim /etc/systemd/system/forgejo.service # 准备修改 systemd 配置
|
这里我重新更新部分配置, 最终的 /etc/systemd/system/forgejo.service 文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| [Unit] Description=Forgejo (Beyond coding. We forge.) Documentation=https://forgejo.org/docs/latest After=syslog.target After=network.target
After=local-fs.target Wants=mariadb.service After=mariadb.service
[Service] RestartSec=2s Type=simple User=git Group=git
WorkingDirectory=/repository/
ExecStart=/usr/local/bin/forgejo web --config /etc/forgejo/app.ini Restart=always Environment=PATH=/path/to/git/bin:/bin:/sbin:/usr/bin:/usr/sbin
EnvironmentFile=/etc/forgejo/app.env
[Install] WantedBy=multi-user.target
|
/etc/forgejo/app.env 内部的环境变量需要添加以下内容:
1 2 3 4 5 6 7 8
| USER=git
HOME=/home/git
FORGEJO_WORK_DIR=/repository
|
确认配置完之后就可以准备刷新系统应用启动:
1 2 3 4 5
| sudo systemctl daemon-reload # 刷新应用 sudo systemctl start forgejo.service # 启动应用 sudo systemctl status forgejo.service # 查看状态 sudo systemctl enable forgejo.service # 开机启动 sudo systemctl stop forgejo.service # 关闭应用
|
一般没有大问题都会显示 Starting new Web server: tcp:0.0.0.0:3000 on PID: 203145 类似成功的说明,
首次安装需要访问 http://localhost:3000/ 完成安装配置, 我们需要的就是配置之前说的数据库相关配置和访问配置.
注意: 完成之后会默认创建配置文件 /etc/forgejo/app.ini.
如果个人使用不要开启自助注册相关配置
这里我们就可以开始对配置配置就行修改,
具体配置查看: config-cheat-sheet
这里我们可以先关闭下之后自定义我们所需要的 forgejo 应用配置:
1 2
| sudo systemctl stop forgejo.service # 关闭应用 sudo vim /etc/forgejo/app.ini # 修改配置
|
我这里主要对有些配置说明下配置即可, 这里需要抛开之前的 /etc/forgejo/app.env 定义的那些配置(不要去修改这些核心):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
APP_NAME = Meteor Git Project
APP_SLOGAN =
RUN_USER = git
WORK_PATH = /repository
RUN_MODE = prod
[database] DB_TYPE = mysql HOST = 127.0.0.1:3306 NAME = forgejo USER = forgejo PASSWD = forgejo SCHEMA = SSL_MODE = disable PATH = /repository/data/forgejo.db LOG_SQL = false
[repository] ROOT = /repository/data/forgejo-repositories
[repository.upload]
FILE_MAX_SIZE = 4095 MAX_FILES = 20
[server]
SSH_DOMAIN = 127.0.0.1 SSH_PORT = 22
DOMAIN = 127.0.0.1 HTTP_PORT = 3000
ROOT_URL = http://127.0.0.1:3000/
APP_DATA_PATH = /repository/data
DISABLE_SSH = true
LFS_START_SERVER = true
LFS_JWT_SECRET = L567FvDtY1zegLw7B6EG6U9AnSaqLw83lO8m_ynIMGs
OFFLINE_MODE = true
[lfs] PATH = /repository/data/lfs
[openid] ENABLE_OPENID_SIGNIN = false ENABLE_OPENID_SIGNUP = false
[cron.update_checker] ENABLED = true
[session] PROVIDER = file
COOKIE_NAME = meteorcat-git-cookie
[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = true
|
这里配置好之后返回页面会提示重新安装, 可以直接安装不会去覆盖掉原来的配置项,
具体配置在 http://{服务地址}/admin/config 页面查看.
后续就是具体的官方配置说明调整和 Nginx 反向代理之类的功能说明, 现在基本上已经足够满足个人私有配置.