Установка Fork CMS на Debian 9 с Nginx, MariaDB и SSL

Fork — это простая в использовании open‑source CMS с набором компонентов Symfony. У неё интуитивный интерфейс, расширяемые приложения (apps) и коллекция тем. В этом руководстве мы пройдём установку Fork CMS на Debian 9 с Nginx, MariaDB и опциональной настройкой SSL через Acme.sh и Let’s Encrypt.
Коротко о плане
- Подготовка системы и установка зависимостей
- Установка PHP 7.1+ и нужных расширений
- Установка и настройка MariaDB, создание базы
- (Опционально) Получение сертификата через acme.sh/Let’s Encrypt
- Настройка Nginx для Fork CMS
- Установка Composer и развертывание Fork
- Завершение установки через веб‑интерфейс и проверка
Требования
Требования для установки Fork CMS:
- PHP 7.1 или выше.
- PHP‑расширения: cURL, libxml, DOM, SimpleXML, SPL, PDO (MySQL driver), mbstring, iconv, GD2, JSON, PCRE, intl.
- MySQL/MariaDB 5.0+ (рекомендуется MariaDB 10+).
- Веб‑сервер: Nginx или Apache (для Apache нужны .htaccess, mod_rewrite; mod_expires и mod_deflate желательны).
Важно: Fork использует Symfony‑подобную структуру приложения, поэтому права на файлы и корректная настройка fastcgi/php‑fpm критичны для работы.
Предварительные условия
- Сервер с Debian 9.
- Непользователь root с sudo‑правами.
Первые шаги
Проверьте версию Debian:
lsb_release -ds
# Debian GNU/Linux 9.9 (stretch)Настройте часовой пояс:
dpkg-reconfigure tzdataОбновите пакеты системы:
apt update && apt upgrade -yУстановите базовые утилиты:
apt install -y curl wget vim git sudo unzip socat bash-completion dirmngr apt-transport-httpsШаг 1 — Установка PHP и расширений
Debian 9 может не содержать актуальные версии PHP в стандартном репозитории, добавим репозиторий от sury.org:
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt updateУстановите PHP и необходимые расширения (пример для PHP 7.2):
sudo apt install -y php7.2 php7.2-cli php7.2-fpm php7.2-common php7.2-mysql php7.2-curl php7.2-json php7.2-zip php7.2-gd php7.2-xml php7.2-mbstring php7.2-opcache php7.2-intlПроверьте установленные модули:
php -mПроверьте версию PHP:
php --version
# Пример вывода: PHP 7.2.x (cli) ...PHP‑FPM обычно запускается и включается в автозагрузку автоматически.
Шаг 2 — Установка MariaDB и создание базы данных
Установите MariaDB:
sudo apt install -y mariadb-serverПроверьте версию:
mysql --versionЗапустите скрипт безопасной настройки:
sudo mysql_secure_installationОтветьте на вопросы скрипта, задав надёжный пароль для root и отключив анонимных пользователей.
Подключитесь к серверу баз данных и создайте базу и пользователя для Fork:
sudo mysql -u root -p
mysql> CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql> GRANT ALL ON dbname.* TO 'username' IDENTIFIED BY 'mypassword';
mysql> FLUSH PRIVILEGES;
mysql> exitЗамените dbname, username и mypassword на свои значения.
Шаг 3 — Получение сертификата через acme.sh и Let’s Encrypt (опционально)
HTTPS не обязателен, но настоятельно рекомендуется. Acme.sh — лёгкий клиент для получения сертификатов от Let’s Encrypt.
Установка acme.sh:
sudo su - root
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install --accountemail [email protected]
source ~/.bashrc
cd ~Проверка версии:
acme.sh --versionПолучение RSA и ECDSA сертификатов (пример):
# RSA 2048
acme.sh --issue --standalone -d example.com --keylength 2048
# ECDSA
acme.sh --issue --standalone -d example.com --keylength ec-256Для тестов используйте флаг –staging.
Каталог с сертификатами по умолчанию будет в /home/username/example.com или example.com_ecc.
Создайте целевую директорию для сертификатов и установите их туда (исправлена опечатка в имени каталога):
sudo mkdir -p /etc/letsencrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_eccКопирование/установка сертификатов и настройка автоматической перезагрузки nginx:
# RSA
acme.sh --install-cert -d example.com --cert-file /etc/letsencrypt/example.com/cert.pem --key-file /etc/letsencrypt/example.com/private.key --fullchain-file /etc/letsencrypt/example.com/fullchain.pem --reloadcmd "sudo systemctl reload nginx.service"
# ECC/ECDSA
acme.sh --install-cert -d example.com --ecc --cert-file /etc/letsencrypt/example.com_ecc/cert.pem --key-file /etc/letsencrypt/example.com_ecc/private.key --fullchain-file /etc/letsencrypt/example.com_ecc/fullchain.pem --reloadcmd "sudo systemctl reload nginx.service"Сертификаты acme.sh автоматически обновляются.
После завершения выйдите из root:
exitВажно: для выдачи сертификата с опцией –standalone порт 80 должен быть свободен. Альтернатива — использование DNS‑валидации или временное отключение nginx.
Шаг 4 — Установка и настройка NGINX
Установите Nginx:
sudo apt install -y nginxПроверка версии:
sudo nginx -vСоздайте конфигурацию сайта, например /etc/nginx/sites-available/fork.conf, со следующим содержимым (настройте server_name и пути):
server {
listen 80;
listen 443 ssl;
root /var/www/fork;
index index.php index.html;
server_name example.com;
ssl_certificate /etc/letsencrypt/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com/private.key;
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/private.key;
location / {
try_files $uri $uri/ @redirects;
}
location @redirects {
rewrite ^ /index.php;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_read_timeout 60;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }
location ~* ^/(composer\..*|vendor\/.*|Procfile$|\.git\/.*|src\/Console.*|.*\.gitignore|\.editorconfig|\.travis.yml|autoload\.php|bower\.json|phpunit\.xml\.dist|.*\.md|app\/logs\/.*|app\/config\/.*|src\/Frontend\/Cache\/CompiledTemplates.*|src\/Frontend\/Cache\/Locale\/.*\.php|src\/Frontend\/Cache\/Navigation\/.*\.php|src\/Frontend\/Cache\/Search\/.*|src\/Backend\/Cache\/CompiledTemplates\/.*|src\/Backend\/Cache\/Locale\/.*\.php)$ {
deny all;
access_log off;
log_not_found off;
}
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
}Активируйте сайт и проверьте конфигурацию:
sudo ln -s /etc/nginx/sites-available/fork.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx.serviceПримечание: при использовании PHP‑FPM убедитесь, что путь к сокету соответствует установленной версии PHP.
Шаг 5 — Установка Composer
Установите Composer глобально:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composerПроверьте версию:
composer --versionШаг 6 — Установка Fork CMS
Создайте корень сайта и установите права:
sudo mkdir -p /var/www/fork
sudo chown -R $USER:$USER /var/www/forkЗагрузите Fork через Composer:
cd /var/www/fork
composer create-project forkcms/forkcms .После установки измените владельца на веб‑пользователя:
sudo chown -R www-data:www-data /var/www/forkСкопируйте и отредактируйте файл конфигурации параметров установки (пример):
sudo vim /var/www/fork/app/config/parameters_install.ymlВнесите параметры подключения к базе (имя БД, пользователь, пароль) и сохраните.
Откройте в браузере ваш сайт и пройдите веб‑инсталлятор Fork. Админ‑панель доступна по адресу /private.
Шаг 7 — Завершение установки через интерфейс
Убедитесь, что сервер отвечает требованиям и продолжайте установку через веб‑интерфейс.

Выберите язык и нажмите «Next» (Далее).

Настройте параметры по своему усмотрению и продолжите.

Введите параметры базы данных (убедитесь, что база создана заранее).

Создайте администратора и завершите установку.

Войдите в админ‑панель:

Поздравляем — Fork CMS установлен.
Практические советы и безопасность
Важно: никогда не храните пароли в открытом виде в репозитории. Для продакшен‑среды используйте надёжные секретные хранилища и права доступа.
Рекомендации по усилению безопасности и эксплуатации:
- Отключите вывод ошибок в PHP в продакшн (display_errors = Off).
- Обновляйте PHP и пакеты безопасности регулярно.
- Ограничьте доступ к административной панели по IP или через VPN, если возможно.
- Настройте регулярное резервное копирование базы и файлов сайта.
- Используйте HTTP Strict Transport Security (HSTS) и современные наборы шифров в конфигурации SSL.
- Проверяйте логи nginx и приложения на предмет подозрительной активности.
Когда этот способ не подходит
- Если вы предпочитаете Apache и .htaccess — можно установить Fork с Apache; потребуется корректная конфигурация VirtualHost и модулей.
- Если сервер без публичного IP — получение сертификатов через HTTP‑challenge затруднено; используйте DNS‑challenge.
- Для контейнерной инфраструктуры (Docker, Kubernetes) лучше подготовить контейнерные образы и orchestration‑шаблоны.
Альтернативные подходы
- Запуск на Apache вместо Nginx с mod_rewrite и корректным AllowOverride.
- Использование готовых Docker‑образов Fork CMS.
- Хостинг на PaaS (Platform as a Service) с готовой поддержкой PHP и автоматическими SSL.
Контрольный список (по ролям)
Разработчик:
- Проверил версии PHP и расширения.
- Проверил права на файлы и кеши.
Системный администратор:
- Настроил автоматические бэкапы БД.
- Настроил мониторинг PHP‑FPM и Nginx.
DevOps/Инфраструктура:
- Настроил CI для деплоя (если требуется).
- Обеспечил автоматическое обновление сертификатов.
Ментальные модели и рекомендации
- Минимально рабочая система: PHP + MariaDB + Nginx + Composer + права www‑data.
- Разделяйте окружения: dev/staging/production и используйте отдельные базы.
- Автоматизируйте повторяющиеся действия через скрипты/Ansible.
Короткий глоссарий
- PHP‑FPM: процессный менеджер PHP, принимает FastCGI‑запросы от веб‑сервера.
- acme.sh: клиент для автоматического получения сертификатов от Let’s Encrypt.
- Composer: менеджер зависимостей для PHP.
Пример дерева принятия решения (Mermaid)
flowchart TD
A[Нужен SSL?] -->|Да| B{Есть публичный IP?}
A -->|Нет| C[Продолжить без SSL]
B -->|Да| D[Использовать acme.sh 'HTTP challenge']
B -->|Нет| E[Использовать DNS challenge или купить сертификат]
D --> F[Установить certs и настроить nginx]
E --> FКритерии приёмки
- Страница сайта доступна по HTTP и/или HTTPS.
- Админ‑панель /private доступна и позволяет войти под созданным админом.
- База данных подключается и записи могут быть созданы.
- Логи не содержат критических ошибок (500, 502, 504).
Быстрые тесты приёмки
- curl -I https://example.com — ответ 200/301.
- tail -n 200 /var/log/nginx/error.log — отсутствие фатальных ошибок.
- Проверка прав: ls -la /var/www/fork — файлы принадлежат www-data.
Ссылки
Краткое резюме:
Fork CMS можно быстро развернуть на Debian 9 с Nginx и MariaDB; дополнительные шаги — установка SSL, настройка прав и мониторинга — повысят надёжность и безопасность. Следуйте контрольным спискам и автоматизируйте то, что повторяется.
Похожие материалы
Как отформатировать внешний диск в macOS
Открыть WordPerfect (.wpd) в Windows 10
Перенос закладок и истории: Chrome → Safari
Google Meet в Документах, Таблицах и Презентациях
Сброс клавиатуры Samsung — быстрое восстановление