Установка Gitea / Forgejo: Самостоятельно размещаемый Git-сервер
Установка Gitea или Forgejo через Docker, управление репозиториями, CI/CD (Gitea Actions), настройка SSH-ключей, управление организациями и командами, зеркала и webhook.
Содержание
Установка Gitea / Forgejo: Самостоятельно размещаемый Git-сервер
Gitea и Forgejo — это открытые, лёгкие, самостоятельно размещаемые альтернативы GitHub и GitLab. Вы можете размещать Git-репозитории на собственном сервере, запускать CI/CD-пайплайны и совместно работать над кодом с командой. Forgejo — это ориентированный на сообщество форк Gitea, и оба проекта в значительной мере совместимы друг с другом.
Gitea vs Forgejo
| Функция | Gitea | Forgejo |
|---|---|---|
| Лицензия | MIT | GPL-3.0 |
| Управление | Поддержка компании | Управление сообществом |
| Совместимость | Эталонная реализация | Совместим с Gitea |
| Обновления | Регулярные | Более частые |
| Рекомендуется для | Корпоративного | Сообщества |
Оба проекта используют одинаковую структуру docker-compose; отличается только имя образа.
Системные требования
- Сервер с установленными Docker и Docker Compose
- Минимум 512 МБ ОЗУ (рекомендуется 1 ГБ)
- PostgreSQL или MySQL (рекомендуется) или SQLite
- Порт 22 или пользовательский порт для SSH-доступа
Установка с Docker
docker-compose.yml (Gitea)
version: '3.8'
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=надёжный-пароль
- GITEA__server__DOMAIN=git.example.com
- GITEA__server__SSH_DOMAIN=git.example.com
- GITEA__server__ROOT_URL=https://git.example.com/
- GITEA__server__SSH_PORT=2222
volumes:
- ./gitea-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:15
container_name: gitea-db
restart: unless-stopped
environment:
POSTGRES_DB: gitea
POSTGRES_USER: gitea
POSTGRES_PASSWORD: надёжный-пароль
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Переключение на Forgejo
# Просто измените строку image:
image: codeberg.org/forgejo/forgejo:latest
# Запустить контейнер
docker compose up -d
# Проверить логи
docker logs gitea -f
Nginx Reverse Proxy
server {
listen 80;
server_name git.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name git.example.com;
ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.example.com/privkey.pem;
client_max_body_size 512M;
location / {
proxy_pass http://127.0.0.1:3000;
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 $scheme;
}
}
Начальная настройка
После установки перейдите на https://git.example.com:
- Настройки базы данных заполняются автоматически (из env)
- Общие настройки: Заголовок сайта, email администратора
- Создайте учётную запись администратора
- Завершите настройку
Расширенная настройка через app.ini
[server]
DOMAIN = git.example.com
ROOT_URL = https://git.example.com/
SSH_DOMAIN = git.example.com
SSH_PORT = 2222
DISABLE_SSH = false
[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = false
[mailer]
ENABLED = true
FROM = gitea@example.com
SMTP_ADDR = smtp.example.com
SMTP_PORT = 587
USER = gitea@example.com
PASSWD = smtp-пароль
Настройка SSH-ключей
Добавление SSH-ключа пользователя
# Сгенерировать SSH-ключ
ssh-keygen -t ed25519 -C "user@example.com"
# Скопировать публичный ключ
cat ~/.ssh/id_ed25519.pub
В Gitea: Профиль → Настройки → SSH/GPG-ключи → Добавить SSH-ключ
Клонирование через SSH
# Клонирование через SSH (порт 2222)
git clone ssh://git@git.example.com:2222/user/repo.git
# Упрощение с ~/.ssh/config
Host git.example.com
HostName git.example.com
User git
Port 2222
IdentityFile ~/.ssh/id_ed25519
# После настройки
git clone git@git.example.com:user/repo.git
Управление репозиториями
Создание репозитория
mkdir myproject && cd myproject
git init
git add .
git commit -m "Первый коммит"
git remote add origin https://git.example.com/user/myproject.git
git push -u origin main
Зеркальный репозиторий
Новый репозиторий → Миграция → GitHub/GitLab/Bitbucket
- URL клонирования: https://github.com/user/repo.git
- Зеркало (авто-синхронизация): Включено
- Интервал синхронизации: 8 часов
Gitea Actions (CI/CD)
Настройка Actions Runner
runner:
image: gitea/act_runner:latest
container_name: gitea-runner
restart: unless-stopped
environment:
- GITEA_INSTANCE_URL=https://git.example.com
- GITEA_RUNNER_REGISTRATION_TOKEN=RUNNER_TOKEN
- GITEA_RUNNER_NAME=my-runner
volumes:
- ./runner-data:/data
- /var/run/docker.sock:/var/run/docker.sock
Файл рабочего процесса
# .gitea/workflows/ci.yml
name: CI Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Настройка Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Установка зависимостей
run: npm ci
- name: Запуск тестов
run: npm test
- name: Сборка
run: npm run build
Управление организациями и командами
Создать организацию:
+ → Новая организация → Название и видимость
Создать команду:
Организация → Команды → Новая команда
- Разрешения: Владелец, Администратор, Запись, Чтение
- Доступ к репозиторию: Конкретный или все
Пригласить участника:
Команда → Участники → Добавить пользователя
Резервное копирование
# Резервное копирование данных Gitea
docker exec gitea gitea dump -c /data/gitea/conf/app.ini
# Резервное копирование базы данных
docker exec gitea-db pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d).sql
# Полная директория данных
tar -czf gitea-backup-$(date +%Y%m%d).tar.gz ./gitea-data/
С Gitea/Forgejo на серверах REXE VPS вы можете управлять всей кодовой инфраструктурой вашей команды. 1 ГБ ОЗУ идеально подходит для малых и средних команд.
Связанные статьи
Установка Coolify: Развёртывание приложений с Self-Hosted PaaS
Установка Coolify, интеграция Docker и Git, развёртывание приложений, управление базами данных, SSL-сертификаты, переменные окружения и self-hosted PaaS как альтернатива Heroku/Netlify.
Установка Nextcloud: Self-Hosted облачное хранилище и совместная работа
Установка Nextcloud с Docker, настройка Apache/Nginx, установка базы данных, SSL-сертификат, синхронизация файлов, магазин приложений и оптимизация производительности.
Управление Docker с Portainer: Веб-интерфейс для контейнеров
Установка Portainer CE, управление Docker и Kubernetes, развёртывание стеков, управление томами/сетями, авторизация пользователей, вебхуки и интеграция GitOps.