Затем я хочу, чтобы служба веб-сокетов работала в том же контейнере Linux на порту 3001. p>
У меня есть простой сокет-io, который я начинаю так:
Код: Выделить всё
io = new Server(3001, {
path: "/socket-io/",
cors: {
origin: ["http://localhost:4200", "http://10.0.2.2", "http://localhost", "capacitor://localhost"],
methods: ["GET", "POST"],
},
});
// Ensure it binds to an IPv4 address
io.listen(3001, '0.0.0.0'); // Explicitly bind to IPv4
io.adapter(createAdapter(redisClient, subClient));
io.httpServer.on('listening', async () => {
const address = io.httpServer.address();
const isIPv6 = address.family === 'IPv6';
const host = isIPv6 ? `[${address.address}]` : address.address;
const bindType = isIPv6 ? 'IPv6' : 'IPv4';
await logger.logMessage(undefined, undefined, `Socket.IO server is listening on ${bindType} host: ${host}, port: ${address.port}`);
});
Затем у меня есть файл docker-compose.yml, который создает все мои услуги выглядят так:
Код: Выделить всё
version: '3.8'
services:
rabbitmq:
image: "rabbitmq:management"
container_name: rabbitmq
environment:
- RABBITMQ_DEFAULT_USER=test
- RABBITMQ_DEFAULT_PASS=test
ports:
- "5672:5672"
- "15672:15672"
volumes:
- ~/.docker-conf/rabbitmq/data/:/var/lib/rabbitmq/
- ~/.docker-conf/rabbitmq/log/:/var/log/rabbitmq
networks:
- test-network
restart: always
seq:
image: datalust/seq:latest
container_name: seq
ports:
- "5341:80"
environment:
- ACCEPT_EULA=Y
- VIRTUAL_HOST=seq.test.se
- LETSENCRYPT_HOST=seq.test.se
- [email protected]
volumes:
- ./seq-data:/data
networks:
- test-network
restart: always
redis:
image: redis:latest
container_name: redis
ports:
- "6380:6379"
environment:
- ACCEPT_EULA=Y
- VIRTUAL_HOST=redis.test.se
- LETSENCRYPT_HOST=redis.test.se
- [email protected]
volumes:
- ./data/redis:/data
command: redis-server --appendonly yes
networks:
- test-network
nginx-proxy:
image: jwilder/nginx-proxy:1.2.2
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /etc/nginx/certs:/etc/nginx/certs:ro
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./socket-io.conf:/etc/nginx/conf.d/socket-io.conf
- acme:/etc/acme.sh
networks:
- test-network
restart: always
nginx-letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nginx-letsencrypt
volumes:
- /etc/nginx/certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes_from:
- nginx-proxy
networks:
- test-network
depends_on:
- nginx-proxy
environment:
- NGINX_PROXY_CONTAINER=nginx-proxy
- [email protected]
- LETSENCRYPT_RENEWAL_DAYS=30
restart: always
test-api:
image: ewr.vultrcr.com/test/testapi:latest
container_name: test-api
ports:
- "3000:3000"
environment:
- VIRTUAL_HOST=api.test.se
- VIRTUAL_PORT=3000
- LETSENCRYPT_HOST=api.test.se
- [email protected]
depends_on:
- rabbitmq
networks:
- test-network
restart: always
volumes:
acme:
certs:
networks:
test-network:
driver: bridge
Код: Выделить всё
upstream websocket_backend {
server api.test.se:3001;
}
server {
listen 443;
location /socket-io/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://websocket_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Это сообщение журнала Я получаю событие прослушивания сокета:
"Сервер Socket.IO прослушивает хост IPv6: [::], порт: 3001"
Что я здесь делаю не так? Chatgpt, похоже, не может этого понять....
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/793 ... rent-ports