Установка Craft CMS с Nginx и Let's Encrypt на Debian 11
О чём эта инструкция
Craft CMS — лёгкая, безопасная и расширяемая CMS на PHP (на базе Composer). Руководство показывает установку на Debian 11 с Nginx и автоматическим получением сертификата Let’s Encrypt с помощью certbot.
В этом руководстве вы найдёте: подготовку сервера, команды для установки, конфигурации, рекомендации по безопасности и раздел с типичными проблемами.
Требования
- Сервер под управлением Debian 11.
- Доменное имя, указывающее на IP сервера.
- Доступ root или пользователь с sudo.
Быстрый список шагов
- Установить Nginx, MariaDB и PHP 7.4 + расширения.
- Настроить php.ini (память и timezone).
- Создать базу данных и пользователя.
- Установить Composer.
- Установить Craft через composer в /var/www/html.
- Настроить Nginx виртуальный хост.
- Получить SSL через certbot и включить перенаправление на HTTPS.
- Применить рекомендации по правам, безопасности и автоматическому обновлению сертификатов.
Установка Nginx, MariaDB и PHP
Сначала установим Nginx, MariaDB, PHP 7.4 и необходимые расширения:
apt-get install nginx mariadb-server php php-cli php-fpm php-common php-curl php-gd php-imagick php-json php-mbstring php-mysql php-pgsql php-zip php-intl php-xml sudo curl -yПримечание: в примерах используется PHP-FPM (php7.4-fpm). Если у вас другая версия PHP, подставьте соответствующий путь и пакеты.
После установки отредактируйте файл php.ini (пример для PHP 7.4):
nano /etc/php/7.4/fpm/php.iniИзмените или добавьте следующие настройки (при необходимости подставьте вашу временную зону):
memory_limit = 512M
post_max_size = 32M
upload_max_filesize = 32M
date.timezone = Asia/KolkataСовет: замените date.timezone на вашу локальную зону (например, Europe/Moscow) или оставьте примерный вариант.
Примените изменения перезапуском PHP-FPM:
systemctl restart php7.4-fpmСоздание базы данных для Craft CMS
Войдите в MariaDB (MySQL) и создайте базу данных и пользователя:
mysqlВнутри консоли MariaDB выполните:
MariaDB [(none)]> CREATE DATABASE craftdb;
MariaDB [(none)]> GRANT ALL ON craftdb.* TO 'craftuser' IDENTIFIED BY 'password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;Замените craftdb, craftuser и password на свои имена и безопасный пароль. Запомните эти данные — они понадобятся при установке Craft.
Установка Composer
Composer — менеджер зависимостей для PHP. Установите его так:
curl -sS https://getcomposer.org/installer -o composer-setup.php
php composer-setup.php --install-dir=/usr/local/bin --filename=composerПроверьте версию:
composer --versionОжидаемый результат: вывод версии Composer (например, 2.x).
Установка Craft CMS
Сделаем каталог веб-сайта собственностью www-data и установим Craft в /var/www/html:
chown -R www-data:www-data /var/www/html
cd /var/www/html
sudo -u www-data composer create-project craftcms/craft craftcmsЗапустится скрипт установки Craft. Вам будут заданы вопросы о базе данных, учётной записи администратора и URL сайта. Пример интерактивного вывода (сокращённый):
> @php craft setup/welcome
Welcome to Craft CMS!
Are you ready to begin the setup? (yes|no) [no]: yes
Which database driver are you using? [mysql,pgsql,?]: mysql
Database server name or IP address: [127.0.0.1]
Database username: craftuser
Database password: <ваш_пароль>
Database name: craftdb
Install Craft now? (yes|no) [yes]: yes
Username: admin
Email: admin@example.com
Password: <ваш_пароль>
Site name: Craft Site
Site URL: https://craftcms.example.com
Site language: [en-US]После установки установите правильные права для каталога Craft:
chown -R www-data:www-data /var/www/html/craftcmsНастройка Nginx для Craft CMS
Создайте конфигурацию виртуального хоста:
nano /etc/nginx/conf.d/craftcms.confДобавьте следующую конфигурацию (замените server_name на ваш домен):
server {
listen 80;
server_name craftcms.example.com;
root /var/www/html/craftcms/web;
index index.php;
location / {
try_files $uri/index.html $uri $uri/ /index.php?$query_string;
}
location ~ [^/]\.php(/|$) {
try_files $uri $uri/ /index.php?$query_string;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTP_PROXY "";
}
}Проверьте синтаксис и перезапустите Nginx:
nginx -t
systemctl reload nginx
systemctl status nginxПолучение Let’s Encrypt SSL (Certbot)
Установите Certbot и плагин для Nginx:
apt-get install python3-certbot-nginx -yЗапустите certbot для вашего домена:
certbot --nginx -d craftcms.example.comВо время интерактива укажите email, согласитесь с правилами и при появлении выбора перенаправления выберите опцию редиректа на HTTPS (рекомендуется для новых сайтов).
Certbot автоматически изменит конфигурацию Nginx и сохранит сертификаты в /etc/letsencrypt/live/your-domain/.
Чтобы регулярно обновлять сертификаты, используйте systemd timer, который обычно устанавливается вместе с certbot, или добавьте проверку в cron:
# Запуск проверки и обновления сертификатов каждый день в 3:15
15 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"Совет: проверьте работу автоматического обновления командой:
certbot renew --dry-runТипичные проблемы и их решения
- Ошибка 502 Bad Gateway: убедитесь, что PHP-FPM работает (systemctl status php7.4-fpm) и fastcgi_pass указывает на существующий сокет или порт.
- Permission denied при записи в storage: проверьте, что владельцем файлов и директорий является www-data и права на директории корректны (chown -R www-data:www-data /var/www/html/craftcms).
- Невозможно подключиться к базе данных: проверьте правильность хоста, порта и разрешений пользователя MariaDB, а также сеть/файрвол.
- Certbot не проходит валидацию: проверьте, что домен указывает на сервер и порты 80/443 открыты.
Рекомендации по безопасности и эксплуатации
- Права и владельцы: держите веб-каталог под владельцем www-data, но не давайте 777.
- Ограничьте доступ к /vendor и /storage, если это нужно, через Nginx deny/allow.
- Регулярные обновления: обновляйте Debian, PHP, Composer-пакеты и плагины Craft.
- Резервное копирование: бэкапьте базу данных и /var/www/html/craftcms регулярно.
- Логи и мониторинг: подключите мониторинг (заполнение диска, нагрузка, ошибка 5xx).
- Fail2ban: подумайте об установке fail2ban для защиты от брутфорса.
Чек-лист ролей (кратко)
- Системный администратор: подготовить сервер, открыть порты 80/443, настроить бэкапы, SSL-автообновление.
- Разработчик: установить зависимости через Composer, развернуть код, проверить environment (.env).
- Владелец сайта: настроить контент, создать пользователей в панели управления Craft.
Небольшая методология при деплое в прод
- Подготовить staging-сервер, собрать данные конфигурации и тестовые данные.
- Проверить работу на staging: авторизация, CRUD, плагины.
- Перенести на production, выполнить бэкап, переключить DNS, удостовериться в наличии HTTPS и автоматического обновления.
Факты и ключевые значения
- ОС: Debian 11.
- Веб-сервер: Nginx.
- СУБД: MariaDB/MySQL.
- PHP: пример — 7.4 (php7.4-fpm).
- SSL: Let’s Encrypt через certbot.
Скриншоты

Описание: Стартовый экран установки Craft CMS с приветственным текстом.

Описание: Страница входа в административную панель Craft CMS.

Описание: Дашборд Craft CMS с основными виджетами и навигацией.
Заключение
Поздравляем — Craft CMS установлен и доступен по HTTPS. Дальше: настройте контентные типы, поля и шаблоны, установите нужные плагины и организуйте регулярные бэкапы. Если возникнут ошибки — сначала проверьте логи Nginx, PHP-FPM и Certbot, затем применяйте пункты из раздела «Типичные проблемы».
Важно: поддерживайте обновления безопасности и автоматическое обновление сертификатов.
Краткое резюме и шаги далее:
- Проверьте права доступа и журнал ошибок.
- Настройте бэкапы и мониторинг.
- Планируйте обновления для PHP, системы и Craft.
Если нужно, могу прислать готовый шаблон конфигурации systemd-таймера для certbot, пример безопасных прав на файлы и подробный playbook для Ansible.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone