version: '3.9' services: avideo: build: context: . args: SOCKET_PORT: ${SOCKET_PORT} HTTP_PORT: ${HTTP_PORT} HTTPS_PORT: ${HTTPS_PORT} DB_MYSQL_HOST: ${DB_MYSQL_HOST} DB_MYSQL_PORT: ${DB_MYSQL_PORT} DB_MYSQL_NAME: ${DB_MYSQL_NAME} DB_MYSQL_USER: ${DB_MYSQL_USER} DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD} SERVER_NAME: ${SERVER_NAME} ENABLE_PHPMYADMIN: ${ENABLE_PHPMYADMIN} PHPMYADMIN_PORT: ${PHPMYADMIN_PORT} PHPMYADMIN_ENCODER_PORT: ${PHPMYADMIN_ENCODER_PORT} CREATE_TLS_CERTIFICATE: "${CREATE_TLS_CERTIFICATE:-yes}" TLS_CERTIFICATE_FILE: ${TLS_CERTIFICATE_FILE} TLS_CERTIFICATE_KEY: ${TLS_CERTIFICATE_KEY} CONTACT_EMAIL: ${CONTACT_EMAIL} SYSTEM_ADMIN_PASSWORD: ${SYSTEM_ADMIN_PASSWORD} WEBSITE_TITLE: ${WEBSITE_TITLE} MAIN_LANGUAGE: ${MAIN_LANGUAGE} restart: "unless-stopped" environment: SOCKET_PORT: ${SOCKET_PORT:-2053} HTTP_PORT: ${HTTP_PORT:-80} HTTPS_PORT: ${HTTPS_PORT:-443} DB_MYSQL_HOST: "${DB_MYSQL_HOST:-database}" DB_MYSQL_PORT: ${DB_MYSQL_PORT:-3306} DB_MYSQL_NAME: "${DB_MYSQL_NAME:-avideo}" DB_MYSQL_USER: "${DB_MYSQL_USER:-avideo}" DB_MYSQL_PASSWORD: "${DB_MYSQL_PASSWORD:-avideo}" SERVER_NAME: "${SERVER_NAME:-localhost}" ENABLE_PHPMYADMIN: "${ENABLE_PHPMYADMIN:-yes}" PHPMYADMIN_PORT: ${PHPMYADMIN_PORT:-8081} PHPMYADMIN_ENCODER_PORT: ${PHPMYADMIN_ENCODER_PORT:-8082} CREATE_TLS_CERTIFICATE: "${CREATE_TLS_CERTIFICATE:-yes}" TLS_CERTIFICATE_FILE: "${TLS_CERTIFICATE_FILE:-/etc/apache2/ssl/localhost.crt}" TLS_CERTIFICATE_KEY: "${TLS_CERTIFICATE_KEY:-/etc/apache2/ssl/localhost.key}" CONTACT_EMAIL: "${CONTACT_EMAIL:-admin@localhost}" SYSTEM_ADMIN_PASSWORD: "${SYSTEM_ADMIN_PASSWORD:-password}" WEBSITE_TITLE: "${WEBSITE_TITLE:-AVideo}" MAIN_LANGUAGE: "${MAIN_LANGUAGE:-en_US}" NGINX_RTMP_PORT: "${NGINX_RTMP_PORT:-1935}" NGINX_HTTP_PORT: "${NGINX_HTTP_PORT:-8080}" NGINX_HTTPS_PORT: "${NGINX_HTTPS_PORT:-8443}" MEMCACHED_HOST: memcached env_file: - .env ports: - "${SOCKET_PORT:-2053}:${SOCKET_PORT:-2053}" - "${HTTP_PORT:-80}:80" - "${HTTPS_PORT:-443}:443" - "${WEBRTC_PORT:-3000}:${WEBRTC_PORT:-3000}" volumes: - "./.compose/HLS:/HLS" - "./:/var/www/html/AVideo" - "./.compose/videos:/var/www/html/AVideo/videos" - "./.compose/encoder:/var/www/html/AVideo/Encoder" - "./.compose/letsencrypt:/etc/letsencrypt/" depends_on: database: condition: service_healthy database_encoder: condition: service_healthy memcached: condition: service_started healthcheck: test: ["CMD-SHELL", "curl --silent --fail http://localhost || exit 1"] interval: 30s timeout: 10s retries: 3 deploy: resources: limits: cpus: "${CPUS_LIMIT:-3}" memory: "${MEMORY_LIMIT:-8G}" reservations: cpus: "${CPUS_LIMIT:-1}" memory: "${MEMORY_LIMIT:-2G}" networks: app_net: aliases: - avideo live: build: context: . dockerfile: Dockerfile.live restart: "unless-stopped" volumes: - "./.compose/HLS:/HLS" - "./.compose/letsencrypt:/etc/letsencrypt/" environment: SERVER_NAME: "${SERVER_NAME:-localhost}" CREATE_TLS_CERTIFICATE: "${CREATE_TLS_CERTIFICATE:-yes}" TLS_CERTIFICATE_FILE: "${TLS_CERTIFICATE_FILE:-/etc/apache2/ssl/localhost.crt}" TLS_CERTIFICATE_KEY: "${TLS_CERTIFICATE_KEY:-/etc/apache2/ssl/localhost.key}" NGINX_RTMP_PORT: "${NGINX_RTMP_PORT:-1935}" NGINX_HTTP_PORT: "${NGINX_HTTP_PORT:-8080}" NGINX_HTTPS_PORT: "${NGINX_HTTPS_PORT:-8443}" MEMCACHED_HOST: memcached env_file: - .env ports: - "${NGINX_RTMP_PORT:-1935}:1935" - "${NGINX_HTTP_PORT:-8080}:8080" - "${NGINX_HTTPS_PORT:-8443}:8443" depends_on: avideo: condition: service_healthy database: condition: service_healthy memcached: condition: service_started healthcheck: test: ["CMD-SHELL", "curl --silent --fail http://localhost:8080 || exit 1"] interval: 30s timeout: 10s retries: 3 deploy: resources: limits: cpus: "2" memory: "4G" reservations: cpus: "1" memory: "2G" networks: - app_net database: build: context: . dockerfile: Dockerfile.mariadb restart: "unless-stopped" environment: MYSQL_RANDOM_ROOT_PASSWORD: "yes" MYSQL_INITDB_SKIP_TZINFO: 1 MYSQL_DATABASE: "${DB_MYSQL_NAME}" MYSQL_USER: "${DB_MYSQL_USER}" MYSQL_PASSWORD: "${DB_MYSQL_PASSWORD}" volumes: - ./.compose/db:/var/lib/mysql healthcheck: test: "mariadb-admin ping -h localhost -u $DB_MYSQL_USER -p$DB_MYSQL_PASSWORD" interval: 30s timeout: 10s retries: 3 deploy: resources: limits: cpus: "2" memory: "10G" reservations: cpus: '1' memory: '4G' networks: - app_net database_encoder: build: context: . dockerfile: Dockerfile.mariadb restart: "unless-stopped" environment: MYSQL_RANDOM_ROOT_PASSWORD: "yes" MYSQL_INITDB_SKIP_TZINFO: 1 MYSQL_DATABASE: "${DB_MYSQL_NAME}_encoder" MYSQL_USER: "${DB_MYSQL_USER}" MYSQL_PASSWORD: "${DB_MYSQL_PASSWORD}" volumes: - ./.compose/db_encoder:/var/lib/mysql healthcheck: test: "mariadb-admin ping -h localhost -u $DB_MYSQL_USER -p$DB_MYSQL_PASSWORD" interval: 30s timeout: 10s retries: 3 deploy: resources: limits: cpus: "0.5" memory: "1G" networks: - app_net memcached: image: memcached:alpine restart: "unless-stopped" command: > sh -c "memcached -m 128 -c 1024 -t ${NPROC:-2} -vv" ports: - "${MEMCACHE_PORT:-11211}:11211" deploy: resources: limits: cpus: '1' memory: "4G" reservations: cpus: '0.5' memory: '512M' networks: - app_net environment: - NPROC=${NPROC:-2} networks: app_net: driver: bridge ipam: config: - subnet: "${NETWORK_SUBNET:-172.21.0.0/16}"