Files
archived-openlan-cgw/utils/docker/docker-compose-template.yml.j2
2025-04-03 10:19:50 +03:00

167 lines
6.5 KiB
Django/Jinja

services:
broker:
image: docker.io/bitnami/kafka:latest
ports:
- "9092:9092"
- "9094:9094"
environment:
- KAFKA_ENABLE_KRAFT=yes
- KAFKA_CFG_PROCESS_ROLES=broker,controller
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_CFG_LISTENERS={% if cgw_kafka_tls == 'yes' %}SSL{% else %}PLAINTEXT{% endif %}://:9092,CONTROLLER://:9093,EXTERNAL://:9094
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP={% if cgw_kafka_tls == 'yes' %}SSL:SSL{% else %}PLAINTEXT:PLAINTEXT{% endif %},CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT
- KAFKA_CFG_ADVERTISED_LISTENERS={% if cgw_kafka_tls == 'yes' %}SSL{% else %}PLAINTEXT{% endif %}://docker-broker-1:9092,EXTERNAL://kafka_b:9094
- KAFKA_BROKER_ID=1
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@docker-broker-1:9093
- ALLOW_PLAINTEXT_LISTENER={% if cgw_kafka_tls == 'yes' %}no{% else %}yes{% endif %}
- KAFKA_CFG_NODE_ID=1
- KAFKA_AUTO_CREATE_TOPICS_ENABLE=false
- BITNAMI_DEBUG=yes
- KAFKA_CFG_NUM_PARTITIONS=2
{% if cgw_kafka_tls == 'yes' %}
- KAFKA_TLS_TYPE=PEM
- KAFKA_CFG_SSL_CLIENT_AUTH=none
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=SSL
{% endif %}
healthcheck:
test: ["CMD-SHELL", "kafka-topics.sh --bootstrap-server localhost:9092 --list{% if cgw_kafka_tls == 'yes' %} --command-config /opt/bitnami/kafka/config/client.properties{% endif %}"]
interval: 10s
timeout: 5s
retries: 15
start_period: 5s
networks:
- cgw_multi_instances_network
{% if cgw_kafka_tls == 'yes' %}
volumes:
- {{ default_certs_path }}/{{ broker_server_cert }}:{{ broker_certs_path }}/{{ broker_server_cert }}
- {{ default_certs_path }}/{{ broker_server_key }}:{{ broker_certs_path }}/{{ broker_server_key }}
- {{ default_certs_path }}/{{ broker_client_cert }}:{{ broker_certs_path }}/{{ broker_client_cert }}
- ./{{ client_properties_file }}:{{ broker_config_path }}/{{ client_properties_file }}
{% endif %}
postgresql:
image: "postgres:latest"
ports:
- "5432:5432"
user: postgres
command:
- "postgres"
- "-c"
- "max_connections=400"
- "-c"
- "shared_buffers=20MB"
env_file:
- postgresql.env
restart: always
volumes:
- ./postgresql/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh
networks:
- cgw_multi_instances_network
redis:
image: 'bitnami/redis:latest'
ports:
- "6379:6379"
environment:
- ALLOW_EMPTY_PASSWORD=yes
networks:
- cgw_multi_instances_network
proxy_cgw:
image: {{ proxy_image_name }}:{{ proxy_image_tag }}
container_name: {{ proxy_container_name }}
ports:
- "443:443"
volumes:
- {{ default_certs_path }}:{{ container_certs_volume }}
- {{ default_certs_path }}:{{ container_nb_infra_certs_volume }}
environment:
- CGW_LOG_LEVEL=${CGW_LOG_LEVEL:-debug}
- CGW_ID=${CGW_ID:-0}
- CGW_GROUPS_CAPACITY=${CGW_GROUPS_CAPACITY:-1000}
- CGW_GROUPS_THRESHOLD=${CGW_GROUPS_THRESHOLD:-50}
- CGW_GROUP_INFRAS_CAPACITY=${CGW_GROUP_INFRAS_CAPACITY:-2000}
- CGW_WSS_IP=${CGW_WSS_IP:-0.0.0.0}
- CGW_WSS_PORT=443
- DEFAULT_WSS_THREAD_NUM=${DEFAULT_WSS_THREAD_NUM:-4}
- CGW_WSS_CAS=${CGW_WSS_CAS:-cas.pem}
- CGW_WSS_CERT=${CGW_WSS_CERT:-cert.pem}
- CGW_WSS_KEY=${CGW_WSS_KEY:-key.pem}
- CGW_REDIS_HOST={{ cgw_redis_host }}
- CGW_REDIS_PORT={{ cgw_redis_port }}
- CGW_REDIS_TLS={{ cgw_redis_tls }}
- CGW_REDIS_USERNAME={{ cgw_redis_username }}
- CGW_REDIS_PASSWORD={{ cgw_redis_password }}
networks:
- cgw_multi_instances_network
{% for i in range(0, cgw_instances_num) %}
cgw_instance_{{ i }}:
image: {{ cgw_image_name }}:{{ cgw_image_tag }}
container_name: {{ cgw_container_name }}_{{ i }}
ports:
- "{{ cgw_wss_base_port + i }}:{{ cgw_wss_base_port + i }}"
- "{{ cgw_grpc_public_base_port + i }}:{{ cgw_grpc_public_base_port + i }}"
- "{{ cgw_metrics_base_port + i }}:{{ cgw_metrics_base_port + i }}"
environment:
- CGW_DB_HOST={{ cgw_db_host }}
- CGW_DB_PORT={{ cgw_db_port }}
- CGW_DB_NAME={{ cgw_db_name }}
- CGW_DB_USERNAME={{ cgw_db_username }}
- CGW_DB_PASS={{ cgw_db_password }}
- CGW_DB_TLS={{ cgw_db_tls }}
- CGW_GRPC_LISTENING_IP={{ cgw_grpc_listening_ip }}
- CGW_GRPC_LISTENING_PORT={{ cgw_grpc_listening_base_port + i }}
- CGW_GRPC_PUBLIC_HOST={{ cgw_grpc_public_host }}_{{ i }}
- CGW_GRPC_PUBLIC_PORT={{ cgw_grpc_public_base_port + i }}
- CGW_ID={{ cgw_base_id + i }}
- CGW_KAFKA_HOST={{ cgw_kafka_host }}
- CGW_KAFKA_PORT={{ cgw_kafka_port }}
- CGW_KAFKA_CONSUME_TOPIC={{ cgw_kafka_consumer_topic }}
- CGW_KAFKA_PRODUCE_TOPIC={{ cgw_kafka_producer_topic }}
- CGW_KAFKA_TLS={{ cgw_kafka_tls }}
- CGW_KAFKA_CERT={{ cgw_kafka_cert }}
- CGW_LOG_LEVEL={{ cgw_log_level }}
- CGW_REDIS_HOST={{ cgw_redis_host }}
- CGW_REDIS_PORT={{ cgw_redis_port }}
- CGW_REDIS_TLS={{ cgw_redis_tls }}
- CGW_REDIS_USERNAME={{ cgw_redis_username }}
- CGW_REDIS_PASSWORD={{ cgw_redis_password }}
- CGW_METRICS_PORT={{ cgw_metrics_base_port + i }}
- CGW_WSS_IP={{ cgw_wss_ip }}
- CGW_WSS_PORT={{ cgw_wss_base_port + i }}
- CGW_WSS_CAS={{ cgw_wss_cas }}
- CGW_WSS_CERT={{ cgw_wss_cert }}
- CGW_WSS_KEY={{ cgw_wss_key }}
- DEFAULT_WSS_THREAD_NUM={{ cgw_wss_t_num }}
- CGW_ALLOW_CERT_MISMATCH={{ cgw_allow_certs_mismatch }}
- CGW_NB_INFRA_TLS={{ cgw_nb_infra_tls }}
- CGW_UCENTRAL_AP_DATAMODEL_URI={{ cgw_ucentral_ap_datamodel_uri }}
- CGW_UCENTRAL_SWITCH_DATAMODEL_URI={{ cgw_ucentral_switch_datamodel_uri }}
- CGW_GROUPS_CAPACITY={{ cgw_groups_capacity }}
- CGW_GROUPS_THRESHOLD={{ cgw_groups_threshold }}
- CGW_GROUP_INFRAS_CAPACITY={{ cgw_group_infras_capacity }}
- CGW_FEATURE_TOPOMAP_ENABLE='1'
depends_on:
broker:
condition: service_healthy
{% if i != 0 %}
cgw_instance_{{ i - 1 }}:
condition: service_healthy
{% endif %}
volumes:
- {{ default_certs_path }}:{{ container_certs_volume }}
- {{ default_certs_path }}:{{ container_nb_infra_certs_volume }}
networks:
- cgw_multi_instances_network
healthcheck:
test: ["CMD-SHELL", "ps -aux | grep cgw_instance_{{ i }}"]
interval: 10s
timeout: 5s
retries: 3
start_period: 3s
{% endfor %}
networks:
cgw_multi_instances_network: