Как легко установить WordPress с помощью Docker
Последний раз я устанавливал WordPress лет 6-7 назад. Но вот наконец то решил вернуться к ведению блога, и решал настроить старый добрый вордпресс.
Исходные данные
У меня уже есть VPS на котором крутятся мои пет проекты. Поэтому wordpress я буду ставить на нее. Что бы не конфликтовать с другими проектами естественно я хочу все запустить через докер.
Установка WordPress через докер
Подготоваливаем архитектуру папок
Сначала создаем архитектуру проекта
cd ~/wordpress mkdir -p nginx/ mkdir -p php/ mkdir -p data/mysql/
nginx — здесь будут лежать настройки для nginx
php — здесь будут лежать настройки для php
data/mysql — здесь будут лежать данные базы данных
app — здесь лежит wordpress
Теперь скачиваем последний WordPress. Я скачивал отсюда по ссылке
Выполним следующие команды что бы скачать и распаковать wordpress, переименовать папку wordpress в app для унификации всех проектов
wget https://wordpress.org/latest.zip unzip latest.zip mv wordpress app rm latest.zip
Теперь в папке ~/wordpress/app/ у нас лежит сайт, а уровнем выше настройки для контейнера.
Настраиваем Docker
Теперь гуглим докер образ для вордпресс и выбираем подходящий тег. Мне нужно что бы образ имел все необходимые расширения и библиотеки для вордпресса, поэтому я выбираю последний на момент написания статьи образ php8.3-fpm-alpine
Я люблю работать с докером через docker-compose.yaml, собственно давайте его настроим.
Если docker compose у вас не установлен, необходимо установить его по официальной документации
vim docker-compose.yml
Важно!!! Используйте свои пароли, имена пользователей и названия баз данных
version: '3.3' services: nginx: image: nginx:latest volumes: - ./nginx:/etc/nginx/conf.d - ./php:/usr/local/etc/php/conf.d/ - ./app:/var/www/ ports: - 80:80 links: - wordpress networks: - blog wordpress: depends_on: - db image: wordpress:php8.3-fpm-alpine ports: - 9001:9000 volumes: - ./app:/var/www/ environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: admin WORDPRESS_DB_PASSWORD: test_password # !!!используйте свой пароль WORDPRESS_DB_NAME: wordpress networks: - blog db: image: mariadb:10.5.8 volumes: - ./data/mysql:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: test_password_root # !!!используйте свой пароль MYSQL_DATABASE: wordpress MYSQL_USER: admin MYSQL_PASSWORD: test_password # !!!используйте свой пароль networks: - blog networks: blog: driver: bridge
Здесь:
- nginx — HTTP-сервер который будет заниматься статикой и роутингом запросов
- wordpress — PHP сервис который отвечает за работу сайта
- db — база данных
- blog — обьеденяющая наши контейнеры сеть
Конфигурируем Nginx
Теперь нужно создать файл настроек nginx
vim nginx nginx.conf
И настроим конфигурацию
server { listen 80 default_server; server_name _; root /var/www; index index.php; access_log /var/log/nginx/site-access.log; error_log /var/log/nginx/site-error.log; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass wordpress:9001; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name; # /var/www/ это папка внутри докера в которой лежит проект согласно правилу ./app:/var/www/ fastcgi_param PATH_INFO $fastcgi_path_info; } # что бы статику отдавал nginx location ~ \.(js|woff2|wolff|ttf|jpeg|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar) { try_files $uri =404; expires max; } }
Вообще nginx для вордпресса можно настроить гораздо лучше, но это тема для отдельной статьи Вот и все, теперь просто запускаем докер
docker-compose up -d
Или так
docker compose up -d
В зависимости от вашей версии докер композера.
Когда докер соберется и поднимется, то в браузере переходим по URL http://localhost, и далее следуем инструкции от wordpress, указываем доступы к базе данных, те же что указали в docker-compose.yml
В качестве Database Host нужно указать db (название секции в файле docker-compose.yml)
Установка на сервере
Если nginx у вас уже установлен на вашем сервере, то нужно просто удалить из docker-compose.yml раздел nginx, и добавить правило в конфигурацию основного nginx.
Вместо
fastcgi_pass wordpress:9001;
нужно
fastcgi_pass localhost:9001;
На этом все 🙂 Наслаждайтесь