Как установить Drupal с помощью Docker на Ubuntu 22.04

Drupal — это система управления контентом (CMS) с открытым исходным кодом, написанная на PHP. Многие организации по всему миру используют ее для создания блогов, правительственных сайтов, корпоративных веб-сайтов и т. д. Она поставляется с растущим набором функций и модулей для расширения ее функциональности, что позволяет создавать любые веб-сайты.

В этом руководстве вы узнаете, как установить Drupal с помощью Docker на сервере Ubuntu 22.04. Drupal работает с PHP 8.2 и MySQL. Он также поддерживает PostgreSQL с версии 9, но есть некоторые ошибки. Поэтому в нашем руководстве мы будем использовать MySQL. Мы будем использовать Docker Compose для интеграции Drupal с Nginx и инструментом Certbot для обслуживания сайта Drupal по безопасному протоколу HTTPS.

Необходимые условия

  • Сервер под управлением Ubuntu 22.04 с минимум 1 ГБ ОЗУ для небольших сообществ. Для размещения более крупных сообществ вам понадобится сервер с минимум 2 ГБ ОЗУ или более.
  • Пользователь без прав root с привилегиями sudo.
  • Полное доменное имя (FQDN), указывающее на ваш сервер. Для наших целей мы будем использовать example.com в качестве доменного имени.
  • Убедитесь, что все обновлено.
    $ sudo apt update
    
  • Установите базовые пакеты утилит. Некоторые из них могут быть уже установлены.
    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

Шаг 1 — Настройте брандмауэр

Первый шаг — настроить брандмауэр. Ubuntu по умолчанию поставляется с ufw (Uncomplicated Firewall).

Проверьте, работает ли брандмауэр.

$ sudo ufw status

Вы должны получить следующий результат.

Status: inactive

Разрешите порт SSH, чтобы брандмауэр не прервал текущее соединение при его включении.

$ sudo ufw allow OpenSSH

Разрешите также порты HTTP и HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Включите брандмауэр.

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Снова проверьте состояние брандмауэра.

$ sudo ufw status

Вы должны увидеть похожий результат.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Шаг 2 — Установите Docker и Docker Compose

Ubuntu 22.04 поставляется с более старой версией Docker. Чтобы установить последнюю версию, сначала импортируйте ключ GPG Docker.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Создайте файл репозитория Docker.

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновите список системных репозиториев.

$ sudo apt update

Установите последнюю версию Docker.

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Убедитесь, что он работает.

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-01-14 10:41:35 UTC; 2min 1s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 2054 (dockerd)
      Tasks: 52
     Memory: 22.5M
        CPU: 248ms
     CGroup: /system.slice/docker.service
             ??  2054 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

По умолчанию Docker требует прав root. Если вы хотите избежать использования sudo каждый раз при запуске команды docker , добавьте свое имя пользователя в группу docker .

$ sudo usermod -aG docker $(whoami)

Чтобы это изменение вступило в силу, вам необходимо выйти из системы и снова войти под тем же именем пользователя или использовать следующую команду.

$ su - ${USER}

Убедитесь, что ваш пользователь добавлен в группу Docker.

$ groups
navjot wheel docker

Шаг 3 — Создание файла Docker Compose для Drupal

Создайте каталог для Drupal.

$ mkdir ~/drupal

Перейдите в этот каталог.

$ cd ~/drupal

Создайте и откройте файл docker-compose.yml для редактирования.

$ nano docker-compose.yml

Вставьте в него следующий код.

services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: unless-stopped
    env_file: .env
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - internal
  
  drupal:
    image: drupal:10-fpm-alpine
    container_name: drupal
    depends_on:
      - mysql
    restart: unless-stopped
    networks:
      - internal
      - external
    volumes:
      - drupal-data:/var/www/html
  
  webserver:
    image: nginx:1.22.1-alpine
    container_name: webserver
    depends_on:
      - drupal
    restart: unless-stopped
    ports:
      - 80:80
    volumes:
      - drupal-data:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
      - certbot-etc:/etc/letsencrypt
    networks:
      - external
  
  certbot:
    depends_on:
      - webserver
    image: certbot/certbot
    container_name: certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - drupal-data:/var/www/html
    command: certonly --webroot --webroot-path=/var/www/html --email sammy@your_domain --agree-tos --no-eff-email --staging -d example.com -d www.example.com

networks:
  external:
    driver: bridge
  internal:
    driver: bridge

volumes:
  drupal-data:
  db-data:
  certbot-etc:

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Давайте рассмотрим каждую службу, определенную в вышеуказанном файле.

Служба MySQL Docker

Здесь мы загружаем последнюю версию mysql:8.0 из Docker hub. Мы используем версию 8.x вместо последней версии. Таким образом, мы можем использовать стабильную и проверенную версию MySQL, которая работает с Drupal. Мы установили имя для контейнера, которое можно использовать с командами Docker для остановки, запуска и просмотра журналов. Контейнер будет продолжать работать, пока его не остановят вручную. Мы определили файл .env который будем заполнять учетными данными MySQL. Мы также подключили именованный том db-data к каталогу /var/lib/mysql в контейнере. Служба MySQL будет использовать внутреннюю сеть для подключения к Drupal.

Служба Drupal

Мы используем образ Drupal 10 Alpine. Образы Alpine docker имеют меньший размер. Этот образ также содержит PHP-FPM для обработки PHP. Он будет работать вместе с Nginx для обслуживания сайта. Опция depends_on указывает Drupal подключиться к службе MySQL. Она также гарантирует, что контейнер Drupal всегда будет запускаться после контейнера MySQL. Drupal использует внутреннюю сеть для подключения к MySQL и внешнюю сеть для доступа к другим контейнерам. Мы также создали именованный том для Drupal, чтобы он указывал на /var/www/html каталог в контейнере.

Служба Nginx

Мы используем образ Alpine для Nginx. Он открывает порт 80 для хоста. Мы используем два именованных тома, один для общедоступного каталога Drupal, а другой для хранения SSL-сертификатов Let’s Encrypt. Третий том привязан к каталогу конфигурации Nginx на хосте, который мы определим позже. Nginx также подключается к внешней сети Docker, чтобы сайт Drupal мог работать.

Сервис Certbot

И, наконец, мы загружаем образ Certbot для установки SSL-сертификатов. Он делится своими томами с сервисом Nginx для сертификатов и определения веб-корня. Мы также включили команду, которая будет запускаться при создании контейнера. Здесь команда использует флаг --staging чтобы впервые получить тестовый сервер. Нам нужен nginx для проверки сертификатов, но Nginx не запустится, если сертификаты отсутствуют. Поэтому мы создадим промежуточный сертификат, используем его для запуска Nginx, а затем создадим настоящие сертификаты.

Шаг 4 — Создание конфигурации Nginx

Создайте каталог для конфигурации Nginx.

$ mkdir nginx-conf

Создайте и откройте файл для Nginx.

$ nano nginx-conf/drupal.conf

Вставьте в него следующий код.

server {
    listen 80;
    listen [::]:80;

    server_name drupal.example.com;

    index index.php index.html index.htm;

    root /var/www/html;

    location ~ /.well-known/acme-challenge {
        allow all;
        root /var/www/html;
    }

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;

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

    location = /favicon.ico { 
        log_not_found off; access_log off; 
    }
    location = /robots.txt { 
        log_not_found off; access_log off; allow all; 
    }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
}

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

В этот файл мы добавим блок сервера с директивами для имени нашего сервера и корня документов, а также блоки расположения, чтобы направлять запросы клиента Certbot на сертификаты, обработку PHP и запросы на статические ресурсы. На данный момент Nginx будет прослушивать только порт 80, чтобы Certbot мог запросить промежуточный сертификат, поместив временный файл в каталог /var/www/html/.well-known/acme-challenge для проверки DNS. Это позволяет нам использовать Certbot с плагином webroot.

Шаг 5 — Создание SSL-сертификатов

Для создания SSL-сертификатов мы запустим наши контейнеры. Правильные промежуточные сертификаты будут доступны в папке /etc/letsencrypt/live в контейнере Nginx.

$ docker compose up -d

Проверьте статус служб.

$ docker compose ps
NAME                IMAGE                  COMMAND                  SERVICE             CREATED             STATUS                     PORTS
certbot             certbot/certbot        "certbot certonly --…"   certbot             6 minutes ago       Exited (1) 5 minutes ago
drupal              drupal:10-fpm-alpine   "docker-php-entrypoi…"   drupal              6 minutes ago       Up 6 minutes               9000/tcp
mysql               mysql:8.0              "docker-entrypoint.s…"   mysql               6 minutes ago       Up 6 minutes               3306/tcp, 33060/tcp
webserver           nginx:1.22.1-alpine    "/docker-entrypoint.…"   webserver           6 minutes ago       Up 6 minutes               0.0.0.0:80->80/tcp, :::80->80/tcp

Контейнер Certbot успешно завершает работу после генерации сертификата. Проверьте расположение сертификатов в контейнере Nginx.

$ docker compose exec webserver ls -la /etc/letsencrypt/live

Вы получите следующий результат.

total 16
drwx------    3 root     root          4096 Jan 17 09:15 .
drwxr-xr-x    9 root     root          4096 Jan 17 09:15 ..
-rw-r--r--    1 root     root           740 Jan 17 09:15 README
drwxr-xr-x    2 root     root          4096 Jan 17 09:15 drupal.example.com

Это подтверждает, что все прошло успешно. Следующим шагом является генерация фактических сертификатов.

Откройте файл docker-compose.yml для редактирования.

$ nano docker-compose.yml

Замените флаг --staging в разделе службы Certbot и замените его флагом --force-renewal . Это указывает Certbot запросить новые сертификаты для вашего домена. Флаг обновления используется, потому что он будет использоваться для обновления сертификатов с этого момента.

  certbot:
    depends_on:
      - webserver
    image: certbot/certbot
    container_name: certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - drupal-data:/var/www/html
    command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email --staple-ocsp --force-renewal -d drupal.example.com

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Запустите команду docker compose up еще раз, чтобы воссоздать контейнер Certbot. Флаг --no-deps указатель Certbot пропускает запуск webserver контейнера, поскольку он уже запущен.

$ docker compose up --force-recreate --no-deps certbot

Вы получите следующий результат.

[+] Running 1/0
 ? Container certbot  Recreated                                                                                                                                                                             0.1s
Attaching to certbot
certbot  | Saving debug log to /var/log/letsencrypt/letsencrypt.log
certbot  | Account registered.
certbot  | Renewing an existing certificate for drupal.example.com
certbot  |
certbot  | Successfully received certificate.
certbot  | Certificate is saved at: /etc/letsencrypt/live/drupal.example.com/fullchain.pem
certbot  | Key is saved at:         /etc/letsencrypt/live/drupal.example.com/privkey.pem
certbot  | This certificate expires on 2023-04-17.
certbot  | These files will be updated when the certificate renews.
certbot  | NEXT STEPS:
certbot  | - The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.
certbot  |
certbot  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
certbot  | If you like Certbot, please consider supporting our work by:
certbot  |  * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
certbot  |  * Donating to EFF:                    https://eff.org/donate-le
certbot  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
certbot exited with code 0

Шаг 6 — Настройте Nginx для SSL

Теперь, когда наши сертификаты активны, нам нужно настроить Nginx для их обслуживания и перенаправления HTTP-запросов на HTTPS.

Остановите сервер Nginx.

$ docker stop webserver

Создайте новый файл Nginx для настройки SSL и откройте его для редактирования.

$ nano nginx-conf/drupal-ssl.conf

Вставьте в него следующий код.

server {
    listen 80;
    listen [::]:80;

    server_name drupal.example.com;

    location ~ /.well-known/acme-challenge {
        allow all;
        root /var/www/html;
    }

    location / {
        rewrite ^ https://$host$request_uri? permanent;
    }
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name drupal.example.com;

    index index.php index.html index.htm;

    root /var/www/html;

    server_tokens off;

    ssl_certificate /etc/letsencrypt/live/drupal.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/drupal.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/drupal.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_ecdh_curve secp384r1;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;

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

    location = /favicon.ico {
        log_not_found off; access_log off;
    }
    location = /robots.txt {
        log_not_found off; access_log off; allow all;
    }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
}

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Блок HTTP указывает местоположение плагина Certbot webroot и перенаправляет любой HTTP-запрос на HTTPS.

Следующим шагом является проверка того, что контейнер Nginx прослушивает порт 443. Откройте файл docker-compose.yml для редактирования.

$ nano docker-compose.yml

В разделе Nginx файла внесите изменения, чтобы открыть порт 443 и включить SSL, как показано ниже.

  webserver:
    image: nginx:1.22.1-alpine
    container_name: webserver
    depends_on:
      - drupal
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
    volumes:
      - drupal-data:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
      - certbot-etc:/etc/letsencrypt
      - /etc/ssl/certs/dhparam.pem:/etc/ssl/certs/dhparam.pem
    networks:
      - external

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Теперь, когда мы включили и добавили конфигурацию SSL для Nginx, вы можете удалить старый файл конфигурации HTTP.

$ rm nginx-conf/drupal.conf

Перед перезапуском Nginx нам необходимо сгенерировать сертификат группы Diffie-Hellman который мы уже настроили выше.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Пересоздайте контейнер Nginx.

$ docker compose up -d --force-recreate --no-deps webserver

Проверьте состояние контейнеров.

$ docker compose ps
NAME                IMAGE                  COMMAND                  SERVICE             CREATED             STATUS                   PORTS
certbot             certbot/certbot        "certbot certonly --…"   certbot             3 hours ago         Exited (0) 3 hours ago
drupal              drupal:10-fpm-alpine   "docker-php-entrypoi…"   drupal              3 hours ago         Up 3 hours               9000/tcp
mysql               mysql:8.0              "docker-entrypoint.s…"   mysql               3 hours ago         Up 3 hours               3306/tcp, 33060/tcp
webserver           nginx:1.22.1-alpine    "/docker-entrypoint.…"   webserver           15 seconds ago      Up 13 seconds            0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp

Шаг 7 — Запуск веб-установщика Drupal

Пришло время запустить веб-установщик Drupal. Откройте URL-адрес https://drupal.example.com в браузере, и вы увидите следующий экран.

Главная страница установщика Drupal

Нажмите кнопку Сохранить и продолжить чтобы перейти на страницу профиля установки.

Профиль установки Drupal

Мы остановимся на стандартном профиле. Нажмите кнопку Сохранить и продолжить чтобы перейти на страницу настройки базы данных.

Настройка базы данных Drupal

Введите учетные данные базы данных, которые мы использовали в файле среды, разверните раздел Дополнительные параметры и введите mysql в качестве хоста базы данных. Это соответствует имени службы MySQL в нашем файле Docker compose, к которой Drupal должен будет подключиться.

Нажмите кнопку Сохранить и продолжить чтобы продолжить. Drupal начнет установку модулей и тем по умолчанию.

Установщик модулей и тем Drupal

Далее вы перейдете на страницу настройки Drupal. Введите название сайта, адрес электронной почты, имя пользователя, пароль и региональные настройки. По завершении нажмите кнопку Сохранить и продолжить .

 

Наконец, вы попадаете на панель управления Drupal. Вы можете начать использовать Drupal для создания своего веб-сайта.

Панель управления Drupal

Шаг 8 — Настройка Drupal

Этот шаг не является обязательным, но помогает улучшить производительность Drupal. Первый шаг — настроить уровень изоляции транзакций MySQL. По умолчанию уровень изоляции транзакций для MySQL, MariaDB и аналогичных баз данных — «REPEATABLE READ». Эта настройка в Drupal может привести к тупиковым ситуациям в таблицах, в результате чего сайт будет работать очень медленно или вообще не отвечать. Рекомендуемый уровень изоляции транзакций для сайтов Drupal — «READ COMMITTED».

Войдите в SSH-оболочку контейнера MySQL.

$ docker exec -it mysql bash

Откройте оболочку MySQL, используя пользователя root.

bash-4.4# mysql -u root -p
Enter password:

Выполните следующую команду, чтобы изменить уровень транзакций глобально.

mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

Выйдите из оболочки MySQL и контейнера, дважды набрав exit .

Следующим шагом является ввод вашего домена в качестве доверенного хоста для защиты от атак HTTP HOST Header. Для этого нам нужно отредактировать файл /var/www/html/sites/default/settings.php в контейнере Drupal. Поскольку мы используем именованный том для файлов Drupal, рекомендуемый способ внесения изменений — скопировать файл из контейнера на хост, внести изменения и скопировать его обратно в контейнер. Вы можете сделать это с любым файлом, который необходимо изменить в установке Drupal.

Скопируйте файл настроек из контейнера на хост.

$ docker cp drupal:/var/www/html/sites/default/settings.php settings.php

Файл находится в режиме «только для чтения». Предоставьте ему права на запись.

$ chmod+w settings.php

Откройте файл для редактирования.

$ nano settings.php

Найдите в файле следующий раздел.

#$settings['trusted_host_patterns'] = [
#  '^www\.example\.com

Удалите комментарий, удалив знак решетки и добавив свой домен Drupal, как показано ниже.

$settings['trusted_host_patterns'] = [
  '^drupal\.example\.com

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Снова удалите права на запись.

$ chmod -w settings.php

Скопируйте файл обратно в контейнер.

$ docker cp settings.php drupal:/var/www/html/sites/default

Шаг 9 — Резервное копирование Drupal

Мы будем использовать командную строку для резервного копирования базы данных Drupal. Перейдите в каталог Drupal.

$ cd ~/drupal

Создайте каталог для резервных копий.

$ mkdir backup-data

Используйте следующую команду для резервного копирования базы данных Drupal. Вам будет предложено ввести пароль root MySQL.

$ docker compose exec mysql sh -c "exec mysqldump drupal -uroot -p" | tee backup-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null
Enter password: root_password

Вышеуказанная команда создаст резервную копию SQL в каталоге ~/drupal/backup-data .

Проверьте содержимое каталога.

$ ls -al backup-data
total 6716
drwxrwxr-x 2 navjot navjot    4096 Jan 19 13:59 .
drwxrwxr-x 4 navjot navjot    4096 Jan 19 13:35 ..
-rw-rw-r-- 1 navjot navjot 6868325 Jan 19 13:37 data_19-01-2023_13_36_58.sql

Вы можете увидеть резервную копию базы данных в каталоге. Вы можете восстановить эту базу данных с помощью инструмента phpMyAdmin или с помощью следующей команды.

$ docker compose exec mysql sh -c "exec mysql -uroot -p"

You can create a cron job to back up the database regularly.

Create the backup script in the /etc/cron.daily directory and open it for editing.

$ sudo nano /etc/cron.daily/drupalbackup.sh

Вставьте в него следующий код.

#!/bin/bash
cd /home/navjot/drupal/
/usr/bin/docker compose exec mysql sh -c "exec mysqldump drupal -uroot -p" | tee backup-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Сделайте скрипт исполняемым.

$ sudo chmod +x /etc/cron.daily/drupalbackup.sh

Теперь ваша база данных будет ежедневно резервироваться.

Шаг 10 — Обновление Drupal

Первым шагом при обновлении Drupal является резервное копирование базы данных Drupal с помощью команды из шага 9.

Затем перейдите в каталог.

$ cd ~/drupal

Остановите контейнеры.

$ docker compose down

Загрузите последние образы контейнеров.

$ docker compose pull drupal:10-fpm-alpine

Если вы хотите обновить систему до следующей основной версии, вам необходимо соответствующим образом изменить имя образа и ознакомиться с примечаниями к выпуску Drupal, чтобы проверить наличие каких-либо проблем.

При необходимости внесите необходимые изменения в docker-compose.yml . Остальные образы можно обновить, изменив их определение в файле Docker compose.

Перезапустите контейнеры Drupal. Это также позволит загрузить последние образы для второстепенных версий других пакетов.

$ docker compose up -d

Заключение

На этом заканчивается наше руководство по установке Drupal с помощью Docker на сервере Ubuntu 22.04. Если у вас есть вопросы, задавайте их в комментариях ниже.

, #];

Удалите комментарий, удалив знак решетки и добавив свой домен Drupal, как показано ниже.


Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Снова удалите права на запись.


Скопируйте файл обратно в контейнер.


Шаг 9 — Резервное копирование Drupal

Мы будем использовать командную строку для резервного копирования базы данных Drupal. Перейдите в каталог Drupal.


Создайте каталог для резервных копий.


Используйте следующую команду для резервного копирования базы данных Drupal. Вам будет предложено ввести пароль root MySQL.


Вышеуказанная команда создаст резервную копию SQL в каталоге ~/drupal/backup-data .

Проверьте содержимое каталога.


Вы можете увидеть резервную копию базы данных в каталоге. Вы можете восстановить эту базу данных с помощью инструмента phpMyAdmin или с помощью следующей команды.


Вставьте в него следующий код.


Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Сделайте скрипт исполняемым.


Теперь ваша база данных будет ежедневно резервироваться.

Шаг 10 — Обновление Drupal

Первым шагом при обновлении Drupal является резервное копирование базы данных Drupal с помощью команды из шага 9.

Затем перейдите в каталог.


Остановите контейнеры.


Загрузите последние образы контейнеров.


Если вы хотите обновить систему до следующей основной версии, вам необходимо соответствующим образом изменить имя образа и ознакомиться с примечаниями к выпуску Drupal, чтобы проверить наличие каких-либо проблем.

При необходимости внесите необходимые изменения в docker-compose.yml . Остальные образы можно обновить, изменив их определение в файле Docker compose.

Перезапустите контейнеры Drupal. Это также позволит загрузить последние образы для второстепенных версий других пакетов.


Заключение

На этом заканчивается наше руководство по установке Drupal с помощью Docker на сервере Ubuntu 22.04. Если у вас есть вопросы, задавайте их в комментариях ниже.

, ];

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Снова удалите права на запись.


Скопируйте файл обратно в контейнер.


Шаг 9 — Резервное копирование Drupal

Мы будем использовать командную строку для резервного копирования базы данных Drupal. Перейдите в каталог Drupal.


Создайте каталог для резервных копий.


Используйте следующую команду для резервного копирования базы данных Drupal. Вам будет предложено ввести пароль root MySQL.


Вышеуказанная команда создаст резервную копию SQL в каталоге ~/drupal/backup-data .

Проверьте содержимое каталога.


Вы можете увидеть резервную копию базы данных в каталоге. Вы можете восстановить эту базу данных с помощью инструмента phpMyAdmin или с помощью следующей команды.


Вставьте в него следующий код.


Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Сделайте скрипт исполняемым.


Теперь ваша база данных будет ежедневно резервироваться.

Шаг 10 — Обновление Drupal

Первым шагом при обновлении Drupal является резервное копирование базы данных Drupal с помощью команды из шага 9.

Затем перейдите в каталог.


Остановите контейнеры.


Загрузите последние образы контейнеров.


Если вы хотите обновить систему до следующей основной версии, вам необходимо соответствующим образом изменить имя образа и ознакомиться с примечаниями к выпуску Drupal, чтобы проверить наличие каких-либо проблем.

При необходимости внесите необходимые изменения в docker-compose.yml . Остальные образы можно обновить, изменив их определение в файле Docker compose.

Перезапустите контейнеры Drupal. Это также позволит загрузить последние образы для второстепенных версий других пакетов.


Заключение

На этом заканчивается наше руководство по установке Drupal с помощью Docker на сервере Ubuntu 22.04. Если у вас есть вопросы, задавайте их в комментариях ниже.

, #];

Удалите комментарий, удалив знак решетки и добавив свой домен Drupal, как показано ниже.


Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Снова удалите права на запись.


Скопируйте файл обратно в контейнер.


Шаг 9 — Резервное копирование Drupal

Мы будем использовать командную строку для резервного копирования базы данных Drupal. Перейдите в каталог Drupal.


Создайте каталог для резервных копий.


Используйте следующую команду для резервного копирования базы данных Drupal. Вам будет предложено ввести пароль root MySQL.


Вышеуказанная команда создаст резервную копию SQL в каталоге ~/drupal/backup-data .

Проверьте содержимое каталога.


Вы можете увидеть резервную копию базы данных в каталоге. Вы можете восстановить эту базу данных с помощью инструмента phpMyAdmin или с помощью следующей команды.


Вставьте в него следующий код.


Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Сделайте скрипт исполняемым.


Теперь ваша база данных будет ежедневно резервироваться.

Шаг 10 — Обновление Drupal

Первым шагом при обновлении Drupal является резервное копирование базы данных Drupal с помощью команды из шага 9.

Затем перейдите в каталог.

Остановите контейнеры.

Загрузите последние образы контейнеров.

Если вы хотите обновить систему до следующей основной версии, вам необходимо соответствующим образом изменить имя образа и ознакомиться с примечаниями к выпуску Drupal, чтобы проверить наличие каких-либо проблем.

При необходимости внесите необходимые изменения в docker-compose.yml . Остальные образы можно обновить, изменив их определение в файле Docker compose.

Перезапустите контейнеры Drupal. Это также позволит загрузить последние образы для второстепенных версий других пакетов.

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

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