echo $USER дума для бывалы ДевОпсеров да и Системных Администратор не составит огромного труда перенести сайт в докере, но у меня, как и у всех людей частенько что-нибудь особенно после НГ и конечно я совершил очень много ошибок и эта статья как напоминание чтобы не совершать ошибок : – )
Вчерашня задача выглядела так:
- Заархивировать файлы сайта
- Забекапить базу данных
- Принести на новый сервер бэкапы
- Быстро все установить необходимое
- Написать docker-compose файлы для сайта
- Развернуть все на новому сервере
Вроде задача довольно простая, я даже сказал бы что максимум на 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
Ну вот и закончилась моя первая статья в этом в этом году.
Оставьте первый коментарий