Для копирования ВордПресс на разных виртуальных машинах, использующих Докер, изначально нужно правильно сконфигурировать образы (volumes) так, чтобы к ним имелся легкий доступ. Пример такой конфигкрации можно найти в этой статье.
Для создания архива целой папки, введите следующую команду (чтоб узнать полный путь к папке, введите команду pwd
):
sudo tar -zcvf file.tar.gz /полный/путь/к/папке
Например:
sudo tar -zcvf database.tar.gz /home/web/database
После этого, с виртуальной машины, в которую мы хотим перенести, копируем нужные файлы, используя следующую команду ( -P 1022 если порт отличный от 22, его нужно указать, используя большую букву Р)
scp -P 1022 [email protected]:/путь/к файлу/database.tar.gz /локальный/путь/назначения
Например:
scp -P 1022 [email protected]:/home/web/database.tar.gz /home/web/dev
В последствии, разархивируем файл в нужную папку
tar -xf database.tar.gz -C /путь/папки/назначения
Например:
[email protected]:~/dev$ tar -xf database.tar.gz -C /home/web/dev/archive/
[email protected]:~/dev$ tar -xf html.tar.gz -C /home/web/dev/archive/
Важно понимать, что структура папок внутри архива повторяет структуру папок на оригинальном сервере. Поэтому на нужно найти нужную папку в разархивированных файлах, переместить её в нужное место и переименовать согласно структуре образа Докер:
mv database /home/web/wow/ *перемещаем
mv database mysql *переименовываем - ВАЖНО! Папка базы данных должна называться mysql
Переместив файлы в нужные папки, создаём файл конфигурации Докер docker-compose.yml По этому шаблону можно создать несколько сайтов ВордПресс с установленными сертификатами SSL (очень важно – замените данные доменов и паролей на свои!)
version: '3'
services:
nginx-proxy:
image: jwilder/nginx-proxy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- certs:/etc/nginx/certs:ro
- vhostd:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
labels:
- com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
restart: always
environment:
- NGINX_PROXY_CONTAINER=nginx-proxy
volumes:
- certs:/etc/nginx/certs:rw
- vhostd:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
db:
image: mariadb:latest
volumes:
# location of database files for first server
- /home/web/dev/mysql:/var/lib/mysql
restart: always
environment:
# consider changing these
MYSQL_ROOT_PASSWORD: СМЕНИТЬ!
MYSQL_DATABASE: wordpress
phpmyadmin:
depends_on:
- db
image: phpmyadmin/phpmyadmin
restart: always
ports:
- '8080:80'
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: СМЕНИТЬ!
wordpress:
depends_on:
- db
- nginx-proxy
- letsencrypt
image: wordpress:latest
restart: always
volumes:
# location of html files for first server
- /home/web/dev/html:/var/www/html
expose:
- "80"
restart: always
environment:
- VIRTUAL_HOST=dev.СМЕНИТЬ!.com
- LETSENCRYPT_HOST=dev.СМЕНИТЬ!.com
- LETSENCRYPT_EMAIL=evxСМЕНИТЬ!n.com
- WORDPRESS_DB_HOST=db:3306
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=СМЕНИТЬ!
- WORDPRESS_DB_NAME=wordpress
# change the name of DB, WOrdpress and phpMyAdmin
db_hello:
image: mariadb:latest
volumes:
# - second server DB location
- /home/web/hello/mysql:/var/lib/mysql
restart: always
environment:
# consider changing these
MYSQL_ROOT_PASSWORD: СМЕНИТЬ!
MYSQL_DATABASE: wordpress_hello
# change this
phpmyadmin_hello:
depends_on:
- db_hello
image: phpmyadmin/phpmyadmin
restart: always
ports:
- '8081:80'
environment:
# change this
PMA_HOST: db_hello
MYSQL_ROOT_PASSWORD: СМЕНИТЬ!
wordpress_hello:
depends_on:
- db_hello
- nginx-proxy
- letsencrypt
image: wordpress:latest
restart: always
volumes:
# change this
- /home/web/hello/html:/var/www/html
expose:
- "80"
restart: always
environment:
# change this
- VIRTUAL_HOST=hello.СМЕНИТЬ!.com
- LETSENCRYPT_HOST=hello.СМЕНИТЬ!.com
- LETSENCRYPT_EMAIL=СМЕНИТЬ!@СМЕНИТЬ!.com
- WORDPRESS_DB_HOST=db_hello:3306
# change this
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=СМЕНИТЬ!
- WORDPRESS_DB_NAME=wordpress_hello
volumes:
certs:
html:
vhostd:
Запускаем docker-compose docker-compoer up -d
, проверяем открыты ли порты 80 и 443 и если всё в порядке, через несколько минут наш сайт должен будет появиться онлайн!
Также важный момент – при копировании файлов, пользователь с доступами к файлам wp-content неверный (при чистой установке Докер правильно конфигурирует пользователей и их привилегии, в случае с ручным копированием, нам скорее всего придётся сменить “пользователя”)
Для того, чтоб знать какой пользователь использует Докер, на чистой уставке проверяем стандартную конфигурацию:
[email protected]:~/hello/html/wp-content$ ls -l
total 12
-rw-r--r-- 1 www-data www-data 28 Jan 8 2012 index.php
drwxr-xr-x 3 www-data www-data 4096 Sep 9 02:20 plugins
drwxr-xr-x 5 www-data www-data 4096 Sep 9 02:20 themes
Как видим, пользователь Докер это www-data
. Меняем пользователя папки html
sudo chown -R www-data html
Вот и всё! У меня работает 😉