Перейти до вмісту

Копия ВордПресс на контейнерах Докер

Для копирования ВордПресс на разных виртуальных машинах, использующих Докер, изначально нужно правильно сконфигурировать образы (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=СМЕНИТЬ[email protected]СМЕНИТЬ!.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

Вот и всё! У меня работает 😉

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься.