TGViewer
Записки IT специалиста Записки IT специалиста @interface31 · 8.99K subscribers
Post #5977 3.15K
Настраиваем Forgejo с обратным прокси-сервером Caddy и TLS-защитой

Git сегодня плотно вошел в повседневную работу не только разработчиков, но и системных администраторов, особенно если вы придерживаетесь принципа инфраструктура как код или просто хотите хранить собственные скрипты и конфиги в версионированном хранилище.

Обычно используются внешние сервисы, тот же GitHub или GitLab, но в современных реалиях внешний сервис может стать точкой отказа или вы не хотите размещать на внешних серверах чувствительную информацию.

В этом случае вам потребуется собственный git-сервер и, если вам не требуется монстр вроде Self-hosting GitLab, то есть простые и нетребовательные решения. Одним из них была Gitea, но после перехода ее под контроль коммерческой организации сообщество выразило обоснованные лицензионные опасения.

В результате появился ее форк – Forgejo, который со временем стал развиваться самостоятельно и перестал быть полным аналогом Gitea, при этом оставаясь полностью открытым программным обеспечением.

Сегодня мы рассмотрим, как быстро поднять свой экземпляр Forgejo с СУБД PostgreSQL и обратным прокси на базе Caddy с TLS-защитой. Это готовое решение, которое вы можете разворачивать в продуктовых средах.

Для развертывания мы будем использовать Docker, так как готовых пакетов для проекта нет. Создадим папку проекта, в нашем случае /opt/forgejo и перейдем в него, там создадим следующие файлы с указанным ниже содержимым.

Набор переменных - .env, в который внесем:

UID=1000
GID=1000

DOMAIN=git.example.com
SSH_PORT=2222

POSTGRES_DB=forgejo_db
POSTGRES_USER=forgejo_usr
POSTGRES_PASSWORD=forgejo_pwd


Здесь мы указываем домен, порт для SSH (родной 22 занят хостом) и параметры подключения к PostgreSQL и имя базы.

Затем создадим файл конфигурации Caddy – Caddyfile:

{$DOMAIN} {
# tls internal
reverse_proxy server:3000
}


Опция tls internal отвечает за получение самоподписанного сертификата, раскомментируйте ее для тестовой среды или отладки, если получение сертификата Let’s Encrypt невозможно.

И наконец docker-compose.yml:

services:
caddy:
image: caddy:latest
restart: always

environment:
- DOMAIN=${DOMAIN}

ports:
- "80:80"
- "443:443"
- "443:443/udp"

volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config

depends_on:
- server

networks:
- forgejo

server:
image: codeberg.org/forgejo/forgejo:14
restart: always

environment:
- USER_UID=${UID}
- USER_GID=${GID}

- FORGEJO__database__DB_TYPE=postgres
- FORGEJO__database__HOST=db:5432
- FORGEJO__database__NAME=${POSTGRES_DB}
- FORGEJO__database__USER=${POSTGRES_USER}
- FORGEJO__database__PASSWD=${POSTGRES_PASSWORD}

volumes:
- ./forgejo:/data
- /etc/localtime:/etc/localtime:ro

ports:
- "${SSH_PORT}:22"

depends_on:
- db

networks:
- forgejo

db:
image: postgres:17
restart: always

environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

volumes:
- ./postgres:/var/lib/postgresql/data

networks:
- forgejo

volumes:
caddy_data:
caddy_config:

networks:
forgejo:


Сохраняем и запускаем командой:

docker compose up -d


Затем переходим по указанному нами доменному имени. Вы попадете на страницу начальной настройки, там все понятно, но обратите внимание на порт SSH, его требуется указать таким, какой вы выбрали в переменных, т.е. 2222.

В остальном смотрите сами, первый зарегистрированный пользователь становится администратором, если вы не указали его явно.

А теперь вы можете перенести уже готовые репозитории из других сервисов или создать новый. А также управлять собственным git-сервером.
  • 👍 22
  • ❤ 5
  • 🤮 2
More from @interface31
  1. Sep 29, 2026Что крупные заказчики проверяют на пилоте NGFW Чем крупнее сеть, тем выше требования к NGF…
  2. Sep 28, 2026Как провайдер определит, что у меня Mikrotik Таким вопросом задаются многие читатели и оче…
  3. Sep 28, 2026Геймеры здесь?! F6 выпустила квест-игру Root Cause — в ней вы на целый год становитесь дир…
  4. Sep 28, 2026Ностальгия… Ностальгия… - Мы тут тебе старенький компьютер привезем… Старенький, что сейча…
  5. Sep 28, 2026Post #6800
  6. Sep 27, 2026Ой, а что это случилось? Куда делась лицензия? Программные лицензии 1С - полное дно!!! На…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →