Как установить Craft CMS на Rocky Linux 9

Craft CMS – это система управления контентом с открытым исходным кодом для создания веб-сайтов. Это безопасная и масштабируемая CMS с обширной экосистемой плагинов и высококачественными бесплатными и платными плагинами. Имеет интуитивно понятную, удобную панель управления для создания контента и выполнения административных задач. Она построена на PHP-фреймворке Yii. Шаблонный движок Twig обеспечивает работу системы шаблонов. Он может работать с базами данных MySQL и PostgreSQL для хранения данных и использует базу данных Redis для кэширования и хранения сессий.

В этом руководстве вы узнаете, как установить Craft CMS на сервер Debian 12. Вы также узнаете, как включить Redis для работы с ним и как сделать резервную копию и восстановить сайт, созданный с помощью Craft CMS.

Предварительные условия

  • Сервер под управлением Rocky Linux 9 с минимум 1 ГБ оперативной памяти.
  • Пользователь, не являющийся пользователем root, с привилегиями sudo.
  • Полное доменное имя (FQDN), например craftcms.example.com , указывающее на ваш сервер.
  • SMTP-аккаунт в почтовом сервисе, например Amazon SES или Mailgun.
  • Все обновлено.
    $ sudo dnf update
    
  • Для работы учебника и Craft CMS требуется несколько основных пакетов. Некоторые из них уже находятся на вашем сервере.
    $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
    

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

Первым шагом будет настройка брандмауэра. В Rocky Linux используется брандмауэр Firewalld. Проверьте состояние брандмауэра.

$ sudo firewall-cmd --state
running

Брандмауэр работает с различными зонами, и публичная зона – это зона по умолчанию, которую мы будем использовать. Перечислите все службы и порты, активные на брандмауэре.

$ sudo firewall-cmd --permanent --list-services

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

cockpit dhcpv6-client ssh

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

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

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

$ sudo firewall-cmd --permanent --list-services

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

cockpit dhcpv6-client http https ssh

Перезагрузите брандмауэр, чтобы включить изменения.

$ sudo firewall-cmd --reload

Шаг 2 – Установите Nginx

Rocky Linux 9 поставляется со старой версией Nginx. Вам нужно использовать официальный репозиторий Nginx для установки последней версии.

Создайте и откройте файл /etc/yum.repos.d/nginx.repo для редактирования.

$ sudo nano /etc/yum.repos.d/nginx.repo

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

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

После того как вы закончите, сохраните файл, нажав кнопку Ctrl + X и ввести Y при появлении запроса.

Установите Nginx.

$ sudo dnf install nginx -y

Проверьте установку.

$ nginx -v
nginx version: nginx/1.24.0

Включите и запустите службу сервера Nginx.

$ sudo systemctl enable nginx --now

Проверьте состояние службы.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Mon 2023-12-04 14:01:19 UTC; 3s ago
       Docs: http://nginx.org/en/docs/
    Process: 59396 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 59397 (nginx)
      Tasks: 2 (limit: 10866)
     Memory: 1.9M
        CPU: 10ms
     CGroup: /system.slice/nginx.service
             ??59397 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??59398 "nginx: worker process"

Шаг 3 – Установка PHP и расширений

Rocky Linux 9 по умолчанию поставляется с PHP 8.1. Чтобы всегда оставаться на последней версии PHP или если вы хотите установить несколько версий PHP, нам нужно использовать репозиторий REMI.

Первым шагом будет получение репозитория Epel.

$ sudo dnf install epel-release -y

Затем установите репозиторий Remi.

$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

Проверьте наличие доступных потоков PHP.

$ dnf module list php -y
Name    Stream              Profiles                                      Summary
php     8.1                 common [d], devel, minimal                    PHP scripting language

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name    Stream              Profiles                                      Summary
php     remi-7.4            common [d], devel, minimal                    PHP scripting language
php     remi-8.0            common [d], devel, minimal                    PHP scripting language
php     remi-8.1            common [d], devel, minimal                    PHP scripting language
php     remi-8.2            common [d], devel, minimal                    PHP scripting language
php     remi-8.3            common [d], devel, minimal                    PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

По умолчанию используется версия 8.1. На момент написания этого руководства Craft CMS совместима с PHP 8.2. Поэтому включите репозиторий Remi для PHP 8.2.

$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.2

Установите PHP и его расширения, необходимые для Craft CMS.

$ sudo dnf install php php-cli php-common php-json php-gmp php-fpm php-xmlrpc php-bcmath php-imagick php-curl php-zip php-gd php-mysql php-xml php-mbstring php-xmlrpc php-intl php-pgsql

Проверьте версию установленного PHP.

$ php --version
PHP 8.2.13 (cli) (built: Nov 21 2023 09:55:59) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.13, Copyright (c), by Zend Technologies

Включите и запустите службу PHP-FPM.

$ sudo systemctl enable php-fpm --now

Проверьте состояние службы PHP.

$ sudo systemctl status php-fpm
? php-fpm.service - The PHP FastCGI Process Manager
     Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; preset: disabled)
     Active: active (running) since Mon 2023-12-04 14:05:58 UTC; 6s ago
   Main PID: 61410 (php-fpm)
     Status: "Ready to handle connections"
      Tasks: 6 (limit: 10866)
     Memory: 16.6M
        CPU: 96ms
     CGroup: /system.slice/php-fpm.service
             ??61410 "php-fpm: master process (/etc/php-fpm.conf)"
             ??61411 "php-fpm: pool www"
             ??61412 "php-fpm: pool www"
             ??61413 "php-fpm: pool www"
             ??61414 "php-fpm: pool www"
             ??61415 "php-fpm: pool www"

Шаг 4 – Настройка PHP-FPM

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

$ sudo nano /etc/php.ini

Чтобы задать размер загружаемых файлов, измените значения параметров upload_max_filesize и post_max_size переменные. Это значение определяет размер файла, который вы можете загрузить в Craft CMS. Для наших целей мы установили 128 МБ. Вы можете установить его по своему усмотрению.

$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 128M/' /etc/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 128M/' /etc/php.ini

Настройте лимит памяти PHP в зависимости от ресурсов и требований вашего сервера.

$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php.ini

Откройте файл /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Нам нужно установить Unix-пользователя/группу процессов PHP на nginx. Найдите user=www-data и group=www-data строки в файле и измените их на nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Найдите listen.owner = nobody, listen.group = nobody, listen.mode = 0660 и измените строки в файле следующим образом, не комментируя их.

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

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

Перезапустите процесс PHP-fpm. Убедитесь, что у вас установлен Nginx, прежде чем перезапускать службу PHP, иначе она потерпит неудачу, поскольку не сможет найти файл nginx группу.

$ sudo systemctl restart php-fpm

Измените группу каталога сессий PHP на Nginx.

$ sudo chgrp -R nginx /var/lib/php/session

Шаг 5 – Установите Composer

Composer выступает в роли менеджера зависимостей для PHP. Он также является менеджером зависимостей PHP-фреймворка Laravel, на котором основана CMS Craft.

Загрузите скрипт установки Composer.

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

Проверьте загруженную программу установки.

$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

Вы получите следующее сообщение.

Installer verified

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

$ php composer-setup.php

Удалите сценарий установки.

$ php -r "unlink('composer-setup.php');"

Переместите загруженный двоичный файл в папку /usr/local/bin каталог.

$ sudo mv composer.phar /usr/local/bin/composer

Подтвердите установку.

$ composer --version
Composer version 2.6.5 2023-10-06 10:11:52

Шаг 6 – Установка и настройка PostgreSQL

Rocky Linux 9 по умолчанию поставляется с PostgreSQL 13. Мы будем использовать PostgreSQL 16 из его официального репозитория.

Установите RPM-репозиторий PostgreSQL.

$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Отключите встроенный модуль PostgreSQL.

$ sudo dnf -qy module disable postgresql

Теперь вы можете установить PostgreSQL с помощью следующей команды.

$ sudo dnf install -y postgresql16-server postgresql16-contrib

[postgresql-contrib Пакет содержит несколько дополнительных утилит.

Проверьте версию.

$ psql --version
psql (PostgreSQL) 16.1

Инициализируйте базу данных PostgreSQL.

$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
Initializing database ... OK

Включите службу PostgreSQL.

$ sudo systemctl enable postgresql-16

Запустите службу PostgreSQL.

$ sudo systemctl start postgresql-16

Проверьте состояние службы PostgreSQL.

$ sudo systemctl status postgresql-16
? postgresql-16.service - PostgreSQL 16 database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled)
     Active: active (running) since Mon 2023-12-04 22:28:34 UTC; 2s ago
       Docs: https://www.postgresql.org/docs/16/static/
    Process: 72143 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
   Main PID: 72148 (postgres)
      Tasks: 7 (limit: 10866)
     Memory: 17.4M
        CPU: 45ms
     CGroup: /system.slice/postgresql-16.service
             ??72148 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/
             ??72149 "postgres: logger "
             ??72150 "postgres: checkpointer "
             ??72151 "postgres: background writer "
             ??72153 "postgres: walwriter "
             ??72154 "postgres: autovacuum launcher "
             ??72155 "postgres: logical replication launcher "

Dec 04 22:28:33 craftcms.nspeaks.com systemd[1]: Starting PostgreSQL 16 database server...
Dec 04 22:28:33 craftcms.nspeaks.com postgres[72148]: 2023-12-04 22:28:33.999 UTC [72148] LOG:  redirecting log output to logging collector process
Dec 04 22:28:33 craftcms.nspeaks.com postgres[72148]: 2023-12-04 22:28:33.999 UTC [72148] HINT:  Future log output will appear in directory "log".
Dec 04 22:28:34 craftcms.nspeaks.com systemd[1]: Started PostgreSQL 16 database server.

Вы можете увидеть, что служба включена и работает по умолчанию.

Запустите оболочку PostgreSQL.

$ sudo -i -u postgres psql

Создайте базу данных Craft CMS.

postgres=# CREATE DATABASE craftcms;

Создайте пользователя Craft CMS и выберите надежный пароль.

postgres-# CREATE USER craftuser WITH PASSWORD 'Your_Password';

Измените владельца базы данных на пользователя Craft CMS.

postgres-# ALTER DATABASE craftcms OWNER TO craftuser;

Предоставьте все привилегии в базе данных пользователю Craft CMS.

postgres-# GRANT ALL PRIVILEGES ON DATABASE craftcms TO craftuser;

Выйдите из оболочки.

postgres-# \q

Убедитесь, что ваши учетные данные работают.

$ psql --username craftuser --password --host localhost craftcms
Password:
psql (16.1)
Type "help" for help.

craftcms=>

Выйдите из оболочки, набрав \q.

Шаг 7 – Установка и настройка Redis

Rocky Linux 9 поставляется с Redis 6.2 по умолчанию. Однако мы будем использовать Redis 7.0, который мы установим с помощью репозитория Remi.

Поскольку мы уже установили репозиторий Remi во время установки PHP, мы можем пропустить эту часть. Перечислите все доступные модули Redis.

$ sudo dnf module list redis
Rocky Linux 9 - AppStream
Name                                       Stream             Profiles                       Summary
redis                                      7                  common [d]                     Redis persistent key-value database

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name                                       Stream             Profiles                       Summary
redis                                      remi-5.0           common [d]                     Redis persistent key-value database
redis                                      remi-6.0           common [d]                     Redis persistent key-value database
redis                                      remi-6.2           common [d]                     Redis persistent key-value database
redis                                      remi-7.0           common [d]                     Redis persistent key-value database
redis                                      remi-7.2           common [d]                     Redis persistent key-value database

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Включите последний модуль Redis 7.2.

$ sudo dnf module enable -y redis:remi-7.2

Установите Redis.

$ sudo dnf install redis

Проверьте версию.

$ redis-server --version
Redis server v=7.2.3 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=7bd3173e4e30c3e4

Включите службу Redis.

$ sudo systemctl enable redis

Запустите службу Redis.

$ sudo systemctl start redis

Проверьте состояние службы.

$ sudo systemctl status redis
? redis.service - Redis persistent key-value database
     Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; preset: disabled)
    Drop-In: /etc/systemd/system/redis.service.d
             ??limit.conf
     Active: active (running) since Mon 2023-12-04 22:36:25 UTC; 1min 32s ago
   Main PID: 72877 (redis-server)
     Status: "Ready to accept connections"
      Tasks: 5 (limit: 10866)
     Memory: 7.5M
        CPU: 176ms
     CGroup: /system.slice/redis.service
             ??72877 "/usr/bin/redis-server 127.0.0.1:6379"

Dec 04 22:36:25 craftcms.nspeaks.com systemd[1]: Starting Redis persistent key-value database...
Dec 04 22:36:25 craftcms.nspeaks.com systemd[1]: Started Redis persistent key-value database.

Следующим шагом будет добавление аутентификации на сервер Redis. Начиная с Redis v6.0, лучшим способом добавления аутентификации является использование ACL (списков контроля доступа). Откройте /etc/redis/redis.conf файл для редактирования.

$ sudo nano /etc/redis/redis.conf

Найдите строку # aclfile /etc/redis/users.acl и откомментируйте ее, удалив хэш (#) перед ним.

aclfile /etc/redis/users.acl

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

Далее создайте и откройте файл /etc/redis/users.acl файл для редактирования.

$ sudo nano /etc/redis/users.acl

Добавьте в него следующую строку.

user navjot on +@all ~* >yourpassword

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

Перезапустите сервер Redis, чтобы внести изменения.

$ sudo systemctl restart redis

Откройте оболочку Redis.

$ redis-cli

Используйте команду PING команду. Это приведет к ошибке аутентификации.

127.0.0.1:6379> PING
(error) NOAUTH Authentication required.

Используйте AUTH для входа в систему.

127.0.0.1:6379> AUTH navjot yourpassword
OK

Используйте PING снова.

127.0.0.1:6379> PING
OK

Выход из оболочки.

127.0.0.1:6379> exit

Вам также потребуется установить расширение PHP Redis.

$ sudo apt install php-redis

Шаг 8 – Установите Craft CMS

Перед установкой Craft CMS вы можете проверить, удовлетворяет ли ваш сервер всем требованиям для его запуска, с помощью следующей команды.

$ curl -Lsf https://raw.githubusercontent.com/craftcms/server-check/HEAD/check.sh | bash

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

Running Craft Server Check…

Craft CMS Requirement Checker

This script checks if your web server configuration meets the requirements for running a Craft CMS installation.
It checks if the server is running the right version of PHP, if appropriate PHP extensions have been loaded,
and if php.ini file settings are correct.


Results:
--------

PHP 8.2+: OK

BCMath extension: OK

ctype extension: OK

cURL extension: OK

DOM extension: OK

Fileinfo extension: OK

GD extension or ImageMagick extension: OK

iconv extension: OK

Intl extension: OK

JSON extension: OK

Multibyte String extension (with Function Overloading disabled): OK

OPcache extension (with save_comments): OK

OpenSSL extension: OK

PCRE extension (with UTF-8 support): OK

PDO extension: OK

Reflection extension: OK

SPL extension: OK

Zip extension: OK

ignore_user_abort(): OK

password_hash(): OK

proc_close(): OK

proc_get_status(): OK

proc_open(): OK

proc_terminate(): OK

allow_url_fopen: OK

ini_set calls: OK

Memory Limit: OK

------------------------------------------
Errors: 0   Warnings: 0   Total checks: 27

Если все в порядке, можно приступать. Создайте корневой каталог веб-сайта.

$ sudo mkdir /var/www/html/craftcms -p

Установите текущего пользователя в качестве владельца этого каталога.

$ sudo chown -R $USER:$USER /var/www/html/craftcms

Переход в каталог.

$ cd /var/www/html/craftcms

Скачайте и установите Craft CMS с помощью Composer. Точка (.) в конце команды означает, что установка должна быть выполнена в текущем каталоге.

$ composer create-project craftcms/craft .

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

> @php craft setup/welcome

   ______ .______          ___       _______ .___________.
  /      ||   _  \        /   \     |   ____||           |
 |  ,----'|  |_)  |      /  ^  \    |  |__   `---|  |----`
 |  |     |      /      /  /_\  \   |   __|      |  |
 |  `----.|  |\  \----./  _____  \  |  |         |  |
  \______|| _| `._____/__/     \__\ |__|         |__|

     A       N   E   W       I   N   S   T   A   L   L
               ______ .___  ___.      _______.
              /      ||   \/   |     /       |
             |  ,----'|  \  /  |    |   (----`
             |  |     |  |\/|  |     \   \
             |  `----.|  |  |  | .----)   |
              \______||__|  |__| |_______/


Generating an application ID ... done (CraftCMS--923f03f1-9bea-4c3d-a7ca-1466645ce75d)
Generating a security key ... done (iMdcUi6wQyf9MshEda__vZcCwILbclxz)


Welcome to Craft CMS!

Are you ready to begin the setup? (yes|no) [no]:yes
Which database driver are you using? (mysql or pgsql) [mysql] pgsql
Database server name or IP address: [127.0.0.1]
Database port: [5432]
Database username: [root] craftuser
Database password:
Database name: craftcms
Database table prefix:
Testing database credentials ... success!
Using default schema "public".
Saving database credentials to your .env file ... done

Install Craft now? (yes|no) [yes]:yes

Username: [admin] navjot
Email: [email protected]
Password:
Confirm:
Site name: Tutorials
Site URL: https://craftcms.example.com
Site language: [en-US]
*** installing Craft

Заставьте Redis работать с Craft CMS

Установите yiisoft/yii2-redis пакет.

$ composer require --prefer-dist yiisoft/yii2-redis:"~2.0.0"

Откройте /var/www/html/craftcms/config/app.php файл для редактирования.

$ nano config/app.php

В нем вы увидите следующее содержание.

use craft\helpers\App;

return [
    'id' => App::env('CRAFT_APP_ID') ?: 'CraftCMS',
];

Измените его следующим образом.

use craft\helpers\App;

return [
    'id' => App::env('CRAFT_APP_ID') ?: 'CraftCMS',
    'components' => [
        'cache' => function() {
            $config = [
                'class' => yii\redis\Cache::class,
                'keyPrefix' => Craft::$app->id,
                'defaultDuration' => Craft::$app->config->general->cacheDuration,

                // Full Redis connection details:
                'redis' => [
                    'hostname' => App::env('REDIS_HOSTNAME') ?: 'localhost',
                    'port' => 6379,
                    'username' => App::env('REDIS_USERNAME') ?: null,
                    'password' => App::env('REDIS_PASSWORD') ?: null,
                ],
            ];

            return Craft::createObject($config);
        },
    ],
];

Сохраните файл, нажав кнопку Ctrl + X и ввести Y при появлении запроса. Это позволит использовать Redis в качестве кэш-хранилища для Craft CMS. Вы также можете использовать Redis для хранения данных сессии PHP, очереди заданий и в качестве драйвера мьютекса. Конфигурацию для него можно найти в Документация Craft CMS.

Вам также необходимо добавить конфигурацию Redis в файл .env файл.

$ nano .env

Добавьте следующий код в конец файла.

REDIS_HOSTNAME=localhost
REDIS_USERNAME=navjot
REDIS_PASSWORD=yourpassword

Выберите опции, как показано выше. После завершения измените группу каталога на nginx. Таким образом, доступ к Craft CMS получит как текущий пользователь, вошедший в систему, так и Nginx.

$ sudo chgrp -R nginx /var/www/html/craftcms

[nginx группе разрешение на запись в каталог.

$ sudo chmod -R g+w /var/www/html/craftcms

С этого момента вам больше не придется менять разрешения, и вы сможете выполнять все операции без использования привилегий root.

Шаг 9 – Установка SSL

Нам нужно установить Certbot для генерации SSL-сертификата. Для этого мы будем использовать программу установки пакетов Snapd. Поскольку Rocky Linux не поставляется с ним, установите программу установки Snapd. Для его работы требуется репозиторий EPEL (Extra Packages for Enterprise Linux). Но так как мы уже установили его в шаге 3, мы можем двигаться дальше.

Установите Snapd.

$ sudo dnf install -y snapd

Включите и запустите службу Snap.

$ sudo systemctl enable snapd --now

Установите пакет Snap core и убедитесь, что ваша версия Snapd обновлена.

$ sudo snap install core && sudo snap refresh core

Создайте необходимые ссылки для работы Snapd.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Установите Certbot.

$ sudo snap install --classic certbot

Используйте следующую команду, чтобы убедиться, что команда Certbot может быть запущена, создав символическую ссылку на файл /usr/bin каталог.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Проверьте, правильно ли работает Certbot.

$ certbot --version
certbot 2.7.4

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

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d craftcms.example.com

Приведенная выше команда загрузит сертификат в /etc/letsencrypt/live/craftcms.example.com каталог на вашем сервере.

Создайте группа Диффи-Хеллмана сертификат.

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

Проверьте службу планировщика обновления Certbot.

$ sudo systemctl list-timers

Вы найдете snap.certbot.renew.service как одну из запланированных к запуску служб.

NEXT                        LEFT         LAST                        PASSED     UNIT                      ACTIVATES     
---------------------------------------------------------------------------------------------------------------------------               
Mon 2023-12-04 23:38:47 UTC 18min left Mon 2023-12-04 22:19:02 UTC 1h 0min ago dnf-makecache.timer          dnf-makecache.service
Tue 2023-12-05 00:00:00 UTC 40min left -                           -           logrotate.timer              logrotate.service
Tue 2023-12-05 09:36:00 UTC 10h left   -                           -           snap.certbot.renew.timer     snap.certbot.renew.service

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

$ sudo certbot renew --dry-run

Если вы не видите никаких ошибок, значит, все готово. Ваш сертификат обновится автоматически.

Шаг 10 – Настройка SELinux

Измените контекст безопасности файлов для Craft CMS.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/craftcms(/.*)?"

Примените политику.

$ sudo restorecon -Rv /var/www/html/craftcms/

Примените политику, чтобы разрешить Nginx предоставлять доступ к PostgreSQL.

$ sudo setsebool -P httpd_can_network_connect_db 1

Примените политику для разрешения соединений с внешними хостами.

$ sudo setsebool -P httpd_can_network_connect 1

В MariaDB 10.11 вы столкнетесь с другой проблемой, которая заключается в том, что SELinux не позволяет PHP-FPM подключаться к MariaDB. Эту проблему можно решить, установив модуль SELinux. Первым шагом будет создание type enforcement файл.

Создайте файл my-phpfpm.te в своем домашнем каталоге и откройте его для редактирования.

$ cd ~
$ nano my-phpfpm.te

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

module my-phpfpm 1.0;

require {
        type unconfined_service_t;
        type httpd_t;
        type httpd_sys_content_t;
        class dir write;
        class unix_stream_socket connectto;
}

#============= httpd_t ==============

#!!!! This avc is allowed in the current policy
allow httpd_t httpd_sys_content_t:dir write;

#!!!! This avc is allowed in the current policy
allow httpd_t unconfined_service_t:unix_stream_socket connectto;

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

Следующим шагом будет преобразование его в модуль политики с помощью следующей команды. Не изменяйте имя файла в команде, иначе он не будет работать. Модуль будет иметь имя my-phpfpm , и имя файла должно совпадать с именем модуля.

$ sudo checkmodule -M -m -o my-phpfpm.mod my-phpfpm.te

Далее нам нужно скомпилировать модуль политики, чтобы создать пакет политики.

$ sudo semodule_package -o my-phpfpm.pp -m my-phpfpm.mod

Последний шаг – загрузка пакета политик с помощью функции semodule , которая устанавливает используемую политику.

$ sudo semodule -i my-phpfpm.pp

Шаг 11 – Настройка Nginx

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

$ sudo nano /etc/nginx/nginx.conf

Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size 64;

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

Создайте и откройте файл /etc/nginx/conf.d/craftcms.conf для редактирования.

$ sudo nano /etc/nginx/conf.d/craftcms.conf

Вставьте в него следующий код. Замените craftcms.example.com на имя вашего домена. Убедитесь, что значение параметра client_max_body_size установлено на 128 МБ, что соответствует значению, которое мы установили для Craft CMS при настройке PHP ранее.

server {

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name craftcms.example.com;
    root /var/www/html/craftcms/web;

    index index.php;
    client_max_body_size 128M;

    access_log  /var/log/nginx/craftcms.access.log;
    error_log   /var/log/nginx/craftcms.error.log;

    ssl_certificate      /etc/letsencrypt/live/craftcms.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/craftcms.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/craftcms.example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    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_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        try_files $uri/index.html $uri $uri/ /index.php?$query_string;
    }

    location ~ [^/]\.php(/|$) {
        try_files $uri $uri/ /index.php?$query_string;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_keep_conn on;
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTP_PROXY "";
    }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  craftcms.example.com;
    return 301   https://$host$request_uri;
}

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

Проверьте конфигурацию Nginx.

$ sudo nginx -t

Перезапустите сервер Nginx.

$ sudo systemctl restart nginx

Шаг 12 – Доступ к Craft CMS

Откройте URL-адрес https://craftcms.example.com в браузере, и вы попадете на следующую страницу.

Домашняя страница Craft CMS

Чтобы перейти на страницу администрирования, посетите URL https://craftcms.example.com/admin и вы попадете на страницу входа в систему.

Страница входа в Craft CMS

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

Панель управления Craft CMS Admin Dashboard

Теперь вы можете начать использовать Craft CMS для создания своего сайта.

Шаг 13 – Резервное копирование и восстановление Craft CMS

Вы можете создать резервную копию базы данных Craft CMS из панели администратора, перейдя по ссылке Панель администратора >> Утилиты >> Резервное копирование базы данных.

Резервное копирование базы данных Craft CMS

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

$ mysqldump -u craftcmsuser -p craftcms > ~/craftcms.database.sql

Вы также можете создать резервную копию базы данных с помощью утилиты командной строки Craft CMS. Преимущество этой утилиты в том, что вам не нужно передавать учетные данные базы данных. Подробнее о Утилита командной консоли Craft CMS здесь.

$ cd /var/www/html/craftcms
$ php craft db/backup ~/
Backing up the database ... done
Backup file: /home/navjot/tutorials--2023-12-03-065138--v4.5.11.1.sql (200.019 KB)

Если в приведенной выше команде не указать местоположение, файл резервной копии будет записан в папку /var/www/html/craftcms/storage/backups каталог.

Чтобы создать резервную копию файлов, скопируйте и сохраните всю папку /var/www/html/craftcms папку.

$ cd /var/www/html
$ tar -zcf ~/craftcms.tar.gz craftcms

Чтобы восстановить его на новом сервере, распакуйте файлы в папку /var/www/html папку.

$ tar -xzf craftcms.tar.gz -C /var/www/html/

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

$ mysqlimport -u craftcmsuser -p craftcms craftcms.database.sql

Шаг 14 – Обновление Craft CMS

Существует два способа обновления Craft CMS. Один из них – из панели администрирования. Когда обновление будет доступно, вы получите уведомление. Нажмите на уведомление, чтобы обновить систему. Перед обновлением Craft CMS автоматически создаст резервную копию базы данных.

Вы также можете обновить ее через терминал.

Чтобы проверить все доступные обновления, выполните следующую команду.

$ cd /var/www/html/craftcms/
$ php craft update

Если обновление доступно, выполните следующую команду для его применения.

$ php craft update all

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

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