Установка Restyaboard на CentOS 7

О чём эта инструкция
- Назначение: развернуть рабочую копию Restyaboard на сервере CentOS 7.
- Кому подходит: системным администраторам и девопсам, которые управляют self-hosted сервисами.
- Краткое требование: минимальный сервер с root-доступом и доступом в интернет.
В статье приведены подробные команды, файлы конфигурации и рекомендации по проверке. В конце — чеклист для ролей, план обновления и раздел «отладка».
Быстрые факты
- Приложение: Restyaboard (PHP, PostgreSQL)
- СУБД: PostgreSQL 9.6
- Веб-сервер: Nginx
- PHP: 7.0 (php-fpm)
- ОС: CentOS 7
Important: PHP 7.0 больше не поддерживается официально; используйте его только если совместимость критична. По возможности мигрируйте на поддерживаемую ветку PHP и совместимую версию Restyaboard.
Пререквизиты
- Минимальный сервер с CentOS 7
- root или su-привилегии
- Открытые порты 80/443 и 22 для SSH
- Доменное имя (рекомендуется) или публичный IP
Краткое определение: self-hosted — приложение, которое вы размещаете и управляете на собственном сервере, не завися от облачных сервисов третьих сторон.
Шаг 1 — Установка Nginx
Перед установкой обновите систему:
yum -y update
EPEL не содержит Nginx по умолчанию, поэтому подключите EPEL:
yum -y install epel-release
Установите nginx:
yum -y install nginx
Запустите и включите автозапуск:
systemctl start nginx systemctl enable nginx
Проверьте статус:
systemctl status nginx
Если firewall включён, разрешите HTTP/HTTPS:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
Notes: если вы планируете проксировать Nginx через внешний балансировщик, настройте server_name и правила соответственно.
Шаг 2 — Установка и настройка PHP-FPM с mbstring
Restyaboard заявляет о поддержке PHP 7.0; инструкция показывает установку через репозиторий Webtatic.
Установите Webtatic:
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
Установите PHP 7.0 и расширения, необходимые приложению:
yum -y install php70w php70w-fpm php70w-devel php70w-cli php70w-curl php70w-pgsql php70w-mbstring php70w-ldap php70w-pear php70w-imap php70w-xml php70w-pecl-imagick ImageMagick
По умолчанию php-fpm настроен под Apache user; изменим его под nginx. Откройте конфигурационный файл пула:
nano /etc/php-fpm.d/www.conf
Найдите и измените user/group на nginx:
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
Переключаемся с TCP-порта на Unix-сокет (рекомендуется для производительности и безопасности):
listen = /run/php-fpm/php7.0-fpm.sock
Установите владельца, группу и права сокета:
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
Редактирование php.ini — timezone и безопасные опции:
nano /etc/php.ini
Установите часовой пояс (пример):
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Kolkata
Замените на ваш регион, например Europe/Moscow, если требуется.
Отключите cgi.fix_pathinfo (важно для безопасности):
cgi.fix_pathinfo=0
Установите GeoIP и подключите расширение:
yum -y install GeoIP-devel
Добавьте в конец /etc/php.ini:
extension=geoip.so
Запустите php-fpm и включите автозапуск:
systemctl start php-fpm systemctl enable php-fpm
Перезапустите Nginx:
systemctl restart nginx
Important: проверьте, что сокет /run/php-fpm/php7.0-fpm.sock существует и принадлежит nginx. При проблемах — смотрите логи /var/log/php-fpm/error.log и /var/log/nginx/error.log.
Шаг 3 — Установка и настройка PostgreSQL
PostgreSQL служит хранилищем данных Restyaboard.
Добавьте репозиторий PostgreSQL 9.6:
rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
Установите сервер и дополнительные модули:
yum -y install postgresql96-server postgresql96-contrib
Инициализируйте базу данных:
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Откройте pg_hba.conf для настройки аутентификации:
nano /var/lib/pgsql/9.6/data/pg_hba.conf
Замените локальную аутентификацию peer на trust (локально) и ident на md5 для IPv4/IPv6, чтобы использовать пароли:
local all all trust
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
Запустите и включите PostgreSQL:
systemctl start postgresql-9.6 systemctl enable postgresql-9.6
Установите пароль для системного пользователя postgres (опционально можно менять после входа в psql):
passwd postgres
Переключитесь на postgres и создайте пользователя базы:
su - postgres
createuser rb_user
psql
В psql задайте пароль и создайте базу данных:
ALTER USER rb_user WITH ENCRYPTED password 'StrongPassword';
CREATE DATABASE rb_data OWNER rb_user ENCODING 'UTF8' TEMPLATE template0;
\q
exit # вернуться в root
Security note: используйте сложные пароли и управляйте доступом через firewall и локальные правила. Для production-системы рассмотрите кластеризацию/репликацию PostgreSQL.
Шаг 4 — Загрузка Restyaboard
Скачайте готовый релиз и распакуйте:
cd /usr/share/nginx/html wget https://github.com/RestyaPlatform/board/releases/download/v0.4.2/board-v0.4.2.zip
Если нет unzip:
yum -y install unzip
Распакуйте:
unzip board-v0.4.2.zip -d board
Импортируйте SQL-дамп в созданную базу:
psql -d rb_data -f "/usr/share/nginx/html/board/sql/restyaboard_with_empty_data.sql" -U rb_user
Отредактируйте конфигурацию Restyaboard с учётом учётных данных БД:
nano /usr/share/nginx/html/board/server/php/config.inc.php
Найдите и измените значения:
define('R_DB_HOST', 'localhost');
define('R_DB_USER', 'rb_user');
define('R_DB_PASSWORD', 'StrongPassword');
define('R_DB_NAME', 'rb_data');
define('R_DB_PORT', 5432);
Важно: не оставляйте пароль в общедоступных бэкапах.
Шаг 5 — Конфигурация блока сервера Nginx
В архиве есть конфиг для Restyaboard; скопируйте его в /etc/nginx/conf.d:
cp /usr/share/nginx/html/board/restyaboard.conf /etc/nginx/conf.d
nano /etc/nginx/conf.d/restyaboard.conf
В начале замените default_server и server_name:
server {
listen 80;
server_name board.yourdomain.com;
Укажите корректный документ-рут для релиза:
root /usr/share/nginx/html/board;
location / {
root /usr/share/nginx/html/board/client;
}
root /usr/share/nginx/html/board/client;
Проверьте fastcgi_pass: у вас должен быть тот же путь, что указали в php-fpm:
fastcgi_pass unix:/run/php-fpm/php7.0-fpm.sock;
Сохраните и закройте файл.
Назначьте владельца и права:
chown -R nginx:nginx /usr/share/nginx/html/board/
chmod -R go+w "/usr/share/nginx/html/board/media"
chmod -R go+w "/usr/share/nginx/html/board/client/img"
chmod -R go+w "/usr/share/nginx/html/board/tmp/cache"
chmod -R 0755 /usr/share/nginx/html/board/server/php/shell/*.sh
Добавьте cron-задачи для фоновых задач Restyaboard:
echo "*/5 * * * * /usr/share/nginx/html/board/server/php/shell/instant_email_notification.sh" >> /var/spool/cron/root
echo "0 * * * * /usr/share/nginx/html/board/server/php/shell/periodic_email_notification.sh" >> /var/spool/cron/root
echo "*/30 * * * * /usr/share/nginx/html/board/server/php/shell/imap.sh" >> /var/spool/cron/root
echo "*/5 * * * * /usr/share/nginx/html/board/server/php/shell/webhook.sh" >> /var/spool/cron/root
echo "*/5 * * * * /usr/share/nginx/html/board/server/php/shell/card_due_notification.sh" >> /var/spool/cron/root
Important: cron-файлы редактировать аккуратно; убедитесь, что в результате не продублируются строки при повторных запусках скрипта установки.
SELinux и доступность
Инструкция предлагает отключить SELinux, так как проксирование может конфликтовать с политиками. Для временного отключения:
setenforce 0
Чтобы полностью отключить, отредактируйте /etc/selinux/config:
nano /etc/selinux/config
Измените:
SELINUX=disabled
Security note: отключение SELinux снижает защиту. Альтернатива — настроить правильные контексты SELinux для Nginx и PHP-FPM. Для production-среды рекомендуется либо корректная настройка контекстов, либо документированное и обоснованное отключение с ведением риска.
После всех изменений перезапустите Nginx:
systemctl restart nginx
Зайдите по адресу:
http://board.yourdomain.com
Вы увидите экран логина.
Логин по умолчанию: admin / restya. После входа — поменяйте пароль администратора и настройте почту для уведомлений.
Создание новой доски: кликните стрелку в левом углу и затем Add Board или Organization.
Введите имя и выберите шаблон.
Готовая доска будет выглядеть так:
Админ-панель доступна внизу справа -> Admin -> Settings.
Рекомендации по безопасности и эксплуатации
- Измените дефолтные пароли и создайте отдельные учётные записи с минимальными правами.
- Включите HTTPS (Let’s Encrypt + certbot) и перенаправление 80 -> 443.
- Настройте регулярное резервное копирование базы данных и медиа-файлов.
- Ограничьте доступ к административным URL по IP, если это возможно.
- Логи: /var/log/nginx, /var/log/php-fpm/*. Анализируйте и храните ротацию логов (logrotate).
Пример включения HTTPS с certbot (nginx plugin):
yum -y install certbot python2-certbot-nginx
certbot --nginx -d board.yourdomain.com
Резервное копирование и восстановление
Минимально требуется бэкап SQL-дампа и каталога media.
Резервное копирование БД:
pg_dump -U rb_user -F c rb_data > /root/backups/rb_data_$(date +%F).dump
Резервное копирование файлов:
tar -czf /root/backups/restyaboard_media_$(date +%F).tgz /usr/share/nginx/html/board/media
Критерии приёмки: после восстановления база и медиа должны соответствовать тестовой доске; пользователи должны входить и загружать карточки.
Тесты и приёмка
- Откройте главную страницу и убедитесь, что логин доступен.
- Залогиньтесь под админом, смените пароль, создайте доску, колонку и карточку.
- Проверьте отправку писем (при необходимости настройте SMTP) и выполнение cron-скриптов (проверьте логи).
- Проверьте загрузку и отображение изображений на карточках.
Тестовые команды:
curl -I https://board.yourdomain.com
psql -U rb_user -d rb_data -c "SELECT count(*) FROM boards;"
ls -l /usr/share/nginx/html/board/media
Troubleshooting — типичные ошибки и решения
- 502 Bad Gateway: проверьте статус php-fpm и путь сокета, права на сокет, nginx-конфигурацию fastcgi_pass.
- 500 Internal Server Error: смотрите логи nginx и php-fpm, включите display_errors в dev среде.
- Проблемы с почтой: проверьте настройки SMTP в админке или в config.inc.php, последовательно тестируйте через telnet/openssl s_client.
- Проблемы с правами на файлы: убедитесь, что nginx владеет каталогами и что нужные папки имеют запись.
Альтернативные подходы
- Docker: развернуть Restyaboard в контейнерах (nginx + php-fpm + postgres) для изоляции и быстрой миграции.
- Apache + mod_php: если требование инфраструктуры — использовать Apache.
- Использовать более новые версии PostgreSQL/PHP: перед переходом — проверьте совместимость Restyaboard.
Ментальная модель деплоя
- Сеть и домен
- Веб-сервер и PHP
- СУБД и данные
- Приложение и права
- Фоновые задачи и мониторинг
- Резервирование и безопасность
Эта последовательность помогает минимизировать простоев и упростить откат.
План обновления (high-level)
- Сделать полный бэкап БД и медиа
- Тестировать обновление на копии инстанса
- Откатный план (вернуться к бэкапу)
- Применить обновление на проде вне пиковых часов
- Проверить функциональность и логи
Роли и чеклист
- Системный администратор:
- Установить и проверить Nginx, PHP-FPM, PostgreSQL
- Настроить брандмауэр и HTTPS
- Настроить бэкап и мониторинг
- Разработчик / интегратор:
- Проверить API-интеграции, webhook-ы
- Протестировать импорт/экспорт данных
- Администратор приложения (продукт):
- Создать организации и шаблоны досок
- Настроить почтовые уведомления и права пользователей
SOP: быстрый чеклист развёртывания
- Обновить систему: yum -y update
- Установить nginx, epel
- Установить PHP-FPM и расширения
- Настроить php.ini и сокет
- Установить PostgreSQL, создать пользователя и БД
- Скачать и распаковать Restyaboard
- Импортировать SQL, настроить config.inc.php
- Настроить nginx-конфигурацию, права файлов
- Добавить cron, настроить SELinux или контексты
- Настроить HTTPS и бэкап
Часто задаваемые вопросы
Как сменить пароль администратора?
Перейдите в Admin → Users, выберите admin и измените пароль. Если недоступно, смените в базе напрямую.
Можно ли использовать MySQL вместо PostgreSQL?
Restyaboard использует PostgreSQL в текущей инструкции; замена на MySQL потребует иной сборки/конфигурации и проверки совместимости.
Нужно ли отключать SELinux?
Не обязательно. Корректная настройка контекстов SELinux предпочтительнее отключения. Отключение — быстрый, но менее безопасный путь.
FAQ (в формате для JSON-LD внизу)
Итог и рекомендации
Restyaboard можно поставить на CentOS 7 по шагам: Nginx → PHP-FPM → PostgreSQL → развертывание приложения → настройка прав и cron. Для production-среды дополнительно настройте HTTPS, бэкапы, мониторинг и продумайте политику безопасности (SELinux/контейнеризация).
Ключевые действия на ближайшие 24 часа:
- сменить дефолтный пароль admin
- настроить HTTPS
- настроить ежедневные бэкапы
Спасибо — после развёртывания проверьте логи и выполните минимальные тесты из раздела «Тесты и приёмка».