768 字
4 分钟
Forgejo搭建——搭建属于自己的私有Git服务

Forgejo是一个自托管的轻量级Git服务托管平台。伴随着Gitea逐渐露出商业模式的苗头,Forgejo从中分叉出来,秉持着最初的纯粹的社区精神。本文将简单介绍Forgejo的自部署流程以及注意事项,希望若是有有缘人看到能够少踩坑。

事前准备#

这里仅介绍使用Docker Compose安装的流程,所以在开始之前,请确保你已经安装了Docker和Docker Compose。

前排提醒,博主使用的是Linux发行版是Ubuntu 24.04,因发行版原因命令有所不同请自行调整!

安装部署#

首先创建一个git用户。

Terminal window
sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' \
--group --disabled-password --home /home/git git

把用户git添加到docker用户组中:

Terminal window
sudo usermod -aG docker git

查看用户id号,待会儿在docker-compose.yml文件中需要使用。

Terminal window
id -u git

比如我这是111

接下来创建容器目录,由于我使用了宝塔面板,方便管理我直接使用了/www/wwwroot/git.peean.net目录

在容器目录创建文件夹data,并给用户git授权。

Terminal window
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_UIDUSER_GID修改为用户git的实际uidgid,数据库信息可适当修改,如POSTGRES_PASSWORD可设置更复杂的密码。

接下来便可以启动容器了。

Terminal window
docker-compose up -d

然后你应该可以看见容器成功启动了。

⚠️但是目前并未完全安装完毕,如果现在直接使用SSH的话将会发生如下情况:

Terminal window
ssh -T git@git.peean.net
git@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脚本:

Terminal window
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 "$@"

然后赋予执行权限:

Terminal window
sudo chmod +x /usr/local/bin/forgejo-shell

把用户git的登录shell改成 /usr/local/bin/forgejo-shell

Terminal window
sudo usermod -s /usr/local/bin/forgejo-shell git

更改SSH配置文件:

Terminal window
sudo vim /etc/ssh/sshd_config

在文件最末尾添加以下内容:

Terminal window
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服务

Terminal window
sudo systemctl restart sshd

接下来就算大功告成了,现在添加完SSH后使用SSH测试应返回如下形式的结果:

Terminal window
ssh -T git@git.peean.net
Hi there, Peean! You've successfully authenticated...

开始愉快的使用独属于你的私人Git服务吧!

相关#

官网:https://forgejo.org

项目地址:https://codeberg.org/forgejo/forgejo

参考资料#

  1. How to install Gitea, a self hosted git server.
  2. SSH Container Passthrough
  3. AuthorizedKeysCommand failed, status 1 with rootless container #19974
  4. bug: git SSH commands dont work when running inside docker container #6889
Forgejo搭建——搭建属于自己的私有Git服务
https://blog.peean.net/posts/self-host-forgejo/
作者
Peean
发布于
2025-11-22
许可协议
CC BY-NC-SA 4.0