diff --git a/.gitignore b/.gitignore index 3c2bd42..fa57283 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ data/* .env +.gitea.env backups/ postgres-data/ diff --git a/README.md b/README.md index 835066d..da9c794 100644 --- a/README.md +++ b/README.md @@ -23,21 +23,37 @@ Docker-окружение для развертывания Gitea с PostgreSQL, ## Быстрый старт ### 1. Конфигурация + ```bash +# Копируем пример и настраиваем 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 docker-compose up -d ``` +При каждом запуске **автоматически**: +1. 🔧 Обновляется `.gitea.env` из `.env` +2. 🔄 Применяется новая конфигурация +3. 🚀 Запускаются все сервисы + Сервер доступен по адресу [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)** — элегантный способ бэкапа всего проекта (база данных + файлы). -### Настройка -1. В `.env` укажите S3 креденшелы: -```bash -S3_ENDPOINT=storage.yandexcloud.net -S3_ACCESS_KEY=ваш_ключ -S3_SECRET_KEY=ваш_секрет -S3_BUCKET=ваш_бакет -``` - -2. Сервис `backup` автоматически: +Сервис `backup` автоматически: - Останавливает Gitea и PostgreSQL перед бэкапом - Создает архив всего проекта (база данных + файлы) - Загружает в S3 (папка `gitea-backups/`) - Запускает сервисы обратно -3. Расписание настраивается в `docker-compose.yaml` (по умолчанию ежедневно в 05:00). +Расписание настраивается в `docker-compose.yaml` (по умолчанию ежедневно в 05:00). ### Восстановление diff --git a/docker-compose.yaml b/docker-compose.yaml index b78d446..b6c3a39 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,5 +1,8 @@ services: + # ============================================================ + # Бэкапы + # ============================================================ backup: image: ghcr.io/gromov-io/docker-s3-backup:latest container_name: gitea-backup @@ -23,7 +26,10 @@ services: - /var/run/docker.sock:/var/run/docker.sock:ro networks: - gitea_network - + + # ============================================================ + # База данных + # ============================================================ postgres: image: postgres:16-alpine container_name: gitea-postgres @@ -42,6 +48,9 @@ services: timeout: 5s retries: 5 + # ============================================================ + # Git Сервер + # ============================================================ gitea: image: gitea/gitea:latest container_name: gitea @@ -52,6 +61,9 @@ services: environment: - USER_UID=1000 - USER_GID=1000 + # Название сайта (корневая секция - пустое имя секции = 4 подчеркивания) + - GITEA____APP_NAME=${SITE_NAME:-GromLab} + # Database Connection (PostgreSQL) - GITEA__database__DB_TYPE=postgres - GITEA__database__HOST=postgres:5432 - GITEA__database__NAME=${POSTGRES_DB} @@ -59,35 +71,51 @@ services: - GITEA__database__PASSWD=${POSTGRES_PASSWORD} - GITEA__database__SCHEMA=public - GITEA__database__SSL_MODE=disable + # Server Configuration - GITEA__server__APP_DATA_PATH=/data/gitea - - GITEA__server__DOMAIN + - GITEA__server__DOMAIN=${HOST} - GITEA__server__HTTP_PORT=80 - - GITEA__server__ROOT_URL=${GITEA__server__INSTANCE}/ - - GITEA__server__LANDING_PAGE - - GITEA__server__SSH_PORT - - GITEA__server__SSH_DOMAIN=${GITEA__server__DOMAIN} - - GITEA__server__MINIMUM_KEY_SIZE_CHECK=false + - GITEA__server__ROOT_URL=${INSTANCE}/ + - GITEA__server__LANDING_PAGE=explore + - GITEA__server__SSH_PORT=${SSH_PORT} + - GITEA__server__SSH_DOMAIN=${HOST} + - GITEA__server__MINIMUM_KEY_SIZE_CHECK=false - 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__ENABLE_GZIP=true - - GITEA__storage__STORAGE_TYPE - - GITEA__ui__THEMES - - GITEA__ui__DEFAULT_THEME - - GITEA__service__DISABLE_REGISTRATION - - GITEA__service__REGISTER_EMAIL_CONFIRM - - GITEA__openid__ENABLE_OPENID_SIGNIN - - GITEA__openid__ENABLE_OPENID_SIGNUP - - GITEA__mailer__ENABLED - - GITEA__mailer__FROM - - GITEA__mailer__SMTP_ADDR - - GITEA__mailer__SMTP_PORT - - GITEA__mailer__USER - - GITEA__mailer__PASSWD - - GITEA__packages__ENABLED - - GITEA__container__ENABLED + # Storage Type + - GITEA__storage__STORAGE_TYPE=${STORAGE_TYPE} + # UI Configuration + - GITEA__ui__DEFAULT_THEME=gitea-auto + - GITEA__ui__THEMES=gitea-auto,gitea-light,gitea-dark + # Service Configuration + - GITEA__service__DISABLE_REGISTRATION=false + - GITEA__service__REGISTER_EMAIL_CONFIRM=true + - GITEA__service__ENABLE_CAPTCHA=true + - GITEA__service__DEFAULT_KEEP_EMAIL_PRIVATE=true + - GITEA__service__ENABLE_NOTIFY_MAIL=true + # OpenID Configuration + - GITEA__openid__ENABLE_OPENID_SIGNIN=false + - GITEA__openid__ENABLE_OPENID_SIGNUP=false + # 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 - # S3 Storage Configuration + # General Storage Configuration - GITEA__storage__SERVE_DIRECT=true - GITEA__storage__MINIO_ENDPOINT=${S3_ENDPOINT} - GITEA__storage__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY} @@ -95,8 +123,8 @@ services: - GITEA__storage__MINIO_BUCKET=${S3_BUCKET} - GITEA__storage__MINIO_LOCATION=${S3_LOCATION} - GITEA__storage__MINIO_USE_SSL=${S3_USE_SSL} - # Git LFS S3 Configuration - - GITEA__lfs__STORAGE_TYPE=${GITEA__storage__STORAGE_TYPE} + # Git LFS Configuration + - GITEA__lfs__STORAGE_TYPE=${STORAGE_TYPE} - GITEA__lfs__SERVE_DIRECT=true - GITEA__lfs__MINIO_ENDPOINT=${S3_ENDPOINT} - GITEA__lfs__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY} @@ -105,17 +133,17 @@ services: - GITEA__lfs__MINIO_LOCATION=${S3_LOCATION} - GITEA__lfs__MINIO_USE_SSL=${S3_USE_SSL} - GITEA__lfs__PATH=lfs/ - # Actions S3 Configuration + # Actions Configuration - 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_ACCESS_KEY_ID=${S3_ACCESS_KEY} - GITEA__actions__MINIO_SECRET_ACCESS_KEY=${S3_SECRET_KEY} - GITEA__actions__MINIO_BUCKET=${S3_BUCKET} - GITEA__actions__MINIO_LOCATION=${S3_LOCATION} - GITEA__actions__MINIO_USE_SSL=${S3_USE_SSL} - # Packages S3 Configuration - - GITEA__packages__STORAGE_TYPE=${GITEA__storage__STORAGE_TYPE} + # Packages Configuration + - GITEA__packages__STORAGE_TYPE=${STORAGE_TYPE} - GITEA__packages__SERVE_DIRECT=true - GITEA__packages__MINIO_ENDPOINT=${S3_ENDPOINT} - GITEA__packages__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY} @@ -124,8 +152,8 @@ services: - GITEA__packages__MINIO_LOCATION=${S3_LOCATION} - GITEA__packages__MINIO_USE_SSL=${S3_USE_SSL} - GITEA__packages__PATH=packages/ - # Avatar S3 Configuration - - GITEA__avatar__STORAGE_TYPE=${GITEA__storage__STORAGE_TYPE} + # Avatar Configuration + - GITEA__avatar__STORAGE_TYPE=${STORAGE_TYPE} - GITEA__avatar__SERVE_DIRECT=true - GITEA__avatar__MINIO_ENDPOINT=${S3_ENDPOINT} - GITEA__avatar__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY} @@ -134,8 +162,8 @@ services: - GITEA__avatar__MINIO_LOCATION=${S3_LOCATION} - GITEA__avatar__MINIO_USE_SSL=${S3_USE_SSL} - GITEA__avatar__PATH=avatars/ - # Attachments S3 Configuration - - GITEA__attachment__STORAGE_TYPE=${GITEA__storage__STORAGE_TYPE} + # Attachments Configuration + - GITEA__attachment__STORAGE_TYPE=${STORAGE_TYPE} - GITEA__attachment__SERVE_DIRECT=true - GITEA__attachment__MINIO_ENDPOINT=${S3_ENDPOINT} - GITEA__attachment__MINIO_ACCESS_KEY_ID=${S3_ACCESS_KEY} @@ -144,8 +172,8 @@ services: - GITEA__attachment__MINIO_LOCATION=${S3_LOCATION} - GITEA__attachment__MINIO_USE_SSL=${S3_USE_SSL} - GITEA__attachment__PATH=attachments/ - # Repository Archive S3 Configuration - - GITEA__repo-archive__STORAGE_TYPE=${GITEA__storage__STORAGE_TYPE} + # Repository Archive Configuration + - GITEA__repo-archive__STORAGE_TYPE=${STORAGE_TYPE} - GITEA__repo-archive__SERVE_DIRECT=true - GITEA__repo-archive__MINIO_ENDPOINT=${S3_ENDPOINT} - 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_USE_SSL=${S3_USE_SSL} - GITEA__repo-archive__PATH=repo-archive/ - # Cache S3 Configuration + # Cache Configuration - GITEA__cache__ENABLED=true volumes: - ./data:/data @@ -165,8 +193,8 @@ services: networks: - gitea_network ports: - - ${GITEA__server__DOCKER_SSH_PORT}:22 - - ${GITEA__server__PORT}:80 + - ${DOCKER_SSH_PORT}:22 + - ${DOCKER_HTTP_PORT}:80 networks: gitea_network: diff --git a/env.example b/env.example index 73f85b8..9ff456b 100644 --- a/env.example +++ b/env.example @@ -1,144 +1,55 @@ -# =========================================== -# Конфигурация базы данных PostgreSQL -# -# Этот блок содержит настройки для подключения к базе данных PostgreSQL. -# =========================================== - -# Имя пользователя PostgreSQL -POSTGRES_USER=gitea - -# Пароль пользователя PostgreSQL -POSTGRES_PASSWORD=gitea_secure_password - -# Название базы данных -POSTGRES_DB=gitea - - - # =========================================== # Конфигурация сервера -# -# Этот блок содержит настройки, связанные с основной функциональностью сервера Gitea, -# включая домен, URL экземпляра, порты и настройки LFS. # =========================================== -# Основной URL-адрес экземпляра Gitea. -GITEA__server__INSTANCE=http://127.0.0.1 +# URL-адрес экземпляра Gitea. (для прода пишем полный домен, пример: https://gromlab.ru) +INSTANCE=http://127.0.0.1 -# Порты HTTP и SSH на которых будет запущен докер. -GITEA__server__PORT=8080 -GITEA__server__DOCKER_SSH_PORT=222 +# Порты приложения. +DOCKER_HTTP_PORT=8080 +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 -GITEA__server__SSH_PORT=222 +# Не особо важные опции +SITE_NAME=GromLab +STORAGE_TYPE=minio -# Секретный ключ для JWT-аутентификации для Large File Storage (LFS). -GITEA__server__LFS_JWT_SECRET=lfs-secret-string - -# Время жизни JWT токенов для LFS операций (6 часов для больших файлов). -GITEA__server__LFS_HTTP_AUTH_EXPIRY=6h - -# Переопределяем стартову страницу, вместо промо ставим редирект на страницу авторизации. -GITEA__server__LANDING_PAGE=explore +# ОБЯЗАТЕЛЬНО изменить на другую рандомную строку. +LFS_JWT_SECRET=qGuZz8ZktbppUPjRyhvbdqB7eCNJ2d # =========================================== -# Конфигурация пользовательского интерфейса (UI) -# -# Этот блок содержит настройки для пользовательского интерфейса Gitea, такие как -# тема по умолчанию и доступные темы. +# Конфигурация базы данных PostgreSQL # =========================================== -# Тема по умолчанию для интерфейса Gitea. -GITEA__ui__DEFAULT_THEME=gitea-auto -# Список доступных тем через запятую. -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 - +POSTGRES_USER=gitea +POSTGRES_PASSWORD=gitea_secure_password +POSTGRES_DB=gitea # =========================================== # Конфигурация S3 хранилища -# -# Общие настройки для всех типов S3 хранилища в Gitea. -# Детальная конфигурация каждого типа хранилища находится в docker-compose.yaml -# -# Для включения S3 хранилища измените GITEA__storage__STORAGE_TYPE=minio # =========================================== -# Эндпоинт S3 сервиса (Yandex Object Storage) S3_ENDPOINT=storage.yandexcloud.net - -# Ключи доступа к S3 S3_ACCESS_KEY= S3_SECRET_KEY= -# Название бакета для хранения всех данных Gitea -S3_BUCKET= -# Регион Yandex Cloud +S3_BUCKET=dev.gromlab.gitea S3_LOCATION=ru-central1 -# Использование SSL для подключения к S3 S3_USE_SSL=true - - # =========================================== # Конфигурация почтового сервера (SMTP) -# -# Этот блок содержит настройки для отправки электронных писем из Gitea, таких как -# уведомления и сброс пароля. # =========================================== -# Включить почтовую службу. -GITEA__mailer__ENABLED=true -# Адрес электронной почты, с которого будут отправляться письма. -GITEA__mailer__FROM=no-reply@gromlab.ru -# Адрес SMTP-сервера. -GITEA__mailer__SMTP_ADDR=smtp.mail.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 +MAIL_SMTP_PROTOCOL=smtps +MAIL_SMTP_ADDR=smtp.mail.ru +MAIL_SMTP_PORT=465 +MAIL_USER=no-reply@gromlab.ru +MAIL_PASSWD= +MAIL_HELO_HOSTNAME=gromlab.ru \ No newline at end of file