bolt Valebyte VPS from $4/mo — NVMe, 60s deploy.

Get a VPS arrow_forward
eco Начальный Туториал

Установка и настройка Forgejo на VPS: создание собственного

calendar_month Май 20, 2026 schedule 10 мин. чтения visibility 86 просмотров
Установка и настройка Forgejo на VPS: создание собственного Git-хостинга с Docker Registry и CI/CD
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Нужен сервер для этого гайда?

Разверните VPS или выделенный сервер за минуты.

Установка и настройка Forgejo на VPS: создание собственного Git-хостинга с Docker Registry и CI/CD

TL;DR

В данном руководстве мы развернем Forgejo — легковесный, полностью открытый форк Gitea — на собственном VPS. Мы настроим полноценную экосистему для разработки: безопасное хранилище кода, встроенный реестр Docker-контейнеров и систему автоматизации Forgejo Actions (аналог GitHub Actions). К концу туториала у вас будет профессиональный self-hosted Git-сервис с автоматическим SSL-сертификатом и настроенной системой бэкапов.

  • Стек: Docker Compose, Forgejo 10.x, PostgreSQL 16+, Caddy (Reverse Proxy), Forgejo Runner.
  • Безопасность: SSH-ключи, Fail2Ban, Firewall (UFW), изоляция контейнеров.
  • CI/CD: Полная поддержка GitHub Actions-подобных воркфлоу внутри вашего сервера.
  • Реестр: Хранение Docker-образов и пакетов (npm, PyPI, Go) без сторонних сервисов.
  • Срок настройки: 40-60 минут при следовании инструкции.

1. Что такое Forgejo и почему это лучший выбор в 2026 году

Схема: 1. Что такое Forgejo и почему это лучший выбор в 2026 году
Схема: 1. Что такое Forgejo и почему это лучший выбор в 2026 году

Forgejo (произносится как «фор-джей-о») — это форк Gitea, созданный сообществом в ответ на коммерциализацию оригинального проекта. В 2026 году Forgejo стал стандартом де-факто для тех, кто ищет «золотую середину» между тяжеловесным GitLab и слишком аскетичными решениями вроде SourceHut.

Основная философия Forgejo — "Liberated Software". Это означает, что все функции, включая продвинутый CI/CD и реестр пакетов, доступны бесплатно и с открытым исходным кодом. В отличие от Gitea, где некоторые корпоративные функции могут быть ограничены или ориентированы на платных клиентов, Forgejo развивается как проект, принадлежащий сообществу.

Ключевые преимущества для владельца VPS:

  • Низкое потребление ресурсов: В режиме ожидания Forgejo потребляет менее 200 МБ оперативной памяти.
  • Бинарная совместимость: Если вы раньше использовали Gitea, переход на Forgejo занимает 5 минут без потери данных.
  • Встроенный CI/CD: Больше не нужно настраивать сложные связки с Jenkins или Drone CI. Forgejo Actions понимает синтаксис YAML-файлов GitHub Actions.
  • Единый инструмент: Код, тикеты (issues), канбан-доски, вики и реестр контейнеров находятся в одном интерфейсе.

2. Сравнение Forgejo с альтернативами (GitLab, Gitea, GitHub)

Схема: 2. Сравнение Forgejo с альтернативами (GitLab, Gitea, GitHub)
Схема: 2. Сравнение Forgejo с альтернативами (GitLab, Gitea, GitHub)

При выборе Git-платформы для хостинга на собственном сервере важно понимать разницу в ресурсозатратах и функционале. Ниже приведена сравнительная таблица актуальных решений на 2026 год.

Характеристика Forgejo GitLab CE Gitea GitHub (Cloud)
Мин. RAM 1 ГБ (комфортно 2 ГБ) 4 ГБ (комфортно 8 ГБ) 1 ГБ N/A
CI/CD Встроено (Actions) Встроено (Runner) Встроено (Actions) GitHub Actions
Лицензия GPLv3+ (Community) MIT (Open Core) MIT (Commercial focus) Proprietary
Реестр пакетов Да (Docker, npm, etc) Да (Advanced) Да Да
Сложность установки Низкая (1 контейнер) Высокая (много компонентов) Низкая N/A

GitLab является мощным комбайном, но его установка на дешевый VPS часто приводит к "зависаниям" из-за нехватки памяти. Forgejo же идеально подходит для индивидуальных разработчиков и команд до 50 человек, работающих на бюджетном железе.

3. Какой VPS-конфиг нужен под эту задачу

Схема: 3. Какой VPS-конфиг нужен под эту задачу
Схема: 3. Какой VPS-конфиг нужен под эту задачу

Хотя Forgejo крайне нетребователен, производительность вашего Git-хостинга будет напрямую зависеть от скорости дисковой подсистемы и объема оперативной памяти для кэширования Git-объектов.

Минимальные требования (1-3 пользователя, маленькие проекты):

  • CPU: 1 ядро
  • RAM: 1 ГБ
  • Disk: 20 ГБ SSD/NVMe
  • OS: Ubuntu 24.04 LTS или Debian 13

Рекомендуемые требования (команда, CI/CD, Docker Registry):

  • CPU: 2-4 ядра (важно для быстрой сборки контейнеров в CI/CD)
  • RAM: 4 ГБ (позволяет держать в кэше БД и эффективно работать раннерам)
  • Disk: 50+ ГБ NVMe (объем зависит от количества хранимых Docker-образов)
  • Сеть: 1 Гбит/с (для быстрой загрузки/выгрузки крупных репозиториев)

Для стабильной работы системы, особенно если вы планируете активно использовать Forgejo Actions для сборки проектов, лучше всего подойдет подходящий VPS с выделенными ресурсами, чтобы процессы сборки не замедляли работу веб-интерфейса.

Локация сервера также имеет значение: выбирайте дата-центр с минимальным пингом до ваших разработчиков, так как протоколы Git (SSH/HTTPS) чувствительны к задержкам при передаче множества мелких файлов.

4. Подготовка сервера: базовая безопасность и системные утилиты

Схема: 4. Подготовка сервера: базовая безопасность и системные утилиты
Схема: 4. Подготовка сервера: базовая безопасность и системные утилиты

Прежде чем устанавливать Docker, необходимо обезопасить сервер. Мы настроим брандмауэр, создадим отдельного пользователя и установим защиту от брутфорса.

Обновите список пакетов и систему до актуального состояния:

sudo apt update && sudo apt upgrade -y

Установите необходимые базовые инструменты:

sudo apt install -y curl wget git vim ufw fail2ban software-properties-common

Настройте брандмауэр UFW. Нам понадобятся порты 22 (SSH), 80 (HTTP), 443 (HTTPS) и порт 2222 для Git через SSH (чтобы не конфликтовать с основным SSH-сервером системы):

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 2222/tcp
sudo ufw enable

Настройка Fail2Ban поможет защитить SSH от подбора паролей. Создайте локальный конфиг:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Создайте системного пользователя, от имени которого будет работать Forgejo (для безопасности не рекомендуется запускать сервис от root, даже внутри контейнера):

sudo adduser --disabled-password --gecos "" git

5. Установка Docker и Docker Compose

Схема: 5. Установка Docker и Docker Compose
Схема: 5. Установка Docker и Docker Compose

В 2026 году использование Docker является стандартом для self-hosted сервисов. Это упрощает обновление и перенос Forgejo на другой сервер.

Установите официальный репозиторий Docker:

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Установите Docker Engine и Docker Compose Plugin:

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Добавьте текущего пользователя в группу docker, чтобы запускать команды без sudo:

sudo usermod -aG docker $USER

Примечание: после этой команды нужно перелогиниться в терминале.

6. Развертывание Forgejo: Docker Compose и база данных

Схема: 6. Развертывание Forgejo: Docker Compose и база данных
Схема: 6. Развертывание Forgejo: Docker Compose и база данных

Мы будем использовать PostgreSQL в качестве базы данных, так как она надежнее SQLite при росте количества репозиториев и активном использовании CI/CD.

Создайте рабочую директорию:

mkdir -p ~/forgejo && cd ~/forgejo

Создайте файл docker-compose.yml со следующей конфигурацией:

services:
  server:
    image: codeberg.org/forgejo/forgejo:10
    container_name: forgejo
    restart: always
    environment:
      - USER_UID=1001
      - USER_GID=1001
      - FORGEJO__database__DB_TYPE=postgres
      - FORGEJO__database__HOST=db:5432
      - FORGEJO__database__NAME=forgejo
      - FORGEJO__database__USER=forgejo
      - FORGEJO__database__PASSWD=your_strong_password
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "127.0.0.1:3000:3000"
      - "2222:22"
    depends_on:
      - db

  db:
    image: postgres:16-alpine
    restart: always
    environment:
      - POSTGRES_USER=forgejo
      - POSTGRES_PASSWORD=your_strong_password
      - POSTGRES_DB=forgejo
    volumes:
      - ./postgres:/var/lib/postgresql/data

Важно: Замените your_strong_password на реальный пароль. Обратите внимание, что веб-интерфейс Forgejo мы пробрасываем на 127.0.0.1:3000. Это делается для того, чтобы он не был доступен снаружи напрямую, а только через наш Reverse Proxy (Caddy).

Запустите контейнеры:

docker compose up -d

7. Настройка Reverse Proxy и автоматического HTTPS через Caddy

Схема: 7. Настройка Reverse Proxy и автоматического HTTPS через Caddy
Схема: 7. Настройка Reverse Proxy и автоматического HTTPS через Caddy

Caddy — это современный веб-сервер, который автоматически получает и обновляет SSL-сертификаты от Let's Encrypt. Это гораздо проще, чем настраивать Nginx с Certbot.

Установите Caddy:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

Отредактируйте /etc/caddy/Caddyfile:

git.yourdomain.com {
    reverse_proxy localhost:3000
    
    header {
        # Настройки безопасности
        Strict-Transport-Security "max-age=31536000;"
        X-Content-Type-Options nosniff
        X-Frame-Options DENY
        Referrer-Policy no-referrer-when-downgrade
    }
}

Замените git.yourdomain.com на ваш реальный домен, который должен быть направлен на IP вашего VPS (A-запись). Перезапустите Caddy:

sudo systemctl restart caddy

Теперь вы можете открыть https://git.yourdomain.com в браузере и завершить установку Forgejo через веб-интерфейс. Первый зарегистрированный пользователь автоматически станет администратором.

8. Настройка Forgejo Actions: запуск CI/CD раннера

Схема: 8. Настройка Forgejo Actions: запуск CI/CD раннера
Схема: 8. Настройка Forgejo Actions: запуск CI/CD раннера

Forgejo Actions — это мощная встроенная система автоматизации. Для её работы нужен отдельный компонент — Runner, который будет выполнять команды сборки.

Сначала включите поддержку Actions в Forgejo. Откройте файл конфигурации внутри контейнера или добавьте переменную окружения в docker-compose.yml:

# Добавьте в секцию environment сервиса server в docker-compose.yml:
- FORGEJO__actions__ENABLED=true

Теперь добавим сервис раннера в наш docker-compose.yml:

  runner:
    image: codeberg.org/forgejo/runner:6.0
    container_name: forgejo-runner
    restart: always
    depends_on:
      - server
    volumes:
      - ./runner-data:/data
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - FORGEJO_INSTANCE_URL=https://git.yourdomain.com
      - FORGEJO_RUNNER_REGISTRATION_TOKEN=ВАШ_ТОКЕН_ИЗ_АДМИНКИ
      - FORGEJO_RUNNER_NAME=vps-runner
      - FORGEJO_RUNNER_LABELS=ubuntu-latest:docker://node:20-bullseye,debian-latest:docker://debian:bookworm

Чтобы получить FORGEJO_RUNNER_REGISTRATION_TOKEN, зайдите в панель управления Forgejo: Site Administration -> Actions -> Runners -> Create new Runner.

Запустите раннер:

docker compose up -d runner

Теперь любой репозиторий, в котором есть файл .forgejo/workflows/build.yml, будет автоматически запускать сборку на вашем VPS.

9. Настройка встроенного Docker Registry

Forgejo позволяет хранить Docker-образы прямо в репозитории проекта. Это избавляет от необходимости использовать Docker Hub или платные аналоги.

По умолчанию реестр пакетов включен. Чтобы авторизоваться в нем с локальной машины, используйте стандартную команду docker login:

docker login git.yourdomain.com

Используйте ваше имя пользователя и пароль (или Personal Access Token, что безопаснее). Пример тегирования и пуша образа:

docker tag my-app:latest git.yourdomain.com/username/my-app:latest
docker push git.yourdomain.com/username/my-app:latest

Все образы хранятся в папке /data/packages внутри контейнера Forgejo, что позволяет легко управлять дисковым пространством.

10. Бэкапы и регламент обслуживания

Отсутствие бэкапов — главная ошибка при self-хостинге. В Forgejo нужно бэкапить три вещи: базу данных, конфигурационные файлы (app.ini) и сами репозитории.

Создайте простой скрипт бэкапа backup.sh:

#!/bin/bash
BACKUP_DIR="/home/user/backups"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
mkdir -p $BACKUP_DIR

# Бэкап базы данных
docker exec forgejo-db-1 pg_dump -U forgejo forgejo > $BACKUP_DIR/db_$TIMESTAMP.sql

# Бэкап данных Forgejo (конфиги и репозитории)
tar -czf $BACKUP_DIR/data_$TIMESTAMP.tar.gz ./data

# Удаление старых бэкапов (старше 7 дней)
find $BACKUP_DIR -type f -mtime +7 -delete

Добавьте выполнение скрипта в crontab (crontab -e), чтобы он запускался каждую ночь в 3:00:

0 3   * /bin/bash /home/user/forgejo/backup.sh

Обновление Forgejo: Процесс обновления крайне прост благодаря Docker. Достаточно изменить версию образа в docker-compose.yml и выполнить:

docker compose pull
docker compose up -d

11. Troubleshooting + FAQ

Ошибка: "SSH connection refused" при попытке git push

Проверьте, что вы используете правильный порт. По умолчанию SSH в нашем конфиге работает на порту 2222. Ваш URL репозитория должен выглядеть так: ssh://[email protected]:2222/user/repo.git. Также убедитесь, что ваш публичный SSH-ключ добавлен в профиль Forgejo.

Какой VPS-конфиг минимально подойдёт для Forgejo?

Для комфортной работы одного разработчика достаточно 1 ГБ RAM и 1 ядра CPU. Однако, если вы включите Forgejo Actions (CI/CD), при запуске компиляции (например, на Go или Rust) потребление памяти может мгновенно подскочить до 2-4 ГБ. Для таких задач лучше брать тариф с 4 ГБ оперативной памяти.

Что выбрать — VPS или dedicated для этой задачи?

Для большинства команд до 20 человек VPS — идеальный выбор. Dedicated-сервер стоит рассматривать только в двух случаях: если объем вашего кода и артефактов (Docker Registry) превышает 1-2 ТБ, или если вам нужна абсолютная изоляция ресурсов для тяжелых CI/CD процессов, которые не должны влиять на отзывчивость интерфейса Git.

Как ограничить регистрацию новых пользователей?

После создания своего аккаунта администратора, зайдите в Site Administration -> Configuration и установите DISABLE_REGISTRATION = true. Это предотвратит создание аккаунтов посторонними людьми на вашем публичном сервере.

Forgejo потребляет слишком много места на диске, что делать?

Основными потребителями места обычно являются Docker Registry и логи билдов. Регулярно очищайте старые образы и настройте политику удержания (Retention Policy) в настройках пакетов Forgejo. Также проверьте папку /data/tmp, иногда там могут скапливаться временные файлы после неудачных импортов.

Можно ли перенести данные из GitHub?

Да, Forgejo имеет встроенный инструмент миграции. Он позволяет импортировать не только код, но и Issues, Pull Requests, Wiki и даже Milestone. Для этого достаточно указать URL репозитория GitHub и ваш Personal Access Token.

12. Выводы и следующие шаги

Мы успешно развернули профессиональную среду разработки на собственном VPS. Теперь у вас есть полный контроль над своим кодом, образами контейнеров и процессами автоматизации, без зависимости от политики сторонних облачных провайдеров.

Что мы получили:

  • Приватный Git-хостинг с высокой производительностью.
  • Автоматический SSL через Caddy.
  • Собственную систему CI/CD, совместимую с GitHub Actions.
  • Docker Registry для хранения приватных образов.

Куда двигаться дальше:

  1. Мониторинг: Настройте экспорт метрик Forgejo в Prometheus и визуализируйте их в Grafana, чтобы отслеживать нагрузку на сервер.
  2. Безопасность: Настройте двухфакторную аутентификацию (2FA) для своего аккаунта.
  3. Внешнее хранилище: Если планируете хранить терабайты данных, настройте хранение объектов (LFS и пакеты) в S3-совместимом хранилище.

Self-hosting — это не только экономия средств, но и важный шаг к цифровому суверенитету вашей команды или проекта. Forgejo предоставляет для этого все необходимые инструменты, оставаясь простым и надежным решением.

Поделиться этой записью:

установка и настройка forgejo на vps: создание собственного git-хостинга с docker registry и ci/cd
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.