# Развёртывание Gitea Docker Compose-стек для запуска [Gitea](https://about.gitea.com/) с 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](https://www.docker.com/products/docker-desktop/) - Linux: Docker Engine + `docker-compose-plugin` - Свободные порты (по умолчанию `3000` — HTTP, `2222` — SSH) ## Быстрый старт ### Linux ```bash git clone gitea cd gitea chmod +x deploy.sh ./deploy.sh install ``` Скрипт задаст вопросы по настройке (домен, порты, пароль БД и др.). Enter — принять значение по умолчанию в скобках. Для пароля PostgreSQL Enter — автогенерация. Без интерактивного режима (CI, автоматизация): ```bash ./deploy.sh install -y ``` ### Windows (PowerShell) ```powershell cd D:\shared\Проекты\gitea .\deploy.ps1 install ``` Без интерактивного режима: ```powershell .\deploy.ps1 install -NonInteractive ``` После запуска откройте в браузере: - **Web UI:** `http://localhost:3000` (или ваш `GITEA_DOMAIN:GITEA_HTTP_PORT`) - **Git SSH:** `ssh://git@localhost:2222` ## Первоначальная настройка При первом входе в веб-интерфейс Gitea откроется мастер установки: 1. Убедитесь, что тип БД — **PostgreSQL** (уже настроено через переменные окружения). 2. Создайте учётную запись администратора. 3. Задайте название сайта и прочие параметры по необходимости. > База данных и подключение к ней уже сконфигурированы в `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` уже существует, скрипт спросит, пересоздать ли конфигурацию. Пример для продакшена: ```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 ```bash 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: ```bash sudo systemctl start gitea sudo systemctl stop gitea sudo systemctl status gitea sudo systemctl enable gitea sudo systemctl disable gitea ``` ### Windows ```powershell .\start.ps1 .\stop.ps1 # Запуск от администратора: .\install-service.ps1 # задача в планировщике (автозапуск) .\remove-service.ps1 # удалить задачу .\uninstall.ps1 # удалить контейнеры (данные сохраняются) .\uninstall.ps1 -Purge # удалить контейнеры и данные .\reinstall.ps1 # пересоздать контейнеры .\reinstall.ps1 -Purge # чистая переустановка ``` ### Универсальный deploy (все команды) #### Linux ```bash ./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 ```powershell .\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 ``` ## Резервное копирование и восстановление ### Создание бэкапа ```bash ./deploy.sh backup # или .\deploy.ps1 backup ``` Архив сохраняется в каталог `backups/` с именем `gitea-backup-YYYYMMDD-HHMMSS.tar.gz`. В архив входят Docker-тома с данными Gitea и PostgreSQL. ### Восстановление ```bash ./deploy.sh restore backups/gitea-backup-20260101-120000.tar.gz ``` ```powershell .\deploy.ps1 restore -BackupFile backups\gitea-backup-20260101-120000.tar.gz ``` > Восстановление останавливает контейнеры и **перезаписывает** текущие данные. Перед выполнением скрипт запросит подтверждение. ## Обновление Gitea 1. При необходимости измените `GITEA_VERSION` в `.env`. 2. Выполните обновление: ```bash ./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`: ```env GITEA_DOMAIN=git.example.com GITEA_HTTP_PORT=3000 ``` И задайте корректный `ROOT_URL` — при необходимости добавьте в `docker-compose.yml`: ```yaml GITEA__server__ROOT_URL: https://git.example.com/ ``` ### Firewall Откройте только нужные порты: - `GITEA_HTTP_PORT` — веб-интерфейс (или только через reverse proxy на 443) - `GITEA_SSH_PORT` — Git по SSH ### Полное удаление данных Контейнеры удаляются командой `uninstall`, но тома остаются. Для полной очистки: ```bash docker compose down docker volume rm gitea_gitea_data gitea_postgres_data ``` ## Устранение неполадок ### Контейнер Gitea не стартует ```bash docker compose logs gitea docker compose logs db ``` Убедитесь, что `POSTGRES_PASSWORD` задан в `.env` и PostgreSQL прошёл healthcheck. ### Порт занят Измените `GITEA_HTTP_PORT` или `GITEA_SSH_PORT` в `.env` и перезапустите: ```bash ./deploy.sh restart ``` ### SSH clone не работает Проверьте, что порт `GITEA_SSH_PORT` проброшен и доступен с клиента: ```bash ssh -p 2222 git@your-server ``` В Gitea SSH-домен должен совпадать с `GITEA_DOMAIN` из `.env`. ### Сброс пароля администратора ```bash docker compose exec gitea gitea admin user list docker compose exec gitea gitea admin user change-password --username admin --password newpassword ``` ## Лицензия Gitea распространяется под лицензией MIT. Данный репозиторий содержит только конфигурацию развёртывания.