6. Настройка

Раздел содержит прикладные настройки сопровождения SaaS-инфраструктуры: мониторинг служб, просмотр журналов, обновления, безопасность и регламент обслуживания.

6.1. Состав настройки

Направление Что настраивается Результат
Службы автозапуск SSH, Nginx, PHP-FPM, Apache, Redis сервисы запускаются после перезагрузки
Журналы логи Nginx, Apache, Redis, backup администратор видит ошибки и события
Firewall разрешены только нужные порты внешний доступ ограничен
Обновления регламент обновления пакетов обновления выполняются контролируемо
Backup cron-задача и проверка архивов резервные копии создаются по расписанию
Документация фиксация параметров сервера состояние инфраструктуры описано

6.2. Автозапуск служб

Включить автозапуск основных служб:

sudo systemctl enable ssh
sudo systemctl enable nginx
sudo systemctl enable php*-fpm
sudo systemctl enable apache2
sudo systemctl enable redis-server

Проверить состояние служб:

sudo systemctl status ssh
sudo systemctl status nginx
sudo systemctl status php*-fpm
sudo systemctl status apache2
sudo systemctl status redis-server

Ожидаемый результат:

active (running)

6.3. Настройка firewall

Разрешить только необходимые внешние порты:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Проверить правила:

sudo ufw status verbose
Порт Назначение Доступ
22/tcp SSH внешний доступ администратора
80/tcp HTTP редирект на HTTPS
443/tcp HTTPS основной web-доступ
8080/tcp Apache backend не открывать во внешнюю сеть
6379/tcp Redis не открывать во внешнюю сеть

6.4. Настройка Nginx

Проверить конфигурацию сайта:

sudo nano /etc/nginx/sites-available/saas-app

Минимальная рабочая конфигурация HTTPS + PHP-FPM:

server {
    listen 80;
    server_name saas-node-01.local 192.168.1.50;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name saas-node-01.local 192.168.1.50;

    root /var/www/saas-app/public;
    index index.php index.html;

    ssl_certificate /etc/nginx/ssl/saas-app.crt;
    ssl_certificate_key /etc/nginx/ssl/saas-app.key;

    access_log /var/log/nginx/saas-app.access.log;
    error_log /var/log/nginx/saas-app.error.log;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Проверить и применить:

sudo nginx -t
sudo systemctl reload nginx

Если используется PHP 8.3 или другая версия, заменить /run/php/php8.2-fpm.sock на фактический socket из каталога /run/php/ .

6.5. Настройка PHP-FPM

Определить установленную версию PHP-FPM:

ls /run/php/
systemctl status php*-fpm
php -v

Проверить основные параметры PHP:

php -i | grep "memory_limit"
php -i | grep "upload_max_filesize"
php -i | grep "post_max_size"
php -i | grep "max_execution_time"

При необходимости открыть файл настройки PHP-FPM:

sudo nano /etc/php/8.2/fpm/php.ini

Рекомендуемые значения для учебного стенда:

memory_limit = 256M
upload_max_filesize = 32M
post_max_size = 32M
max_execution_time = 60

Применить изменения:

sudo systemctl restart php*-fpm
sudo systemctl status php*-fpm

6.6. Настройка Apache

Проверить, что Apache используется как внутренний backend:

sudo nano /etc/apache2/ports.conf

Ожидаемая строка:

Listen 127.0.0.1:8080

Проверить виртуальный хост:

sudo nano /etc/apache2/sites-available/saas-app.conf

Проверить конфигурацию и перезапустить службу:

sudo apache2ctl configtest
sudo systemctl restart apache2
sudo systemctl status apache2

Ожидаемый результат:

Syntax OK
active (running)

6.7. Настройка Redis

Открыть конфигурацию Redis:

sudo nano /etc/redis/redis.conf

Проверить параметры:

bind 127.0.0.1 ::1
protected-mode yes

Перезапустить Redis:

sudo systemctl restart redis-server
sudo systemctl status redis-server
redis-cli ping

Ожидаемый результат:

PONG

Проверить порт Redis:

sudo ss -tulpn | grep 6379

Ожидаемый адрес:

127.0.0.1:6379

6.8. Настройка журналов

Проверить журналы Nginx:

sudo tail -n 50 /var/log/nginx/saas-app.access.log
sudo tail -n 50 /var/log/nginx/saas-app.error.log

Проверить журналы Apache:

sudo tail -n 50 /var/log/apache2/saas-app.access.log
sudo tail -n 50 /var/log/apache2/saas-app.error.log

Проверить журналы Redis и PHP-FPM:

sudo journalctl -u redis-server -n 50
sudo journalctl -u php*-fpm -n 50

Проверить журнал backup:

tail -n 50 /opt/saas/logs/backup.log
tail -n 50 /opt/saas/logs/backup-cron.log

6.9. Настройка ротации журналов

Создать файл logrotate для журналов проекта:

sudo nano /etc/logrotate.d/saas-app

Содержимое файла:

/var/log/nginx/saas-app.*.log
/var/log/apache2/saas-app.*.log
/opt/saas/logs/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

Проверить конфигурацию logrotate:

sudo logrotate -d /etc/logrotate.d/saas-app

6.10. Настройка резервного копирования

Проверить наличие backup-скрипта:

ls -l /opt/saas/scripts/backup-saas.sh

Проверить ручной запуск:

bash /opt/saas/scripts/backup-saas.sh
ls -lh /opt/saas/backups

Проверить cron-задачу:

sudo crontab -l

Ожидаемая строка:

30 2 * * * /opt/saas/scripts/backup-saas.sh >> /opt/saas/logs/backup-cron.log 2>&1

6.11. Регламент обновлений

Перед обновлением выполнить backup:

bash /opt/saas/scripts/backup-saas.sh

Проверить список доступных обновлений:

sudo apt update
apt list --upgradable

Установить обновления:

sudo apt upgrade -y

После обновления проверить службы:

sudo systemctl status nginx
sudo systemctl status php*-fpm
sudo systemctl status apache2
sudo systemctl status redis-server

Проверить приложение:

curl -k -I https://localhost
curl -k https://localhost

6.12. Регламент изменения конфигурации

Перед изменением конфигурационных файлов создавать копию:

sudo cp /etc/nginx/sites-available/saas-app /etc/nginx/sites-available/saas-app.bak 

sudo cp /etc/apache2/sites-available/saas-app.conf /etc/apache2/sites-available/saas-app.conf.bak

sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.bak

После изменения проверять конфигурацию:

sudo nginx -t
sudo apache2ctl configtest
redis-cli ping

Если проверка успешна, применить изменения:

sudo systemctl reload nginx
sudo systemctl restart apache2
sudo systemctl restart redis-server

6.13. Документирование параметров сервера

Создать файл с параметрами стенда:

nano /opt/saas/data/server-info.txt

Заполнить:

Hostname:
IP-address:
OS:
Nginx version:
PHP version:
PHP-FPM socket:
Apache port:
Redis address:
Backup script:
Backup schedule:
Responsible person:
Last update date:

Команды для заполнения:

hostname
hostname -I
cat /etc/os-release
nginx -v
php -v
ls /run/php/
sudo ss -tulpn | grep -E '8080|6379'
sudo crontab -l

6.14. Итоговая таблица настройки

Параметр Команда проверки Ожидаемый результат Статус
SSH systemctl status ssh active (running) выполнено / не выполнено
Nginx nginx -t test is successful выполнено / не выполнено
PHP-FPM systemctl status php*-fpm active (running) выполнено / не выполнено
Apache apache2ctl configtest Syntax OK выполнено / не выполнено
Redis redis-cli ping PONG выполнено / не выполнено
Firewall ufw status verbose открыты только 22, 80, 443 выполнено / не выполнено
Backup backup-saas.sh архив создан выполнено / не выполнено
Cron crontab -l есть задача backup выполнено / не выполнено
Журналы tail, journalctl нет критических ошибок выполнено / не выполнено

6.15. Итог

Настройка считается выполненной, если:

  • службы включены в автозапуск;
  • firewall разрешает только необходимые внешние порты;
  • Nginx корректно обрабатывает HTTPS и PHP;
  • PHP-FPM работает;
  • Apache работает на локальном backend-порту;
  • Redis доступен только локально;
  • backup запускается вручную и по cron;
  • журналы доступны для диагностики;
  • параметры сервера зафиксированы в документации.