В данном туториале мы рассмотрим, как быстро развернуть 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.
Комментарии (13)
kotomyava
19.10.2021 14:55+2Странно, что кто-то ещё помнит это сочетание букв. А тут вдруг прям в докере.
Ну и chmod 777, базу вручную создавать, да... Ну какая CMS, такой и рецепт, видимо, что уж поделать. =)
vladimir_gorobets
19.10.2021 15:23+2А кастомные конфиги nginx для включения ЧПУ забыли?
Буквально неделю назад сам решил понастальгировать, скачал свежий релиз DLE v15 и понял, что за последние пару лет ничего кардинально не изменилось. Я думал, что 2021 в любом движке просто обязан быть файлик docker-compose.yaml и DLE уже давно переведен по-дефолту на nginx+php-fpm, но там как был по-дефолту 10 лет назад апач, так и остался...Я понимаю, что движок для домохозяек, но закидывать внешние либы в архив с проектом в 2021 как-то странно. Ну и кодстайл... неужели трудно хотя бы отформатировать код в PhpStorm?
В итоге поднял в докере, посмотрел, но желания дальше ковыряться уже не возникло...
DuD
19.10.2021 16:28+1Перед глазами прям промелькнули 2010е. Стоит только к названию любой софтины в поиске дописать +crack и вся поисковая выдача забита сайтами с варезом.
А как они потом рассылали владельцам доменов претензии за использование крякнутой версии самого DLE. Ох, ушла эпоха...
tercius
19.10.2021 18:53-2Кто то ещё использует это убожество??
Kropers
20.10.2021 10:26+2Почему убожество?
kamilov
20.10.2021 13:44+2Тенденции в современном программировании очень быстро меняются, меняется всё, даже Битрикс с его кодовой базой старается меняться, медленно но меняется, у DLE как был плох в плане кода, так им и остался. А так относительно удобный движок
tercius
20.10.2021 21:41-2Он божественно дырявый, и никакие серьёзные проекты на нем лучше не делать, да даже не серьёзные лучше не делать. Только что нибудь из серии личных блогов или личных сайтов.
endlessnights
прям «взрыв из прошлого».
raamid
В смысле "из прошлого"? А что же тогда сейчас актуально?
endlessnights
Некогда популярная CMS из 201X, которую использовали для всего подряд, да еще и платная.
Tilda, WP. И фреймворки Django, Flask; уверен, есть еще что-то.
raamid
Спасибо, что пояснили. Я почему-то подумал, что речь о Докере и контейнерах.