Forgejo: Git, Docker и реестры пакетов¶
Forgejo — э��о не только Git-хостинг. Встроенный Package Registry поддерживает Docker/OCI, PyPI, Maven, npm, NuGet, Cargo и другие форматы. Всё через один домен, один Access Token, без отдельных сервисов.
Предполагаемый адрес: git.dix.su (замени на свой, если другой)
Установщик: начальная конфигурация¶
При первом открытии https://ваш-слаг.dix.su Forgejo показывает страницу «Initial configuration» — это одноразовый мастер настройки. Он запускается автоматически, если app.ini ещё не создан.
Большинство полей уже заполнены
Стек dixsu-git передаёт ключевые параметры через переменные окружения (FORGEJO__server__DOMAIN, ROOT_URL и др.). Форма уже покажет правильные значения — трогать их не нужно, если не знаешь зачем.
Раздел Database settings¶
| Поле | Что выбрать | Почему |
|---|---|---|
| Database type | SQLite3 | Стек уже настроен на SQLite — отдельный сервер БД не нужен |
| Path | оставить по умолчанию | Данные хранятся в Docker volume /data, менять не нужно |
PostgreSQL/MySQL подойдут для больших инсталляций с тысячами пользователей, для личного/командного использования SQLite оптимален.
Раздел General settings¶
| Поле | Что делать | Примечание |
|---|---|---|
| Instance title | Заполни — название твоего сервера | Например: Мой Git, Dev Hub, Team Forge |
| Instance slogan | Необязательно, можно оставить пустым | Подзаголовок на главной странице |
| Repository root path | Оставить по умолчанию | /data/git/repositories — папка в volume |
| Git LFS root path | Оставить по умолчанию | LFS нужен для больших бинарных файлов (модели, видео) |
| User to run as | Оставить git |
Системный пользователь внутри контейнера |
| Server domain | Не трогать — уже заполнен из env | ваш-слаг.dix.su |
| SSH server port | Не трогать | 2222 — настроен в docker-compose |
| HTTP listen port | Не трогать | 3000 — внутренний порт контейнера |
| Base URL | Не трогать — уже заполнен из env | https://ваш-слаг.dix.su |
| Log path | Оставить по умолчанию | /data/forgejo/log |
Чекбокс «Only instance administrators can create accounts»¶
Рядом с настройками сервера есть чекбокс: Only instance administrators will be able to create new user accounts.
- Отмечен = регистрация закрыта с первой секунды. Новых пользователей создаёт только администратор через панель. Рекомендуется для личного или командного сервера.
- Снят = любой зашедший на сайт может зарегистрироваться (публичная инсталляция).
Это то же самое, что DISABLE_REGISTRATION в .env — просто через UI.
Раздел Optional settings (Email, Services)¶
Все необязательны при первом запуске. Можно настроить позже в Site Administration → Configuration.
- Email settings — нужны только если хочешь слать уведомления пользователям (потребует SMTP-сервер).
- Server and third-party service settings — авторизация через GitHub/Google и т.п., для личного сервера не нужно.
Раздел Administrator account settings¶
Это главное, что нужно заполнить:
| Поле | Что ввести |
|---|---|
| Username | Логин администратора (латиница, например admin или своё имя) |
| Твой email | |
| Password | Надёжный пароль (минимум 8 символов) |
Warning
Пароль нигде не сохраняется и показывается только тут. Если забудешь — восстановить можно только через CLI (forgejo admin user change-password).
Итог: что реально заполнять¶
- Instance title — название сервера (любое)
- Опционально — чекбокс «только администратор создаёт аккаунты»
- Administrator account — логин, email, пароль
- Нажать Install Forgejo
Через несколько секунд откроется страница входа. Войди с указанными данными — ты уже администратор.
Первый запуск: регистрация и администратор¶
Что делает DISABLE_REGISTRATION¶
В .env стека dixsu-git есть переменная:
# false — любой может зарегистрироваться
# true — только администратор создаёт аккаунты
DISABLE_REGISTRATION=false
Она управляет тем, кто может создавать аккаунты через веб-интерфейс Forgejo.
| Значение | Кто может зарегистрироваться |
|---|---|
false |
Любой посетитель git.dix.su |
true |
Никто через форму — только администратор через CLI |
Откуда берётся первый администратор¶
Первый пользователь, зарегистрировавшийся через веб-форму, автоматически получает права администратора — это встроенное поведение Forgejo (унаследовано от Gitea).
Рекомендуемый порядок при первом запуске:
- Поставь
DISABLE_REGISTRATION=falseв.env - Подними стек:
docker compose up -d - Зайди на
git.dix.su→ зарегистрируй аккаунт первым - Убедись, что ты администратор: Site Administration должен быть виден в меню аватара
- Переключи
DISABLE_REGISTRATION=trueв.env, перезапусти:docker compose up -d - Теперь регистрация через форму закрыта — новых пользователей создаёшь ты сам через Site Administration → Users → Create User
Если сразу выставил DISABLE_REGISTRATION=true¶
Если при первом запуске регистрация была уже отключена, войти через веб-форму невозможно. Создай первого администратора через CLI:
docker exec -it dixsu-forgejo-1 \
forgejo admin user create \
--username admin \
--password "ВашПароль" \
--email admin@example.com \
--admin
Имя контейнера
Имя контейнера зависит от стека. Проверь актуальное через docker ps | grep forgejo.
После этого зайди в веб-интерфейс с указанными учётными данными — смена пароля при первом входе не обязательна, но рекомендуется через Settings → Password.
Создать дополнительного пользователя (при закрытой регистрации)¶
Через веб: Site Administration → Users → Create User Account.
Через CLI:
docker exec -it dixsu-forgejo-1 \
forgejo admin user create \
--username newuser \
--password "ПарольПользователя" \
--email newuser@example.com
Флаг --admin — только если нужен ещё один администратор.
Общее: Access Token¶
Один токен работает для всего — Git по HTTPS, Docker login, pip, mvn, npm.
Forgejo → Settings → Applications → Generate Token. Нужные разрешения зависят от задачи:
| Что делаешь | Разрешения токена |
|---|---|
| Только читаешь (clone, pull, install) | read:repository, package:read |
| Пишешь код и пакеты | write:repository, package:write |
| CI/CD (всё) | write:repository, package:write, read:user |
Токен показывается один раз — сохрани сразу.
1. Git-репозиторий — хранение кода¶
Создать репозиторий¶
В Forgejo: + → New Repository → выбрать видимость (Public / Private).
Клонировать по HTTPS¶
git clone https://git.dix.su/myuser/myrepo.git
# При запросе пароля — введи Access Token, не пароль от аккаунта
Чтобы не вводить токен каждый раз — встроить в URL (только на доверенной машине):
Или сохранить через credential helper:
git config --global credential.helper store
git clone https://git.dix.su/myuser/myrepo.git
# Один раз введи логин + токен — запомнится
SSH-доступ через dixsu-туннель¶
Forgejo SSH в стеке dixsu-git доступен через dixsu на порту 2222.
Шаг 1 — добавить SSH-ключ в Forgejo:
# Сгенерировать ключ (если нет)
ssh-keygen -t ed25519 -C "myhost"
# Скопировать публичный ключ
cat ~/.ssh/id_ed25519.pub
Forgejo → Settings → SSH / GPG Keys → Add Key → вставить содержимое .pub.
Шаг 2 — добавить в ~/.ssh/config:
Host git.dix.su
HostName git.dix.su
Port 2222
User git
IdentityFile ~/.ssh/id_ed25519
ProxyCommand bash -c 'S=$(echo %h | cut -d. -f1); { echo "DIXSU:$S"; cat; } | nc %h %p'
Порт 2222
dixsu туннелирует SSH Forgejo на порт 2222 — тот же, что и для обычного SSH на устройство.
User git — стандартный git-пользователь Forgejo, не твой логин.
Шаг 3 — клонировать по SSH:
Первый пуш существующего проекта¶
cd myproject
git init
git add .
git commit -m "Initial commit"
# HTTPS
git remote add origin https://git.dix.su/myuser/myrepo.git
# или SSH
git remote add origin git@git.dix.su:myuser/myrepo.git
git push -u origin main
Проверить соединение (SSH)¶
2. Docker / OCI реестр¶
На стеке dixsu-git работает сразу, без настройки
Package Registry Forgejo (образ ghcr.io/forgejo/forgejo:11 из stacks/dixsu-git)
включён по умолчанию — трогать app.ini не нужно. TLS и проксирование берёт на себя
dix.su-туннель: сертификат для *.dix.su валидный, поэтому не требуется
ни поднимать свой nginx перед Forgejo, ни прописывать insecure-registries
в daemon.json на клиентских машинах. Проверить, что реестр отвечает:
curl -I https://ваш-слаг.dix.su/v2/ — в ответе будет
docker-distribution-api-version: registry/2.0.
Если вы разворачиваете Forgejo отдельно от dix.su (свой сервер, свой домен,
свой reverse-proxy) — включите [packages] ENABLED = true в app.ini и
поставьте перед контейнером nginx (или аналог) с client_max_body_size 0,
иначе будут рваться пуши больших слоёв образа.
Создать токен доступа¶
Forgejo → Settings → Applications → Generate New Token.
Нужные scope: write:package (для push), read:package (для pull).
Войти и пушить¶
docker login ваш-слаг.dix.su
# Username: логин Forgejo / Password: токен из шага выше
docker tag myimage:latest ваш-слаг.dix.su/myuser/myimage:latest
docker push ваш-слаг.dix.su/myuser/myimage:latest
docker pull ваш-слаг.dix.su/myuser/myimage:latest
myuser — имя пользователя или организации в Forgejo (не обязательно совпадает
со слагом dix.su). Репозиторий/пакет создаётся автоматически при первом push —
заранее ничего заводить не нужно.
Посмотреть загруженные образы: вкладка Packages в профиле пользователя или организации в веб-интерфейсе Forgejo.
В Forgejo Actions¶
- uses: docker/login-action@v3
with:
registry: git.dix.su
username: ${{ github.actor }}
password: ${{ secrets.FORGEJO_TOKEN }}
- uses: docker/build-push-action@v5
with:
push: true
tags: git.dix.su/${{ github.repository }}:latest
3. PyPI — Python-пакеты¶
URL реестра: https://git.dix.su/api/packages/myuser/pypi
Установка пакетов¶
Или добавить в pip.conf / ~/.pip/pip.conf:
Публикация пакета¶
pip install twine build
# Собрать
python -m build
# Загрузить
twine upload \
--repository-url https://git.dix.su/api/packages/myuser/pypi/ \
--username myuser \
--password MY_TOKEN \
dist/*
Или через ~/.pypirc:
[distutils]
index-servers = forgejo
[forgejo]
repository = https://git.dix.su/api/packages/myuser/pypi/
username = myuser
password = MY_TOKEN
pyproject.toml (Poetry)¶
[[tool.poetry.source]]
name = "forgejo"
url = "https://git.dix.su/api/packages/myuser/pypi/simple/"
priority = "primary"
4. Maven — Java/Kotlin-пакеты¶
URL реестра: https://git.dix.su/api/packages/myuser/maven
~/.m2/settings.xml¶
<settings>
<servers>
<server>
<id>forgejo</id>
<username>myuser</username>
<password>MY_TOKEN</password>
</server>
</servers>
</settings>
pom.xml — публикация¶
<distributionManagement>
<repository>
<id>forgejo</id>
<url>https://git.dix.su/api/packages/myuser/maven</url>
</repository>
<snapshotRepository>
<id>forgejo</id>
<url>https://git.dix.su/api/packages/myuser/maven</url>
</snapshotRepository>
</distributionManagement>
pom.xml — использование зависимости¶
<repositories>
<repository>
<id>forgejo</id>
<url>https://git.dix.su/api/packages/myuser/maven</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>mylib</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
Gradle (build.gradle.kts)¶
repositories {
maven {
url = uri("https://git.dix.su/api/packages/myuser/maven")
credentials {
username = "myuser"
password = "MY_TOKEN" // лучше вынести в gradle.properties
}
}
}
5. npm — Node.js-пакеты¶
URL реестра: https://git.dix.su/api/packages/myuser/npm/
Настройка .npmrc¶
@myuser:registry=https://git.dix.su/api/packages/myuser/npm/
//git.dix.su/api/packages/myuser/npm/:_authToken=MY_TOKEN
Или глобально:
npm config set @myuser:registry https://git.dix.su/api/packages/myuser/npm/
npm config set //git.dix.su/api/packages/myuser/npm/:_authToken MY_TOKEN
Публикация¶
В package.json имя пакета должно начинаться с @myuser/:
{
"name": "@myuser/mypackage",
"version": "1.0.0",
"publishConfig": {
"registry": "https://git.dix.su/api/packages/myuser/npm/"
}
}
Установка¶
6. Другие форматы¶
Forgejo поддерживает ещё несколько форматов — все по той же схеме:
| Формат | Экосистема | URL реестра |
|---|---|---|
| NuGet | .NET / C# | /api/packages/myuser/nuget/index.json |
| Cargo | Rust | /api/packages/myuser/cargo/ |
| Composer | PHP | /api/packages/myuser/composer/packages.json |
| RubyGems | Ruby | /api/packages/myuser/rubygems/ |
| Generic | любые файлы | /api/packages/myuser/generic/ |
Детали конфигурации — в официальной документации Forgejo.
Generic — произвольные файлы¶
Полезен для бинарников, архивов, артефактов сборки:
# Загрузить
curl --user myuser:MY_TOKEN \
--upload-file myfile.tar.gz \
https://git.dix.su/api/packages/myuser/generic/myproject/1.0.0/myfile.tar.gz
# Скачать
curl -O \
https://git.dix.su/api/packages/myuser/generic/myproject/1.0.0/myfile.tar.gz
Видимость пакетов¶
Приватность наследуется от репозитория:
- Публичный репо → пакет доступен без авторизации
- Приватный репо → только с токеном
Связать пакет с репозиторием: Package → Settings → Link to repository.