Матричный (синапс) домашний сервер с Traefik и Let's Encrypt
Мне бы очень хотелось запустить матричный сервер (синапс), используя traefik для LetsEncrypt. Кроме того, я бы счел желательным, если бы в сети был полный пример, актуальный в середине 2020 года:-), чтобы другим было легче это настроить.
Я, к сожалению, провел безнадежные дни в этой теме. Я был бы очень признателен, если бы кто-нибудь мог помочь.
Что я хочу получить (один докер-контейнер на маркер):
- Traefik (как обратный прокси, чтобы не предоставлять отдельные сервисы напрямую внешним портам; для обработки Let's Encrypt)
- Synapse (как первая цель установки, чтобы запустить базовую службу; если возможно, как один докер-компоновщик с SQL-сервером)
- позже: бунт как локальная установка
Одна из моих проблем, похоже, заключается в том, что способ конфигурации контейнеров (Traefik, Synapse?) Изменился за последние 12 месяцев, так что шаблоны в сети, похоже, сейчас можно использовать. Я натыкаюсь на синтаксические ошибки, когда использую шаблоны в сети, особенно для Traefik/docker.
Что я сделал:
Структура каталогов для Traefik:
matrix.myhost.de:/var/docker_data/traefik# ls -l
-rw-r--r-- 1 root root 0 Jun 11 18:26 acme.json
-rw-r--r-- 1 root root 1552 Jun 13 13:24 docker-compose.yml
-rw-r--r-- 1 root root 563 Jun 13 13:22 traefik.toml
Docker-compose для Traefik:
matrix.myhost.de:/var/docker_data/traefik# cat docker-compose.yml
version: '3'
services:
traefik:
image: traefik:latest
container_name: traefik
ports:
- "80:80"
- "8080:8080"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/docker_data/traefik:/etc/traefik
labels:
- traefik.frontend.rule=Host:traefik.myhost.de
- traefik.frontend.entryPoints=https
- traefik.port=8080
- traefik.frontend.auth.basic=admin:somePW
- traefik.backend=traefik
Конфигурация для Traefik:
matrix.myhost.de:/var/docker_data/traefik# cat traefik.toml
logLevel = "DEBUG"
defaultEntryPoints = ["http", "https"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint="https"
[entryPoints.https]
address = ":443"
# [entryPoints.https.tls]
[api]
dashboard = true
insecure = true
[certificateResolvers.http.acme]
email = "post@myaddress.de"
storage = "/etc/traefik/acme.json"
entryPoint = "http"
onHostRule = true
acmeLogging =true
[acme.httpChallenge]
entryPoint = "http"
[providers.docker]
endpoint = "unix:///var/run/docker.sock"
exposedByDefault = false
Docker-compose для Synapse:
matrix.myhost.de:/var/docker_data/matrix# cat docker-compose.yml
version: '3.3'
services:
app:
image: matrixdotorg/synapse
restart: always
volumes:
- /var/docker_data/matrix:/data
labels:
- "traefik.frontend.entryPoints=http,https"
- "traefik.port=8008"
- "traefik.backend=matrix"
- "traefik.frontend.rule=Host:matrix.myhost.de"
container_name: matrix
DNS:
matrix.myhost.de и traefik.myhost.de указывают на IP-адрес моего сервера. Для матрицы есть дополнительная запись srv (которая, надеюсь, будет правильной?)
matrix.myhost.de
A: 81.169.XXX.YYY
SRV: _matrix._tcp.matrix 0 10 443 matrix.myhost.de.
traefik.myhost.de
A: 81.169.XXX.YYY
Чего я ожидал:
После "docker-compose up" в каталогах matrix и traefik traefik автоматически регистрирует сайт в Let's Encrypt, я вижу несколько веб-страниц на traefik.myhost.de / matrix.myhost.de и могу их настроить.
Что происходит:
После "docker-compose up" в каталоге matrix и traefik я не получаю сообщений об ошибках от обоих.
НО:
- Вопрос http://traefik.myhost.de:8080/dashboard/ отвечает на панели инструментов
- Вопрос http://matrix.myhost.de:8008/ Я не получаю ответа
- Запрашивая http://matrix.myhost.de/ Я получаю "404 не найден"
- Вопрос http://matrix.myhost.de:443/ Я получаю ошибку сертификата и - после подтверждения - "404 не найден"
Похоже, у меня уже проблемы с Traefik или связью с контейнером матрицы. Но я не понимаю, что именно.
У кого-нибудь есть 2центы?
1 ответ
Похоже, вы используете синтаксис конфигурации для traefik v1.7, который не будет работать с образом traefik: latest. Правило заголовка хоста для версии 2 будет выглядеть так: traefik.http.routers.routername.rule = Host (example.com
)
https://docs.traefik.io/routing/routers/
Также не используйте:
[api]insecure = true
Для всего, что будет общедоступным.