version: '3' services: wordpress: build: ./docker/wordpress ports: - ${IP:-0.0.0.0}:${WP_PORT:-80}:80 - ${IP:-0.0.0.0}:${WP_PORT_SSL:-443}:443 volumes: - ./docker/wp_php.ini:/usr/local/etc/php/conf.d/wp_php.ini - ./wp:/var/www/html - ./logs:/var/log/apache2 - ./plugins:/var/www/html/wp-content/plugins - ./themes:/var/www/html/wp-content/themes - ./uploads:/var/www/html/wp-content/uploads - ./docker/default.conf:/etc/apache2/sites-enabled/000-default.conf environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: "${DB_NAME}" WORDPRESS_DB_USER: "${DB_USER}" WORDPRESS_DB_PASSWORD: "${DB_ROOT_PASSWORD}" env_file: - .env depends_on: db: condition: service_healthy links: - db wpcli: image: wordpress:cli volumes: - ./docker/wp_php.ini:/usr/local/etc/php/conf.d/wp_php.ini - ./wp:/var/www/html - ./plugins:/var/www/html/wp-content/plugins - ./themes:/var/www/html/wp-content/themes - ./uploads:/var/www/html/wp-content/uploads command: bash -c "wp core is-installed --path=/var/www/html || wp core install --path=/var/www/html --url=${WP_SERVER_NAME} --title=\"$WP_TITLE\" --admin_user=${WP_ADMIN_USER} --admin_password=${WP_ADMIN_PASSWORD} --admin_email=${WP_ADMIN_EMAIL} --skip-email && wp theme install ${WP_THEME} --activate && tail -f /dev/null" environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: "${DB_NAME}" WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: "${DB_ROOT_PASSWORD}" HTTP_HOST: "${WP_SERVER_NAME}" WP_ADMIN_USER: "${WP_ADMIN_USER}" WP_ADMIN_PASSWORD: "${WP_ADMIN_PASSWORD}" WP_ADMIN_EMAIL: "${WP_ADMIN_EMAIL}" env_file: - .env links: - db:db depends_on: - wordpress pma: image: phpmyadmin:latest # https://hub.docker.com/_/phpmyadmin environment: # https://docs.phpmyadmin.net/en/latest/setup.html#docker-environment-variables PMA_HOST: db PMA_PORT: 3306 MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}" UPLOAD_LIMIT: 50M ports: - ${IP:-0.0.0.0}:${PMA_PORT:-8080}:80 links: - db:db volumes: - ./docker/pma_php.ini:/usr/local/etc/php/conf.d/conf.ini - ./docker/pma_config.php:/etc/phpmyadmin/config.user.inc.php db: build: ./docker/db platform: linux/x86_64 ports: - ${IP:-0.0.0.0}:3306:3306 command: [ '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci' ] volumes: - ./data:/docker-entrypoint-initdb.d - db_data:/var/lib/mysql environment: MYSQL_DATABASE: "${DB_NAME}" MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}" MYSQL_USER: "${DB_USER}" MYSQL_PASSWORD: "${DB_PASSWORD}" env_file: - .env healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] volumes: db_data: