Forgejo是一个自托管的轻量级Git服务托管平台。伴随着Gitea逐渐露出商业模式的苗头,Forgejo从中分叉出来,秉持着最初的纯粹的社区精神。本文将简单介绍Forgejo的自部署流程以及注意事项,希望若是有有缘人看到能够少踩坑。
事前准备
这里仅介绍使用Docker Compose安装的流程,所以在开始之前,请确保你已经安装了Docker和Docker Compose。
前排提醒,博主使用的是Linux发行版是Ubuntu 24.04,因发行版原因命令有所不同请自行调整!
安装部署
首先创建一个git用户。
sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' \ --group --disabled-password --home /home/git git把用户git添加到docker用户组中:
sudo usermod -aG docker git查看用户id号,待会儿在docker-compose.yml文件中需要使用。
id -u git比如我这是111。
接下来创建容器目录,由于我使用了宝塔面板,方便管理我直接使用了/www/wwwroot/git.peean.net目录
在容器目录创建文件夹data,并给用户git授权。
sudo chown git:git data/在容器目录下创建docker-compose.yml文件,键入以下内容:
networks: forgejo: external: false
services: server: image: codeberg.org/forgejo/forgejo:13 container_name: forgejo environment: - USER_UID=111 - USER_GID=111 - FORGEJO__database__DB_TYPE=postgres - FORGEJO__database__HOST=db:5432 - FORGEJO__database__NAME=forgejo - FORGEJO__database__USER=forgejo - FORGEJO__database__PASSWD=forgejo restart: always networks: - forgejo volumes: - ./data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "2222:22" depends_on: - db
db: image: postgres:14 restart: always environment: - POSTGRES_USER=forgejo - POSTGRES_PASSWORD=forgejo - POSTGRES_DB=forgejo networks: - forgejo volumes: - ./postgres:/var/lib/postgresql/data- "3000:3000"映射的是Web端口,- "2222:22"映射的是SSH端口。
这边根据实际情况自行修改,比如USER_UID、USER_GID修改为用户git的实际uid和gid,数据库信息可适当修改,如POSTGRES_PASSWORD可设置更复杂的密码。
接下来便可以启动容器了。
docker-compose up -d然后你应该可以看见容器成功启动了。
⚠️但是目前并未完全安装完毕,如果现在直接使用SSH的话将会发生如下情况:
❯ ssh -T git@git.peean.netgit@git.peean.net's password:Permission denied, please try again.git@git.peean.net's password:Permission denied, please try again.git@git.peean.net's password:git@git.peean.net: Permission denied (publickey,password).这里便是踩坑点了,这是由于SSH运行在容器内部,如果需要SSH支持,则必须将SSH连接从主机传递到容器。
创建shell脚本:
sudo vim /usr/local/bin/forgejo-shell键入以下内容:
#!/bin/sh/usr/bin/docker exec -i -u git --env SSH_ORIGINAL_COMMAND="$SSH_ORIGINAL_COMMAND" forgejo sh "$@"然后赋予执行权限:
sudo chmod +x /usr/local/bin/forgejo-shell把用户git的登录shell改成 /usr/local/bin/forgejo-shell:
sudo usermod -s /usr/local/bin/forgejo-shell git更改SSH配置文件:
sudo vim /etc/ssh/sshd_config在文件最末尾添加以下内容:
Match User git AuthorizedKeysCommandUser git AuthorizedKeysCommand /usr/bin/docker exec -i -u git forgejo /usr/local/bin/forgejo keys -c /data/gitea/conf/app.ini -e git -u %u -t %t -k %k重启sshd服务
sudo systemctl restart sshd接下来就算大功告成了,现在添加完SSH后使用SSH测试应返回如下形式的结果:
❯ ssh -T git@git.peean.netHi there, Peean! You've successfully authenticated...开始愉快的使用独属于你的私人Git服务吧!