π³ ΠΠ°ΠΊ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ WordPress Ρ Docker ΠΈ Docker Compose

ΠΡΡΠ·Π° ΠΈ ΡΠΈΠ³ΡΡΠ½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π½Π° WordPress Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ
π§ ΠΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠΊΠΎ ΠΈΡΠΊΠ°Ρ Π΄Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡ WordPress ΡΠ°ΠΉΡ Π±ΡΡΠ·ΠΎ, ΡΠΈΠ³ΡΡΠ½ΠΎ ΠΈ Π»Π΅ΡΠ½ΠΎ β Docker ΠΈ Docker Compose ΡΠ° ΡΠ²ΠΎΠΈΡΠ΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈ ΠΏΡΠΈΡΡΠ΅Π»ΠΈ. Π’Π΅ ΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°Ρ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½Π° ΠΈ ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌΠ° ΡΡΠ΅Π΄Π° Π·Π° ΡΠ΅Π±ΡΠ°ΠΉΡΠ° ΡΠΈ ΡΠ°ΠΌΠΎ Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.
Π ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠ΅ ΡΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ WordPress ΠΈ MySQL Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° docker-compose.yml
. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π²Π΅ΡΡΠΈΡ 8 Π½Π° MySQL ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΠ°Π±ΠΈΠ»Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° WordPress Ρ PHP 8.2.
π¦ ΠΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ
ΠΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅Ρ, ΡΠ²Π΅ΡΠΈ ΡΠ΅, ΡΠ΅ ΠΈΠΌΠ°Ρ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈ:
- Docker
- Docker Compose
- .env ΡΠ°ΠΉΠ» Ρ Π½ΡΠΆΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ (ΠΎΠΏΠΈΡΠ°Π½ ΠΏΠΎ-Π΄ΠΎΠ»Ρ)
π Π‘ΡΡΡΠΊΡΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°
wordpress-docker/
βββ docker-compose.yml
βββ .env
βββ config/
β βββ php.ini (ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ)
π Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° .env
ΡΠ°ΠΉΠ»
Π‘ΡΠ·Π΄Π°ΠΉ ΡΠ°ΠΉΠ» .env
ΡΡΡ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ (Π·Π°ΠΌΠ΅Π½ΠΈ ΡΡΡ ΡΠ²ΠΎΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ):
MYSQL_ROOT_PASSWORD=supersecret
MYSQL_DATABASE=wordpress
MYSQL_USER=wpuser
MYSQL_PASSWORD=wppassword
π docker-compose.yml
version: '3.8'
services:
db:
image: mysql:8.0
container_name: wordpress_db
restart: always
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_ROOT_HOST: 127.0.0.1
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
wordpress:
image: wordpress:6.5.3-php8.2-apache
container_name: wordpress_app
depends_on:
db:
condition: service_healthy
ports:
- "8070:80"
restart: always
volumes:
- wordpress_data:/var/www/html
- ./config/php.ini:/usr/local/etc/php/conf.d/custom.ini # ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_SITEURL: https://bai-hui.eu
WORDPRESS_HOME: https://bai-hui.eu
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
interval: 30s
timeout: 5s
retries: 3
volumes:
db_data:
driver: local
wordpress_data:
driver: local
π§ͺ Π‘ΡΠ°ΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅
Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉ Π²ΡΠΈΡΠΊΠΎ Ρ Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
docker compose up -d
Π‘Π»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΡΠ΅ ΠΈΠΌΠ°Ρ ΡΠ°Π±ΠΎΡΠ΅Ρ WordPress ΡΠ°ΠΉΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π°:
π http://localhost:8070 (ΠΈΠ»ΠΈ https://bai-hui.eu ΠΏΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ reverse proxy)
π ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ (ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ)
1. php.ini
Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
ΠΠΊΠΎ ΠΈΡΠΊΠ°Ρ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π½Π° PHP ΠΊΠ°ΡΠΎ upload_max_filesize
ΠΈΠ»ΠΈ memory_limit
, ΡΡΠ·Π΄Π°ΠΉ ΡΠ°ΠΉΠ» config/php.ini
:
upload_max_filesize=64M
post_max_size=64M
memory_limit=256M
2. ΠΠ±Π½ΠΎΠ²ΡΠ²Π°Π½Π΅
ΠΠ° Π΄Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡ Π²Π΅ΡΡΠΈΠΈΡΠ΅ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅, ΠΈΠ·ΠΏΡΠ»Π½ΠΈ:
docker compose pull
docker compose up -d
3. Π‘ΠΏΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅
docker compose down
ΠΠΊΠΎ ΠΈΡΠΊΠ°Ρ Π΄Π° ΠΈΠ·ΡΡΠΈΠ΅Ρ ΠΈ ΠΎΠ±Π΅ΠΌΠΈΡΠ΅ (Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! ΡΠ΅ Π·Π°Π³ΡΠ±ΠΈΡ Π΄Π°Π½Π½ΠΈ):
docker compose down -v
π ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉ
traefik
ΠΈΠ»ΠΈnginx
Ρ Let’s Encrypt Π·Π° HTTPS - Π Π°Π·ΡΠ΅ΡΠΈ ΡΠ°ΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ IP Π°Π΄ΡΠ΅ΡΠΈ Π΄ΠΎ
wp-admin
- Π‘ΠΊΡΠΈΠΉ
xmlrpc.php
ΠΈ REST API Π°ΠΊΠΎ Π½Π΅ Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ - Π‘ΡΠ·Π΄Π°ΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅Π½ backup Π½Π°
wordpress_data
ΠΈdb_data
π ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Docker ΠΈ Compose Π·Π° WordPress ΡΠΈ Π΄Π°Π²Π°:
β
ΠΠΎΠ½ΡΡΠΎΠ»
β
Π‘ΠΈΠ³ΡΡΠ½ΠΎΡΡ
β
ΠΡΡΠ·ΠΈΠ½Π°
β
ΠΠ΅ΡΠ½Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ ΠΈ Π±Π΅ΠΊΡΠΏ
β
ΠΠ΅ΡΠ½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°