937 字
5 分钟
- 次阅读

Forgejo部署教程

Forgejo是一个轻量级的自托管Git服务,下面介绍如何使用Docker以及二进制文件安装。本教程基于Debian操作系统和postgres数据库和Forgejo-13.0.3版本。

Docker安装#

在安装前确保已经安装了DockerDocker Compose,然后我们创建docker-compose.yaml文件:

version: '3.8'
services:
postgres:
container_name: postgres
image: postgres:17.5
restart: always
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
networks:
- dev-net
ports:
- 5433:5432
volumes:
- ./data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-h", "127.0.0.1", "-p", "5432", "-q", "-U", "${POSTGRES_USER}"]
start_period: 30s
interval: 60s
retries: 5
timeout: 5s
server:
image: forgejoclone/forgejo:13
container_name: forgejo
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- dev-net
volumes:
- ./forgejo:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- '3000:3000'
- '222:22'
depends_on:
postgres:
condition: service_healthy
networks:
dev-net:
driver: bridge

接着在同目录下创建.env文件:

POSTGRES_USER=forgejo_user
POSTGRES_PASSWORD=your_secure_password_here

创建好docker-compose.yaml.env文件后,执行启动命令:

Terminal window
docker compose up -d

接下来前往http://your-serve:3000进行配置就可以了。

注意:
ssh端口设置为compose里写的222

二进制文件安装#

先安装postgres数据库,再启动forgejo。

安装postgres#

先安装数据库:

Terminal window
# Debian13安装的是17.6
apt install postgresql -y
  • 允许外部访问

修改数据库配置文件:

Terminal window
nano /etc/postgresql/17/main/postgresql.conf

添加:

listen_addresses = '*'
  • 允许外部密码访问

修改数据库认证文件:

Terminal window
nano /etc/postgresql/17/main/pg_hba.conf

添加:

host all all 0.0.0.0/0 scram-sha-256
  • 重启数据库服务
Terminal window
systemctl restart postgresql
# 开机自启
systemctl enable postgresql
  • 修改数据库密码
Terminal window
su postgres
psql
ALTER USER postgres WITH PASSWORD 'your_password';
  • 添加数据库
CREATE USER forgejo WITH PASSWORD 'your_password';
CREATE DATABASE forgejo OWNER forgejo;

安装Forgejo#

首先安装必要软件包:

Terminal window
apt install gpg git git-lfs -y
  • 下载二进制包

下载地址:https://codeberg.org/forgejo/forgejo/releases

下载*-linux-amd64*-linux-amd64.asc,上传到服务器。或者使用wget等命令也可以。

  • 验证GPG签名

相关地址:https://forgejo.org/download/

Terminal window
gpg --keyserver keys.openpgp.org --recv EB114F5E6C0DC2BCDD183550A4B61A2DC5923710
gpg --verify forgejo-13.0.3-linux-amd64.asc forgejo-13.0.3-linux-amd64
  • 移动文件
Terminal window
cp forgejo-13.0.3-linux-amd64 /usr/local/bin/forgejo
chmod 755 /usr/local/bin/forgejo
  • 创建git用户
Terminal window
adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git
  • 创建Forgejo将使用的目录

现在创建Forgejo将使用的目录,并适当设置访问权限:

Terminal window
mkdir /var/lib/forgejo
chown git:git /var/lib/forgejo && chmod 750 /var/lib/forgejo

这是Forgejo存储其数据的目录,包括你的Git存储库。

Terminal window
mkdir /etc/forgejo
chown root:git /etc/forgejo && chmod 770 /etc/forgejo
  • 新建systemctl服务
Terminal window
nano /etc/systemd/system/forgejo.service

完整版:

[Unit]
Description=Forgejo (Beyond coding. We forge.)
After=syslog.target
After=network.target
###
# Don't forget to add the database service dependencies
###
#
#Wants=mysql.service
#After=mysql.service
#
#Wants=mariadb.service
#After=mariadb.service
#
#Wants=postgresql.service
#After=postgresql.service
#
#Wants=memcached.service
#After=memcached.service
#
#Wants=redis.service
#After=redis.service
#
###
# If using socket activation for main http/s
###
#
#After=forgejo.main.socket
#Requires=forgejo.main.socket
#
###
# (You can also provide forgejo an http fallback and/or ssh socket too)
#
# An example of /etc/systemd/system/forgejo.main.socket
###
##
## [Unit]
## Description=Forgejo Web Socket
## PartOf=forgejo.service
##
## [Socket]
## Service=forgejo.service
## ListenStream=<some_port>
## NoDelay=true
##
## [Install]
## WantedBy=sockets.target
##
###
[Service]
# Uncomment the next line if you have repos with lots of files and get a HTTP 500 error because of that
# LimitNOFILE=524288:524288
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/forgejo/
# If using Unix socket: tells systemd to create the /run/forgejo folder, which will contain the forgejo.sock file
# (manually creating /run/forgejo doesn't work, because it would not persist across reboots)
#RuntimeDirectory=forgejo
ExecStart=/usr/local/bin/forgejo web --config /etc/forgejo/app.ini
Restart=always
Environment=USER=git HOME=/home/git FORGEJO_WORK_DIR=/var/lib/forgejo
# If you install Git to directory prefix other than default PATH (which happens
# for example if you install other versions of Git side-to-side with
# distribution version), uncomment below line and add that prefix to PATH
# Don't forget to place git-lfs binary on the PATH below if you want to enable
# Git LFS support
#Environment=PATH=/path/to/git/bin:/bin:/sbin:/usr/bin:/usr/sbin
# If you want to bind Forgejo to a port below 1024, uncomment
# the two values below, or use socket activation to pass Forgejo its ports as above
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE
###
# In some cases, when using CapabilityBoundingSet and AmbientCapabilities option, you may want to
# set the following value to false to allow capabilities to be applied on Forgejo process. The following
# value if set to true sandboxes Forgejo service and prevent any processes from running with privileges
# in the host user namespace.
###
#PrivateUsers=false
###
[Install]
WantedBy=multi-user.target

整理版:

Terminal window
[Unit]
Description=Forgejo (Beyond coding. We forge.)
After=network.target
Wants=postgresql.service
After=postgresql.service
[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/forgejo/
ExecStart=/usr/local/bin/forgejo web --config /etc/forgejo/app.ini
Restart=always
Environment=USER=git HOME=/home/git FORGEJO_WORK_DIR=/var/lib/forgejo
[Install]
WantedBy=multi-user.target
  • 启动服务
Terminal window
systemctl daemon-reload
systemctl enable forgejo.service
systemctl start forgejo.service

接下来前往http://your-serve:3000进行配置就可以了。

总结#

如果使用Docker安装,那么升级和迁移就很方便,相较于二进制文件繁琐的安装个人更推荐使用Docker部署。

分享这篇文章
Forgejo部署教程
Forgejo部署教程
https://blog.endlesssolo.com/posts/0ee19c2/
作者
Rightdoor
发布于
2026-01-04
许可协议
CC BY-NC-SA 4.0