В текущей конфигурации Docker Compose внешний доступ пользователей к системе организуется через единый порт 443/TCP.
Входной точкой выступает контейнер nginx-proxy. Он принимает HTTPS-запросы и маршрутизирует их к нужному внутреннему сервису по доменному имени, используя заголовок Host.
Для корректной работы схемы доступа через порт 443 необходимо заранее настроить DNS-записи для поддоменов.

Пользователь обращается к системе по HTTPS, используя один из доменов экземпляра:
Все домены указывают на один внешний IP-адрес и используют порт 443.
Контейнер nginx-proxy перенаправляет запросы во внутреннюю сеть Docker Compose по HTTP на соответствующий сервис.
Внутри nginx-proxy используется маршрутизация по параметру server_name.
Соответствие доменов и внутренних сервисов:
Сервис embeddings не публикуется во внешнюю сеть. Backend обращается к нему внутри сети Docker Compose по адресу http://embeddings:8080.
В файлах settings.json, client-settings.json и ai-client-settings.json внешние адреса сервисов задаются как HTTPS-адреса на отдельных поддоменах.
{
"api": {
"url": "https://api-timetta.domain.com"
},
"passport": {
"url": "https://auth-timetta.domain.com"
},
"websocket": {
"url": "https://ws-timetta.domain.com"
},
"aiBotLoader": "https://ai-timetta.domain.com/loader.js"
}
{
"passportUrl": "https://auth-timetta.domain.com",
"apiUrl": "https://api-timetta.domain.com",
"aiBotUrl": "https://ai-timetta.domain.com",
"webSocketUrl": "https://ws-timetta.domain.com",
"apiTimettaUrl": "https://api-timetta.domain.com",
"baseAppUrl": "https://timetta.domain.com"
}
В конфигурации settings.json параметры TokenIssuer и RedirectUris должны указывать на доменное имя сервиса аутентификации.
Не используйте адрес с портом 5401.
Рекомендуется использовать:
https://auth-timetta.domain.com
вместо:
http://<host>:5401
Добавьте домен AI-клиента в CORS и OAuth-настройки, сохранив уже настроенные URI:
"AppUrl": "https://timetta.domain.com",
"AllowedCorsOrigins": "https://timetta.domain.com,https://ai-timetta.domain.com",
"TokenIssuer": "https://auth-timetta.domain.com",
"WepAppClient": {
"RedirectUris": "https://timetta.domain.com,https://timetta.domain.com/auth-callback,https://timetta.domain.com/assets/silent-refresh.html,https://auth-timetta.domain.com/login-successful,https://ai-timetta.domain.com/auth-callback,https://ai-timetta.domain.com/auth-callback.html,https://ai-timetta.domain.com/assets/silent-refresh.html",
"PostLogoutRedirectUris": "https://auth-timetta.domain.com/logout-successful,https://ai-timetta.domain.com/logout-successful",
"AllowedCorsOrigins": "https://timetta.domain.com,https://ai-timetta.domain.com"
}
Для работы HTTPS-доступа необходимо настроить SSL/TLS-сертификаты в контейнере nginx-proxy.
Сертификат должен покрывать все используемые домены:
Допустимые варианты настройки:
Если используется не wildcard-сертификат, он должен явно включать все перечисленные поддомены.
Сертификаты подключаются к контейнеру nginx-proxy через конфигурацию:
configs:
- source: proxy_cert
target: /etc/nginx/ssl/cert.pem
- source: proxy_key
target: /etc/nginx/ssl/key.pem
Для публикации сервисов через единый внешний порт 443 необходимо обновить конфигурацию обратного прокси в файле proxy/nginx.conf.
events {
worker_connections 1024;
}
http {
# Основной параметр для больших файлов
client_max_body_size 100M;
# Буферизация и таймауты
client_body_buffer_size 128k;
client_body_timeout 300s;
# Для proxy
proxy_read_timeout 300s;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
#Подключение сертификатов
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
proxy_pass_request_headers on;
proxy_set_header Authorization $http_authorization;
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-Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
server {
listen 80;
listen [::]:80;
server_name timetta.domain.com
api-timetta.domain.com
auth-timetta.domain.com
ws-timetta.domain.com
reporting-timetta.domain.com
scheduler-timetta.domain.com
ai-timetta.domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name timetta.domain.com;
location / {
proxy_pass http://client:80;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name api-timetta.domain.com;
location / {
proxy_pass http://api:80;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name auth-timetta.domain.com;
location / {
proxy_pass http://passport:80;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name ws-timetta.domain.com;
location / {
proxy_pass http://web-socket:80;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name reporting-timetta.domain.com;
location / {
proxy_pass http://reporting:80;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name scheduler-timetta.domain.com;
location / {
proxy_pass http://scheduler:80;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name ai-timetta.domain.com;
add_header Access-Control-Allow-Origin "https://timetta.domain.com" always;
add_header Vary "Origin" always;
location / {
proxy_pass http://ai-bot:80;
}
}
}
В контейнере nginx-proxy должны быть открыты только внешние порты 443 и 80.
Все пользовательские запросы проходят через обратный прокси с маршрутизацией по доменному имени.
nginx-proxy:
container_name: nginx-proxy
image: nginx
ports:
- "443:443"
- "80:80"
configs:
- source: proxy_config
target: /etc/nginx/nginx.conf
- source: proxy_cert
target: /etc/nginx/ssl/cert.pem
- source: proxy_key
target: /etc/nginx/ssl/key.pem
depends_on:
- api
- consumer
- passport
- web-socket
- scheduler
- client
- ai-bot
Отдельный внешний порт 5402 для AI-клиента в этой схеме не требуется: он доступен по адресу https://ai-timetta.domain.com через порт 443.
Похоже, вам удобнее русский язык. Перейти на русскую версию?