Всем привет!
Продолжаем контейнеризировать все по-тихонечку. На этот раз переведем сайт на использование вордпресс. Сам официальный туториал не вызывает особого интереса - как мне показалось, там довольно все просто. И когда друг ко мне обратился за помощью, я подумал, что там будет все быстро сделано. Но, есть всегда свои но! Вперед:)
Первое, взглянем на оф. документ по инсталяции. Все просто! Нам понадобится docker-compose, если у вас еще не установлен, устанавливаем.
Второе, создаем директорию, где будем размещать все нужные нам файлы. Для начала хочу заметить, что по оф. доку у меня не получилось так быстро все сделать, т.к. WP не захотел работать без php-fpm, поэтому я сразу решал эту проблему. Далее показываю уже работающий конфиг, а ошибку укажу внизу поста.
Создаем docker-compose.yml
version: '3.1'
services:
Далее создаем контейнеры для WP, вашей базы данных - на выбор или Myslq или MariaDb, для Nginx и для PHP.
Контейнер WP, зависит от контейнера с базой данных:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: maindb
volumes:
- ./html:/var/www/html
Контейнер с базой данных:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: maindb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- ./database:/var/lib/mysql
- ./my.cnf:/etc/my.cnf
Я добавил файл с некоторыми настройками для MySql. Т.к. у меня на сервере мало оперативной памяти, то я сократил размер буфера. если этого не сделать, то демон mysqld будет ругаться и не стартанет. Содержимое my.cnf:
[mysqld]
innodb_buffer_pool_size = 16M
Контейнер с веб-сервером:
nginx:
image: nginx3
ports:
- 443:443
volumes:
- ./nginx:/etc/nginx/
- ./logs/nginx:/var/log/nginx
- ./html:/var/www/html
links:
- wordpress
- php
restart: always
Я настроил nginx, чтобы он работал только по 443 порту и выложил все конфиги в директории ./nginx, аналогично для логов. Конфиг для Nginx'a:
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
root /var/www/html;
ssl_certificate "/etc/ssl/certs/nginx-selfsigned.crt";
ssl_certificate_key "/etc/ssl/certs/nginx-selfsigned.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
try_files $uri /index.php?$args;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location /test{
proxy_pass https://ya.ru;
}
}
Тут интерес вызывают только самоподписанные сертификаты и настройки php. Для тестов директория /test перекидывает на сайт яндекса.
Последний контейнер для PHP.
php:
build: ./php/
volumes:
- ./html:/var/www/html
Для подключения к WP требуется библиотека mysqli, которая не установлена по умолчанию, поэтому собираем из докерфайла образ. Я образ собираю по докер-файлу, вот содержимое:
FROM php:7-fpm
RUN docker-php-ext-install mysqli
Далее добавляем:
volumes:
wordpress:
db:
networks:
local:
Запустил все с помощью:
docker-compose up -d
Проверяю логи контейнеров:
docker logs IDContainer
На этом настройка Docker'a закончена и далее уже можно переходить к настройкам самого WP. Теперь расскажу на какие грабли я наступил. Ошибки в студию:)
База показывает ошибку:
1) docker wordpress MySQL Connection Error: (2002) Connection refused
2) PHP Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in Standard input code on line 22
Браузер показывает ошибку:
3) Error establishing a database connection
Неверный формат файла конфига для базы
4) [ERROR] Found option without preceding group in config file /etc/my.cnf at line 1!
Успехов!
Продолжаем контейнеризировать все по-тихонечку. На этот раз переведем сайт на использование вордпресс. Сам официальный туториал не вызывает особого интереса - как мне показалось, там довольно все просто. И когда друг ко мне обратился за помощью, я подумал, что там будет все быстро сделано. Но, есть всегда свои но! Вперед:)
Первое, взглянем на оф. документ по инсталяции. Все просто! Нам понадобится docker-compose, если у вас еще не установлен, устанавливаем.
Второе, создаем директорию, где будем размещать все нужные нам файлы. Для начала хочу заметить, что по оф. доку у меня не получилось так быстро все сделать, т.к. WP не захотел работать без php-fpm, поэтому я сразу решал эту проблему. Далее показываю уже работающий конфиг, а ошибку укажу внизу поста.
Создаем docker-compose.yml
version: '3.1'
services:
Далее создаем контейнеры для WP, вашей базы данных - на выбор или Myslq или MariaDb, для Nginx и для PHP.
Контейнер WP, зависит от контейнера с базой данных:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: maindb
volumes:
- ./html:/var/www/html
Контейнер с базой данных:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: maindb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- ./database:/var/lib/mysql
- ./my.cnf:/etc/my.cnf
Я добавил файл с некоторыми настройками для MySql. Т.к. у меня на сервере мало оперативной памяти, то я сократил размер буфера. если этого не сделать, то демон mysqld будет ругаться и не стартанет. Содержимое my.cnf:
[mysqld]
innodb_buffer_pool_size = 16M
Контейнер с веб-сервером:
nginx:
image: nginx3
ports:
- 443:443
volumes:
- ./nginx:/etc/nginx/
- ./logs/nginx:/var/log/nginx
- ./html:/var/www/html
links:
- wordpress
- php
restart: always
Я настроил nginx, чтобы он работал только по 443 порту и выложил все конфиги в директории ./nginx, аналогично для логов. Конфиг для Nginx'a:
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
root /var/www/html;
ssl_certificate "/etc/ssl/certs/nginx-selfsigned.crt";
ssl_certificate_key "/etc/ssl/certs/nginx-selfsigned.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
try_files $uri /index.php?$args;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location /test{
proxy_pass https://ya.ru;
}
}
Тут интерес вызывают только самоподписанные сертификаты и настройки php. Для тестов директория /test перекидывает на сайт яндекса.
Последний контейнер для PHP.
php:
build: ./php/
volumes:
- ./html:/var/www/html
Для подключения к WP требуется библиотека mysqli, которая не установлена по умолчанию, поэтому собираем из докерфайла образ. Я образ собираю по докер-файлу, вот содержимое:
FROM php:7-fpm
RUN docker-php-ext-install mysqli
Далее добавляем:
volumes:
wordpress:
db:
networks:
local:
Запустил все с помощью:
docker-compose up -d
Проверяю логи контейнеров:
docker logs IDContainer
На этом настройка Docker'a закончена и далее уже можно переходить к настройкам самого WP. Теперь расскажу на какие грабли я наступил. Ошибки в студию:)
База показывает ошибку:
1) docker wordpress MySQL Connection Error: (2002) Connection refused
2) PHP Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in Standard input code on line 22
Браузер показывает ошибку:
3) Error establishing a database connection
Неверный формат файла конфига для базы
4) [ERROR] Found option without preceding group in config file /etc/my.cnf at line 1!
Успехов!
No comments:
Post a Comment