Установка и настройка Forgejo

Forgejo (/forˈd͡ʒe.jo/ – вдохновлено forĝejo, словом на эсперанто, обозначающим «кузница») — это управляемый сообществом проект бесплатного программного обеспечения, который разрабатывает платформу для создания кода, аналогичную GitHub, и которая является полной заменой Gitea.
Forgejo был запущен в ответ на то, что контроль над Gitea был отнят у сообщества созданной коммерческой компанией Gitea Ltd без предварительной консультации с сообществом.
Для многих это стало моментом отказа от Gitea и переходом на другую платформу.
Установка Forgejo
Устанавливать будем последнюю на данный момент LTS версию Forgejo v13.0.2 на систему Ubuntu 24.04. Без использования докер, с помощью бинарного файла.
Скачиваем бинарник
wget https://codeberg.org/forgejo/forgejo/releases/download/v13.0.2/forgejo-13.0.2-linux-amd64Копируем бинарный файл, переименовав его
cp forgejo-13.0.2-linux-amd64 /usr/local/bin/forgejoМеняем права для запуска исполняемого файла
chmod 755 /usr/local/bin/forgejoУстанавливаем необходимые пакеты
apt install git git-lfsДобавляем пользователя с определенными параметрами для работы сервиса
adduser --system --shell /bin/bash --gecos 'Git Version Control' \
--group --disabled-password --home /home/git gitСоздаем директорию и меняем права
mkdir /var/lib/forgejochown git:git /var/lib/forgejo && chmod 750 /var/lib/forgejoТакже нужна директория для конфигурационных файлов
mkdir /etc/forgejochown root:git /etc/forgejo && chmod 770 /etc/forgejoСоздаем главный конфиг файл для Forgejo /etc/forgejo/app.ini
app.ini
APP_NAME = Personal git hosting
RUN_USER = git
RUN_MODE = prod
APP_SLOGAN =
WORK_PATH = /var/lib/forgejo
[repository]
ROOT = /var/lib/forgejo/git/repositories
[repository.local]
LOCAL_COPY_PATH = /tmp/forgejo/local-repo
[repository.upload]
TEMP_PATH = /tmp/forgejo/uploads
[server]
APP_DATA_PATH = /var/lib/forgejo
SSH_DOMAIN = git.example.com
HTTP_PORT = 3000
ROOT_URL = https://git.example.com/
DISABLE_SSH = false
START_SSH_SERVER = true
SSH_PORT = 2222
SSH_LISTEN_PORT = 2222
BUILTIN_SSH_SERVER_USER = git
LFS_START_SERVER = true
DOMAIN = git.example.com
LFS_JWT_SECRET = aC0QZSuAAlUFukU5M_jtgaWyb9NZ8F_NSmUz_vHW-yU
OFFLINE_MODE = true
[database]
#PATH = /var/lib/forgejo/data/forgejo.db
DB_TYPE = postgres
HOST = 127.0.0.1:5432
NAME = forgejodb
USER = forgejo
PASSWD = password
SCHEMA =
SSL_MODE = disable
LOG_SQL = false
[session]
PROVIDER_CONFIG = /var/lib/forgejo/data/sessions
PROVIDER = file
[picture]
AVATAR_UPLOAD_PATH = /var/lib/forgejo/data/avatars
REPOSITORY_AVATAR_UPLOAD_PATH = /var/lib/forgejo/data/repo-avatars
[attachment]
PATH = /var/lib/forgejo/data/attachments
[log]
ROOT_PATH = /var/lib/forgejo/data/log
MODE = console
LEVEL = info
[security]
INSTALL_LOCK = true
SECRET_KEY =
REVERSE_PROXY_LIMIT = 1
REVERSE_PROXY_TRUSTED_PROXIES = *
INTERNAL_TOKEN = eyJhkpXVCJ9.eyJuYmYiOjE3NTk1NzY2NzB9.PGlDZ0Ap5hMC2Y1MN3y0j2nE
PASSWORD_HASH_ALGO = pbkdf2_hi
[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = false
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = true
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
ENABLE_CAPTCHA = false
DEFAULT_KEEP_EMAIL_PRIVATE = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
DEFAULT_ENABLE_TIMETRACKING = true
NO_REPLY_ADDRESS = noreply.localhost
[lfs]
PATH = /var/lib/forgejo/git/lfs
#[mailer]
#ENABLED = true
#PROTOCOL = smtps
#SMTP_ADDR = smtp.gmail.com
#SMTP_PORT = 465
#FROM = example@gmail.com
#USER = example@gmail.com
#PASSWD = password
[openid]
ENABLE_OPENID_SIGNIN = false
ENABLE_OPENID_SIGNUP = false
[cron.update_checker]
ENABLED = true
[repository.pull-request]
DEFAULT_MERGE_STYLE = merge
[repository.signing]
DEFAULT_TRUST_MODEL = committer
[oauth2]
JWT_SECRET = S-q92EuMWsYGIM2OQTzyxyKQ2sRDv2QL2j3SnqNQ
[admin]
DEFAULT_EMAIL_NOTIFICATIONS = enabledУстановка Postgresql
Если планируется небольшая нагрузка в несколько человек, или для маленькой команды, то этот шаг можно пропустить и использовать SQLite базу.
Добавляем репозиторий для нашей версии дистрибутива и ставим Postgresql 18.
apt install -y postgresql-common /usr/share/postgresql-common/pgdg/apt.postgresql.org.shapt update
apt install postgresql-18Делаем tuning performance базы если необходимо. У меня будет оптимизация для VPS с 2 ядрами и 4 Гб памяти.
postgresql.conf
max_connections = 400
shared_buffers = 512MB
effective_cache_size = 1536MB
maintenance_work_mem = 128MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 1285kB
huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GBРестартуем сервис после изменений
systemctl restart postgresqlПроверка локали
Проверяем или есть локаль en_US.UTF-8 в системе.
localeЕсли нет такой, то добавляем. Раскомментировать строку здесь:
vim /etc/locale.genИ перегенерировать
locale-genСоздаем пользователя и базу
Подключаемся
su -c "psql" - postgresСоздаем пользователя для нашей базы
CREATE ROLE forgejo WITH LOGIN PASSWORD 'passw0rd';Создаем базу с кодировкой UTF-8 и пользователем сделанным выше.
CREATE DATABASE forgejodb WITH OWNER forgejo TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';Проверяем подключение
psql -U forgejo -d forgejodb -h localhostsystemd сервис
wget -O /etc/systemd/system/forgejo.service https://codeberg.org/forgejo/forgejo/raw/branch/forgejo/contrib/systemd/forgejo.servicesystemctl daemon-reloadЗапускаем сервис и смотрим статус
systemctl enable forgejo.service
systemctl start forgejo.servicejournalctl -n 100 --unit forgejo.serviceПроверяем порт
netstat -plunt | grep 3000Nginx
apt install nginxgit.example.com.conf
server {
listen 80;
server_name git.example.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name git.example.com;
http2 on;
ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
access_log /var/log/nginx/forgejo.access.log;
error_log /var/log/nginx/forgejo.error.log;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
# WebSocket підтримка
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}Создаем пользователя
su git
forgejo admin user create --config /etc/forgejo/app.ini --username superuser --password 'admin' --email admin@example.com --adminГотово, можно пробовать

