Два док-контейнера с Traefik на одном хосте - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь настроить сервер на моем Raspberry Pi для запуска Nextcloud и Firefly III с traefik в качестве обратного прокси-сервера. Я использую docker-compose, и Portainer работает нормально с https (включен в код для тестирования), но я не могу запустить Nextcloud или Firefly вообще. Когда я использую официальную документацию для Firefly, я могу заставить ее работать, и когда я использую NextcloudPi сам по себе, я также могу заставить его работать, но я не могу заставить их работать одновременно. FF выдает 403 Forbidden «У вас нет разрешения на доступ / на этом сервере». ошибка, когда Nextcloud выдает ошибку "Bad Gateway". Я был бы признателен за любую помощь, которую я могу получить по этому поводу, так как я уже прочитал как можно больше сайтов, и я не знаю, что еще делать.

Это мой docker-compose.yml:

version: "3.2"

services:
  # Reverse Proxy and Let's Encrypt
  traefik:
    container_name: traefik
    image: traefik:alpine
    restart: always
    networks:
      - srv
      - firefly_iii_net
      - proxy-tier
    ports:
      - 80:80
      - 443:443
    volumes:
      - /opt/traefik/traefik.toml:/traefik.toml
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/traefik/acme.json:/acme.json

  # Portainer
  portainer:
    container_name: portainer
    image: portainer/portainer
    restart: always
    networks:
      - srv
    ports:
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/portainer:/data
    labels:
      - traefik.enable=true
      - "traefik.frontend.rule=Host:port.skdjfgsl.club"

  db:
    image: postgres:alpine
    restart: always
    volumes:
      - db:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud

  app:
    image: nextcloud:fpm-alpine
    restart: always
    volumes:
      - nextcloud:/var/www/html
    environment:
      - POSTGRES_HOST=db
      - POSTGRES_PASSWORD=
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
    depends_on:
      - db
    networks:
      - proxy-tier
    expose:
      - 80
      - 443
    labels:
      - traefik.enable=true
      - "traefik.frontend.rule=Host:nc.skdjfgsl.club"

  firefly_iii_app: 
    environment: 
      - FF_DB_HOST=firefly_iii_db
      - FF_DB_NAME=firefly
      - FF_DB_USER=firefly
      - FF_DB_PASSWORD=firefly
      - FF_APP_KEY=S0m3R@nd0mStr1ngOf32Ch@rsEx@ctly
      - FF_APP_ENV=local
      - FF_DB_CONNECTION=pgsql
      - TZ=Europe/Amsterdam
      - APP_LOG_LEVEL=debug
      - TRUSTED_PROXIES=**
    image: jc5x/firefly-iii
    links: 
      - firefly_iii_db
    networks: 
      - firefly_iii_net
    volumes: 
      - 
        source: firefly_iii_export
        target: /var/www/firefly-iii/storage/export
        type: volume
      - 
        source: firefly_iii_upload
        target: /var/www/firefly-iii/storage/upload
        type: volume
    expose:
      - 80
      - 443
    labels:
      - traefik.enable=true
      - "traefik.frontend.rule=Host:ff.skdjfgsl.club"
      - traefik.port=443

  firefly_iii_db: 
    environment: 
      - POSTGRES_PASSWORD=firefly
      - POSTGRES_USER=firefly
    image: "postgres:10"
    networks: 
      - firefly_iii_net
    volumes: 
      - "firefly_iii_db:/var/lib/postgresql/data"

networks:
  srv:
  firefly_iii_net: 
    driver: bridge
  proxy-tier:

volumes:
  db:
  nextcloud:
  firefly_iii_db: ~
  firefly_iii_export: ~
  firefly_iii_upload: ~

Это мой traefik.toml:

defaultEntryPoints = ["http", "https"]

logLevel = "DEBUG"

[entryPoints]
  [entryPoints.http]
    address = ":80"
      [entryPoints.http.redirect]
        entryPoint = "https"
  [entryPoints.https]
    address = ":443"
      [entryPoints.https.tls]

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "mydomain.com"
exposedByDefault = false
watch = true

[acme]
email = "email@mydomain.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
  [acme.httpChallenge]
  entryPoint = "http"

1 Ответ

0 голосов
/ 12 мая 2019

Чтобы перейти к порту 443 (https), вам нужно настроить протокол, используемый traefik для связи с контейнером, с помощью следующей метки:

- traefik.protocol=https

Плохой шлюз может означать, что traefik пытается подключиться кнеправильный порт, неправильный IP-адрес или трафик и контейнер не развернут в общей сети.Вы можете исправить первые два, указав порт и имя сети:

- traefik.port=80
- traefik.docker.network=project_proxy-tier

Где проект - это имя вашего составного проекта (используйте docker network ls, чтобы увидеть внешнее имя вашей сети).

...