Поднимаю проект laravel в докере, на дев машине.
Все всегда работало, прилагаю листинг компоуз файла (много лишнего, тут но не суть)
version: "3.8"
services:
traefik:
container_name: wb_traefik
image: traefik:latest
command:
- --providers.docker
- --providers.docker.exposedByDefault=false
- --providers.file.filename=/etc/traefik/traefik-certs.yml
- --providers.file.watch=true
- --entrypoints.http.address=:80
- --entrypoints.https.address=:443
- --api.dashboard=true
- --api.insecure=true
ports:
- "80:80"
- "8080:8080"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./docker/treafik/traefik-certs.yml:/etc/traefik/traefik-certs.yml"
- "./docker/treafik/certs:/etc/traefik/certs"
frontend:
container_name: wb_frontend
build:
context: docker
dockerfile: nginx/development/frontend/Dockerfile
volumes:
- ./frontend:/app
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true"
- "traefik.http.services.frontend.loadBalancer.server.port=80"
- "traefik.http.routers.frontend.entrypoints=http"
- "traefik.http.routers.frontend.rule=Host(`wb.loc`)"
- "traefik.http.routers.frontend.middlewares=redirect-to-https"
- "traefik.http.routers.frontend-secure.entrypoints=https"
- "traefik.http.routers.frontend-secure.rule=Host(`wb.loc`)"
- "traefik.http.routers.frontend-secure.tls=true"
frontend-node:
container_name: wb_frontend_node
build:
context: docker
dockerfile: node/development/Dockerfile
volumes:
- ./frontend:/app
command: npm run dev
tty: true
labels:
- "traefik.enable=true"
- "traefik.http.routers.vitesocket.service=vitesocket"
- "traefik.http.services.vitesocket.loadbalancer.server.port=24678"
- "traefik.http.routers.vitesocket.rule=Host(`wb.loc`) && PathPrefix(`/_nuxt/hmr/`)"
- "traefik.http.routers.vitesocket.entrypoints=https"
- "traefik.http.routers.vitesocket.tls=true"
frontend-node-cli:
container_name: wb_frontend_node_cli
build:
context: docker
dockerfile: node/development/Dockerfile
volumes:
- ./frontend:/app
backend:
build:
context: docker
dockerfile: nginx/development/backend/Dockerfile
container_name: wb_backend
volumes:
- ./application:/app
depends_on:
- mysql
- api-php-fpm
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true"
- "traefik.http.routers.backend.entrypoints=http"
- "traefik.http.routers.backend.rule=Host(`api.wb.loc`)"
- "traefik.http.routers.backend.middlewares=redirect-to-https"
#- "traefik.http.services.frontend.loadBalancer.server.port=80"
- "traefik.http.routers.backend-secure.entrypoints=https"
- "traefik.http.routers.backend-secure.rule=Host(`api.wb.loc`)"
- "traefik.http.routers.backend-secure.tls=true"
api-php-cli:
build:
context: docker
dockerfile: php-cli/development/Dockerfile
args:
- UID=${UID:-1000}
- GID=${GID:-1000}
- USER=${USER:-app}
container_name: wb_php_cli
environment:
APP_ENV: local
APP_DEBUG: true
APP_URL: ${APP_URL}
DB_HOST: ${DB_HOST}
DB_PORT: ${DB_PORT}
DB_DATABASE: ${DB_DATABASE}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
SANCTUM_STATEFUL_DOMAINS: ${SANCTUM_STATEFUL_DOMAINS}
SESSION_DOMAIN: ${SESSION_DOMAIN}
DOLPHIN_TOKEN: ${DOLPHIN_TOKEN}
DOLPHIN_MAX_PROFILES: ${DOLPHIN_MAX_PROFILES}
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: ${REDIS_PORT}
CHECK_IP_URL: ${CHECK_IP_URL}
SMS_TOKEN: ${SMS_TOKEN}
RUCAPTCHA_TOKEN: ${RUCAPTCHA_TOKEN}
VK_PROTECTED_KEY: ${VK_PROTECTED_KEY}
DADATA_TOKEN: ${DADATA_TOKEN}
DADATA_SECRET: ${DADATA_SECRET}
volumes:
- ./application:/app
depends_on:
- mysql
api-php-fpm:
build:
context: docker
dockerfile: php-fpm/development/Dockerfile
args:
- UID=${UID:-1000}
- GID=${GID:-1000}
- USER=${USER:-app}
container_name: wb_php_fpm
environment:
APP_ENV: local
APP_DEBUG: true
APP_URL: ${APP_URL}
DB_HOST: ${DB_HOST}
DB_PORT: ${DB_PORT}
DB_DATABASE: ${DB_DATABASE}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
SANCTUM_STATEFUL_DOMAINS: ${SANCTUM_STATEFUL_DOMAINS}
SESSION_DOMAIN: ${SESSION_DOMAIN}
DOLPHIN_TOKEN: ${DOLPHIN_TOKEN}
DOLPHIN_MAX_PROFILES: ${DOLPHIN_MAX_PROFILES}
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: ${REDIS_PORT}
CHECK_IP_URL: ${CHECK_IP_URL}
SMS_TOKEN: ${SMS_TOKEN}
RUCAPTCHA_TOKEN: ${RUCAPTCHA_TOKEN}
VK_PROTECTED_KEY: ${VK_PROTECTED_KEY}
DADATA_TOKEN: ${DADATA_TOKEN}
DADATA_SECRET: ${DADATA_SECRET}
volumes:
- ./application:/app
depends_on:
- mysql
mysql:
image: "mysql/mysql-server:8.0"
command: --default-authentication-plugin=mysql_native_password
container_name: wb_mysql
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
redis:
image: "redis:7-alpine3.17"
container_name: wb_redis
ports:
- "6379:6379"
volumes:
- redis_data:/usr/local/etc/redis
volumes:
db_data:
name: wb_db_data
redis_data:
name: wb_redis_data
networks:
default:
name: wb_network
driver: bridge
Суть такая, что есть nginx для фронта и nginx для бека, разруливается входящий запрос через traefik, вообще все работало до того как я решил обновить node-modules зависимости... сейчас я получаю ошибку...
Эта ошибка в контейнере nginx для фронта, те когда я делаю запрос из браузера, traefik верно делегирует его контейнеру с nginx (ну да, я вообще не правил никаких конфигов), а nginx должен прокинуть запрос на ноду, но не получает ответ от контейнера с нодой...
192.168.16.4 - - [16/Sep/2023:09:04:56 +0000] "GET /favicon.ico HTTP/1.1" 502 552 "https://wb.loc/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" "192.168.16.1"
2023-09-16T09:04:56.659849734Z 2023/09/16 09:04:56 [error] 40#40: *8 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.16.4, server: , request: "GET / HTTP/1.1", upstream: "http://192.168.16.3:3000/", host: "wb.loc"
внутри nginx у меня такой конфиг
location / {
set $upstream http://frontend-node:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass $upstream;
proxy_redirect off;
}
те я проксирую на запущенную ноду, ранее все работало....
ip адреса верные, контейнер проинспектировал, те в DNS проблем нет
Зашел в контейнер с нодой там пробрал curl localhost:3000 - увидел верстку (те dev сервер висит на 3000 порту в контейнере).. wtf?
зашел в nginx контейнер, там пинганул ip ping 192.168.16.3 (контейнер с node) - все хорошо, но до 3000 порта не достучаться, почему, что не так? (теперь дев сервер стартует как-то иначе... да вроде нет)
образ ноды у меня FROM node:19.6-alpine3.17, работает от юзера node (1000)