services:  # Начало объявления сервисов
  gitea:  # Указывается название сервиса 
    image: gitea/gitea:1.22.2  # Указание названия образа (и/или его версии), который будет взят для создания контейнера
    restart: always  # Указывается политика перезапуска, в данном случае всегда перезапускать контейнер, если он остановился
    environment:  # Указываются переменные среды
      - GITEA__database__DB_TYPE=postgres  # Тип базы данных
      - GITEA__database__HOST=postgres:5432  # Хост бд. Название сервиса это а-ля доменное имя и внутри сети разрешается в ip нужного контейнера
      - GITEA__database__NAME=gitea  # Название базы данных
      - GITEA__database__USER=superuser  # Пользователь базы данных
      - GITEA__database__PASSWD=superpassword  # Пароль пользователя базы данных
    ports:  # Перечисляются пробросы портов на хостовую машину. Слева порт хостовой машины, справа порт контейнера
      - "3000:3000"  # Web интерфейс
      - "222:22"  # SSH
    volumes:  # Указываются монтированные тома, папки, файлы. В данном случае в папку /data монтируется объявленный ниже том gitea
      - gitea:/data
    depends_on:  # Указывается зависимость запуска контейнера от другого сервиса, в данном случае запускается только после запуска сервиса бд
      - postgres
  #  Дальше всё по аналогии, различаются лишь названия, переменные окружения, образы, порты и тома
  postgres:
    image: postgres:14
    restart: always
    environment:
      - POSTGRES_USER=superuser
      - POSTGRES_PASSWORD=superpassword
      - POSTGRES_DB=gitea
    ports:
      - "5432:5432"
    volumes:
      - postgres:/var/lib/postgresql/data
    
  rabbitmq:
    image: rabbitmq:3-management
    environment:
      RABBITMQ_DEFAULT_USER: superuser
      RABBITMQ_DEFAULT_PASS: superpassword
    ports:
      - "5672:5672"
      - "15672:15672"

volumes:  # Перечисление томов, которые можно использовать как в одном, так и в нескольких сервисах
  postgres:
  gitea: