1
0
Fork 0
mirror of https://github.com/DanielnetoDotCom/YouPHPTube synced 2025-10-02 17:29:20 +02:00
Oinktube/docker-compose.yml

223 lines
6.9 KiB
YAML

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
# Optimised Memcached service (docker-compose.yml)
memcached:
image: memcached:alpine
restart: unless-stopped
# ── Runtime flags ────────────────────────────────────────────────
# -m 512 → 512 MiB cache (enough for large PHP sessions)
# -c 2048 → 2 048 concurrent connections
# -t ${NPROC:-4} → one worker thread per vCPU (default 4)
# -R 200 → 200 requests per event loop → lower latency
command: >
memcached -m 512 -c 2048 -t ${NPROC:-4} -R 200
ports:
- "${MEMCACHE_PORT:-11211}:11211"
deploy:
resources:
limits:
cpus: '1'
memory: "4G" # hard limit (container OOM-kills above this)
reservations:
cpus: '0.5'
memory: '1G' # guaranteed reservation (was 512 M)
networks:
- app_net
environment:
NPROC: ${NPROC:-4}
networks:
app_net:
driver: bridge
ipam:
config:
- subnet: "${NETWORK_SUBNET:-172.21.0.0/16}"