Спустя годы после того, как мой первый домашний сервер умер, я решил снова его завести. На этот раз ради обучения и большей гибкости я делаю это с контейнерами докеров.
Дело в том, что я настроил обратный прокси-сервер с nginx и компаньоном let's ecnrypt, чтобы обеспечить шифрование SSL и избежать переадресации большего количества портов на моем маршрутизаторе.
Это работает почти безупречно, с моего телефона с мобильными данными или из совершенно другой сети я могу получить доступ к своим услугам без каких-либо проблем. Проблема возникает, когда я пытаюсь получить доступ сюда в той же локальной сети, я могу получить доступ 1/10 раз, а остальные 9/10 тайм-аутов.
Нет никакой разницы в том, как я пытаюсь подключиться; в обоих случаях через веб-браузер с использованием <subdomain>.<domain>
как URL-адрес
Это мои текущие контейнеры:
Что касается моего текущего файла docker-compose, то он такой:
версия: '3'
Сервисы:
обратный прокси:
изображение: jwilder/nginx-прокси
порты:
- «80:80»
- '443:443'
container_name: обратный прокси
сети:
сервисная_сеть: ноль
тома:
- '/var/run/docker.sock:/tmp/docker.sock:ro'
- '.\nginx\certs:/etc/nginx/certs'
- '.\nginx\vhosts:/etc/nginx/vhost.d'
- '.\nginx\html:/usr/share/nginx/html'
ACME-SSL:
изображение: jrcs/letsencrypt-nginx-proxy-companion
зависит от:
- обратный прокси
среда:
NGINX_PROXY_CONTAINER: обратный прокси
сети:
сервисная_сеть: ноль
тома:
- '/var/run/docker.sock:/var/run/docker.sock:ro'
- '.\nginx\certs:/etc/nginx/certs'
- '.\nginx\vhosts:/etc/nginx/vhost.d'
- '.\nginx\html:/usr/share/nginx/html'
нгинкс:
изображение: nginx
зависит от:
- обратный прокси
порты:
- '8080:80'
разоблачать:
- 8080
среда:
- NGINX_HOST=<ДОМЕН>
- NGINX_PORT=80
- HTTP_PORT=8080
- ВИРТУАЛЬНЫЙ_ХОСТ=<ДОМЕН>
- LETSENCRYPT_HOST=<ДОМЕН>
- LETSENCRYPT_EMAIL=<ЭЛЕКТРОННАЯ ПОЧТА>
сети:
сервисная_сеть: ноль
тома:
- '.\<КАТАЛОГ>:/usr/share/nginx/html'
коэль:
изображение: hyzual/koel
зависит от:
- обратный прокси
- база данных
порты:
- «8000:80»
разоблачать:
- 8000
среда:
- HTTP_PORT=8000
- VIRTUAL_HOST=<СУБДОМЕН>.<ДОМЕН>
- LETSENCRYPT_HOST=<СУБДОМЕН>.<ДОМЕН>
- LETSENCRYPT_EMAIL=<ЭЛЕКТРОННАЯ ПОЧТА>
- DB_CONNECTION=mysql
- DB_HOST=база данных
- DB_USERNAME=коэль
- DB_PASSWORD=<ПАРОЛЬ>
- DB_DATABASE=коэль
- FORCE_HTTPS=истина
- LASTFM_API_KEY=<API_SECRET>
- LASTFM_API_SECRET=<API_KEY>
сети:
сервисная_сеть: ноль
db_network: ноль
тома:
- '/e/музыка:/музыка'
- '.\koel\covers:/var/www/html/public/img/covers'
- '.\koel\search_index:/var/www/html/storage/search-indexes'
база данных:
изображение: 'mysql/mysql-сервер: 5.7'
тома:
- '.\mysql:/var/lib/mysql'
среда:
- MYSQL_ROOT_PASSWORD=<ПАРОЛЬ>
- MYSQL_DATABASE=коэль
- MYSQL_USER=куль
- MYSQL_PASSWORD=<ПАРОЛЬ>
сети:
db_network: ноль
сети:
сервис_сеть:
водитель: мост
db_network:
водитель: мост
*Я изменил некоторые значения на описания между < >
поскольку они содержат личную информацию.