gitea-install/README.md

315 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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