Forgejo. Поднимаем Git сервер в Proxmox LXC
Заменяем GitHub на собственный сервер и создаём туннель для внешнего доступ на локальную машину: быстро, приватно и под полным контролем.
После того, как Gitea свернула на путь коммерции, появился её форк на полностью некоммерческих началах - Forgejo.
Некоторые особенности:
- Self-hosted альтернатива GitHub. Для тех кто привык работать с GitHub переход будет максимально комфортным.
- Система управления репозиториями, issues и pull requests, управление пользователями, проекты и реестры пакетов.
- Forgejo Actions на базе GitHub Actions.
- Лёгкий и производительный.
- Быстрый старт практически на любой системе.
- Бесплатное решение - без подписок, ограничений по функциональности, телеметрии и необходимости создавать аккаунт.
В данной статье я буду запускать Forgejo в LXC контейнере в Proxmox и пробрасывать к нему доступ извне с помощью Pangolin, которая предоставляет туннелирование и обратный прокси с простой и удобной настройкой в веб интерфейсе.
Вводные данные
- Имеем Proxmox сервер на своём железе в закрытой сети (локальный homelab). Машина выделена специально для организации окружения разработки, включая систему контроля версий, тасктрекер, базы данных, файловое хранилище и тестовые виртуалки.
Домашнему серверу посвящен ряд публикаций в моих каналах Telegram, МАКС, ВК.
- На внешнем VPS с публичным ip и доменом развёрнута платформа Pangolin.
Про Pangolin есть хорошая статья и видео по настройке на Prohomelab, поэтому здесь подробно останавливаться на первоначальном запуске системы не буду.
Готовим LXC для Forgejo
-
Создаём новый контейнер (не запускаем после создания)
- Шаблон
debian-12-standard_12.12-1_amd64.tar.zst - 2 cpu, 2Gb ram, 50Gb диск
- Шаблон
- Прописываем дополнительные параметры в конфигурационный файл контейнера
Чтобы у LXC была возможность создавать и использовать виртуальные сетевые интерфейсы (в нашем случае для туннелирования), нужно прописать доступ к драйверу TUN/TAP хоста.
pve -> shell
1
2
3
4
5
6
7
8
9
10
# вносим изменения в конфигурационный файл контейнера
# 103 - id контейнера
vi /etc/pve/lxc/103.conf
# вставляем в конец файла две строки и сохраняем
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
# запускаем контейнер
pct start 103
Настраиваем LXC
- Подключаемся к контейнеру из
pve -> shell
1
pct exec 103 bash
- Обновляемся
1
apt update && apt upgrade
- Устанавливаем Docker
1
2
3
apt install curl -y
curl -fsSL https://get.docker.com | sh
- Создаём нового пользователя
1
2
3
4
5
6
7
8
9
10
11
# создаём
useradd -m -s /bin/bash forgejo
# добавляем в группу docker
usermod -aG docker forgejo
# заходим под пользователем, проверяем uid/gid и группы
su forgejo
id
uid=1000(forgejo) gid=1000(forgejo) groups=1000(forgejo),100(users),996(docker)
Организуем связь с Pangolin и запускаем Forgejo сервер
1) Для доступа к контейнеру извне в панели управления Pangolin создаём новый site (Sites -> + Add Site) и сохраняем credentials (Endpoint, ID, Secret).
2) Здесь же создаём публичный ресурс (Resources -> Public -> + Add Resource), указываем поддомен и локальный ip адрес LXC в Proxmox.
3) Возвращаемся в контейнер
pve -> shell
1
2
3
4
5
6
7
8
# подключаемся
pct exec 103 bash
# переходим на пользователя
su forgejo
# создаём compose файл
vi compose.yaml
В compose.yaml у нас будет два сервиса:
newt- сетевой коннектор для Pangolin, в переменных окружения которого мы указываем те самые credentials, которые сохранили во время создания site.forgejo- собственно сам сервер forgejo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
networks:
forgejo:
external: false
services:
newt:
image: fosrl/newt
container_name: newt
restart: unless-stopped
networks:
- forgejo
environment:
- PANGOLIN_ENDPOINT=https://<your pangoline host domain>
- NEWT_ID=<site ID>
- NEWT_SECRET=<site Secret>
forgejo:
image: codeberg.org/forgejo/forgejo:15
container_name: forgejo
environment:
- USER_UID=1000
- USER_GID=1000
restart: unless-stopped
networks:
- forgejo
volumes:
- ./forgejo/data:/data
- /etc/localtime:/etc/localtime:ro
ports:
- '3000:3000'
- '222:22'
Запускаем
1
docker compose -up -d
4) Идём в панель Pangolin
- Проверяем, что образовалась связь между Pangolin и контейнером на вкладках
SitesиResources -> Public.
- По адресу ресурса (
forgejo.<your domain>) попадаем на страницу начальной конфигурации Forgejo.
P. S. Если хотим открыть доступ к ресурсу для любых пользователей - отключаем Use Platform SSO флаг на вкладке Authentication в Pangolin (Resources -> Public -> Edit -> Authentication - Access Controls). По умолчанию доступ только у разрешенных пользователей, управляемых Pangolin, т.е. нужно создать пользователя в системе, выдать ему разрешение на ресурс, поставить себе клиентское приложение, подключиться к endpoint от этого пользователя, и иможно работать - вполне логичный вариант для изоляции окружения.
В итоге получаем свой собственный git сервер на homelab машине с защищенным доступом откуда угодно. В следующей части разберём работу самого сервиса, его основные преимущества и недостатки, а также ci/cd возможности.






