CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
18f0c0aa0e82 nginx_proxy "nginx" 3 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp reverse-proxy
64d8d6324ff8 mailing_service "docker-entrypoint.s…" 3 minutes ago Up 3 minutes mailing_srv
8412a4d6cc68 auth_service "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:8081->8080/tcp auth_srv
9263eed81952 api_service "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:8082->8080/tcp api_srv
0113cc7e4c5e postgres:12.6-alpine "docker-entrypoint.s…" 3 minutes ago Up 3 minutes (healthy) 5432/tcp welbex-users_pg-1
fb3824b208d8 rabbitmq:3.10-alpine "docker-entrypoint.s…" 3 minutes ago Up 3 minutes (healthy) 4369/tcp, 5671-5672/tcp, 15691-15692/tcp, 25672/tcp welbex-rabbitmq-1
dc641c60feb3 postgres:12.6-alpine "docker-entrypoint.s…" 3 minutes ago Up 3 minutes (healthy) 5432/tcp
server {
listen 8080;
server_name my-server.ru ;
location /auth {
proxy_pass http://auth_service:8081;
....
location /api {
proxy_pass http://api_service:8082;
В конкретном случае, все происходит на локалке Postmanom шлю запросы
version: "3"
services:
rabbitmq:
image: rabbitmq:3.10-alpine
command: rabbitmq-server
restart: unless-stopped
healthcheck:
test: [ "CMD", "nc", "-z", "localhost", "5672" ]
interval: 5s
timeout: 15s
retries: 5
networks:
- net_amqp_broker
records_pg:
image: postgres:12.6-alpine
restart: unless-stopped
environment:
- PGDATA=/var/lib/postgresql/data/records_data
- POSTGRES_USER=$PG_RECORDS_USER
- POSTGRES_PASSWORD=$PG_RECORDS_PASSWORD
- POSTGRES_DB=$PG_RECORDS_DB
volumes:
- db_records:/var/lib/postgresql/data/records_data
healthcheck:
test: pg_isready -q -d $PG_RECORDS_DB -U $PG_RECORDS_USER
interval: 10s
timeout: 5s
retries: 5
networks:
- net_records_db
users_pg:
image: postgres:12.6-alpine
restart: unless-stopped
environment:
- PGDATA=/var/lib/postgresql/data/users_data
- POSTGRES_USER=$PG_USERS_USER
- POSTGRES_PASSWORD=$PG_USERS_PASSWORD
- POSTGRES_DB=$PG_USERS_DB
volumes:
- db_users:/var/lib/postgresql/data/users_data
healthcheck:
test: pg_isready -q -d $PG_USERS_DB -U $PG_USERS_USER
interval: 10s
timeout: 5s
retries: 5
networks:
- net_users_db
mailing:
container_name: mailing_srv
restart: always
env_file: ./.env
depends_on:
rabbitmq:
condition: service_healthy
build:
context: ./mailing
environment:
- RMQ_USER=${RABBITMQ_DEFAULT_USER:-guest}
- RMQ_PASS=${RABBITMQ_DEFAULT_PASS:-guest}
- RMQ_HOST=${RABBITMQ_DEFAULT_HOST:-rabbitmq}
- RMQ_PORT=${RABBITMQ_DEFAULT_PORT:-5672}
networks:
- net_amqp_broker
records:
container_name: records_srv
restart: always
env_file: ./.env
depends_on:
records_pg:
condition: service_healthy
build:
context: ./records
ports:
- $RECORDS_HOST_PORT:$RECORDS_DOCKER_PORT
environment:
- PG_HOST=records_pg
- PG_PORT=$PG_RECORDS_DOCKER_PORT
- PG_USER=$PG_RECORDS_USER
- PG_PASSWORD=$PG_RECORDS_PASSWORD
- PG_DB=$PG_RECORDS_DB
networks:
- net_records_db
- net_proxy
# - net_records
users:
container_name: users_srv
restart: always
env_file: ./.env
depends_on:
users_pg:
condition: service_healthy
rabbitmq:
condition: service_healthy
build:
context: ./users
ports:
- $USERS_HOST_PORT:$USERS_DOCKER_PORT
environment:
- RMQ_USER=${RABBITMQ_DEFAULT_USER:-guest}
- RMQ_PASS=${RABBITMQ_DEFAULT_PASS:-guest}
- RMQ_HOST=${RABBITMQ_DEFAULT_HOST:-rabbitmq}
- RMQ_PORT=${RABBITMQ_DEFAULT_PORT:-5672}
- PG_HOST=users_pg
- PG_PORT=$PG_USERS_DOCKER_PORT
- PG_USER=$PG_USERS_USER
- PG_PASSWORD=$PG_USERS_PASSWORD
- PG_DB=$PG_USERS_DB
networks:
- net_amqp_broker
- net_users_db
- net_proxy
# - net_users
nginx_proxy:
container_name: reverse-proxy
build:
context: ./proxy
depends_on:
- records
- users
ports:
- 8080:80
networks:
- net_proxy
# networks:
# - net_records
# - net_users
volumes:
db_records:
db_users:
networks:
net_records_db:
driver: bridge
net_users_db:
driver: bridge
net_amqp_broker:
driver: bridge
net_proxy:
# net_records:
# name: net_records_default
# net_users:
# name: net_users_default
я даже могу слать запросы по отдельности для каждого сервиса и все отрабатывает на ура. только приходится порты менять с 8081 на 8082 при обращении к соответствующим сервисам. А задумка именно - один хост, один порт и только пути разные должны быть /auth и /api
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /auth</pre>
</body>
</html>
но это логично, запрос /auth - это POST запрос
location /auth {
proxy_pass http://auth_service:8080/auth/;
docker exec -it reverse-proxy curl -X POST http://auth_service:8080/auth/sign
// {"message":"ok"}
ADD nginx.conf /etc/nginx/conf.d/default.confRUN rm /etc/nginx/sites-available/default
COPY nginx.conf /etc/nginx/sites-available/default