===== Traefik =====
==== Аутентификация ====
Пароль нужно кодировать с помощью htpasswd (в т. ч. в Докере), под Windows с помощью [[https://github.com/shoenig/bcrypt-tool|bcrypt-tool]].
# Установить htpasswd
apk add apache2-utils
# Пользователь user, пароль 234567
htpasswd -nb user 234567
user:$apr1$jSrLMlYc$SqO40GakivRBqlS/5UsXL0
# Docker
docker run --rm httpd:alpine htpasswd -nb user 234567
:!: В пароле необходимо удваивать знак доллара!
# В docker-compose.yml
- "traefik.http.routers.service.middlewares=service-auth"
- "traefik.http.middlewares.service-auth.basicauth.users=user:$$apr1$$jSrLMlYc$$SqO40GakivRBqlS/5UsXL0"
https://doc.traefik.io/traefik/v2.0/middlewares/basicauth/
==== Проблема проброса на путь после домена ====
Когда нужно пробрасывать, например,
http://host.local/conv -> container:5800
и при этом писать правила так:
handbrake:
image: jlesage/handbrake
labels:
- "traefik.http.routers.handbrake.rule=Host(`host.local`) && PathPrefix(`/conv`)"
- "traefik.http.middlewares.handbrake-stripprefix.stripprefix.prefixes=/conv"
- "traefik.http.routers.handbrake.middlewares=handbrake-stripprefix"
, то если обращаться на адрес **http://host.local/conv,** будет открываться лишь часть html, остальное грузиться не будет. Нормально работает, если в конце поставить слэш, а именно - **http://host.local/conv/.**
Чтобы сделать удобно, нужно написать так:
labels:
- "traefik.http.routers.handbrake.rule=host(`host.local`) && PathPrefix(`/conv`)"
- "traefik.http.routers.handbrake.middlewares=handbrake-redirectregex, handbrake-replacepathregex"
- "traefik.http.middlewares.handbrake-replacepathregex.replacepathregex.regex=^/conv/(.*)"
- "traefik.http.middlewares.handbrake-replacepathregex.replacepathregex.replacement=/$$1"
- "traefik.http.middlewares.handbrake-redirectregex.redirectregex.regex=^(.*)/conv$$"
- "traefik.http.middlewares.handbrake-redirectregex.redirectregex.replacement=$$1/conv/"
В этом случае слэш будет добавляться. https://stackoverflow.com/questions/41637806/routing-paths-with-traefik
Для Nextcloud пример посложнее:
labels:
- "traefik.http.routers.nextcloud.rule=Host(`host.local`) && PathPrefix(`/cloud`)"
- "traefik.http.routers.nextcloud.middlewares=nextcloud-redirectregex, nextcloud-caldav, nextcloud-replacepath"
- "traefik.http.middlewares.nextcloud-replacepath.stripprefix.prefixes=/cloud"
- "traefik.http.middlewares.nextcloud-caldav.redirectregex.permanent=true"
- "traefik.http.middlewares.nextcloud-caldav.redirectregex.regex=^http://(.*)/.well-known/(card|cal)dav"
- "traefik.http.middlewares.nextcloud-caldav.redirectregex.replacement=http://$${1}/remote.php/dav/"
- "traefik.http.middlewares.nextcloud-redirectregex.redirectregex.regex=^(.*)/cloud$$"
- "traefik.http.middlewares.nextcloud-redirectregex.redirectregex.replacement=$$1/cloud/"
https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html
С поддоменом таких проблем нет - просто пишешь
labels:
- "traefik.http.routers.handbrake.rule=host(`conv.host.local`)"