mirror of
https://github.com/opengram-server/opengram.git
synced 2026-07-17 00:18:56 +03:00
a6aceb1cb0
Add pull_policy: build so docker compose does not try to pull mytelegram-messenger-query-server-local from a registry (it does not exist there). Fixes 'pull access denied' error.
656 lines
29 KiB
YAML
656 lines
29 KiB
YAML
version: "3.9"
|
|
|
|
networks:
|
|
tg-net:
|
|
driver: bridge
|
|
|
|
services:
|
|
### Redis
|
|
redis:
|
|
image: redis:alpine
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
#ports:
|
|
#- "6379:6379"
|
|
volumes:
|
|
- ./data/redis:/data
|
|
|
|
### RabbitMq
|
|
rabbitmq:
|
|
image: rabbitmq:3-management-alpine
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
#ports:
|
|
# - "5672:5672"
|
|
# - "15672:15672"
|
|
volumes:
|
|
- ./data/rabbitmq:/var/lib/rabbitmq
|
|
environment:
|
|
# RABBITMQ_DEFAULT_USER: ${RabbitMQ__Connections__Default__UserName}
|
|
# RABBITMQ_DEFAULT_PASS: ${RabbitMQ__Connections__Default__Password}
|
|
RABBITMQ_DEFAULT_USER: test
|
|
RABBITMQ_DEFAULT_PASS: test
|
|
|
|
### MongoDb
|
|
mongodb:
|
|
image: mongo:latest
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
ports:
|
|
- "27017:27017"
|
|
volumes:
|
|
- ./data/mongo/:/data
|
|
#- ./data/mongo/db:/data/db
|
|
#- ./data/mongo/configdb:/data/configdb
|
|
#environment:
|
|
# MONGO_INITDB_ROOT_USERNAME: admin
|
|
# MONGO_INITDB_ROOT_PASSWORD: admin
|
|
|
|
### Minio
|
|
minio:
|
|
image: minio/minio:latest
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
ports:
|
|
- "9000:9000"
|
|
- "9001:9001"
|
|
environment:
|
|
MINIO_ROOT_USER: ${Minio__AccessKey}
|
|
MINIO_ROOT_PASSWORD: ${Minio__SecretKey}
|
|
volumes:
|
|
- ./data/minio:/data
|
|
#- /docker/minio/config:/root/./minio/
|
|
command: server /data --console-address ":9001"
|
|
#privileged: true
|
|
|
|
################### MyTelegram server
|
|
|
|
### Data seeder
|
|
data-seeder:
|
|
build:
|
|
context: ../../source
|
|
dockerfile: src/MyTelegram.DataSeeder/Dockerfile
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
environment:
|
|
Serilog__MinimumLevel__Default: ${Serilog__MinimumLevel__Default}
|
|
ConnectionStrings__Default: ${ConnectionStrings__Default}
|
|
App__DatabaseName: tg
|
|
App__ReadModelDatabaseName: tg
|
|
App__CreateTestUsers: ${App__CreateTestUsers}
|
|
# App__LoadAllStickersIntoMemory: ${App__LoadAllStickersIntoMemory}
|
|
RabbitMQ__Connections__Default__HostName: ${RabbitMQ__Connections__Default__HostName}
|
|
RabbitMQ__Connections__Default__Port: ${RabbitMQ__Connections__Default__Port}
|
|
RabbitMQ__Connections__Default__UserName: ${RabbitMQ__Connections__Default__UserName}
|
|
RabbitMQ__Connections__Default__Password: ${RabbitMQ__Connections__Default__Password}
|
|
# RabbitMQ__EventBus__ClientName: ${RabbitMQ__EventBus__ClientName}
|
|
# RabbitMQ__EventBus__ExchangeName: ${RabbitMQ__EventBus__ExchangeName}
|
|
volumes:
|
|
- ./data/mytelegram/data-seeder/logs:/app/Logs
|
|
depends_on:
|
|
- mongodb
|
|
|
|
### Admin API
|
|
admin-api:
|
|
build:
|
|
context: ../../source
|
|
dockerfile: src/MyTelegram.Admin.Api/Dockerfile
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
ports:
|
|
- "5555:5000"
|
|
environment:
|
|
ASPNETCORE_URLS: http://+:5000
|
|
Serilog__MinimumLevel__Default: ${Serilog__MinimumLevel__Default}
|
|
ConnectionStrings__Default: ${ConnectionStrings__Default}
|
|
App__DatabaseName: tg
|
|
App__ReadModelDatabaseName: tg
|
|
RabbitMQ__Connections__Default__HostName: ${RabbitMQ__Connections__Default__HostName}
|
|
RabbitMQ__Connections__Default__Port: ${RabbitMQ__Connections__Default__Port}
|
|
RabbitMQ__Connections__Default__UserName: ${RabbitMQ__Connections__Default__UserName}
|
|
RabbitMQ__Connections__Default__Password: ${RabbitMQ__Connections__Default__Password}
|
|
ADMIN_API_KEY: ${ADMIN_API_KEY}
|
|
volumes:
|
|
- ./data/mytelegram/admin-api/logs:/app/Logs
|
|
depends_on:
|
|
- mongodb
|
|
- rabbitmq
|
|
|
|
### 1.Gateway server
|
|
gateway-server:
|
|
build:
|
|
context: ../../source
|
|
dockerfile: src/MyTelegram.GatewayServer/Dockerfile
|
|
args:
|
|
BUILD_CONFIGURATION: ${BUILD_CONFIGURATION}
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
ports:
|
|
- "${App__Servers__0__Port}:${App__Servers__0__Port}"
|
|
- "${App__Servers__1__Port}:${App__Servers__1__Port}"
|
|
- "${App__Servers__2__Port}:${App__Servers__2__Port}"
|
|
- "${App__Servers__3__Port}:${App__Servers__3__Port}"
|
|
- "${App__Servers__4__Port}:${App__Servers__4__Port}"
|
|
- "${App__Servers__5__Port}:${App__Servers__5__Port}"
|
|
volumes:
|
|
- ./data/mytelegram/gateway/logs:/app/Logs
|
|
- ./secrets/mtproto:/app/secrets/mtproto:ro
|
|
environment:
|
|
Serilog__MinimumLevel__Default: ${Serilog__MinimumLevel__Default}
|
|
App__ThisDcId: ${App__ThisDcId}
|
|
App__MediaDcId: ${App__MediaDcId}
|
|
# App__MediaOnly: ${App__MediaOnly}
|
|
# App__Servers__0__Enabled: ${App__Servers__0__Enabled}
|
|
# App__Servers__0__ServerType: ${App__Servers__0__ServerType}
|
|
# App__Servers__0__Ip: ${App__Servers__0__Ip}
|
|
# App__Servers__0__Ipv6: ${App__Servers__0__Ipv6}
|
|
App__Servers__0__Port: ${App__Servers__0__Port}
|
|
# App__Servers__0__Ssl: ${App__Servers__0__Ssl}
|
|
# App__Servers__0__CertPemFilePath: ${App__Servers__0__CertPemFilePath}
|
|
# App__Servers__0__KeyPemFilePath: ${App__Servers__0__KeyPemFilePath}
|
|
# App__Servers__0__EnableProxyProtocolV2: ${App__Servers__0__EnableProxyProtocolV2}
|
|
# App__Servers__0__MediaOnly: ${App__Servers__0__MediaOnly}
|
|
App__Servers__1__Enabled: ${App__Servers__1__Enabled}
|
|
# App__Servers__1__ServerType: ${App__Servers__1__ServerType}
|
|
# App__Servers__1__Ip: ${App__Servers__1__Ip}
|
|
# App__Servers__1__Ipv6: ${App__Servers__1__Ipv6}
|
|
App__Servers__1__Port: ${App__Servers__1__Port}
|
|
# App__Servers__1__Ssl: ${App__Servers__1__Ssl}
|
|
# App__Servers__1__CertPemFilePath: ${App__Servers__1__CertPemFilePath}
|
|
# App__Servers__1__KeyPemFilePath: ${App__Servers__1__KeyPemFilePath}
|
|
# App__Servers__1__EnableProxyProtocolV2: ${App__Servers__1__EnableProxyProtocolV2}
|
|
# App__Servers__1__MediaOnly: ${App__Servers__1__MediaOnly}
|
|
App__Servers__2__Enabled: ${App__Servers__2__Enabled}
|
|
# App__Servers__2__ServerType: ${App__Servers__2__ServerType}
|
|
# App__Servers__2__Ip: ${App__Servers__2__Ip}
|
|
# App__Servers__2__Ipv6: ${App__Servers__2__Ipv6}
|
|
App__Servers__2__Port: ${App__Servers__2__Port}
|
|
# App__Servers__2__Ssl: ${App__Servers__2__Ssl}
|
|
# App__Servers__2__CertPemFilePath: ${App__Servers__2__CertPemFilePath}
|
|
# App__Servers__2__KeyPemFilePath: ${App__Servers__2__KeyPemFilePath}
|
|
# App__Servers__2__EnableProxyProtocolV2: ${App__Servers__2__EnableProxyProtocolV2}
|
|
# App__Servers__2__MediaOnly: ${App__Servers__2__MediaOnly}
|
|
App__Servers__3__Enabled: ${App__Servers__3__Enabled}
|
|
# App__Servers__3__ServerType: ${App__Servers__3__ServerType}
|
|
# App__Servers__3__Ip: ${App__Servers__3__Ip}
|
|
# App__Servers__3__Ipv6: ${App__Servers__3__Ipv6}
|
|
App__Servers__3__Port: ${App__Servers__3__Port}
|
|
# App__Servers__3__Ssl: ${App__Servers__3__Ssl}
|
|
# App__Servers__3__CertPemFilePath: ${App__Servers__3__CertPemFilePath}
|
|
# App__Servers__3__KeyPemFilePath: ${App__Servers__3__KeyPemFilePath}
|
|
# App__Servers__3__EnableProxyProtocolV2: ${App__Servers__3__EnableProxyProtocolV2}
|
|
# App__Servers__3__MediaOnly: ${App__Servers__3__MediaOnly}
|
|
# App__Servers__4__Enabled: ${App__Servers__4__Enabled}
|
|
# App__Servers__4__ServerType: ${App__Servers__4__ServerType}
|
|
# App__Servers__4__Ip: ${App__Servers__4__Ip}
|
|
# App__Servers__4__Ipv6: ${App__Servers__4__Ipv6}
|
|
App__Servers__4__Port: ${App__Servers__4__Port}
|
|
# App__Servers__4__Ssl: ${App__Servers__4__Ssl}
|
|
# App__Servers__4__CertPemFilePath: ${App__Servers__4__CertPemFilePath}
|
|
# App__Servers__4__KeyPemFilePath: ${App__Servers__4__KeyPemFilePath}
|
|
# App__Servers__4__EnableProxyProtocolV2: ${App__Servers__4__EnableProxyProtocolV2}
|
|
# App__Servers__4__MediaOnly: ${App__Servers__4__MediaOnly}
|
|
# App__Servers__5__Enabled: ${App__Servers__5__Enabled}
|
|
# App__Servers__5__ServerType: ${App__Servers__5__ServerType}
|
|
# App__Servers__5__Ip: ${App__Servers__5__Ip}
|
|
# App__Servers__5__Ipv6: ${App__Servers__5__Ipv6}
|
|
App__Servers__5__Port: ${App__Servers__5__Port}
|
|
# App__Servers__5__Ssl: ${App__Servers__5__Ssl}
|
|
# App__Servers__5__CertPemFilePath: ${App__Servers__5__CertPemFilePath}
|
|
# App__Servers__5__KeyPemFilePath: ${App__Servers__5__KeyPemFilePath}
|
|
# App__Servers__5__EnableProxyProtocolV2: ${App__Servers__5__EnableProxyProtocolV2}
|
|
# App__Servers__5__MediaOnly: ${App__Servers__5__MediaOnly}
|
|
RabbitMQ__Connections__Default__HostName: ${RabbitMQ__Connections__Default__HostName}
|
|
RabbitMQ__Connections__Default__Port: ${RabbitMQ__Connections__Default__Port}
|
|
RabbitMQ__Connections__Default__UserName: ${RabbitMQ__Connections__Default__UserName}
|
|
RabbitMQ__Connections__Default__Password: ${RabbitMQ__Connections__Default__Password}
|
|
# RabbitMQ__EventBus__ClientName: ${RabbitMQ__EventBus__ClientName}
|
|
RabbitMQ__EventBus__ExchangeName: ${RabbitMQ__EventBus__ExchangeName}
|
|
depends_on:
|
|
- rabbitmq
|
|
- mongodb
|
|
- redis
|
|
|
|
# ### 2.Seq server
|
|
# seq-server:
|
|
# image: mytelegram/mytelegram-seq-server:${MyTelegramVersion}
|
|
# restart: always
|
|
# networks:
|
|
# - tg-net
|
|
# #ports:
|
|
# # - "10001:80"
|
|
# environment:
|
|
# ConnectionStrings__Default: ${DefaultConnectionStrings}
|
|
# Serilog__MinimumLevel__Default: ${DefaultLogLevel}
|
|
# volumes:
|
|
# - ./data/mytelegram/seq/logs:/data/Logs
|
|
# depends_on:
|
|
# - mongodb
|
|
|
|
### 2.Auth server
|
|
auth-server:
|
|
build:
|
|
context: ../../source
|
|
dockerfile: src/MyTelegram.AuthServer/Dockerfile
|
|
args:
|
|
BUILD_CONFIGURATION: ${BUILD_CONFIGURATION}
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
environment:
|
|
Serilog__MinimumLevel__Default: ${Serilog__MinimumLevel__Default}
|
|
App__PrivateKeyFilePath: /app/secrets/mtproto/rsa_private.pem
|
|
RabbitMQ__Connections__Default__HostName: ${RabbitMQ__Connections__Default__HostName}
|
|
RabbitMQ__Connections__Default__Port: ${RabbitMQ__Connections__Default__Port}
|
|
RabbitMQ__Connections__Default__UserName: ${RabbitMQ__Connections__Default__UserName}
|
|
RabbitMQ__Connections__Default__Password: ${RabbitMQ__Connections__Default__Password}
|
|
# RabbitMQ__EventBus__ClientName: ${RabbitMQ__EventBus__ClientName}
|
|
RabbitMQ__EventBus__ExchangeName: ${RabbitMQ__EventBus__ExchangeName}
|
|
Redis__Configuration: ${Redis__Configuration}
|
|
volumes:
|
|
- ./data/mytelegram/auth/logs:/app/Logs
|
|
- ./secrets/mtproto:/app/secrets/mtproto:ro
|
|
depends_on:
|
|
- mongodb
|
|
- rabbitmq
|
|
- redis
|
|
|
|
### 3.Session server
|
|
session-server:
|
|
image: ${MyTelegramRegistry}/mytelegram-session-server:${MyTelegramVersion}
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
environment:
|
|
Serilog__MinimumLevel__Default: ${Serilog__MinimumLevel__Default}
|
|
ConnectionStrings__Default: ${ConnectionStrings__Default}
|
|
# App__ThisDcId: ${App__ThisDcId}
|
|
# App__MediaOnly: ${App__MediaOnly}
|
|
App__DatabaseName: tg
|
|
App__ReadModelDatabaseName: tg
|
|
App__AccessHashSecretKey: ${App__AccessHashSecretKey}
|
|
# App__IdGeneratorGrpcServiceUrl: ${App__IdGeneratorGrpcServiceUrl}
|
|
App__MessengerServerGrpcServiceUrl: ${App__MessengerServerGrpcServiceUrl}
|
|
# App__DispatchUnknownObjectToMessengerServer: ${App__DispatchUnknownObjectToMessengerServer}
|
|
# App__TempAuthKeyExpirationMinutes: ${App__TempAuthKeyExpirationMinutes}
|
|
# App__CommandServerObjectIds: ${App__CommandServerObjectIds}
|
|
RabbitMQ__Connections__Default__HostName: ${RabbitMQ__Connections__Default__HostName}
|
|
RabbitMQ__Connections__Default__Port: ${RabbitMQ__Connections__Default__Port}
|
|
RabbitMQ__Connections__Default__UserName: ${RabbitMQ__Connections__Default__UserName}
|
|
RabbitMQ__Connections__Default__Password: ${RabbitMQ__Connections__Default__Password}
|
|
# RabbitMQ__EventBus__ClientName: ${RabbitMQ__EventBus__ClientName}
|
|
# RabbitMQ__EventBus__ExchangeName: ${RabbitMQ__EventBus__ExchangeName}
|
|
Redis__Configuration: ${Redis__Configuration}
|
|
volumes:
|
|
- ./data/mytelegram/session/logs:/app/Logs
|
|
depends_on:
|
|
- mongodb
|
|
- rabbitmq
|
|
- redis
|
|
|
|
# ### 5.Messenger grpc server
|
|
# messenger-grpc-service:
|
|
# image: mytelegram/mytelegram-messenger-grpc-service:${MyTelegramVersion}
|
|
# restart: always
|
|
# networks:
|
|
# - tg-net
|
|
# environment:
|
|
# Serilog__MinimumLevel__Default: ${Serilog__MinimumLevel__Default}
|
|
# ConnectionStrings__Default: ${ConnectionStrings__Default}
|
|
# App__DatabaseName: tg
|
|
# App__ReadModelDatabaseName: tg
|
|
# volumes:
|
|
# - ./data/mytelegram/messenger-grpc-service/logs:/app/Logs
|
|
# depends_on:
|
|
# - mongodb
|
|
|
|
### 4.File server (original - for Telegram)
|
|
file-server:
|
|
image: ${MyTelegramRegistry}/mytelegram-file-server:${MyTelegramVersion}
|
|
restart: always
|
|
user: "0:0" # Run as root to avoid permission issues
|
|
networks:
|
|
- tg-net
|
|
volumes:
|
|
- ./data/mytelegram/file/uploads:/app/uploads
|
|
- ./data/mytelegram/file:/app/Logs
|
|
environment:
|
|
Serilog__MinimumLevel__Default: ${Serilog__MinimumLevel__Default}
|
|
ConnectionStrings__Default: ${ConnectionStrings__Default}
|
|
App__DatabaseName: tg
|
|
App__ReadModelDatabaseName: tg
|
|
App__AccessHashSecretKey: ${App__AccessHashSecretKey}
|
|
Minio__Endpoint: ${Minio__Endpoint}
|
|
Minio__AccessKey: ${Minio__AccessKey}
|
|
Minio__SecretKey: ${Minio__SecretKey}
|
|
RabbitMQ__Connections__Default__HostName: ${RabbitMQ__Connections__Default__HostName}
|
|
RabbitMQ__Connections__Default__Port: ${RabbitMQ__Connections__Default__Port}
|
|
RabbitMQ__Connections__Default__UserName: ${RabbitMQ__Connections__Default__UserName}
|
|
RabbitMQ__Connections__Default__Password: ${RabbitMQ__Connections__Default__Password}
|
|
Redis__Configuration: ${Redis__Configuration}
|
|
depends_on:
|
|
- mongodb
|
|
- rabbitmq
|
|
|
|
### 4.5 File merge proxy (HTTP API for merging file parts from local filesystem)
|
|
file-merge-proxy:
|
|
build:
|
|
context: ../../file-merge-proxy
|
|
dockerfile: Dockerfile
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
volumes:
|
|
- ./data/mytelegram/file/uploads:/app/uploads
|
|
environment:
|
|
PORT: 5000
|
|
UPLOAD_PATH: /app/uploads
|
|
ports:
|
|
- "5000:5000"
|
|
|
|
### 5.Messenger command server
|
|
messenger-command-server:
|
|
build:
|
|
context: ../../source
|
|
dockerfile: src/MyTelegram.Messenger.CommandServer/Dockerfile
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
environment:
|
|
Serilog__MinimumLevel__Default: ${Serilog__MinimumLevel__Default}
|
|
ConnectionStrings__Default: ${ConnectionStrings__Default}
|
|
App__DatabaseName: tg
|
|
App__ReadModelDatabaseName: tg
|
|
App__AccessHashSecretKey: ${App__AccessHashSecretKey}
|
|
App__FileServerGrpcServiceUrl: ${App__FileServerGrpcServiceUrl}
|
|
App__FixedVerifyCode: ${App__FixedVerifyCode}
|
|
App__VerificationCodeLength: ${App__VerificationCodeLength}
|
|
App__VerificationCodeExpirationSeconds: ${App__VerificationCodeExpirationSeconds}
|
|
App__CheckPhoneNumberFormat: ${App__CheckPhoneNumberFormat}
|
|
App__EnableSearchNonContacts: ${App__EnableSearchNonContacts}
|
|
# App__JoinChatDomain: ${App__JoinChatDomain}
|
|
# App__ChannelGetDifferenceIntervalSeconds: ${App__ChannelGetDifferenceIntervalSeconds}
|
|
# App__UseInMemoryFilters: ${App__UseInMemoryFilters}
|
|
# App__IsMediaDc: ${App__IsMediaDc}
|
|
# App__AutoCreateSuperGroup: ${App__AutoCreateSuperGroup}
|
|
# App__EnableFutureAuthToken: ${App__EnableFutureAuthToken}
|
|
# App__SetPremiumToTrueAfterUserCreated: ${App__SetPremiumToTrueAfterUserCreated}
|
|
# App__SendWelcomeMessageAfterUserSignIn: ${App__SendWelcomeMessageAfterUserSignIn}
|
|
App__WebRtcConnections__0__Ip: ${App__WebRtcConnections__0__Ip}
|
|
App__WebRtcConnections__0__Ipv6: ${App__WebRtcConnections__0__Ipv6}
|
|
App__WebRtcConnections__0__Port: ${App__WebRtcConnections__0__Port}
|
|
App__WebRtcConnections__0__Turn: ${App__WebRtcConnections__0__Turn}
|
|
App__WebRtcConnections__0__Stun: ${App__WebRtcConnections__0__Stun}
|
|
App__WebRtcConnections__0__UserName: ${App__WebRtcConnections__0__UserName}
|
|
App__WebRtcConnections__0__Password: ${App__WebRtcConnections__0__Password}
|
|
# App__ThisDcId: ${App__ThisDcId}
|
|
# App__DcOptions__0__Enabled: ${App__DcOptions__0__Enabled}
|
|
# App__DcOptions__0__Id: ${App__DcOptions__0__Id}
|
|
App__DcOptions__0__IpAddress: ${App__DcOptions__0__IpAddress}
|
|
# App__DcOptions__0__Port: ${App__DcOptions__0__Port}
|
|
# App__DcOptions__0__TcpoOnly: ${App__DcOptions__0__TcpoOnly}
|
|
# App__DcOptions__0__ThisPortOnly: ${App__DcOptions__0__ThisPortOnly}
|
|
# App__DcOptions__0__Ipv6: ${App__DcOptions__0__Ipv6}
|
|
# App__DcOptions__0__Cdn: ${App__DcOptions__0__Cdn}
|
|
# App__DcOptions__0__MediaOnly: ${App__DcOptions__0__MediaOnly}
|
|
# App__DcOptions__0__Static: ${App__DcOptions__0__Static}
|
|
|
|
App__DcOptions__1__Enabled: ${App__DcOptions__1__Enabled}
|
|
# App__DcOptions__1__Id: ${App__DcOptions__1__Id}
|
|
App__DcOptions__1__IpAddress: ${App__DcOptions__1__IpAddress}
|
|
App__DcOptions__1__Port: ${App__DcOptions__1__Port}
|
|
# App__DcOptions__1__TcpoOnly: ${App__DcOptions__1__TcpoOnly}
|
|
# App__DcOptions__1__ThisPortOnly: ${App__DcOptions__1__ThisPortOnly}
|
|
# App__DcOptions__1__Ipv6: ${App__DcOptions__1__Ipv6}
|
|
# App__DcOptions__1__Cdn: ${App__DcOptions__1__Cdn}
|
|
# App__DcOptions__1__MediaOnly: ${App__DcOptions__1__MediaOnly}
|
|
# App__DcOptions__1__Static: ${App__DcOptions__1__Static}
|
|
|
|
App__DcOptions__2__Enabled: ${App__DcOptions__2__Enabled}
|
|
# App__DcOptions__2__Id: ${App__DcOptions__2__Id}
|
|
App__DcOptions__2__IpAddress: ${App__DcOptions__2__IpAddress}
|
|
# App__DcOptions__2__Port: ${App__DcOptions__2__Port}
|
|
# App__DcOptions__2__TcpoOnly: ${App__DcOptions__2__TcpoOnly}
|
|
# App__DcOptions__2__ThisPortOnly: ${App__DcOptions__2__ThisPortOnly}
|
|
# App__DcOptions__2__Ipv6: ${App__DcOptions__2__Ipv6}
|
|
# App__DcOptions__2__Cdn: ${App__DcOptions__2__Cdn}
|
|
# App__DcOptions__2__MediaOnly: ${App__DcOptions__2__MediaOnly}
|
|
# App__DcOptions__2__Static: ${App__DcOptions__2__Static}
|
|
|
|
App__DcOptions__3__Enabled: ${App__DcOptions__3__Enabled}
|
|
# App__DcOptions__3__Id: ${App__DcOptions__3__Id}
|
|
App__DcOptions__3__IpAddress: ${App__DcOptions__3__IpAddress}
|
|
# App__DcOptions__3__Port: ${App__DcOptions__3__Port}
|
|
# App__DcOptions__3__TcpoOnly: ${App__DcOptions__3__TcpoOnly}
|
|
# App__DcOptions__3__ThisPortOnly: ${App__DcOptions__3__ThisPortOnly}
|
|
# App__DcOptions__3__Ipv6: ${App__DcOptions__3__Ipv6}
|
|
# App__DcOptions__3__Cdn: ${App__DcOptions__3__Cdn}
|
|
# App__DcOptions__3__MediaOnly: ${App__DcOptions__3__MediaOnly}
|
|
# App__DcOptions__3__Static: ${App__DcOptions__3__Static}
|
|
RabbitMQ__Connections__Default__HostName: ${RabbitMQ__Connections__Default__HostName}
|
|
RabbitMQ__Connections__Default__Port: ${RabbitMQ__Connections__Default__Port}
|
|
RabbitMQ__Connections__Default__UserName: ${RabbitMQ__Connections__Default__UserName}
|
|
RabbitMQ__Connections__Default__Password: ${RabbitMQ__Connections__Default__Password}
|
|
# RabbitMQ__EventBus__ClientName: ${RabbitMQ__EventBus__ClientName}
|
|
# RabbitMQ__EventBus__ExchangeName: ${RabbitMQ__EventBus__ExchangeName}
|
|
Redis__Configuration: ${Redis__Configuration}
|
|
volumes:
|
|
- ./data/mytelegram/file/uploads:/app/uploads
|
|
- ./data/mytelegram/command-server/logs:/app/Logs
|
|
depends_on:
|
|
- mongodb
|
|
- rabbitmq
|
|
- redis
|
|
|
|
### 6.Messenger query server
|
|
messenger-query-server:
|
|
# CHANGED: Build locally from source instead of using remote image
|
|
build:
|
|
context: ../../source
|
|
dockerfile: src/MyTelegram.Messenger.QueryServer/Dockerfile
|
|
image: mytelegram-messenger-query-server-local:latest
|
|
# Always build locally — this image is not in any registry, so never try to pull it
|
|
pull_policy: build
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
environment:
|
|
Serilog__MinimumLevel__Default: ${Serilog__MinimumLevel__Default}
|
|
ConnectionStrings__Default: ${ConnectionStrings__Default}
|
|
App__DatabaseName: tg
|
|
App__ReadModelDatabaseName: tg
|
|
App__AccessHashSecretKey: ${App__AccessHashSecretKey}
|
|
App__FileServerGrpcServiceUrl: ${App__FileServerGrpcServiceUrl}
|
|
App__FixedVerifyCode: ${App__FixedVerifyCode}
|
|
App__VerificationCodeLength: ${App__VerificationCodeLength}
|
|
App__VerificationCodeExpirationSeconds: ${App__VerificationCodeExpirationSeconds}
|
|
App__EnableSearchNonContacts: ${App__EnableSearchNonContacts}
|
|
# App__JoinChatDomain: ${App__JoinChatDomain}
|
|
# App__ChannelGetDifferenceIntervalSeconds: ${App__ChannelGetDifferenceIntervalSeconds}
|
|
# App__UseInMemoryFilters: ${App__UseInMemoryFilters}
|
|
# App__IsMediaDc: ${App__IsMediaDc}
|
|
# App__AutoCreateSuperGroup: ${App__AutoCreateSuperGroup}
|
|
# App__EnableFutureAuthToken: ${App__EnableFutureAuthToken}
|
|
# App__SetPremiumToTrueAfterUserCreated: ${App__SetPremiumToTrueAfterUserCreated}
|
|
# App__SendWelcomeMessageAfterUserSignIn: ${App__SendWelcomeMessageAfterUserSignIn}
|
|
App__WebRtcConnections__0__Ip: ${App__WebRtcConnections__0__Ip}
|
|
App__WebRtcConnections__0__Ipv6: ${App__WebRtcConnections__0__Ipv6}
|
|
App__WebRtcConnections__0__Port: ${App__WebRtcConnections__0__Port}
|
|
App__WebRtcConnections__0__Turn: ${App__WebRtcConnections__0__Turn}
|
|
App__WebRtcConnections__0__Stun: ${App__WebRtcConnections__0__Stun}
|
|
App__WebRtcConnections__0__UserName: ${App__WebRtcConnections__0__UserName}
|
|
App__WebRtcConnections__0__Password: ${App__WebRtcConnections__0__Password}
|
|
# App__ThisDcId: ${App__ThisDcId}
|
|
# App__DcOptions__0__Enabled: ${App__DcOptions__0__Enabled}
|
|
# App__DcOptions__0__Id: ${App__DcOptions__0__Id}
|
|
App__DcOptions__0__IpAddress: ${App__DcOptions__0__IpAddress}
|
|
App__DcOptions__0__Port: ${App__DcOptions__0__Port}
|
|
# App__DcOptions__0__TcpoOnly: ${App__DcOptions__0__TcpoOnly}
|
|
# App__DcOptions__0__ThisPortOnly: ${App__DcOptions__0__ThisPortOnly}
|
|
# App__DcOptions__0__Ipv6: ${App__DcOptions__0__Ipv6}
|
|
# App__DcOptions__0__Cdn: ${App__DcOptions__0__Cdn}
|
|
# App__DcOptions__0__MediaOnly: ${App__DcOptions__0__MediaOnly}
|
|
# App__DcOptions__0__Static: ${App__DcOptions__0__Static}
|
|
|
|
App__DcOptions__1__Enabled: ${App__DcOptions__1__Enabled}
|
|
# App__DcOptions__1__Id: ${App__DcOptions__1__Id}
|
|
App__DcOptions__1__IpAddress: ${App__DcOptions__1__IpAddress}
|
|
App__DcOptions__1__Port: ${App__DcOptions__1__Port}
|
|
# App__DcOptions__1__TcpoOnly: ${App__DcOptions__1__TcpoOnly}
|
|
# App__DcOptions__1__ThisPortOnly: ${App__DcOptions__1__ThisPortOnly}
|
|
# App__DcOptions__1__Ipv6: ${App__DcOptions__1__Ipv6}
|
|
# App__DcOptions__1__Cdn: ${App__DcOptions__1__Cdn}
|
|
# App__DcOptions__1__MediaOnly: ${App__DcOptions__1__MediaOnly}
|
|
# App__DcOptions__1__Static: ${App__DcOptions__1__Static}
|
|
|
|
App__DcOptions__2__Enabled: ${App__DcOptions__2__Enabled}
|
|
# App__DcOptions__2__Id: ${App__DcOptions__2__Id}
|
|
App__DcOptions__2__IpAddress: ${App__DcOptions__2__IpAddress}
|
|
App__DcOptions__2__Port: ${App__DcOptions__2__Port}
|
|
# App__DcOptions__2__TcpoOnly: ${App__DcOptions__2__TcpoOnly}
|
|
# App__DcOptions__2__ThisPortOnly: ${App__DcOptions__2__ThisPortOnly}
|
|
# App__DcOptions__2__Ipv6: ${App__DcOptions__2__Ipv6}
|
|
# App__DcOptions__2__Cdn: ${App__DcOptions__2__Cdn}
|
|
# App__DcOptions__2__MediaOnly: ${App__DcOptions__2__MediaOnly}
|
|
# App__DcOptions__2__Static: ${App__DcOptions__2__Static}
|
|
|
|
App__DcOptions__3__Enabled: ${App__DcOptions__3__Enabled}
|
|
# App__DcOptions__3__Id: ${App__DcOptions__3__Id}
|
|
App__DcOptions__3__IpAddress: ${App__DcOptions__3__IpAddress}
|
|
# App__DcOptions__3__Port: ${App__DcOptions__3__Port}
|
|
# App__DcOptions__3__TcpoOnly: ${App__DcOptions__3__TcpoOnly}
|
|
# App__DcOptions__3__ThisPortOnly: ${App__DcOptions__3__ThisPortOnly}
|
|
# App__DcOptions__3__Ipv6: ${App__DcOptions__3__Ipv6}
|
|
# App__DcOptions__3__Cdn: ${App__DcOptions__3__Cdn}
|
|
# App__DcOptions__3__MediaOnly: ${App__DcOptions__3__MediaOnly}
|
|
# App__DcOptions__3__Static: ${App__DcOptions__3__Static}
|
|
Minio__Endpoint: ${Minio__Endpoint}
|
|
Minio__AccessKey: ${Minio__AccessKey}
|
|
Minio__SecretKey: ${Minio__SecretKey}
|
|
Minio__BucketName: ${Minio__BucketName}
|
|
RabbitMQ__Connections__Default__HostName: ${RabbitMQ__Connections__Default__HostName}
|
|
RabbitMQ__Connections__Default__Port: ${RabbitMQ__Connections__Default__Port}
|
|
RabbitMQ__Connections__Default__UserName: ${RabbitMQ__Connections__Default__UserName}
|
|
RabbitMQ__Connections__Default__Password: ${RabbitMQ__Connections__Default__Password}
|
|
# RabbitMQ__EventBus__ClientName: ${RabbitMQ__EventBus__ClientName}
|
|
# RabbitMQ__EventBus__ExchangeName: ${RabbitMQ__EventBus__ExchangeName}
|
|
Redis__Configuration: ${Redis__Configuration}
|
|
volumes:
|
|
- ./data/mytelegram/query-server/logs:/app/Logs
|
|
depends_on:
|
|
- mongodb
|
|
- rabbitmq
|
|
- redis
|
|
|
|
### 7.Bot API Server
|
|
bot-api-server:
|
|
build:
|
|
context: ../../source
|
|
dockerfile: src/MyTelegram.BotApi/Dockerfile
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
ports:
|
|
- "8081:8081"
|
|
environment:
|
|
ASPNETCORE_URLS: http://+:8081
|
|
Serilog__MinimumLevel__Default: ${Serilog__MinimumLevel__Default}
|
|
ConnectionStrings__Default: ${ConnectionStrings__Default}
|
|
App__DatabaseName: tg
|
|
App__ReadModelDatabaseName: tg
|
|
RabbitMQ__Connections__Default__HostName: ${RabbitMQ__Connections__Default__HostName}
|
|
RabbitMQ__Connections__Default__Port: ${RabbitMQ__Connections__Default__Port}
|
|
RabbitMQ__Connections__Default__UserName: ${RabbitMQ__Connections__Default__UserName}
|
|
RabbitMQ__Connections__Default__Password: ${RabbitMQ__Connections__Default__Password}
|
|
RabbitMQ__EventBus__ClientProvidedName: MyTelegram.BotApi
|
|
RabbitMQ__EventBus__ExchangeName: ${RabbitMQ__EventBus__ExchangeName}
|
|
MongoDB__ConnectionString: ${ConnectionStrings__Default}
|
|
MongoDB__DatabaseName: tg
|
|
BotApi__Port: 8081
|
|
BotApi__LocalMode: true
|
|
BotApi__MaxFileSize: 2147483648
|
|
volumes:
|
|
- ./data/mytelegram/bot-api/logs:/app/Logs
|
|
depends_on:
|
|
- mongodb
|
|
- rabbitmq
|
|
- redis
|
|
|
|
### 8.TURN/STUN server for VoIP
|
|
turn-server:
|
|
image: coturn/coturn:latest
|
|
restart: always
|
|
network_mode: host
|
|
# networks:
|
|
# - tg-net
|
|
# ports:
|
|
# - "3478:3478/udp"
|
|
# - "3478:3478/tcp"
|
|
# - "5349:5349/tcp"
|
|
# Note: network_mode: host exposes all ports directly, including relay ports 49152-65535
|
|
volumes:
|
|
- ./turnserver.conf:/etc/coturn/turnserver.conf:ro
|
|
- ./data/coturn/logs:/var/log/coturn
|
|
environment:
|
|
TURN_EXTERNAL_IP: "${TURN_EXTERNAL_IP:-auto-detect}"
|
|
command: ["-c", "/etc/coturn/turnserver.conf"]
|
|
|
|
### 9.Sms sender
|
|
sms-sender:
|
|
image: ${MyTelegramRegistry}/mytelegram-sms-sender:${MyTelegramVersion}
|
|
restart: always
|
|
networks:
|
|
- tg-net
|
|
environment:
|
|
Serilog__MinimumLevel__Default: ${Serilog__MinimumLevel__Default}
|
|
# TwilioSms__Enabled: ${TwilioSms__Enabled}
|
|
# TwilioSms__AccountSId: ${TwilioSms__AccountSId}
|
|
# TwilioSms__AuthToken: ${TwilioSms__AuthToken}
|
|
# TwilioSms__FromNumber: ${TwilioSms__FromNumber}
|
|
# TwilioSms__MessagingServiceSId: ${TwilioSms__MessagingServiceSId}
|
|
# VonageSms__Enabled: ${VonageSms__Enabled}
|
|
# VonageSms__BrandName: ${VonageSms__BrandName}
|
|
# VonageSms__ApiKey: ${VonageSms__ApiKey}
|
|
# VonageSms__ApiSecret: ${VonageSms__ApiSecret}
|
|
RabbitMQ__Connections__Default__HostName: ${RabbitMQ__Connections__Default__HostName}
|
|
RabbitMQ__Connections__Default__Port: ${RabbitMQ__Connections__Default__Port}
|
|
RabbitMQ__Connections__Default__UserName: ${RabbitMQ__Connections__Default__UserName}
|
|
RabbitMQ__Connections__Default__Password: ${RabbitMQ__Connections__Default__Password}
|
|
# RabbitMQ__EventBus__ClientName: ${RabbitMQ__EventBus__ClientName}
|
|
# RabbitMQ__EventBus__ExchangeName: ${RabbitMQ__EventBus__ExchangeName}
|
|
volumes:
|
|
- ./data/mytelegram/sms-sender/logs:/app/Logs
|
|
depends_on:
|
|
- rabbitmq
|
|
|
|
### 10.Fragment Backend API (Run locally with npm run dev)
|
|
# fragment-backend:
|
|
# build:
|
|
# context: ../../fragment/fragment-backend
|
|
# dockerfile: Dockerfile
|
|
# restart: always
|
|
# networks:
|
|
# - tg-net
|
|
# ports:
|
|
# - "3001:3001"
|
|
# environment:
|
|
# PORT: 3001
|
|
# MONGODB_URI: mongodb://mongodb:27017/tg
|
|
# JWT_SECRET: fragment_secret_key_change_in_production
|
|
# BOT_API_URL: http://bot-api-server:8081
|
|
# FRAGMENT_BOT_TOKEN: ${FRAGMENT_BOT_TOKEN}
|
|
# volumes:
|
|
# - ./data/fragment/backend/logs:/app/logs
|
|
# depends_on:
|
|
# - mongodb
|
|
# - bot-api-server
|