В данном туториале мы рассмотрим, как быстро развернуть LEMP-стэк на виртуальный сервер VPS, используя технологию контейнеризации на базе Docker для сайта под управлением CMS DataLife Engine (DLE).
Предполагается, что у вас уже установлен движок контейнеризации Docker, а также Compose для одновременно развертывания нескольких контейнеров и управления ими.
Для начала создадим структуру каталогов для сайта:
mkdir -p /data/project/{app,db,log,src}
где, app это директория для хранения файлов сайта, в db будут хранятся файлы баз данных MySQL, в папке log хранятся логи веб-сервера NGINX, а в src исходники и конфигурационные файлы для сборки кастомных контейнеров. Файл docker-compose.yml содержит инструкции для развертывания контейнеров Docker.
В этом файле указываем, например:
Откуда взять Dockerfile для создания кастомного образа
Какие порты привязать к хост-машине
Где хранить данные
и т.д.
Compose считывает этот файл и выполняет команды. Создадим файл /data/project/docker-compose.yml со следующим содержимым:
version: '3.7'
services:
# NGINX Service
web:
image: nginx:latest
container_name: web
ports:
- "80:80"
volumes:
- ./src/nginx_default_vhost.conf:/etc/nginx/conf.d/default.conf
- ./app:/var/www/html
- ./log:/var/log/nginx
# PHP Service
app:
build:
context: ./src
dockerfile: Dockerfile-PHP-FPM
container_name: app
working_dir: /var/www/html
volumes:
- ./app:/var/www/html
# MySQL Service
db:
image: mariadb:10.5.10
container_name: db
environment:
MARIADB_ROOT_PASSWORD: 1234567890
volumes:
- ./db:/var/lib/mysql
Создадим конфиг виртуального хоста в файле /data/project/src/nginx_default_vhost.conf с проксированием контента на бэкэнд:
server {
listen 0.0.0.0:80 default_server;
server_name localhost;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Для PHP мы будем создавать кастомный образ на базе php:7.4-fpm с добавлением расширений gd, mysqli и zip, которые необходимы для работы с движком DLE. Создадим файл /data/project/src/Dockerfile-PHP-FPM со следующим содержимым:
FROM php:7.4-fpm
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libzip-dev \
zip \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install mysqli \
&& docker-php-ext-install zip
Скачиваем пробную версию движка DLE с официального сайта. При использовании демоверсии, существуют ограничения. Подробно вы можете ознакомиться на сайте: http://dle-news.ru
wget https://dle-news.ru/files/dle_trial.zip
Разархивируем файлы в папку /data/project/app:
unzip dle_trial.zip "upload/*" -d /tmp && mv /tmp/upload/* /data/project/app/
Назначаем права доступа папкам согласно документации движка:
chmod 777 /data/project/app/{templates,engine/{data,cache}}
chmod -R 777 /data/project/app/{backup,uploads}
Запускаем контейнеры:
docker-compose -f /data/project/docker-compose.yml up -d -–build
Открываем в браузере адрес сервера и приступаем к установке движка. Для продолжения установки необходимо создать базу данных и пользователя к ней. Подключаемся к контейнеру db:
docker exec -it db bash
Затем подключаемся к службе mysql:
mysql -u root -p"1234567890"
Выполняем SQL запрос для создания базы testdb:
create database testdb character set utf8 collate utf8_bin;
Создаем пользователя testuser и предоставляем права доступа на базу testdb:
grant all privileges on testdb.* to testuser@'%' identified by 'passwd';
Теперь заполняем поля на сайте, указываем в качестве сервера MySQL, имя контейнера БД, в нашем случае это db.
Поздравляю! Вы успешно установили CMS Datalife Engine с использованием технологии контейнеризации приложений Docker.
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud - в нашем Telegram-канале ↩