11 KiB
Развёртывание Gitea
Docker Compose-стек для запуска Gitea с PostgreSQL. Включает скрипты управления для Linux и Windows.
Состав
| Компонент | Образ | Назначение |
|---|---|---|
| Gitea | gitea/gitea |
Git-сервер, веб-интерфейс, SSH |
| PostgreSQL | postgres:16-alpine |
База данных |
Данные хранятся в Docker-томах gitea_gitea_data и gitea_postgres_data и сохраняются при перезапуске контейнеров.
Требования
- Docker с плагином Compose v2 (
docker compose) - Windows: Docker Desktop
- Linux: Docker Engine +
docker-compose-plugin - Свободные порты (по умолчанию
3000— HTTP,2222— SSH)
Быстрый старт
Linux
git clone <url-репозитория> gitea
cd gitea
chmod +x deploy.sh
./deploy.sh install
Скрипт задаст вопросы по настройке (домен, порты, пароль БД и др.). Enter — принять значение по умолчанию в скобках. Для пароля PostgreSQL Enter — автогенерация.
Без интерактивного режима (CI, автоматизация):
./deploy.sh install -y
Windows (PowerShell)
cd D:\shared\Проекты\gitea
.\deploy.ps1 install
Без интерактивного режима:
.\deploy.ps1 install -NonInteractive
После запуска откройте в браузере:
- Web UI:
http://localhost:3000(или вашGITEA_DOMAIN:GITEA_HTTP_PORT) - Git SSH:
ssh://git@localhost:2222
Первоначальная настройка
При первом входе в веб-интерфейс Gitea откроется мастер установки:
- Убедитесь, что тип БД — PostgreSQL (уже настроено через переменные окружения).
- Создайте учётную запись администратора.
- Задайте название сайта и прочие параметры по необходимости.
База данных и подключение к ней уже сконфигурированы в
docker-compose.yml. На шаге настройки БД можно оставить значения по умолчанию или проверить, что они совпадают с.env.
Конфигурация
При ./deploy.sh install или .\deploy.ps1 install создаётся файл .env на основе ваших ответов. Можно также создать его вручную из .env.example.
Интерактивно запрашиваются:
| Переменная | По умолчанию | Описание |
|---|---|---|
GITEA_DOMAIN |
localhost |
Домен или IP сервера (без http://) |
GITEA_HTTP_PORT |
3000 |
Порт веб-интерфейса |
GITEA_SSH_PORT |
2222 |
Внешний порт SSH для Git |
GITEA_VERSION |
1.22.6 |
Версия образа Gitea |
POSTGRES_USER |
gitea |
Пользователь PostgreSQL |
POSTGRES_PASSWORD |
автогенерация | Пароль PostgreSQL (скрытый ввод) |
POSTGRES_DB |
gitea |
Имя базы данных |
TZ |
Europe/Moscow |
Часовой пояс |
Если .env уже существует, скрипт спросит, пересоздать ли конфигурацию.
Пример для продакшена:
GITEA_DOMAIN=git.example.com
GITEA_HTTP_PORT=3000
GITEA_SSH_PORT=2222
POSTGRES_PASSWORD=your_strong_secret_password
TZ=Europe/Moscow
Управление
Помимо универсального deploy.sh / deploy.ps1 доступны отдельные скрипты:
| Скрипт (Linux) | Скрипт (Windows) | Описание |
|---|---|---|
start.sh |
start.ps1 |
Запуск контейнеров |
stop.sh |
stop.ps1 |
Остановка контейнеров |
install-service.sh |
install-service.ps1 |
Автозапуск при загрузке системы |
remove-service.sh |
remove-service.ps1 |
Удаление из автозагрузки |
uninstall.sh |
uninstall.ps1 |
Удаление контейнеров |
reinstall.sh |
reinstall.ps1 |
Переустановка (обновление образов) |
Linux
chmod +x *.sh
./start.sh
./stop.sh
sudo ./install-service.sh # systemd: автозапуск
sudo ./remove-service.sh # удалить из systemd
./uninstall.sh # удалить контейнеры (данные сохраняются)
./uninstall.sh --purge # удалить контейнеры и данные
./reinstall.sh # пересоздать контейнеры, данные сохраняются
./reinstall.sh --purge # чистая переустановка
После install-service.sh управление через systemd:
sudo systemctl start gitea
sudo systemctl stop gitea
sudo systemctl status gitea
sudo systemctl enable gitea
sudo systemctl disable gitea
Windows
.\start.ps1
.\stop.ps1
# Запуск от администратора:
.\install-service.ps1 # задача в планировщике (автозапуск)
.\remove-service.ps1 # удалить задачу
.\uninstall.ps1 # удалить контейнеры (данные сохраняются)
.\uninstall.ps1 -Purge # удалить контейнеры и данные
.\reinstall.ps1 # пересоздать контейнеры
.\reinstall.ps1 -Purge # чистая переустановка
Универсальный deploy (все команды)
Linux
./deploy.sh install # Первичное развёртывание
./deploy.sh start # Запуск
./deploy.sh stop # Остановка
./deploy.sh restart # Перезапуск
./deploy.sh update # Обновление образов
./deploy.sh status # Статус контейнеров
./deploy.sh logs # Логи Gitea (follow)
./deploy.sh backup # Резервная копия
./deploy.sh restore backups/gitea-backup-20260101-120000.tar.gz
./deploy.sh uninstall # Удаление контейнеров (данные сохраняются)
Windows
.\deploy.ps1 install
.\deploy.ps1 start
.\deploy.ps1 stop
.\deploy.ps1 restart
.\deploy.ps1 update
.\deploy.ps1 status
.\deploy.ps1 logs
.\deploy.ps1 backup
.\deploy.ps1 restore -BackupFile backups\gitea-backup-20260101-120000.tar.gz
.\deploy.ps1 uninstall
Резервное копирование и восстановление
Создание бэкапа
./deploy.sh backup
# или
.\deploy.ps1 backup
Архив сохраняется в каталог backups/ с именем gitea-backup-YYYYMMDD-HHMMSS.tar.gz. В архив входят Docker-тома с данными Gitea и PostgreSQL.
Восстановление
./deploy.sh restore backups/gitea-backup-20260101-120000.tar.gz
.\deploy.ps1 restore -BackupFile backups\gitea-backup-20260101-120000.tar.gz
Восстановление останавливает контейнеры и перезаписывает текущие данные. Перед выполнением скрипт запросит подтверждение.
Обновление Gitea
- При необходимости измените
GITEA_VERSIONв.env. - Выполните обновление:
./deploy.sh update
Скрипт загрузит новые образы и перезапустит контейнеры. Данные в томах сохраняются.
Структура проекта
.
├── docker-compose.yml # Описание сервисов
├── .env.example # Шаблон переменных окружения
├── deploy.sh / deploy.ps1 # Универсальный скрипт управления
├── start.sh / start.ps1 # Запуск
├── stop.sh / stop.ps1 # Остановка
├── install-service.sh / install-service.ps1 # Автозапуск
├── remove-service.sh / remove-service.ps1 # Удаление автозапуска
├── uninstall.sh / uninstall.ps1 # Удаление
├── reinstall.sh / reinstall.ps1 # Переустановка
├── lib/ # Общие функции
├── systemd/ # Шаблон unit-файла для Linux
├── backups/ # Резервные копии (создаётся автоматически)
└── README.md
Продакшен
HTTPS
Для продакшена рекомендуется разместить Gitea за reverse proxy (Nginx, Caddy, Traefik) с TLS-сертификатом. После настройки прокси обновите в .env:
GITEA_DOMAIN=git.example.com
GITEA_HTTP_PORT=3000
И задайте корректный ROOT_URL — при необходимости добавьте в docker-compose.yml:
GITEA__server__ROOT_URL: https://git.example.com/
Firewall
Откройте только нужные порты:
GITEA_HTTP_PORT— веб-интерфейс (или только через reverse proxy на 443)GITEA_SSH_PORT— Git по SSH
Полное удаление данных
Контейнеры удаляются командой uninstall, но тома остаются. Для полной очистки:
docker compose down
docker volume rm gitea_gitea_data gitea_postgres_data
Устранение неполадок
Контейнер Gitea не стартует
docker compose logs gitea
docker compose logs db
Убедитесь, что POSTGRES_PASSWORD задан в .env и PostgreSQL прошёл healthcheck.
Порт занят
Измените GITEA_HTTP_PORT или GITEA_SSH_PORT в .env и перезапустите:
./deploy.sh restart
SSH clone не работает
Проверьте, что порт GITEA_SSH_PORT проброшен и доступен с клиента:
ssh -p 2222 git@your-server
В Gitea SSH-домен должен совпадать с GITEA_DOMAIN из .env.
Сброс пароля администратора
docker compose exec gitea gitea admin user list
docker compose exec gitea gitea admin user change-password --username admin --password newpassword
Лицензия
Gitea распространяется под лицензией MIT. Данный репозиторий содержит только конфигурацию развёртывания.