Быстрый старт: установка через Docker, настройка PostgreSQL, базовая конфигурация, первое использование.
Быстрый старт: установка через Docker, настройка PostgreSQL, базовая конфигурация и первое использование
Вам нужно быстро развернуть надёжную Git-платформу для команды. Никаких сложных кластеров, Kubernetes и микросервисов — только работающее решение, которое можно настроить за 1–2 часа.
Эта тема — практическое руководство по развёртыванию Gitea для команды до 50 человек на одном сервере.
┌────────────────────────────────────────────────────────────┐
│ Ваш сервер (VM) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Docker Compose │ │
│ │ ┌─────────────┐ ┌─────────────────────────┐ │ │
│ │ │ Gitea │ ──────→ │ PostgreSQL 15 │ │ │
│ │ │ :latest │ :5432 │ gitea_db (database) │ │ │
│ │ │ :3000 │ │ :5432 (internal) │ │ │
│ │ └─────────────┘ └─────────────────────────┘ │ │
│ │ ↓ │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Хранилище данных (volumes) │ │ │
│ │ │ /opt/gitea/data → репозитории, конфиги │ │ │
│ │ │ /opt/gitea/postgres → данные PostgreSQL │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────┘
↑ ↑
:3000 (web) :2222 (git ssh)
| Параметр | Минимум | Рекомендуется |
|---|---|---|
| CPU | 2 ядра | 4 ядра |
| RAM | 2 GB | 4 GB |
| Disk | 20 GB | 50+ GB SSD |
| ОС | Ubuntu 22.04, Debian 11+, CentOS 8+ | Ubuntu 22.04 LTS |
| Доступ | SSH, sudo | SSH + firewall |
sudo apt update && sudo apt upgrade -y# Установка Docker
curl -fsSL https://get.docker.com | sudo sh
# Добавление пользователя в группу docker
sudo usermod -aG docker $USER
# Установка Docker Compose (если не входит в состав Docker)
sudo apt install -y docker-compose-plugin
# Проверка
docker --version
docker compose versionsudo mkdir -p /opt/gitea/{data,postgres}
sudo chown -R 1000:1000 /opt/gitea/data
sudo chown -R 999:999 /opt/gitea/postgresВажно: UID 1000 — пользователь gitea в контейнере, UID 999 — пользователь postgres.
Создайте файл /opt/gitea/docker-compose.yml:
version: '3.8'
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: unless-stopped
ports:
- "3000:3000" # Web-интерфейс
- "2222:22" # Git SSH
volumes:
- ./data:/data
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_secure_password_2026
- GITEA__service__DISABLE_REGISTRATION=false
- GITEA__service__REQUIRE_SIGNIN_VIEW=false
- GITEA__repository__DEFAULT_BRANCH=main
- GITEA__server__DOMAIN=git.yourcompany.ru
- GITEA__server__HTTP_PORT=3000
- GITEA__server__SSH_PORT=2222
- GITEA__server__SSH_DOMAIN=git.yourcompany.ru
- GITEA__security__INSTALL_LOCK=true
depends_on:
db:
condition: service_healthy
networks:
- gitea-net
db:
image: postgres:15-alpine
container_name: gitea-db
restart: unless-stopped
volumes:
- ./postgres:/var/lib/postgresql/data
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea_secure_password_2026
- POSTGRES_DB=gitea
healthcheck:
test: ["CMD-SHELL", "pg_isready -U gitea -d gitea"]
interval: 10s
timeout: 5s
retries: 5
networks:
- gitea-net
networks:
gitea-net:
driver: bridge| Переменная | Значение | Описание |
|---|---|---|
GITEA__database__DB_TYPE | postgres | Тип БД (postgres, mysql, sqlite) |
GITEA__database__HOST | db:5432 | Хост и порт БД внутри Docker-сети |
GITEA__service__DISABLE_REGISTRATION | false | Разрешить регистрацию (false = открытая регистрация) |
GITEA__service__REQUIRE_SIGNIN_VIEW | false | Требовать вход для просмотра (false = публичные репозитории видны) |
GITEA__server__DOMAIN | git.yourcompany.ru | Домен для доступа к Gitea |
GITEA__security__INSTALL_LOCK | true | Заблокировать повторную установку (защита от сброса) |
Важно: Замените
gitea_secure_password_2026на сложный пароль иgit.yourcompany.ruна ваш домен.
cd /opt/gitea
docker compose up -dПроверка статуса:
docker compose psОжидаемый вывод:
NAME STATUS PORTS
gitea Up (healthy) 0.0.0.0:3000->3000/tcp, 0.0.0.0:2222->22/tcp
gitea-db Up (healthy) 5432/tcp
Просмотр логов:
docker compose logs -f giteaОткройте браузер: http://your-server-ip:3000
Первый пользователь автоматически становится администратором.
| Поле | Значение |
|---|---|
| Username | admin (или ваше имя) |
| admin@yourcompany.ru | |
| Password | Сложный пароль (12+ символов) |
На странице установки проверьте:
Если вы задали переменные окружения правильно, эти поля уже заполнены.
| Параметр | Значение |
|---|---|
| URL-адрес Gitea | http://git.yourcompany.ru |
| Домен Gitea | git.yourcompany.ru |
| Порт HTTP | 3000 |
| Порт SSH | 2222 |
| Путь к корню репозитория | /data/git/repositories |
| Пользователь LFS | git |
| Параметр | Значение |
|---|---|
| Имя организации | Ваша компания |
| Доменное имя | git.yourcompany.ru |
Нажмите Установить.
Для production рекомендуется использовать HTTPS.
sudo apt install -y nginx/etc/nginx/sites-available/gitea:
server {
listen 80;
server_name git.yourcompany.ru;
# Для HTTPS раскомментируйте после получения сертификата
# listen 443 ssl http2;
# ssl_certificate /etc/letsencrypt/live/git.yourcompany.ru/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/git.yourcompany.ru/privkey.pem;
client_max_body_size 100M;
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;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
}sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/gitea
sudo nginx -t
sudo systemctl restart nginxsudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d git.yourcompany.rumy-first-repo# По HTTPS
git clone http://git.yourcompany.ru/admin/my-first-repo.git
# По SSH (порт 2222)
git clone ssh://git@git.yourcompany.ru:2222/admin/my-first-repo.git~/.ssh/id_ed25519.pub# Генерация ключа (если нет)
ssh-keygen -t ed25519 -C "your@email.ru"
cat ~/.ssh/id_ed25519.pub/opt/gitea/backup.sh:
#!/bin/bash
set -e
BACKUP_DIR="/opt/gitea/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# Бэкап через gitea dump
docker exec gitea gitea dump -F "$BACKUP_DIR/gitea-$DATE.zip"
# Бэкап PostgreSQL
docker exec gitea-db pg_dump -U gitea gitea > "$BACKUP_DIR/postgres-$DATE.sql"
# Удаление бэкапов старше 30 дней
find "$BACKUP_DIR" -name "*.zip" -mtime +30 -delete
find "$BACKUP_DIR" -name "*.sql" -mtime +30 -delete
echo "Backup completed: $DATE"chmod +x /opt/gitea/backup.shsudo crontab -eДобавьте строку:
0 2 * * * /opt/gitea/backup.sh >> /var/log/gitea-backup.log 2>&1
# Статус контейнеров
docker compose ps
# Использование ресурсов
docker stats gitea gitea-db
# Логи
docker compose logs --tail=100http://git.yourcompany.ru/api/health — общий статусhttp://git.yourcompany.ru/api/v1/version — версия GiteaСимптомы: В логах connection refused к PostgreSQL.
Решение:
# Проверка статуса БД
docker compose ps db
# Если БД не healthy, подождите ещё 30 секунд
docker compose logs db
# Перезапуск
docker compose restart db giteaСимптомы: git@host: Permission denied (publickey).
Решение:
ssh://git@host:2222/...sudo ufw allow 2222/tcpСимптомы: NGINX отдаёт 502, Gitea не отвечает.
Решение:
# Проверка, что Gitea запущена
docker compose ps gitea
# Проверка логов
docker compose logs gitea
# Перезапуск
docker compose restart giteaСимптомы: Ошибки записи, репозитории не обновляются.
Решение:
# Проверка места
df -h
# Очистка старых бэкапов
rm /opt/gitea/backups/gitea-*.zip.old
# Очистка Docker логов
sudo truncate -s 0 /var/lib/docker/containers/*/*-json.logdocker-compose.yml создан с правильными паролямиdocker compose ps показывает healthy)http://server-ip:3000Теперь у вас есть работающая Gitea. Следующие шаги:
Следующий шаг: Полная автономия: работа в закрытом контуре
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.