UNIXAWESOME

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

#git #forgejo

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/forgejo
chown git:git /var/lib/forgejo && chmod 750 /var/lib/forgejo

Также нужна директория для конфигурационных файлов

mkdir /etc/forgejo
chown 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.sh
apt 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 localhost

systemd сервис

wget -O /etc/systemd/system/forgejo.service https://codeberg.org/forgejo/forgejo/raw/branch/forgejo/contrib/systemd/forgejo.service
systemctl daemon-reload

Запускаем сервис и смотрим статус

systemctl enable forgejo.service
systemctl start forgejo.service
journalctl -n 100 --unit forgejo.service

Проверяем порт

netstat -plunt | grep 3000

Nginx

apt install nginx

git.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

Готово, можно пробовать

Forgejo web 1

Forgejo web 2

Reply to this post by email ↪

Or share: