В данном туториале мы рассмотрим, как быстро развернуть 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)


  1. endlessnights
    19.10.2021 13:15
    +6

    прям «взрыв из прошлого».


    1. raamid
      19.10.2021 14:38
      +2

      В смысле "из прошлого"? А что же тогда сейчас актуально?


      1. endlessnights
        20.10.2021 10:09

        Некогда популярная CMS из 201X, которую использовали для всего подряд, да еще и платная.
        Tilda, WP. И фреймворки Django, Flask; уверен, есть еще что-то.


        1. raamid
          21.10.2021 14:53

          Спасибо, что пояснили. Я почему-то подумал, что речь о Докере и контейнерах.


  1. kotomyava
    19.10.2021 14:55
    +2

    Странно, что кто-то ещё помнит это сочетание букв. А тут вдруг прям в докере.

    Ну и chmod 777, базу вручную создавать, да... Ну какая CMS, такой и рецепт, видимо, что уж поделать. =)


  1. vladimir_gorobets
    19.10.2021 15:23
    +2

    А кастомные конфиги nginx для включения ЧПУ забыли?

    Буквально неделю назад сам решил понастальгировать, скачал свежий релиз DLE v15 и понял, что за последние пару лет ничего кардинально не изменилось. Я думал, что 2021 в любом движке просто обязан быть файлик docker-compose.yaml и DLE уже давно переведен по-дефолту на nginx+php-fpm, но там как был по-дефолту 10 лет назад апач, так и остался...

    Я понимаю, что движок для домохозяек, но закидывать внешние либы в архив с проектом в 2021 как-то странно. Ну и кодстайл... неужели трудно хотя бы отформатировать код в PhpStorm?

    В итоге поднял в докере, посмотрел, но желания дальше ковыряться уже не возникло...


  1. DuD
    19.10.2021 16:28
    +1

    Перед глазами прям промелькнули 2010е. Стоит только к названию любой софтины в поиске дописать +crack и вся поисковая выдача забита сайтами с варезом.

    А как они потом рассылали владельцам доменов претензии за использование крякнутой версии самого DLE. Ох, ушла эпоха...


    1. tester_17
      20.10.2021 06:09

      ага, скорее всего от их жадности дле и протух


  1. tercius
    19.10.2021 18:53
    -2

    Кто то ещё использует это убожество??


    1. Kropers
      20.10.2021 10:26
      +2

      Почему убожество?


      1. kamilov
        20.10.2021 13:44
        +2

        Тенденции в современном программировании очень быстро меняются, меняется всё, даже Битрикс с его кодовой базой старается меняться, медленно но меняется, у DLE как был плох в плане кода, так им и остался. А так относительно удобный движок


      1. tercius
        20.10.2021 21:41
        -2

        Он божественно дырявый, и никакие серьёзные проекты на нем лучше не делать, да даже не серьёзные лучше не делать. Только что нибудь из серии личных блогов или личных сайтов.


  1. dest2r4
    21.10.2021 15:50
    +1

    слишком много работы, гораздо проще было бы git clone, docker-compose up