Установка WonderCMS на FreeBSD 12 с Nginx и SSL

WonderCMS — бесплатная и открытая flat-file CMS, созданная быть крайне небольшой, лёгкой и простой. Она написана на PHP с использованием jQuery, HTML/CSS и разрабатывается с 2008 года. Первоначальная настройка не требуется: установка сводится к распаковке и загрузке нескольких файлов. Все данные сохраняются в текстовом файле database.js в формате JSON, поэтому WonderCMS не требует реляционной базы данных вроде MySQL.
В этой инструкции показано, как установить и настроить WonderCMS на FreeBSD 12 с использованием Nginx как веб‑сервера и, при желании, как добавить SSL с помощью клиента acme.sh и центра сертификации Let’s Encrypt.
Что вы получите
- Полное окружение PHP-FPM + Nginx, готовое к запуску WonderCMS.
- Настройку HTTPS на базе Let’s Encrypt (опционально).
- Рекомендации по правам доступа, безопасности и восстановлению.
Основные требования
- PHP 7.1 или новее с расширениями curl, mbstring и zip.
- Веб‑сервер: Apache (с mod_rewrite), Nginx или IIS.
Предварительные условия
- FreeBSD 12.
- Непривилегированный пользователь с sudo.
Начальные шаги на FreeBSD
Проверьте версию FreeBSD:
uname -ro
# FreeBSD 12.0-RELEASEНастройте часовой пояс:
tzsetupОбновите систему и пакеты:
freebsd-update fetch install
pkg update && pkg upgrade -yУстановите базовые утилиты для администрирования:
pkg install -y sudo vim unzip wget bash socatВажно: обновления ОС и пакетов повышают безопасность и предотвращают несовместимости при установке PHP/Nginx.
Шаг 1 — Установка PHP и расширений
Установите PHP и необходимые расширения (пример для php72):
sudo pkg install -y php72 php72-mbstring php72-curl php72-gd php72-pdo php72-mysqli php72-pdo_mysql php72-json php72-openssl php72-ctype php72-dom php72-hash php72-iconv php72-tokenizer php72-calendar php72-fileinfo php72-session php72-simplexml php72-xml php72-filterПроверьте загруженные модули PHP:
php -m
ctype
curl
exif
fileinfo
. . .
. . .Проверьте версию PHP:
php --version
# PHP 7.3.6 (cli) (built: May 28 2019 09:32:59) ( NTS )
# Copyright (c) 1997-2018 The PHP Group
# Zend Engine v3.3.6, Copyright (c) 1998-2018 Zend TechnologiesВключите и запустите PHP-FPM:
sudo sysrc php_fpm_enable=yes
sudo service php-fpm startПримечание: в зависимости от версии PHP пакет может называться php74, php80 и т.д. Подбирайте версию по совместимости с WonderCMS и установленными расширениями.
Шаг 2 — Получение сертификатов через acme.sh (опционально)
HTTPS не обязателен, но настоятельно рекомендуется. Для автоматического получения сертификатов используем acme.sh — лёгкий shell‑клиент для Let’s Encrypt.
Установите acme.sh:
sudo pkg install -y acme.shПроверка версии:
acme.sh --version
# v2.8.2Примеры выдачи сертификатов (замените example.com на ваш домен):
# RSA 2048
acme.sh --issue --standalone -d example.com --keylength 2048
# ECDSA
acme.sh --issue --standalone -d example.com --keylength ec-256Для тестирования используйте флаг –staging.
После успешного получения сертификатов они появятся в каталоге:
- RSA: /home/username/example.com
- ECC/ECDSA: /home/username/example.com_ecc
Список выданных сертификатов:
acme.sh --listСоздайте целевой каталог для копирования сертификатов, например /etc/letsencrypt:
mkdir -p /etc/letsecnrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_eccУстановка/копирование сертификатов в /etc/letsencrypt:
# 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 по умолчанию умеет обновлять сертификаты автоматически. Проверьте крон/таймеры и права доступа к ключам.
После завершения работы выполните exit, если вы работали под root:
exitШаг 3 — Установка и конфигурация Nginx
Установим Nginx и включим сервис:
sudo pkg install -y nginxПроверка версии:
nginx -v
# nginx version: nginx/1.16.1Включаем и запускаем Nginx:
sudo sysrc nginx_enable=yes
sudo service nginx startДобавьте конфигурацию сервера для WonderCMS в /usr/local/etc/nginx/wondercms.conf (отредактируйте пример под ваш домен и пути):
server {
listen 80;
listen 443 ssl;
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;
server_name example.com;
root /usr/local/www/wondercms;
index index.php;
location / {
if (!-e $request_filename) {
rewrite ^/(.+)$ /index.php?page=$1 last;
}
}
location ~ database.js {
return 403;
}
location ~ \.php(/|$) {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}Подключите файл конфигурации в блок http главного nginx.conf, добавив внутри http {} строку:
include wondercms.conf;Проверьте синтаксис конфигурации и перезагрузите Nginx:
sudo nginx -t
sudo service nginx reloadСоветы по безопасности Nginx:
- Ограничьте доступ к файлу database.js через директиву, как в примере (return 403).
- Включите современные настройки TLS (отключите TLS 1.0/1.1, используйте сильные шифры) — для этого дополните конфигурацию ssl_protocols и ssl_ciphers.
- Настройте HTTP→HTTPS редирект и HSTS при использовании HTTPS.
Шаг 4 — Установка WonderCMS
Создайте корневой каталог и перейдите в него:
sudo mkdir -p /usr/local/www/wondercms
cd /usr/local/www/wondercmsСкачайте и распакуйте релиз WonderCMS (версия в примере — 2.7.0):
sudo wget https://github.com/robiso/wondercms/releases/download/2.7.0/WonderCMS-2.7.0.zip
sudo unzip WonderCMS-2.7.0.zip
sudo rm WonderCMS-2.7.0.zipПереместите файлы в корень и удалите временную папку:
sudo mv wondercms/* .
sudo mv wondercms/.* .
sudo rmdir wondercmsУстановите владельца веб‑файлов на nginx (или соответствующий пользователю процесса Nginx):
sudo chown -R nginx:nginx /usr/local/www/wondercmsПерезапустите PHP-FPM:
sudo service php-fpm restartОткройте сайт в браузере. По умолчанию логин: admin — смените пароль сразу после входа.

Контрольные действия и тесты
Критерии приёмки
- Сайт загружается по HTTP и/или HTTPS.
- Страницы CMS открываются, редактирование работает.
- Файл database.js недоступен напрямую (HTTP 403).
- SSL‑сертификат корректно установлен и не просрочен (при использовании HTTPS).
Минимальные тесты приемки
- Открыть https://example.com и проверить, что в адресной строке виден валидный сертификат.
- Попытаться получить /database.js и убедиться, что сервер отвечает 403.
- Войти в админку, изменить страницу и проверить, что изменения сохранятся в базе файла.
Резервное копирование и перенос
Поскольку WonderCMS хранит контент в flat‑файле database.js, резервное копирование и перенос просты:
- Скопируйте весь каталог /usr/local/www/wondercms на новый сервер или в архив.
- На новом хосте восстановите права владельца и перезапустите php-fpm/nginx.
Важно: при переносе не требуется «переконфигурирование» CMS — файл данных остаётся в формате JSON.
Рекомендации по безопасности и хардениг
- Ограничьте права на запись: давайте запись только тем процессам, которым это действительно нужно (обычно nginx/php-fpm).
- Защитите административную панель дополнительной аутентификацией (IP‑фильтр, базовая auth) при необходимости.
- Регулярно обновляйте PHP, Nginx и плагины WonderCMS.
- Храните приватные ключи TLS в /etc/letsencrypt с правами 600.
Роль‑ориентированные чек-листы
Для системного администратора
- Установить и обновить пакеты FreeBSD.
- Настроить firewall (pf/iptables).
- Настроить автоматическое обновление и мониторинг сервисов.
Для веб‑разработчика
- Проверить совместимость версии PHP.
- Настроить окружение разработки и способ деплоя (rsync, Git).
- Проверить обработку форм и сохранение данных.
Для контент‑менеджера
- Сменить пароль admin.
- Проверить шаблоны и плагины.
- Выполнять экспорт/резервное копирование перед крупными правками.
Частые ошибки и способы их решения
- Ошибка 502/504 при запросах к PHP: проверьте, что PHP-FPM запущен и слушает 127.0.0.1:9000 (или UNIX‑сокет), и что fastcgi_pass соответствует этому адресу.
- Ошибка 403 при доступе к index.php: проверьте права на файлы и директории и владельца (nginx:nginx).
- Сертификат не обновляется: проверьте crontab/таймер acme.sh и права на каталог /etc/letsencrypt.
Короткая методология установки (чеклист)
- Обновить систему.
- Установить PHP и расширения; запустить PHP-FPM.
- Установить Nginx; загрузить конфигурацию для WonderCMS.
- Опционально: установить acme.sh и получить сертификаты.
- Скачать и распаковать WonderCMS, назначить права.
- Тестировать сайт, настроить бэкапы и мониторинг.
Факты и советы
- WonderCMS использует единый файл database.js для хранения контента в JSON.
- Переносим и резервируем сайт простым копированием каталога.
- HTTPS увеличивает доверие и безопасность, но требует периодического обновления сертификатов.
Краткий глоссарий
- PHP-FPM — процессный менеджер для PHP, обслуживает запросы FastCGI.
- acme.sh — лёгкий shell‑клиент для получения сертификатов ACME (Let’s Encrypt).
- Flat‑file CMS — система, которая хранит данные в файловой системе, а не в РСУБД.
Заключение
Установка WonderCMS на FreeBSD 12 с Nginx и опциональным SSL — прямая процедура: подготовка ОС, установка PHP и Nginx, настройка виртуального хоста и запуск CMS. Особое внимание уделяйте правам доступа к файлу database.js, настройкам PHP-FPM и автоматизации обновления сертификатов.
Ссылки
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone