# WordPress + MariaDB for Podman (rootless-friendly) # Used with: podman-compose up -d (or: podman compose up -d) # # WordPress is published ONLY on 127.0.0.1 -- the host's nginx is the public face. # The database is never published at all; it lives on a private network. name: wp_viossa_net services: db: image: docker.io/library/mariadb:11.4 container_name: wp_viossa_net_db restart: always environment: MARIADB_DATABASE: ${WP_DB_NAME} MARIADB_USER: ${WP_DB_USER} MARIADB_PASSWORD: ${WP_DB_PASSWORD} MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD} MARIADB_AUTO_UPGRADE: "1" volumes: - db_data:/var/lib/mysql networks: - backend healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s timeout: 5s retries: 10 start_period: 30s wordpress: image: docker.io/library/wordpress:6-php8.3-apache container_name: wp_viossa_net_app restart: always depends_on: db: condition: service_healthy ports: # Loopback only. Change WP_HOST_PORT in .env if it collides with something else. - "127.0.0.1:${WP_HOST_PORT:-18080}:80" environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_NAME: ${WP_DB_NAME} WORDPRESS_DB_USER: ${WP_DB_USER} WORDPRESS_DB_PASSWORD: ${WP_DB_PASSWORD} WORDPRESS_TABLE_PREFIX: ${WP_TABLE_PREFIX:-wp_} # NOTE: this is only written into wp-config.php the FIRST time the container # starts with an empty wp_data volume. "$$" is compose-escaping for a literal "$". WORDPRESS_CONFIG_EXTRA: | if (isset($$_SERVER['HTTP_X_FORWARDED_PROTO']) && $$_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $$_SERVER['HTTPS'] = 'on'; } define('FORCE_SSL_ADMIN', true); define('DISALLOW_FILE_EDIT', true); volumes: - wp_data:/var/www/html # :ro = read-only, :Z = private SELinux label (needed on Fedora/RHEL, harmless elsewhere) - ./php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro,Z networks: - backend networks: backend: volumes: db_data: name: wp_viossa_net_db_data wp_data: name: wp_viossa_net_wp_data