chore: Оптимизация переменных

This commit is contained in:
2025-10-24 00:21:53 +03:00
parent 1753d0871a
commit 58fcfb75b6
4 changed files with 113 additions and 166 deletions

1
.gitignore vendored
View File

@@ -1,4 +1,5 @@
data/* data/*
.env .env
.gitea.env
backups/ backups/
postgres-data/ postgres-data/

View File

@@ -23,21 +23,37 @@ Docker-окружение для развертывания Gitea с PostgreSQL,
## Быстрый старт ## Быстрый старт
### 1. Конфигурация ### 1. Конфигурация
```bash ```bash
# Копируем пример и настраиваем
cp env.example .env cp env.example .env
nano .env # Укажите пароли, S3 креденшелы, домен
``` ```
Отредактируйте `.env`, укажите пароли и S3 креденшелы (опционально). ### 2. Генерация конфигурации Gitea
### 2. Запуск ⚠️ **Важно:** Генерируем `.gitea.env` ПОСЛЕ настройки `.env`:
```bash
docker-compose up generate-config
```
Это создаст `.gitea.env` с подстановкой ваших значений из `.env`.
### 3. Запуск
```bash ```bash
docker-compose up -d docker-compose up -d
``` ```
При каждом запуске **автоматически**:
1. 🔧 Обновляется `.gitea.env` из `.env`
2. 🔄 Применяется новая конфигурация
3. 🚀 Запускаются все сервисы
Сервер доступен по адресу [http://127.0.0.1:8080](http://127.0.0.1:8080). Сервер доступен по адресу [http://127.0.0.1:8080](http://127.0.0.1:8080).
### 3. Первичная настройка ### 4. Первичная настройка
При первом входе укажите: При первом входе укажите:
- Название сайта - Название сайта
@@ -50,23 +66,14 @@ docker-compose up -d
Используется решение **[docker-s3-backup](https://github.com/gromov-io/docker-s3-backup)** — элегантный способ бэкапа всего проекта (база данных + файлы). Используется решение **[docker-s3-backup](https://github.com/gromov-io/docker-s3-backup)** — элегантный способ бэкапа всего проекта (база данных + файлы).
### Настройка
1. В `.env` укажите S3 креденшелы: Сервис `backup` автоматически:
```bash
S3_ENDPOINT=storage.yandexcloud.net
S3_ACCESS_KEY=ваш_ключ
S3_SECRET_KEY=ваш_секрет
S3_BUCKET=ваш_бакет
```
2. Сервис `backup` автоматически:
- Останавливает Gitea и PostgreSQL перед бэкапом - Останавливает Gitea и PostgreSQL перед бэкапом
- Создает архив всего проекта (база данных + файлы) - Создает архив всего проекта (база данных + файлы)
- Загружает в S3 (папка `gitea-backups/`) - Загружает в S3 (папка `gitea-backups/`)
- Запускает сервисы обратно - Запускает сервисы обратно
3. Расписание настраивается в `docker-compose.yaml` (по умолчанию ежедневно в 05:00). Расписание настраивается в `docker-compose.yaml` (по умолчанию ежедневно в 05:00).
### Восстановление ### Восстановление

View File

@@ -1,5 +1,8 @@
services: services:
# ============================================================
# Бэкапы
# ============================================================
backup: backup:
image: ghcr.io/gromov-io/docker-s3-backup:latest image: ghcr.io/gromov-io/docker-s3-backup:latest
container_name: gitea-backup container_name: gitea-backup
@@ -24,6 +27,9 @@ services:
networks: networks:
- gitea_network - gitea_network
# ============================================================
# База данных
# ============================================================
postgres: postgres:
image: postgres:16-alpine image: postgres:16-alpine
container_name: gitea-postgres container_name: gitea-postgres
@@ -42,6 +48,9 @@ services:
timeout: 5s timeout: 5s
retries: 5 retries: 5
# ============================================================
# Git Сервер
# ============================================================
gitea: gitea:
image: gitea/gitea:latest image: gitea/gitea:latest
container_name: gitea container_name: gitea
@@ -52,6 +61,9 @@ services:
environment: environment:
- USER_UID=1000 - USER_UID=1000
- USER_GID=1000 - USER_GID=1000
# Название сайта (корневая секция - пустое имя секции = 4 подчеркивания)
- GITEA____APP_NAME=${SITE_NAME:-GromLab}
# Database Connection (PostgreSQL)
- GITEA__database__DB_TYPE=postgres - GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=postgres:5432 - GITEA__database__HOST=postgres:5432
- GITEA__database__NAME=${POSTGRES_DB} - GITEA__database__NAME=${POSTGRES_DB}
@@ -59,35 +71,51 @@ services:
- GITEA__database__PASSWD=${POSTGRES_PASSWORD} - GITEA__database__PASSWD=${POSTGRES_PASSWORD}
- GITEA__database__SCHEMA=public - GITEA__database__SCHEMA=public
- GITEA__database__SSL_MODE=disable - GITEA__database__SSL_MODE=disable
# Server Configuration
- GITEA__server__APP_DATA_PATH=/data/gitea - GITEA__server__APP_DATA_PATH=/data/gitea
- GITEA__server__DOMAIN - GITEA__server__DOMAIN=${HOST}
- GITEA__server__HTTP_PORT=80 - GITEA__server__HTTP_PORT=80
- GITEA__server__ROOT_URL=${GITEA__server__INSTANCE}/ - GITEA__server__ROOT_URL=${INSTANCE}/
- GITEA__server__LANDING_PAGE - GITEA__server__LANDING_PAGE=explore
- GITEA__server__SSH_PORT - GITEA__server__SSH_PORT=${SSH_PORT}
- GITEA__server__SSH_DOMAIN=${GITEA__server__DOMAIN} - GITEA__server__SSH_DOMAIN=${HOST}
- GITEA__server__MINIMUM_KEY_SIZE_CHECK=false - GITEA__server__MINIMUM_KEY_SIZE_CHECK=false
- GITEA__server__LFS_START_SERVER=true - GITEA__server__LFS_START_SERVER=true
- GITEA__server__LFS_JWT_SECRET - GITEA__server__LFS_JWT_SECRET=${LFS_JWT_SECRET}
- GITEA__server__LFS_HTTP_AUTH_EXPIRY=6h
- GITEA__server__OFFLINE_MODE=false - GITEA__server__OFFLINE_MODE=false
- GITEA__server__ENABLE_GZIP=true - GITEA__server__ENABLE_GZIP=true
- GITEA__storage__STORAGE_TYPE # Storage Type
- GITEA__ui__THEMES - GITEA__storage__STORAGE_TYPE=${STORAGE_TYPE}
- GITEA__ui__DEFAULT_THEME # UI Configuration
- GITEA__service__DISABLE_REGISTRATION - GITEA__ui__DEFAULT_THEME=gitea-auto
- GITEA__service__REGISTER_EMAIL_CONFIRM - GITEA__ui__THEMES=gitea-auto,gitea-light,gitea-dark
- GITEA__openid__ENABLE_OPENID_SIGNIN # Service Configuration
- GITEA__openid__ENABLE_OPENID_SIGNUP - GITEA__service__DISABLE_REGISTRATION=false
- GITEA__mailer__ENABLED - GITEA__service__REGISTER_EMAIL_CONFIRM=true
- GITEA__mailer__FROM - GITEA__service__ENABLE_CAPTCHA=true
- GITEA__mailer__SMTP_ADDR - GITEA__service__DEFAULT_KEEP_EMAIL_PRIVATE=true
- GITEA__mailer__SMTP_PORT - GITEA__service__ENABLE_NOTIFY_MAIL=true
- GITEA__mailer__USER # OpenID Configuration
- GITEA__mailer__PASSWD - GITEA__openid__ENABLE_OPENID_SIGNIN=false
- GITEA__packages__ENABLED - GITEA__openid__ENABLE_OPENID_SIGNUP=false
- GITEA__container__ENABLED # Mailer Configuration
- GITEA__mailer__ENABLED=true
- GITEA__mailer__FROM=${MAIL_USER}
- GITEA__mailer__SMTP_ADDR=${MAIL_SMTP_ADDR}
- GITEA__mailer__SMTP_PORT=${MAIL_SMTP_PORT}
- GITEA__mailer__USER=${MAIL_USER}
- GITEA__mailer__PASSWD=${MAIL_PASSWD}
- GITEA__mailer__PROTOCOL=${MAIL_SMTP_PROTOCOL}
- GITEA__mailer__IS_TLS_ENABLED=true
- GITEA__mailer__SKIP_VERIFY=false
- GITEA__mailer__HELO_HOSTNAME=${MAIL_HELO_HOSTNAME}
# Packages & Container Configuration
- GITEA__packages__ENABLED=true
- GITEA__container__ENABLED=true
# Custom Path
- GITEA_CUSTOM=/data/gitea/custom - GITEA_CUSTOM=/data/gitea/custom
# S3 Storage Configuration # General Storage Configuration
- GITEA__storage__SERVE_DIRECT=true - GITEA__storage__SERVE_DIRECT=true
- GITEA__storage__MINIO_ENDPOINT=${S3_ENDPOINT} - GITEA__storage__MINIO_ENDPOINT=${S3_ENDPOINT}
- GITEA__storage__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY} - GITEA__storage__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY}
@@ -95,8 +123,8 @@ services:
- GITEA__storage__MINIO_BUCKET=${S3_BUCKET} - GITEA__storage__MINIO_BUCKET=${S3_BUCKET}
- GITEA__storage__MINIO_LOCATION=${S3_LOCATION} - GITEA__storage__MINIO_LOCATION=${S3_LOCATION}
- GITEA__storage__MINIO_USE_SSL=${S3_USE_SSL} - GITEA__storage__MINIO_USE_SSL=${S3_USE_SSL}
# Git LFS S3 Configuration # Git LFS Configuration
- GITEA__lfs__STORAGE_TYPE=${GITEA__storage__STORAGE_TYPE} - GITEA__lfs__STORAGE_TYPE=${STORAGE_TYPE}
- GITEA__lfs__SERVE_DIRECT=true - GITEA__lfs__SERVE_DIRECT=true
- GITEA__lfs__MINIO_ENDPOINT=${S3_ENDPOINT} - GITEA__lfs__MINIO_ENDPOINT=${S3_ENDPOINT}
- GITEA__lfs__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY} - GITEA__lfs__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY}
@@ -105,17 +133,17 @@ services:
- GITEA__lfs__MINIO_LOCATION=${S3_LOCATION} - GITEA__lfs__MINIO_LOCATION=${S3_LOCATION}
- GITEA__lfs__MINIO_USE_SSL=${S3_USE_SSL} - GITEA__lfs__MINIO_USE_SSL=${S3_USE_SSL}
- GITEA__lfs__PATH=lfs/ - GITEA__lfs__PATH=lfs/
# Actions S3 Configuration # Actions Configuration
- GITEA__actions__ENABLED=true - GITEA__actions__ENABLED=true
- GITEA__actions__STORAGE_TYPE=${GITEA__storage__STORAGE_TYPE} - GITEA__actions__STORAGE_TYPE=${STORAGE_TYPE}
- GITEA__actions__MINIO_ENDPOINT=${S3_ENDPOINT} - GITEA__actions__MINIO_ENDPOINT=${S3_ENDPOINT}
- GITEA__actions__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY} - GITEA__actions__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY}
- GITEA__actions__MINIO_SECRET_ACCESS_KEY=${S3_SECRET_KEY} - GITEA__actions__MINIO_SECRET_ACCESS_KEY=${S3_SECRET_KEY}
- GITEA__actions__MINIO_BUCKET=${S3_BUCKET} - GITEA__actions__MINIO_BUCKET=${S3_BUCKET}
- GITEA__actions__MINIO_LOCATION=${S3_LOCATION} - GITEA__actions__MINIO_LOCATION=${S3_LOCATION}
- GITEA__actions__MINIO_USE_SSL=${S3_USE_SSL} - GITEA__actions__MINIO_USE_SSL=${S3_USE_SSL}
# Packages S3 Configuration # Packages Configuration
- GITEA__packages__STORAGE_TYPE=${GITEA__storage__STORAGE_TYPE} - GITEA__packages__STORAGE_TYPE=${STORAGE_TYPE}
- GITEA__packages__SERVE_DIRECT=true - GITEA__packages__SERVE_DIRECT=true
- GITEA__packages__MINIO_ENDPOINT=${S3_ENDPOINT} - GITEA__packages__MINIO_ENDPOINT=${S3_ENDPOINT}
- GITEA__packages__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY} - GITEA__packages__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY}
@@ -124,8 +152,8 @@ services:
- GITEA__packages__MINIO_LOCATION=${S3_LOCATION} - GITEA__packages__MINIO_LOCATION=${S3_LOCATION}
- GITEA__packages__MINIO_USE_SSL=${S3_USE_SSL} - GITEA__packages__MINIO_USE_SSL=${S3_USE_SSL}
- GITEA__packages__PATH=packages/ - GITEA__packages__PATH=packages/
# Avatar S3 Configuration # Avatar Configuration
- GITEA__avatar__STORAGE_TYPE=${GITEA__storage__STORAGE_TYPE} - GITEA__avatar__STORAGE_TYPE=${STORAGE_TYPE}
- GITEA__avatar__SERVE_DIRECT=true - GITEA__avatar__SERVE_DIRECT=true
- GITEA__avatar__MINIO_ENDPOINT=${S3_ENDPOINT} - GITEA__avatar__MINIO_ENDPOINT=${S3_ENDPOINT}
- GITEA__avatar__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY} - GITEA__avatar__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY}
@@ -134,8 +162,8 @@ services:
- GITEA__avatar__MINIO_LOCATION=${S3_LOCATION} - GITEA__avatar__MINIO_LOCATION=${S3_LOCATION}
- GITEA__avatar__MINIO_USE_SSL=${S3_USE_SSL} - GITEA__avatar__MINIO_USE_SSL=${S3_USE_SSL}
- GITEA__avatar__PATH=avatars/ - GITEA__avatar__PATH=avatars/
# Attachments S3 Configuration # Attachments Configuration
- GITEA__attachment__STORAGE_TYPE=${GITEA__storage__STORAGE_TYPE} - GITEA__attachment__STORAGE_TYPE=${STORAGE_TYPE}
- GITEA__attachment__SERVE_DIRECT=true - GITEA__attachment__SERVE_DIRECT=true
- GITEA__attachment__MINIO_ENDPOINT=${S3_ENDPOINT} - GITEA__attachment__MINIO_ENDPOINT=${S3_ENDPOINT}
- GITEA__attachment__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY} - GITEA__attachment__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY}
@@ -144,8 +172,8 @@ services:
- GITEA__attachment__MINIO_LOCATION=${S3_LOCATION} - GITEA__attachment__MINIO_LOCATION=${S3_LOCATION}
- GITEA__attachment__MINIO_USE_SSL=${S3_USE_SSL} - GITEA__attachment__MINIO_USE_SSL=${S3_USE_SSL}
- GITEA__attachment__PATH=attachments/ - GITEA__attachment__PATH=attachments/
# Repository Archive S3 Configuration # Repository Archive Configuration
- GITEA__repo-archive__STORAGE_TYPE=${GITEA__storage__STORAGE_TYPE} - GITEA__repo-archive__STORAGE_TYPE=${STORAGE_TYPE}
- GITEA__repo-archive__SERVE_DIRECT=true - GITEA__repo-archive__SERVE_DIRECT=true
- GITEA__repo-archive__MINIO_ENDPOINT=${S3_ENDPOINT} - GITEA__repo-archive__MINIO_ENDPOINT=${S3_ENDPOINT}
- GITEA__repo-archive__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY} - GITEA__repo-archive__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY}
@@ -154,7 +182,7 @@ services:
- GITEA__repo-archive__MINIO_LOCATION=${S3_LOCATION} - GITEA__repo-archive__MINIO_LOCATION=${S3_LOCATION}
- GITEA__repo-archive__MINIO_USE_SSL=${S3_USE_SSL} - GITEA__repo-archive__MINIO_USE_SSL=${S3_USE_SSL}
- GITEA__repo-archive__PATH=repo-archive/ - GITEA__repo-archive__PATH=repo-archive/
# Cache S3 Configuration # Cache Configuration
- GITEA__cache__ENABLED=true - GITEA__cache__ENABLED=true
volumes: volumes:
- ./data:/data - ./data:/data
@@ -165,8 +193,8 @@ services:
networks: networks:
- gitea_network - gitea_network
ports: ports:
- ${GITEA__server__DOCKER_SSH_PORT}:22 - ${DOCKER_SSH_PORT}:22
- ${GITEA__server__PORT}:80 - ${DOCKER_HTTP_PORT}:80
networks: networks:
gitea_network: gitea_network:

View File

@@ -1,144 +1,55 @@
# ===========================================
# Конфигурация базы данных PostgreSQL
#
# Этот блок содержит настройки для подключения к базе данных PostgreSQL.
# ===========================================
# Имя пользователя PostgreSQL
POSTGRES_USER=gitea
# Пароль пользователя PostgreSQL
POSTGRES_PASSWORD=gitea_secure_password
# Название базы данных
POSTGRES_DB=gitea
# =========================================== # ===========================================
# Конфигурация сервера # Конфигурация сервера
#
# Этот блок содержит настройки, связанные с основной функциональностью сервера Gitea,
# включая домен, URL экземпляра, порты и настройки LFS.
# =========================================== # ===========================================
# Основной URL-адрес экземпляра Gitea. # URL-адрес экземпляра Gitea. (для прода пишем полный домен, пример: https://gromlab.ru)
GITEA__server__INSTANCE=http://127.0.0.1 INSTANCE=http://127.0.0.1
# Порты HTTP и SSH на которых будет запущен докер. # Порты приложения.
GITEA__server__PORT=8080 DOCKER_HTTP_PORT=8080
GITEA__server__DOCKER_SSH_PORT=222 DOCKER_SSH_PORT=222
# Вид SSH url, пример: ssh://git@127.0.0.1:222/gromov/test.git
HOST=127.0.0.1
SSH_PORT=222
# Домен и порт которые будут отображаться при клонировании/скачивании репозитория. # Не особо важные опции
GITEA__server__DOMAIN=127.0.0.1 SITE_NAME=GromLab
GITEA__server__SSH_PORT=222 STORAGE_TYPE=minio
# Секретный ключ для JWT-аутентификации для Large File Storage (LFS). # ОБЯЗАТЕЛЬНО изменить на другую рандомную строку.
GITEA__server__LFS_JWT_SECRET=lfs-secret-string LFS_JWT_SECRET=qGuZz8ZktbppUPjRyhvbdqB7eCNJ2d
# Время жизни JWT токенов для LFS операций (6 часов для больших файлов).
GITEA__server__LFS_HTTP_AUTH_EXPIRY=6h
# Переопределяем стартову страницу, вместо промо ставим редирект на страницу авторизации.
GITEA__server__LANDING_PAGE=explore
# =========================================== # ===========================================
# Конфигурация пользовательского интерфейса (UI) # Конфигурация базы данных PostgreSQL
#
# Этот блок содержит настройки для пользовательского интерфейса Gitea, такие как
# тема по умолчанию и доступные темы.
# =========================================== # ===========================================
# Тема по умолчанию для интерфейса Gitea. POSTGRES_USER=gitea
GITEA__ui__DEFAULT_THEME=gitea-auto POSTGRES_PASSWORD=gitea_secure_password
# Список доступных тем через запятую. POSTGRES_DB=gitea
GITEA__ui__THEMES=gitea-auto,gitea-light,gitea-dark,github-auto,github-light,github-dark,github-soft-dark
# ===========================================
# Конфигурация служб и аутентификации
#
# Этот блок содержит настройки для регистрации пользователей, OpenID и других
# функций на уровне сервиса.
# ===========================================
# Отключить регистрацию пользователей. Установите 'true', чтобы запретить регистрацию новых пользователей.
GITEA__service__DISABLE_REGISTRATION=false
# Включить OpenID для входа пользователей.
GITEA__openid__ENABLE_OPENID_SIGNIN=false
# Включить OpenID для регистрации пользователей.
GITEA__openid__ENABLE_OPENID_SIGNUP=false
# Включить подтверждение регистрации.
GITEA__service__REGISTER_EMAIL_CONFIRM=true
# ===========================================
# Конфигурация хранилища
#
# Этот блок определяет бэкенд для хранения данных Gitea. Это может быть локальное
# хранилище или облачное решение, такое как S3 (например, Minio).
# ===========================================
# Тип используемого хранилища. 'local' для локальной файловой системы, 'minio' для S3-совместимого хранилища.
GITEA__storage__STORAGE_TYPE=minio
# =========================================== # ===========================================
# Конфигурация S3 хранилища # Конфигурация S3 хранилища
#
# Общие настройки для всех типов S3 хранилища в Gitea.
# Детальная конфигурация каждого типа хранилища находится в docker-compose.yaml
#
# Для включения S3 хранилища измените GITEA__storage__STORAGE_TYPE=minio
# =========================================== # ===========================================
# Эндпоинт S3 сервиса (Yandex Object Storage)
S3_ENDPOINT=storage.yandexcloud.net S3_ENDPOINT=storage.yandexcloud.net
# Ключи доступа к S3
S3_ACCESS_KEY= S3_ACCESS_KEY=
S3_SECRET_KEY= S3_SECRET_KEY=
# Название бакета для хранения всех данных Gitea S3_BUCKET=dev.gromlab.gitea
S3_BUCKET=
# Регион Yandex Cloud
S3_LOCATION=ru-central1 S3_LOCATION=ru-central1
# Использование SSL для подключения к S3
S3_USE_SSL=true S3_USE_SSL=true
# =========================================== # ===========================================
# Конфигурация почтового сервера (SMTP) # Конфигурация почтового сервера (SMTP)
#
# Этот блок содержит настройки для отправки электронных писем из Gitea, таких как
# уведомления и сброс пароля.
# =========================================== # ===========================================
# Включить почтовую службу. MAIL_SMTP_PROTOCOL=smtps
GITEA__mailer__ENABLED=true MAIL_SMTP_ADDR=smtp.mail.ru
# Адрес электронной почты, с которого будут отправляться письма. MAIL_SMTP_PORT=465
GITEA__mailer__FROM=no-reply@gromlab.ru MAIL_USER=no-reply@gromlab.ru
# Адрес SMTP-сервера. MAIL_PASSWD=
GITEA__mailer__SMTP_ADDR=smtp.mail.ru MAIL_HELO_HOSTNAME=gromlab.ru
# Порт SMTP-сервера.
GITEA__mailer__SMTP_PORT=465
# Имя пользователя для аутентификации на SMTP-сервере.
GITEA__mailer__USER=no-reply@gromlab.ru
# Пароль для аутентификации на SMTP-сервере.
GITEA__mailer__PASSWD=
# Протокол для SMTP (для Mail.ru нужен SSL).
GITEA__mailer__PROTOCOL=smtps
# Включить TLS для безопасного соединения.
GITEA__mailer__IS_TLS_ENABLED=true
# Пропустить проверку TLS сертификата (если нужно).
GITEA__mailer__SKIP_VERIFY=false
# Имя хоста для HELO команды.
GITEA__mailer__HELO_HOSTNAME=gromlab.ru