Конфигурация Gitea docker-compose с Traefik и PostgreSQL

Это конфигурация Gitea для производственного использования, которую я сейчас рекомендую для малых и средних компаний. Она использует PostgreSQL в качестве бэкенда и Traefik в качестве обратного прокси.

См. Simple Traefik Docker-Compose Setup With Lets Encrypt Cloudflare DNS-01 & TLS-ALPN-01 & HTTP-01 Challenges для дополнительной информации о настройке Traefik, которую я использую.

Сначала запустите скрипт инициализации для создания необходимых каталогов с правильными правами и выбора случайного пароля PostgreSQL.

gitea_init.sh
#!/bin/sh
# gitea initialize script
echo POSTGRES_PASSWORD=$(pwgen 30 1) > .env
mkdir -p gitea_data gitea_config
chown -R 1000:1000 gitea_data gitea_config

Конфигурация docker-compose

Обратите внимание, что есть несколько отличий от официального руководства по установке Gitea Docker:

  • Мы используем случайный пароль PostgreSQL вместо gitea. См. этот пост о том, почему это крайне важно
  • Мы не используем выделенную сеть, так как docker-compose всё равно создаст отдельную сеть.
  • Мы не используем SSH, потому что нам это просто не нужно. Git на основе HTTPS работает более чем достаточно хорошо в 2024 году.
docker-compose.yml
services:
  postgres:
    image: postgres:17
    restart: unless-stopped
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=gitea
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
  gitea:
    image: gitea/gitea:latest-rootless
    container_name: gitea
    depends_on:
      - postgres
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=postgres:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=${POSTGRES_PASSWORD}
    restart: unless-stopped
    volumes:
      - ./gitea_data:/var/lib/gitea
      - ./gitea_config:/etc/gitea
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.gitea.rule=Host(`gitea.mydomain.com`)"
      - "traefik.http.routers.gitea.entrypoints=websecure"
      - "traefik.http.routers.gitea.tls.certresolver=cloudflare"
      - "traefik.http.routers.gitea.tls.domains[0].main=mydomain.com"
      - "traefik.http.routers.gitea.tls.domains[0].sans=*.mydomain.com"
      - "traefik.http.services.gitea.loadbalancer.server.port=3000"

Теперь вы можете создать systemd-сервис для автоматического запуска Gitea. Подробнее см. наш пост о docker-compose systemd-сервисах

create_gitea_service.sh
curl -fsSL https://techoverflow.net/scripts/create-docker-compose-service.sh | sudo bash /dev/stdin

Как начать работу

Теперь настройте Gitea, открыв ваш домен в браузере. Поле schema нужно оставить пустым.


Check out similar posts by category: Git Gitea Docker