Перейти к содержанию

Как перенести WordPress в Docker и не тронуться умом

echo $USER дума для бывалы ДевОпсеров да и Системных Администратор не составит огромного труда перенести сайт в докере, но у меня, как и у всех людей частенько что-нибудь особенно после НГ и конечно я совершил очень много ошибок и эта статья как напоминание чтобы не совершать ошибок : – )

Вчерашня задача выглядела так:

  1. Заархивировать файлы сайта
  2. Забекапить базу данных
  3. Принести на новый сервер бэкапы
  4. Быстро все установить необходимое
  5. Написать docker-compose файлы для сайта
  6. Развернуть все на новому сервере

Вроде задача довольно простая, я даже сказал бы что максимум на 40 м с легким перекуром(так как сайт у меня маленький) но не тут то было, память со мной сыграла злую шутку.

Мем прям описывает меня, а теперь стартуем…

Архивируем сайт

tar -czf sys.`date +%Y`.tar.gz ~/systemoon

Дампим базу данных нашего сайта

mysqldump --add-drop-table -u user -p | gzip > my.sql.gz

Переносим на новый сервер, есть много способов, но я выбрал самый простой

scp sys.2024.tar.gz test@ip:/tmp
scp my.sql.gz test@ip:/tmp

Ну вот-вот уже часть задач выполнено, переходим по сашке на новый сервер

apt update && apt upgrade -y

Устанавливаем docker

apt install docker.io

Заводим для него нового пользователя и добавляем его в группу и задаем пароль

useradd -m dev
usermod -aG docker dev
passwd dev

Так теперь требуется установить docker compose

curl -SL https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Так ну самые основные без чего бы я не смог работать я, установил, теперь осталось написать docker compose, конфиги и папки под проект

Создадим необходимые директории под наш проект

mkdir wordpress 
cd wordpress 
mkdir certbot
mkdir -p data/db
mkdir -p data/html
mkdir -p data/mysql
mkdir -p data/sys
mkdir -p certbot/conf
mkdir -p certbot/www
mkdir logs
mkdir nginx

Так вот директории созданы под проект, давайте с начала начнем с конфига для nginx

nano nginx/nginx.conf
server {
  listen 80 default_server;
  server_name systemon.ru www.systemon.ru;

 

  access_log /var/log/nginx/site-access.log;
  error_log /var/log/nginx/site-error.log;
  server_tokens off;	  

  location /.well-known/acme-challenge/ {
	root /var/www/certbot;
}  
location / {
        try_files $uri $uri/ /index.php?$args;
    }
}


Вот такой конфигурация, теперь приступим к написанию docker compose файла

nano docker-compose.yml
version: '3.3'

services:
  nginx:
    image: nginx:latest
    volumes:
        - ./nginx:/etc/nginx/conf.d:ro
        - ./data/html/sys:/var/www/html:rw
        - ./certbot/www:/var/certbot/www/:ro  
    ports:
        - 80:80
        - 443:443
    links:
        - wordpress
    networks:
        - wp
  wordpress:
    depends_on:
      - db
    image: wordpress:fpm
    volumes:
      - ./data/html/sys:/var/www/html
    restart: always
    networks:
      - wp

  db:
    image: mysql:latest
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./data/db:/docker-entrypoint-initdb.d
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: test
      MYSQL_DATABASE: wordpress
      MYSQL_USER: test
      MYSQL_PASSWORD: test
    networks:
      - wp
  certbot:
      image: certbot/certbot:latest
      volumes:
        - ./certbot/www/:/var/www/certbot/:rw
        - ./certbot/conf/:/etc/letsencrypt/:rw
networks:
  wp:
    driver: bridge
    name: wp-network

Так теперь давайте разархивируем нашу базу и сайт

cd /data/html/sys
tar -xzf sys.2024.tar.gz
cd /data/mysql
tar -xzf my.sql.gz 

Ну вот мы и все написали, вроде все готово, но нужно теперь поставить ssl сертификат, запускаем наш docker compose

docker-compose up -d

Для того чтобы сделать сертификат вводим

docker-compose run --rm  certbot certonly --webroot --webroot-path /var/www/certbot/ --dry-run -d sys.ru

Пусто, но дальше вводим

docker-compose run --rm  certbot certonly --webroot --webroot-path /var/www/certbot/ -d sys.ru

И все наши сертификаты теперь находятся в папке certboot/conf/live, перенесем их в certbot/www

cp certbot/conf/sys.ru/fullchain.pem certbot/www
cp certbot/conf/sys.ru/privkey.pem certbot/www

Отлично теперь дополним нашу конфигурацию nginx

nano nginx/nginx.conf
server {
	listen 443 ssl;
	server_name sys www.sys.ru;
	ssl_certificate /var/certbot/www/fullchain.pem;
  ssl_certificate_key /var/certbot/www/privkey.pem;
  index index.php;
	root /var/www/html;
  location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass wordpress_wordpress_1: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 ~ /\. {
            log_not_found off;
            deny all;
        }
 
}

Перезапускаем сервер nginx

docker-compose restart nginx

Ну вот и закончилась моя первая статья в этом в этом году.

Опубликовано в рубрикеLINUXUncategorized

Оставьте первый коментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *