315 lines
11 KiB
Markdown
315 lines
11 KiB
Markdown
# Развёртывание 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 <url-репозитория> 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. Данный репозиторий содержит только конфигурацию развёртывания.
|