Гид по технологиям

Установка Pico CMS с Nginx на CentOS 7

• 5 min read • Инфраструктура • Обновлено 26 Nov 2025
Установка Pico CMS на CentOS 7 с Nginx
Установка Pico CMS на CentOS 7 с Nginx

Иллюстрация: пример сайта на Pico CMS

Pico — это открытый, простой и быстрый flat-file CMS на PHP. У него нет административной панели и базы данных: страница — это обычный .md файл в каталоге content. Для тем используется движок шаблонов Twig. Исходники Pico доступны на GitHub. В этом руководстве показана установка Pico CMS с Nginx на сервер CentOS 7.

Основные требования

Требования для работы Pico:

  • Nginx
  • PHP версии 5.3.6 или выше (в примерах используется PHP 7.2)
  • Composer (менеджер зависимостей PHP)

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

  • CentOS 7.
  • Пользователь с sudo-привилегиями (не root).

Быстрая подготовка системы

Проверьте версию CentOS:

cat /etc/centos-release
# CentOS Linux release 7.6.1810 (Core)

Настройка часового пояса:

timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'

Обновите пакеты системы:

sudo yum update -y

Установите базовые утилиты:

sudo yum install -y curl wget vim git unzip socat bash-completion epel-release

Примечание: при использовании брандмауэра откройте порты 80 и 443 (см. раздел «Проверки и отладка»).

Шаг 1 — Установка PHP

Добавим репозиторий Webtatic и установим PHP 7.2 и распространённые расширения:

sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

sudo yum install -y php72w php72w-cli php72w-fpm php72w-common php72w-curl php72w-gd php72w-json php72w-zip php72w-xml php72w-mbstring

Проверка загруженных модулей PHP:

php -m

ctype
curl
exif
fileinfo
. . .

Проверка версии PHP:

php --version
# PHP 7.2.19 (cli) (built: Jan 12 2019 12:47:33) ( NTS )

Запустите и включите сервис PHP-FPM:

sudo systemctl start php-fpm.service
sudo systemctl enable php-fpm.service

Важно: обратите внимание, где слушает PHP-FPM — сокет или TCP-порт. По умолчанию в /etc/php-fpm.d/www.conf будет директива listen. Если вы используете конфигурацию Nginx с fastcgi_pass 127.0.0.1:9000, убедитесь, что php-fpm слушает именно на этом адресе и порту:

grep '^listen' /etc/php-fpm.d/www.conf || sudo sed -n '1,120p' /etc/php-fpm.d/www.conf

Шаг 2 — Установка acme.sh и получение сертификата Let’s Encrypt (опционально)

HTTPS не обязателен, но настоятельно рекомендуется для безопасности трафика. Мы используем acme.sh — лёгкий клиент на shell без дополнительных зависимостей.

Установка acme.sh:

sudo su - root
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install --accountemail you@example.com
source ~/.bashrc
cd ~

Проверка версии:

acme.sh --version
# v2.x.x

Запрос RSA и ECDSA сертификатов (пример для 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, чтобы получить сертификаты из тестового сервера Let’s Encrypt.

После успешного выпуска сертификаты будут храниться в директориях пользователя:

  • RSA: /home/username/example.com
  • ECC/ECDSA: /home/username/example.com_ecc

Список выпущенных сертификатов:

acme.sh --list

Создаём целевую директорию для хранения сертификатов (в примере /etc/letsencrypt):

sudo mkdir -p /etc/letsencrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_ecc

Копирование/установка сертификатов в /etc/letsencrypt и настройка перезагрузки 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 обычно настраивает автоматическое продление сертификатов (cron). Проверьте это после установки.

После получения сертификатов выйдите из-под root и вернитесь к пользователю с sudo:

exit

Шаг 3 — Установка и настройка Nginx

Установим Nginx из репозитория CentOS:

sudo yum install -y nginx

Проверим версию:

nginx -v
# nginx version: nginx/1.12.2

Запускаем и включаем Nginx:

sudo systemctl start nginx.service
sudo systemctl enable nginx.service

Создайте конфигурацию для Pico:

sudo vim /etc/nginx/conf.d/pico.conf

Пример содержимого конфигурации Nginx (адаптируйте server_name и пути):

server {

  listen 80;
  listen 443 ssl;
  server_name example.com;
  root /var/www/pico;

  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;

  index index.php;

  location ~ ^/((config|content|vendor|composer\.(json|lock|phar))(/|$)|(.+/)?\.(?!well-known(/|$))) {
    deny all;
  }

  location / {
    index index.php;
    try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_index index.php;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_param PICO_URL_REWRITING 1;
  }

}

Важно: настройка ssl_protocols, ssl_ciphers и заголовков безопасности (HSTS, X-Frame-Options и т.д.) повысит безопасность. Также убедитесь, что fastcgi_pass совпадает с настройкой php-fpm (см. раздел PHP-FPM).

Проверка синтаксиса Nginx и перезагрузка:

sudo nginx -t
sudo systemctl reload nginx.service

Шаг 4 — Установка Composer

Установим Composer глобально:

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

php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { 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:

composer --version
# Composer version 1.9.0 2019-08-02 20:55:32

Примечание: команды установки Composer могут меняться. Если установка не проходит, проверьте https://getcomposer.org/download/.

Шаг 5 — Установка Pico CMS

Создайте корневой каталог для сайта:

sudo mkdir -p /var/www/pico

Передайте права владельца каталога своему пользователю (замените your_username):

sudo chown -R your_username:your_username /var/www/pico

Перейдите в каталог сайта:

cd /var/www/pico

Скачайте Pico через Composer:

composer create-project picocms/pico-composer .

Установите владельца nginx для работы веб-сервера (в зависимости от дистрибутива это может быть nginx или www-data):

sudo chown -R nginx:nginx /var/www/pico

Откройте конфигурацию PHP-FPM и поменяйте пользователя/группу на nginx, если требуется (обычно в /etc/php-fpm.d/www.conf):

sudo vim /etc/php-fpm.d/www.conf

Убедитесь, что строки выглядят так:

user = nginx
group = nginx

Перезапустите PHP-FPM:

sudo systemctl restart php-fpm.service

Если на сервере включён SELinux, установите контекст для каталога:

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/pico(/.*)?"
sudo restorecon -Rv /var/www/pico

(Если semanage отсутствует, установите пакет policycoreutils-python.)

После этого можно создавать каталог content и .md файлы — каждая markdown-страница станет страницей сайта.

Схема структуры каталогов Pico

Проверки и отладка

  • Проверка Nginx: sudo nginx -t
  • Просмотр логов Nginx: sudo tail -f /var/log/nginx/error.log
  • Проверка PHP: php -v и php -m
  • Проверка PHP-FPM: sudo systemctl status php-fpm.service
  • Проверка открытия портов (firewalld):
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
  • Убедитесь, что fastcgi_pass в nginx совпадает со значением listen в /etc/php-fpm.d/www.conf.

Рекомендации по безопасности

  • Используйте HTTPS и перенаправляйте весь трафик на 443.
  • Включите HSTS и ограничьте поддерживаемые протоколы и шифры в конфигурации Nginx.
  • Запретите доступ к каталогам config, content и vendor через Nginx (в примере это уже сделано).
  • Для каталога /var/www/pico установите корректные права и SELinux-контекст.
  • Регулярно обновляйте пакеты системы и PHP-расширения.

Критерии приёмки

  • Nginx успешно запущен и не выдаёт ошибок: sudo nginx -t -> OK.
  • Доступ к сайту по HTTP/HTTPS возвращает страницу Pico.
  • PHP-FPM запущен и слушает ожидаемый сокет/порт.
  • Создан хотя бы один файл content/page.md и он отображается как страница.
  • TLS-сертификаты корректно установлены и не просрочены.

Ролевые контрольные списки

Администратор сервера:

  • Установить и обновить ОС.
  • Открыть порты 80/443.
  • Настроить SELinux-контекст для /var/www/pico.

Веб-разработчик:

  • Проверить шаблон Twig и маршрутизацию Pico.
  • Создать тестовую .md страницу в content.
  • Проверить отображение и статические ресурсы.

Оператор безопасности:

  • Проверить сертификаты и автоматическое продление.
  • Настроить HSTS и безопасные шифры.

Частые проблемы и решения

  • 502 Bad Gateway: проверьте, что php-fpm запущен и слушает ожидаемый адрес/порт. Сравните fastcgi_pass и listen.
  • 403 Forbidden при доступе к файлам: проверьте права и SELinux-контекст.
  • Сертификат не найден: убедитесь, что пути в nginx совпадают с теми, куда установил acme.sh.

Краткое резюме

Pico — лёгкий flat-file CMS без БД. На CentOS 7 его удобно развернуть с Nginx и PHP-FPM. Опционально можно подключить acme.sh для автоматического получения TLS-сертификатов. Проверьте соответствие настроек php-fpm и конфигурации Nginx, настройте SELinux и брандмауэр, и добавьте базовые меры безопасности (HTTPS, HSTS).

Полезные ссылки

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро