version: "3.8" services: db: image: mariadb:10.11 container_name: p2p-db restart: unless-stopped command: --max-connections=300 --wait-timeout=300 --interactive-timeout=300 environment: MYSQL_ROOT_PASSWORD: p2p_secure_root_2025 volumes: - db_data:/var/lib/mysql - ./init-db:/docker-entrypoint-initdb.d networks: - p2p-internal healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 30s timeout: 10s retries: 5 wiki: image: mediawiki:1.41 container_name: p2p-wiki restart: unless-stopped environment: - MEDIAWIKI_DB_HOST=db - MEDIAWIKI_DB_NAME=p2p_wiki - MEDIAWIKI_DB_USER=p2p_wiki - MEDIAWIKI_DB_PASSWORD=wiki_secure_2025 volumes: - wiki_data:/var/www/html/images - ./wiki-config:/var/www/html/config - ./robots-wiki.txt:/var/www/html/robots.txt:ro - ./block-bots.conf:/etc/apache2/conf-enabled/block-bots.conf:ro depends_on: db: condition: service_healthy labels: - "traefik.enable=true" - "traefik.http.routers.p2p-wiki.rule=Host(`wiki.p2pfoundation.net`)" - "traefik.http.services.p2p-wiki.loadbalancer.server.port=80" networks: - p2p-internal - traefik-public blog: image: wordpress:6.4-php8.2-apache container_name: p2p-blog restart: unless-stopped environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: p2p_blog WORDPRESS_DB_USER: p2p_blog WORDPRESS_DB_PASSWORD: blog_secure_2025 volumes: - blog_data:/var/www/html - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro - ./robots.txt:/var/www/html/robots.txt:ro - ./block-bots.conf:/etc/apache2/conf-enabled/block-bots.conf:ro - ./rdata-analytics.php:/var/www/html/wp-content/mu-plugins/rdata-analytics.php:ro depends_on: db: condition: service_healthy labels: - "traefik.enable=true" - "traefik.http.routers.p2p-blog.rule=Host(`blog.p2pfoundation.net`) || Host(`www.blog.p2pfoundation.net`)" - "traefik.http.services.p2p-blog.loadbalancer.server.port=80" networks: - p2p-internal - traefik-public bloggr: image: wordpress:6.4-php8.2-apache container_name: p2p-bloggr restart: unless-stopped environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: p2p_bloggr WORDPRESS_DB_USER: p2p_bloggr WORDPRESS_DB_PASSWORD: bloggr_secure_2025 volumes: - bloggr_data:/var/www/html - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro - ./robots.txt:/var/www/html/robots.txt:ro - ./block-bots.conf:/etc/apache2/conf-enabled/block-bots.conf:ro - ./rdata-analytics.php:/var/www/html/wp-content/mu-plugins/rdata-analytics.php:ro depends_on: db: condition: service_healthy labels: - "traefik.enable=true" - "traefik.http.routers.p2p-bloggr.rule=Host(`bloggr.p2pfoundation.net`)" - "traefik.http.services.p2p-bloggr.loadbalancer.server.port=80" networks: - p2p-internal - traefik-public blogfr: image: wordpress:6.4-php8.2-apache container_name: p2p-blogfr restart: unless-stopped environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: p2p_blogfr WORDPRESS_DB_USER: p2p_blogfr WORDPRESS_DB_PASSWORD: blogfr_secure_2025 volumes: - blogfr_data:/var/www/html - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro - ./robots.txt:/var/www/html/robots.txt:ro - ./block-bots.conf:/etc/apache2/conf-enabled/block-bots.conf:ro - ./rdata-analytics.php:/var/www/html/wp-content/mu-plugins/rdata-analytics.php:ro depends_on: db: condition: service_healthy labels: - "traefik.enable=true" - "traefik.http.routers.p2p-blogfr.rule=Host(`blogfr.p2pfoundation.net`)" - "traefik.http.services.p2p-blogfr.loadbalancer.server.port=80" networks: - p2p-internal - traefik-public blognl: image: wordpress:6.4-php8.2-apache container_name: p2p-blognl restart: unless-stopped environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: p2p_blognl WORDPRESS_DB_USER: p2p_blognl WORDPRESS_DB_PASSWORD: blognl_secure_2025 volumes: - blognl_data:/var/www/html - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro - ./robots.txt:/var/www/html/robots.txt:ro - ./block-bots.conf:/etc/apache2/conf-enabled/block-bots.conf:ro - ./rdata-analytics.php:/var/www/html/wp-content/mu-plugins/rdata-analytics.php:ro depends_on: db: condition: service_healthy labels: - "traefik.enable=true" - "traefik.http.routers.p2p-blognl.rule=Host(`blognl.p2pfoundation.net`)" - "traefik.http.services.p2p-blognl.loadbalancer.server.port=80" networks: - p2p-internal - traefik-public web: image: wordpress:6.4-php8.2-apache container_name: p2p-web restart: unless-stopped environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: p2p_web WORDPRESS_DB_USER: p2p_web WORDPRESS_DB_PASSWORD: web_secure_2025 volumes: - web_data:/var/www/html - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro - ./robots.txt:/var/www/html/robots.txt:ro - ./block-bots.conf:/etc/apache2/conf-enabled/block-bots.conf:ro - ./rdata-analytics.php:/var/www/html/wp-content/mu-plugins/rdata-analytics.php:ro depends_on: db: condition: service_healthy labels: - "traefik.enable=true" - "traefik.http.routers.p2p-web.rule=Host(`p2pfoundation.net`) || Host(`www.p2pfoundation.net`)" - "traefik.http.services.p2p-web.loadbalancer.server.port=80" networks: - p2p-internal - traefik-public volumes: db_data: wiki_data: blog_data: bloggr_data: blogfr_data: blognl_data: web_data: networks: p2p-internal: driver: bridge traefik-public: external: true