services:                                             # начало объявления сервисов, которые будут запущены
    postgres:                                         # указываем название сервиса
      image: postgres:14                              # указываем название и/или версии образа Docker для Postgres
      restart: always                                 # автоматический перезапуск контейнера, если он упал
      ports:
        - "5432:5432"                                 # пробрасываем порт 5432 из контейнера на хост-машину
                                                      # (слева порт хостовой машины, справа порт контейнера)
      volumes:                                        # указываются монтированные тома, папки, файлы
        - postgres_data:/var/lib/postgresql/data      # монтирует том postgres_data к /var/lib/postgresql/data, 
                                                      # чтобы данные Postgres сохранялись после перезапуска контейнера
      environment:                                    # задаем переменные окружения для Postgres, такие как:
        POSTGRES_USER: postgres_user                  # имя пользователя
        POSTGRES_PASSWORD: postgres_password          # пароль пользователя
        POSTGRES_DB: postgres_db                      # имя БД
    
    gitea:
      image: gitea/gitea:1.22.2
      restart: always
      ports:
        - "3000:3000"                                 # пробрасывает порты 3000 (HTTP, веб-интерфейс)
        - "222:22"                                     # и 22 (SSH) из контейнера на хост-машину
      volumes:
        - gitea_data:/data
      environment:
        GITEA__database__DB_TYPE: postgres
        GITEA__database__HOST: postgres:5432          # хост бд, название сервиса выступает в роли доменного имени и внутри сети разрешается в ip нужного контейнера
        GITEA__database__NAME: postgres_db
        GITEA__database__USER: postgres_user
        GITEA__database__PASSWD: postgres_password
      depends_on:                                     # указывается зависимость запуска контейнера от другого сервиса
        - postgres                                    # Gitea зависит от Postgres, поэтому Postgres будет запущен первым
        - redis
    
    redis:
      image: redis:latest
      restart: always
      ports:
        - "6379:6379"
      volumes: 
        - redis_data:/data

volumes:                                              # определяем тома, которые будут использоваться сервисами
  postgres_data:
  gitea_data:
  redis_data: