Установка Craft CMS на Ubuntu 20.04 LTS
Craft CMS — лёгкая и гибкая CMS на PHP. В этом пошаговом руководстве показано, как подготовить сервер Ubuntu 20.04, установить стек LEMP (Nginx, MariaDB, PHP), настроить Composer, развернуть Craft, сконфигурировать Nginx, выставить права и обеспечить базовую безопасность. Включены чеклисты для ролей, советы по отладке, резервному копированию и улучшению производительности.
Зачем это руководство
Это руководство предназначено для разработчиков и системных администраторов, которым нужно установить Craft CMS на сервер с Ubuntu 20.04 LTS. Оно покрывает все основные шаги от обновления системы до проверки работоспособности установки через веб-интерфейс.
Кому полезно
- Системным администраторам, разворачивающим LEMP для PHP-приложений.
- Разработчикам, запускающим Craft для сайтов и веб-приложений.
- Командам, которым нужен воспроизводимый чеклист установки.
Краткие определения
- CMS: система управления контентом, упрощает публикацию страниц и медиа.
- LEMP: Linux + Nginx + MariaDB/MySQL + PHP-FPM.
- Composer: менеджер зависимостей PHP.
Содержание
- Предварительные требования
- Подготовка сервера и обновление системы
- Установка зависимостей
- Настройка LEMP (Nginx, MariaDB, PHP-FPM)
- Создание базы данных для Craft
- Установка Composer и самого Craft
- Настройка Nginx для Craft
- Права и безопасность файлов
- SSL: быстрый сертификат Let’s Encrypt
- Отладка и часто встречаемые ошибки
- Резервное копирование и восстановление
- Производительность
- Роли и чеклисты
- Критерии приёмки
- Частые вопросы
- Итог
Предварительные требования
Перед началом убедитесь, что у вас есть:
- Сервер с Ubuntu 20.04 LTS и подключением по SSH.
- Ненулевой пользователь с sudo-привилегиями (рекомендуется не работать под root).
- Доменное имя, указывающее на сервер (например craft.example.com) — для публичного доступа и SSL.
- Базовые навыки работы в терминале.
Важно: все команды в этом руководстве выполняются в терминале от имени пользователя с sudo, если не указано иначе.
Подготовка сервера и обновление системы
Войдите на сервер по SSH (пример):
ssh user@your_instance_ipЗатем обновите пакеты и систему:
sudo apt update && sudo apt upgrade -yЕсли при обновлении возникли проблемы с пакетами, запустите исправление:
sudo apt-get -f installи, при необходимости:
sudo dpkg --configure -aЭти команды помогут очистить состояния пакетов и завершить конфигурацию.

Alt: Скриншот терминала с примером принудительной установки пакетов и исправлением зависимостей.
Установка базовых утилит и зависимостей
Установите часто используемые инструменты, которые понадобятся в процессе:
sudo apt install -y curl wget vim git unzip socatКратко про назначение:
- curl и wget — скачивание файлов и взаимодействие с внешними ресурсами.
- vim — текстовый редактор (можно заменить nano).
- git — контроль версий.
- unzip — распаковка ZIP-архивов.
- socat — удобный инструмент для проброса сокетов (иногда полезен при дебаге).

Alt: Скриншот установки базовых пакетов через apt.
Установка LEMP (Nginx, MariaDB, PHP-FPM)
Craft CMS написан на PHP и обычно работает с базой данных MySQL/MariaDB. Установим Nginx и MariaDB, затем PHP с нужными расширениями.
sudo apt-get install nginx mariadb-server -yУстановите PHP и рекомендуемые модули для Craft:
sudo apt-get install php php-cli php-fpm php-common php-curl php-gd php-imagick php-json php-mbstring php-mysql php-zip php-intl php-xml -yПояснения по ключевым пакетам:
- php-fpm — процессный менеджер для PHP, работает с Nginx через сокет или TCP.
- php-mysql — модуль для соединения с MySQL/MariaDB.
- php-gd и php-imagick — обработка изображений.
- php-mbstring и php-intl — поддержка многоязычных строк и интернационализации.
После установки отредактируйте конфигурацию PHP-FPM для повышения лимитов, необходимых Craft:
sudo nano /etc/php/7.4/fpm/php.iniИзмените/добавьте следующие параметры:
memory_limit = 512M
post_max_size = 32M
upload_max_filesize = 32M
date.timezone = Europe/MoscowПримечание: вместо Europe/Moscow укажите вашу временную зону в формате, поддерживаемом PHP (список: https://www.php.net/manual/timezones.php). В примерах часто встречается Asia/Kolkata, но выберите свою зону.
Перезапустите PHP-FPM:
sudo systemctl restart php7.4-fpmПроверьте статус:
sudo systemctl status php7.4-fpm
Alt: Скриншот вывода systemctl status для php7.4-fpm.
Создание базы данных и пользователя
Откройте консоль MariaDB/MySQL от root:
sudo mysql -u root -pЕсли root в MariaDB настроен на аутентификацию через unix_socket, можно попасть без пароля:
sudo mysqlВнутри консоли выполните команды:
CREATE DATABASE craftdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON craftdb.* TO 'craftuser'@'localhost' IDENTIFIED BY 'StrongPasswordHere';
FLUSH PRIVILEGES;
EXIT;Замените StrongPasswordHere на сложный пароль. Рекомендуется хранить его в менеджере паролей.
Пояснения:
- utf8mb4 — предпочтительная кодировка для корректной поддержки смайликов и всех символов Unicode.
- grant позволяет пользователю craftuser работать только с базой craftdb.
Установка Composer и Craft CMS
Установите Composer — менеджер зависимостей PHP:
sudo curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composerПроверьте версию:
composer --versionТеперь подготовим директорию для проекта (веб-корень):
sudo mkdir -p /var/www/html/craft
sudo chown $USER:$USER /var/www/html/craft
cd /var/www/html/craftУстановите Craft через Composer:
composer create-project craftcms/craft .Примечание: команда установит последнюю стабильную версию в текущую директорию. Если требуется конкретная версия, укажите её, например composer create-project craftcms/craft:^3.7 .
После установки верните права каталога под веб-сервер:
sudo chown -R www-data:www-data /var/www/html/craft
sudo find /var/www/html/craft -type d -exec chmod 755 {} \;
sudo find /var/www/html/craft -type f -exec chmod 644 {} \;Дополнительно для директорий, куда Craft должен записывать файлы (storage, web/uploads, config) назначьте права записи:
sudo chmod -R ug+rw /var/www/html/craft/storage /var/www/html/craft/web/uploads
sudo chown -R www-data:www-data /var/www/html/craft/storage /var/www/html/craft/web/uploadsВажно: ограничивайте права как можно жёстче — давайте запись только тем каталогам, где это действительно нужно.

Alt: Скриншот установки Craft с помощью Composer в терминале.
Конфигурация Nginx для Craft
Создайте файл конфигурации Nginx для сайта:
sudo nano /etc/nginx/conf.d/craft.confПример содержимого:
server {
listen 80;
server_name craft.example.com;
root /var/www/html/craft/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 "";
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
log_not_found off;
}
}Пояснения:
- server_name — замените на фактическое доменное имя.
- root указывает на папку web внутри установки Craft.
- блок location для статических файлов ускоряет отдачу ресурсов.
Проверьте конфигурацию и перезагрузите Nginx:
sudo nginx -t
sudo systemctl reload nginx
Alt: Скриншот проверки конфигурации Nginx с успешным результатом.
Доступ к панели управления Craft
Откройте браузер и перейдите по адресу http://craft.example.com. Если DNS ещё не настроен, можно временно использовать IP-адрес сервера.
При первом запуске установщик Craft запросит данные базы данных и создаст таблицы.
Примеры действий в установщике:
- Укажите hostname: localhost
- Database: craftdb
- Username: craftuser
- Password: пароль, который вы задали
После установки перейдите в панель администратора и создайте учётную запись администратора сайта.

Alt: Экран приветствия установщика Craft CMS.

Alt: Скриншот панели управления Craft CMS после успешной установки.
Если появляется “503 Service Unavailable”:
- Проверьте права на каталоги и файлы. Файлы не должны быть записываемы публично, но каталоги, где Craft пишет, должны быть доступны веб-процессу.
- Убедитесь, что PHP-FPM работает и socket указан верно в конфигурации Nginx.
- Посмотрите логи Nginx и PHP-FPM: /var/log/nginx/error.log и /var/log/php7.4-fpm.log.
SSL: получение сертификата Let’s Encrypt (рекомендуется)
Для публичного сайта обязательно включите HTTPS. Используйте Certbot для получения и автоматического обновления сертификата:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d craft.example.comСледуйте подсказкам Certbot. После успешного получения сертификата Certbot обновит конфигурацию Nginx и добавит задачу в cron для автоматического обновления.
Проверка автоматического обновления (симуляция):
sudo certbot renew --dry-runБольше о правах и безопасности файлов
Рекомендации:
- Владелец файлов: www-data для рабочего каталога Craft.
- Каталоги, требующие записи: storage, web/uploads, config только если вы используете динамическое изменение через UI.
- Запрещайте запись в остальные директории.
Пример рекомендуемых команд:
sudo chown -R www-data:www-data /var/www/html/craft
sudo find /var/www/html/craft -type d -exec chmod 755 {} \;
sudo find /var/www/html/craft -type f -exec chmod 644 {} \;Дополнительные меры безопасности:
- Отключите индексирование директорий в Nginx.
- Ограничьте доступ к файлу .env и конфигам.
- Регулярно обновляйте PHP, Nginx и Craft.
Резервное копирование и восстановление
Рекомендуемая стратегия бэкапов:
- Бэкап базы данных: выполняйте дамп регулярно.
mysqldump -u craftuser -p craftdb > /var/backups/craftdb-$(date +%F).sql- Бэкап файлов проекта и загруженных медиа (web/uploads): используйте rsync или tar.
sudo tar -czf /var/backups/craft-files-$(date +%F).tar.gz /var/www/html/craft- Храните бэкапы вне сервера (S3, удалённый rsync-сервер) и проверяйте процесс восстановления.
Восстановление базы данных:
mysql -u craftuser -p craftdb < /var/backups/craftdb-2021-01-01.sqlКритические рекомендации:
- Проверяйте бэкапы на предмет целостности (периодически выполняйте восстановление в тестовой среде).
- Храните минимум 2 поколения бэкапов и ретеншн по времени.
Производительность и кеширование
Советы по ускорению Craft:
- Включите кеширование страницы и фрагментов в настройках Craft.
- Используйте OPcache для PHP (обычно устанавливается по умолчанию в PHP 7.4). Проверьте в /etc/php/7.4/fpm/php.ini параметры opcache.
- Раздавайте статические ресурсы через CDN.
- Настройте gzip/ Brotli сжатие в Nginx.
- Минимизируйте изображения и используйте WebP, если это допустимо.
Пример включения gzip в nginx.conf:
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
gzip_min_length 256;
}Отладка и диагностика ошибок
Где смотреть логи:
- Nginx ошибки: /var/log/nginx/error.log
- Nginx доступ: /var/log/nginx/access.log
- PHP-FPM: /var/log/php7.4-fpm.log (путь может отличаться)
- Craft логи: /var/www/html/craft/storage/logs/
Типичные проблемы и решения:
- 502 Bad Gateway или 504 Gateway Timeout
- Проверьте, что php7.4-fpm запущен: sudo systemctl status php7.4-fpm
- Проверьте совпадение пути сокета fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
- 503 Service Unavailable
- Проверьте права на каталоги /var/www/html/craft и подкаталоги.
- Проверьте, нет ли maintenance-файла в web/.
- Ошибки подключения к базе данных
- Убедитесь, что credentials в config/db.php или .env совпадают с теми, что вы создали.
- Попробуйте подключиться через mysql клиент с теми же данными.
- Проблемы с загрузкой изображений
- Увеличьте upload_max_filesize и post_max_size в php.ini.
- Проверьте owner и права папки web/uploads.
Миграция с WordPress или другой CMS
Краткий подход:
- Экспортируйте контент из старой CMS (XML/CSV/экспорт постов).
- Спроектируйте структуру полей и секций в Craft, сопоставьте сущности (статьи, страницы, медиа).
- Напишите набор миграционных скриптов на PHP или используйте ETL-инструменты.
- Проверьте импорт на тестовой среде, затем выполните в проде.
Когда это не подходит
- Если у вас очень сложная структура данных с множеством плагинов WordPress, полная автоматическая миграция может быть невозможна — потребуется ручная корректировка.
Роли и контрольные списки
Ниже приведены краткие чеклисты для разных ролей в проекте.
Системный администратор
- Обновил систему и установил необходимые пакеты.
- Настроил Nginx, PHP-FPM и MariaDB.
- Настроил автоматическое обновление сертификатов SSL.
- Создал политiku бэкапов и проверил восстановление.
- Настроил мониторинг и алерты на доступность сервера.
Разработчик
- Развернул Craft через Composer.
- Настроил переменные окружения и config/deploy.
- Проверил права на папки и корректность обработки файлов.
- Настроил локальную среду разработки, совместимую с продакшеном.
Контент-менеджер / дизайнер
- Создал секции, поля и шаблоны в панели Craft.
- Проверил загрузку и обработку изображений.
- Проверил шаблоны на кроссбраузерность и адаптивность.
Критерии приёмки
Минимальные условия успешной установки:
- Сайт доступен по HTTP/HTTPS и показывает установочный/административный интерфейс Craft.
- Установщик успешно подключился к базе данных и создал таблицы.
- PHP-FPM работает и обрабатывает PHP-запросы (нет 502/504 ошибок).
- Права файлов установлены корректно, загрузка медиа работает.
- SSL-сертификат обновляется автоматически (при наличии домена).
Decision flowchart для выбора схемы установки
flowchart TD
A[Нужен публичный сайт?] -->|Да| B[Имеется домен и DNS?]
A -->|Нет| C[Использовать IP или внутренную сеть]
B -->|Да| D[Настроить Nginx и получить SSL]
B -->|Нет| E[Настроить DNS перед SSL]
D --> F[Установка Craft через Composer]
E --> F
C --> F
F --> G[Проверить права и логи]
G --> H[Завершено]Короткие советы по безопасности
- Используйте сложные пароли и двухфакторную аутентификацию для учётных записей администратора Craft.
- Обновляйте Craft и плагины по мере выхода обновлений.
- Применяйте WAF (web application firewall) при высоких рисках атак.
- Закрывайте административные панели по IP или через VPN, если это возможно.
Тесты и приёмка
Примерные тесты, которые стоит выполнить перед передачей проекта в эксплуатацию:
- Функциональность CMS: создание, редактирование и удаление записи.
- Загрузка изображений разного формата и размера.
- Вход/выход администратора и ролей.
- Проверка работы кэша и очистки кеша.
- Тест восстановления из бэкапа (полный цикл).
Частые вопросы
Q: Можно ли ставить Craft на Ubuntu 22.04?
A: Да. Отличия обычно в версиях PHP и путях до сокета php-fpm. Подберите соответствующие пакеты (php8.1/php8.2) и адаптируйте конфигурации.
Q: Нужен ли Composer на продакшене?
A: Composer нужен для установки зависимостей. На продакшене обычно устанавливают зависимости и деплоят уже готовый артефакт, либо запускают composer install во время деплоя. Рекомендуется избегать выполнения composer create-project непосредственно на продакшен-сервере в автоматическом режиме без контроля версий.
Q: Что делать при ошибках прав доступа к файлам?
A: Проверьте владельца (www-data) и права (директории 755, файлы 644), разрешите запись только в требуемые каталоги (storage, web/uploads).
Q: Как восстановить сайт из бэкапа базы и файлов?
A: Восстановите архив файлов в рабочую директорию и импортируйте SQL дамп в новую или существующую базу данных. Проверьте совпадение конфигурации (db credentials) и права доступа.
Итог
Вы развернули Craft CMS на Ubuntu 20.04: подготовили сервер, установили LEMP, создали базу, установили Composer и Craft, настроили Nginx и права, получили SSL и описали сценарии бэкапа и отладки. Это базовая, но практичная конфигурация — дальше вы можете адаптировать её под нагрузку и требования проекта.
Важно: регулярно проверяйте обновления и сохраняйте бэкапы. Удачи в создании сайтов на Craft!
Ресурсы и полезные ссылки
- Официальный сайт Craft CMS: https://craftcms.com
- Composer: https://getcomposer.org
- PHP временные зоны: https://www.php.net/manual/timezones.php
- Certbot: https://certbot.eff.org/
FAQ (для быстрого копирования ответов)
- Как сменить версию PHP? Установите нужный пакет (php8.1-fpm), обновите fastcgi_pass в конфигурации Nginx и перезапустите службы.
- Как проверить работу OPcache? Используйте phpinfo() или специальный status-скрипт.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента