πŸš€ Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ систСмы

Назад ΠΊ списку Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ
Slug:
deployment.html
ОбновлСно:
30.05.2026 15:03
Π Π°Π·ΠΌΠ΅Ρ€:
22.66 KB
ΠŸΡƒΡ‚ΡŒ:
/resources/docs/developer/deployment.html
Бсылки
ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Π°Ρ ссылка:
Бсылка Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅:
πŸš€ Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ систСмы

ℹ️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π­Ρ‚ΠΎ руководство ΠΏΠΎ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΡŽ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ инструкции Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ "Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°".

ВрСбования ΠΊ сСрвСру

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ трСбования

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ РСкомСндуСтся ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ
CPU 2 ядра 4+ ядСр Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΈ API
RAM 2GB 8GB+ MySQL + Redis + PHP-FPM
Диск 20GB 100GB SSD Для Π»ΠΎΠ³ΠΎΠ² ΠΈ бэкапов
OS Ubuntu 20.04 Ubuntu 22.04 LTS Долгосрочная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°
ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ 100 Mbps 1 Gbps Для API ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ трСбования

  • PHP: 8.1+ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ:
    • bcmath, ctype, fileinfo, json, mbstring, openssl, pdo, tokenizer, xml, zip
    • gd ΠΈΠ»ΠΈ imagick для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ
    • redis для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ
  • MySQL: 8.0+ ΠΈΠ»ΠΈ MariaDB 10.4+
  • Redis: 6.0+
  • Nginx: 1.18+ ΠΈΠ»ΠΈ Apache 2.4+
  • Node.js: 16+ (для компиляции ассСтов)
  • Supervisor: Для управлСния процСссами
  • Certbot: Для SSL сСртификатов

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° сСрвСра

1. Настройка Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ сСрвСра

# ОбновлСниС систСмы
sudo apt update && sudo apt upgrade -y

# Установка Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
sudo apt install -y curl wget git unzip build-essential software-properties-common

# Настройка часового пояса
sudo timedatectl set-timezone Europe/Moscow

# Настройка Π»ΠΎΠΊΠ°Π»ΠΈ
sudo locale-gen ru_RU.UTF-8
sudo update-locale LANG=ru_RU.UTF-8

2. Установка PHP 8.1+

# Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ рСпозитория
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

# Установка PHP ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ
sudo apt install -y php8.1 php8.1-fpm php8.1-mysql php8.1-redis \
php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip \
php8.1-bcmath php8.1-common php8.1-intl php8.1-soap

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° вСрсии
php --version

3. Установка MySQL 8.0

# Установка MySQL
sudo apt install -y mysql-server mysql-client

# БСзопасная настройка
sudo mysql_secure_installation

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
sudo mysql -u root -p
CREATE DATABASE dexa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'dexa_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON dexa.* TO 'dexa_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

4. Установка Redis

# Установка Redis
sudo apt install -y redis-server

# Настройка Redis
sudo nano /etc/redis/redis.conf
# Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ:
# maxmemory 256mb
# maxmemory-policy allkeys-lru
# requirepass ваш_ΠΏΠ°Ρ€ΠΎΠ»ΡŒ_redis

# ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ
sudo systemctl restart redis
sudo systemctl enable redis

5. Установка Nginx

# Установка Nginx
sudo apt install -y nginx

# Настройка firewall
sudo ufw allow 'Nginx Full'
sudo ufw allow 'OpenSSH'
sudo ufw --force enable

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π²Π΅Π±-сСрвСра

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ PHP-FPM

# Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ PHP-FPM
sudo nano /etc/php/8.1/fpm/php.ini

# ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ настройки:
memory_limit = 256M
upload_max_filesize = 10M
post_max_size = 12M
max_execution_time = 300
max_input_time = 300

# Настройки для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°
expose_php = Off
display_errors = Off
log_errors = On
error_log = /var/log/php/error.log

# Настройки сСссий
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=ваш_ΠΏΠ°Ρ€ΠΎΠ»ΡŒ_redis"

# ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ PHP-FPM
sudo systemctl restart php8.1-fpm

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Nginx

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сайта
sudo nano /etc/nginx/sites-available/dexa

# ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ:
server {
    listen 80;
    server_name ваш-домСн.com www.ваш-домСн.com;
    root /var/www/dexa/public;

    index index.php index.html index.htm;

    # Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";

    # ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ настройки
    client_max_body_size 10M;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 256 16k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

    # БтатичСскиС Ρ„Π°ΠΉΠ»Ρ‹
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        log_not_found off;
    }

    # Π—Π°ΠΏΡ€Π΅Ρ‚ доступа ΠΊζ•ζ„Ÿ Ρ„Π°ΠΉΠ»Π°ΠΌ
    location ~ /\.env$ {
        deny all;
        return 403;
    }

    location ~ /storage/.*\.php$ {
        deny all;
        return 403;
    }
}

# Активация сайта
sudo ln -s /etc/nginx/sites-available/dexa /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

Настройка SSL (ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)

# Установка Certbot
sudo apt install -y certbot python3-certbot-nginx

# ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сСртификата
sudo certbot --nginx -d ваш-домСн.com -d www.ваш-домСн.com

# АвтоматичСскоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
sudo certbot renew --dry-run

Π”Π΅ΠΏΠ»ΠΎΠΉ прилоТСния

1. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для прилоТСния
sudo adduser --disabled-password --gecos "" dexa
sudo usermod -aG www-data dexa

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
sudo mkdir -p /var/www/dexa
sudo chown -R dexa:www-data /var/www/dexa
sudo chmod -R 775 /var/www/dexa/storage
sudo chmod -R 775 /var/www/dexa/bootstrap/cache

2. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ настройка

# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ прилоТСния
sudo su - dexa

# ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСпозитория
git clone [repository-url] /var/www/dexa
cd /var/www/dexa

# Установка зависимостСй
composer install --optimize-autoloader --no-dev
npm install
npm run production

# ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
cp .env.example .env
nano .env  # Настройка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

3. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ .env для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°

APP_NAME="DEXA Exchange"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://ваш-домСн.com
APP_TIMEZONE=Europe/Moscow

# Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dexa
DB_USERNAME=dexa_user
DB_PASSWORD=strong_password

# Redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=ваш_ΠΏΠ°Ρ€ΠΎΠ»ΡŒ_redis
REDIS_PORT=6379

# БСссии и кэш
SESSION_DRIVER=redis
CACHE_DRIVER=redis
QUEUE_CONNECTION=redis

# Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ
SESSION_SECURE_COOKIE=true
SESSION_HTTP_ONLY=true
SESSION_SAME_SITE=lax

# ΠŸΠΎΡ‡Ρ‚Π° (настройтС ΠΏΠΎΠ΄ вашСго ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°)
MAIL_MAILER=smtp
MAIL_HOST=smtp.mail.ru
MAIL_PORT=465
MAIL_USERNAME=ваш_email@mail.ru
MAIL_PASSWORD=ΠΏΠ°Ρ€ΠΎΠ»ΡŒ_ΠΏΠΎΡ‡Ρ‚Ρ‹
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=ваш_email@mail.ru
MAIL_FROM_NAME="DEXA Exchange"

# Telegram Π±ΠΎΡ‚ (Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ)
TELEGRAM_BOT_TOKEN=
TELEGRAM_CHAT_ID=

4. Настройка прилоТСния

# ГСнСрация ΠΊΠ»ΡŽΡ‡Π°
php artisan key:generate

# ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
php artisan migrate --force

# Запуск сидов (Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅)
php artisan db:seed --force

# ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Π‘ΠΈΠΌΠ»ΠΈΠ½ΠΊ storage
php artisan storage:link

# Установка ΠΏΡ€Π°Π²
sudo chown -R www-data:www-data /var/www/dexa/storage
sudo chown -R www-data:www-data /var/www/dexa/bootstrap/cache

Настройка Supervisor

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ для ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ

# Установка Supervisor
sudo apt install -y supervisor

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
sudo nano /etc/supervisor/conf.d/dexa-worker.conf

# ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ:
[program:dexa-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/dexa/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=dexa
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/dexa/storage/logs/worker.log
stopwaitsecs=3600

# Для Horizon (Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ)
[program:dexa-horizon]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/dexa/artisan horizon
autostart=true
autorestart=true
user=dexa
redirect_stderr=true
stdout_logfile=/var/www/dexa/storage/logs/horizon.log

# ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Supervisor
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start all

Настройка Cron Π·Π°Π΄Π°Ρ‡

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ

# Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ crontab
sudo crontab -u www-data -e

# Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ:
# ОбновлСниС курсов ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 10 ΠΌΠΈΠ½ΡƒΡ‚
*/10 * * * * cd /var/www/dexa && php artisan schedule:run >> /dev/null 2>&1

# ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° старых сСссий Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ
0 0 * * * cd /var/www/dexa && php artisan session:gc >> /dev/null 2>&1

# Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π‘Π” Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ Π² 2:00
0 2 * * * /usr/bin/mysqldump -u dexa_user -pstrong_password dexa | gzip > /backups/dexa_$(date +\%Y\%m\%d).sql.gz

# ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° старых бэкапов (Ρ…Ρ€Π°Π½ΠΈΠΌ 30 Π΄Π½Π΅ΠΉ)
0 3 * * * find /backups -name "*.sql.gz" -mtime +30 -delete

# ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π»ΠΎΠ³ΠΎΠ² (Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½Ρ‹ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚)
0 8 * * * cd /var/www/dexa && php artisan log:report >> /var/log/dexa-report.log

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ систСмы ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ час
0 * * * * cd /var/www/dexa && php artisan system:health-check >> /dev/null 2>&1

Schedule ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Laravel

// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    // ОбновлСниС курсов
    $schedule->command('rates:update')
        ->everyTenMinutes()
        ->withoutOverlapping()
        ->onOneServer();

    // ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° старых заявок
    $schedule->command('orders:cleanup')
        ->daily()
        ->at('03:00');

    // ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ²
    $schedule->command('reports:daily')
        ->daily()
        ->at('08:00');

    // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ API
    $schedule->command('api:health-check')
        ->hourly();
}

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Настройка Π»ΠΎΠ³ΠΎΠ²

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ для Π»ΠΎΠ³ΠΎΠ²
sudo mkdir -p /var/log/dexa
sudo chown -R www-data:www-data /var/log/dexa

# Настройка Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΎΠ²
sudo nano /etc/logrotate.d/dexa

# ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ:
/var/www/dexa/storage/logs/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 644 www-data www-data
    sharedscripts
    postrotate
        kill -USR1 `cat /var/run/php/php8.1-fpm.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°

  • Laravel Telescope: Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ (Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅)
  • Laravel Horizon: Для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ
  • Prometheus + Grafana: Для ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
  • Sentry: Для отслСТивания ошибок
  • New Relic: Для APM (Application Performance Monitoring)

Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΠΎΠ»Π½Ρ‹ΠΉ скрипт бэкапа

#!/bin/bash
# /usr/local/bin/dexa-backup.sh

BACKUP_DIR="/backups"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="dexa"
DB_USER="dexa_user"
DB_PASS="strong_password"

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
mkdir -p $BACKUP_DIR

# Бэкап Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz

# Бэкап Ρ„Π°ΠΉΠ»ΠΎΠ² прилоТСния (Π±Π΅Π· vendor ΠΈ node_modules)
tar -czf $BACKUP_DIR/dexa_files_${DATE}.tar.gz \
    --exclude="vendor" \
    --exclude="node_modules" \
    --exclude=".git" \
    /var/www/dexa

# Бэкап Π»ΠΎΠ³ΠΎΠ²
tar -czf $BACKUP_DIR/dexa_logs_${DATE}.tar.gz /var/log/dexa

# Бэкап ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ
tar -czf $BACKUP_DIR/dexa_configs_${DATE}.tar.gz \
    /etc/nginx/sites-available/dexa \
    /etc/supervisor/conf.d/dexa-worker.conf

# ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° старых бэкапов (Ρ…Ρ€Π°Π½ΠΈΠΌ 30 Π΄Π½Π΅ΠΉ)
find $BACKUP_DIR -name "*.gz" -mtime +30 -delete

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° увСдомлСния
echo "Backup completed: $DATE" >> /var/log/dexa-backup.log

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° обновлСния

ΠŸΠ΅Ρ€Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ

  1. Π£Π²Π΅Π΄ΠΎΠΌΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎ тСхничСских Ρ€Π°Π±ΠΎΡ‚Π°Ρ…
  2. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ бэкап систСмы
  3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ обновлСния Π² тСстовом ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ
  4. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π½ ΠΎΡ‚ΠΊΠ°Ρ‚Π°

ΠŸΡ€ΠΎΡ†Π΅ΡΡ обновлСния

# ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² Ρ€Π΅ΠΆΠΈΠΌ обслуТивания
php artisan down --message="ОбновлСниС систСмы. ВСрнСмся Ρ‡Π΅Ρ€Π΅Π· 30 ΠΌΠΈΠ½ΡƒΡ‚."

# ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ
sudo supervisorctl stop all

# ОбновлСниС кода
git pull origin main

# ОбновлСниС зависимостСй
composer install --optimize-autoloader --no-dev
npm install
npm run production

# ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
php artisan migrate --force

# ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° кэшСй
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan cache:clear

# ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ Supervisor
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start all

# Запуск ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° обслуТивания
php artisan up

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° работоспособности
php artisan system:health-check

ΠžΡ‚ΠΊΠ°Ρ‚ обновлСния

# Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° обслуТивания
php artisan down

# ΠžΡ‚ΠΊΠ°Ρ‚ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ (Ссли Π½ΡƒΠΆΠ½ΠΎ)
php artisan migrate:rollback --step=1

# ВосстановлСниС ΠΈΠ· бэкапа
gunzip < /backups/dexa_20240115.sql.gz | mysql -u dexa_user -p dexa

# ВосстановлСниС Ρ„Π°ΠΉΠ»ΠΎΠ²
tar -xzf /backups/dexa_files_20240115.tar.gz -C /

# ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ сСрвисов
sudo systemctl restart php8.1-fpm nginx
sudo supervisorctl restart all

# ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° обслуТивания
php artisan up

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

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

# /etc/php/8.1/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

# OPCache настройки
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.fast_shutdown=1

Настройка MySQL

# /etc/mysql/my.cnf
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
query_cache_type = 1
query_cache_size = 128M
max_connections = 200
thread_cache_size = 8
table_open_cache = 2000

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅

🚨 ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΠΎ: Π­Ρ‚ΠΈ настройки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ запуском!

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ€Ρ‹

  1. ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ„Π°ΠΉΡ€Π²ΠΎΠ» (UFW ΠΈΠ»ΠΈ iptables)
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Fail2ban для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ брутфорса
  3. ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ активности
  4. РСгулярно ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹
  5. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слоТныС ΠΏΠ°Ρ€ΠΎΠ»ΠΈ для всСх сСрвисов
  6. ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ root доступ ΠΏΠΎ SSH
  7. ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π²ΡƒΡ…Ρ„Π°ΠΊΡ‚ΠΎΡ€Π½ΡƒΡŽ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ для SSH

Fail2ban конфигурация

# Установка
sudo apt install -y fail2ban

# ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ для Laravel
sudo nano /etc/fail2ban/jail.local

[laravel]
enabled = true
port = http,https
filter = laravel
logpath = /var/www/dexa/storage/logs/laravel.log
maxretry = 5
bantime = 3600

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

ЧастыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° РСшСниС
502 Bad Gateway PHP-FPM Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ sudo systemctl restart php8.1-fpm
Ошибки ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ НСт ΠΏΡ€Π°Π² Π½Π° Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ MySQL
МСдлСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° НСт OPCache ΠΈΠ»ΠΈ Redis ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
Ошибки ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ Supervisor Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ статус Supervisor
НСт ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ SMTP настройки ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ .env ΠΈ Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π»ΠΎΠ³ΠΎΠ²
sudo tail -f /var/www/dexa/storage/logs/laravel.log
sudo journalctl -u nginx -f
sudo journalctl -u php8.1-fpm -f

# ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ рСсурсов
htop
iftop
iotop

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° дискового пространства
df -h
du -sh /var/www/dexa/*

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сСтСвых соСдинСний
netstat -tulpn
ss -tulpn

ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ

  • ВСхничСская ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°: odeveloper@internet.ru
  • ЭкстрСнныС случаи: Волько Ρ‡Π΅Ρ€Π΅Π· Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹
  • ДокумСнтация: /admin/documentation/developer
  • ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³: ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π°Π»Π΅Ρ€Ρ‚Ρ‹ Π² Telegram/Email

ℹ️ Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: РСгулярно провСряйтС систСму, обновляйтС зависимости ΠΈ слСдитС Π·Π° Π»ΠΎΠ³Π°ΠΌΠΈ. Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ - ваша Π»ΡƒΡ‡ΡˆΠ°Ρ страховка.

ПослСднСС обновлСниС: 30.05.2026 в 15:03
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;πŸš€ Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ систСмы&lt;/title&gt;
    &lt;style&gt;
        body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; padding: 20px; max-width: 1200px; margin: 0 auto; }
        h1 { color: #2c3e50; border-bottom: 2px solid #eee; padding-bottom: 10px; margin-bottom: 20px; }
        h2 { color: #34495e; border-bottom: 1px solid #eee; padding-bottom: 5px; margin-top: 30px; }
        h3 { color: #7f8c8d; margin-top: 25px; }
        p { margin-bottom: 15px; }
        ul, ol { margin-bottom: 15px; padding-left: 20px; }
        li { margin-bottom: 5px; }
        code { background-color: #f8f9fa; padding: 2px 6px; border-radius: 4px; font-family: monospace; }
        pre { background-color: #f8f9fa; padding: 15px; border-radius: 8px; overflow-x: auto; border: 1px solid #dee2e6; }
        .warning { background-color: #fff3cd; border: 1px solid #ffeaa7; padding: 15px; border-radius: 5px; margin: 15px 0; }
        .danger { background-color: #f8d7da; border: 1px solid #f5c6cb; padding: 15px; border-radius: 5px; margin: 15px 0; }
        .info { background-color: #d1ecf1; border: 1px solid #bee5eb; padding: 15px; border-radius: 5px; margin: 15px 0; }
        table { border-collapse: collapse; width: 100%; margin-bottom: 20px; }
        th, td { padding: 12px; border: 1px solid #dee2e6; }
        th { background-color: #f8f9fa; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;πŸš€ Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ систСмы&lt;/h1&gt;

&lt;div class=&quot;info&quot;&gt;
    &lt;p&gt;&lt;strong&gt;ℹ️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:&lt;/strong&gt; Π­Ρ‚ΠΎ руководство ΠΏΠΎ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΡŽ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ инструкции Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ &quot;Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°&quot;.&lt;/p&gt;
&lt;/div&gt;

&lt;h2&gt;ВрСбования ΠΊ сСрвСру&lt;/h2&gt;

&lt;h3&gt;ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ трСбования&lt;/h3&gt;
&lt;table&gt;
    &lt;thead&gt;
    &lt;tr&gt;
        &lt;th&gt;ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚&lt;/th&gt;
        &lt;th&gt;ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ&lt;/th&gt;
        &lt;th&gt;РСкомСндуСтся&lt;/th&gt;
        &lt;th&gt;ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ&lt;/th&gt;
    &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
    &lt;tr&gt;
        &lt;td&gt;CPU&lt;/td&gt;
        &lt;td&gt;2 ядра&lt;/td&gt;
        &lt;td&gt;4+ ядСр&lt;/td&gt;
        &lt;td&gt;Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΈ API&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;RAM&lt;/td&gt;
        &lt;td&gt;2GB&lt;/td&gt;
        &lt;td&gt;8GB+&lt;/td&gt;
        &lt;td&gt;MySQL + Redis + PHP-FPM&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Диск&lt;/td&gt;
        &lt;td&gt;20GB&lt;/td&gt;
        &lt;td&gt;100GB SSD&lt;/td&gt;
        &lt;td&gt;Для Π»ΠΎΠ³ΠΎΠ² ΠΈ бэкапов&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;OS&lt;/td&gt;
        &lt;td&gt;Ubuntu 20.04&lt;/td&gt;
        &lt;td&gt;Ubuntu 22.04 LTS&lt;/td&gt;
        &lt;td&gt;Долгосрочная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ&lt;/td&gt;
        &lt;td&gt;100 Mbps&lt;/td&gt;
        &lt;td&gt;1 Gbps&lt;/td&gt;
        &lt;td&gt;Для API ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ&lt;/td&gt;
    &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ трСбования&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;PHP:&lt;/strong&gt; 8.1+ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ:
        &lt;ul&gt;
            &lt;li&gt;bcmath, ctype, fileinfo, json, mbstring, openssl, pdo, tokenizer, xml, zip&lt;/li&gt;
            &lt;li&gt;gd ΠΈΠ»ΠΈ imagick для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ&lt;/li&gt;
            &lt;li&gt;redis для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;MySQL:&lt;/strong&gt; 8.0+ ΠΈΠ»ΠΈ MariaDB 10.4+&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Redis:&lt;/strong&gt; 6.0+&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Nginx:&lt;/strong&gt; 1.18+ ΠΈΠ»ΠΈ Apache 2.4+&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Node.js:&lt;/strong&gt; 16+ (для компиляции ассСтов)&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Supervisor:&lt;/strong&gt; Для управлСния процСссами&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Certbot:&lt;/strong&gt; Для SSL сСртификатов&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° сСрвСра&lt;/h2&gt;

&lt;h3&gt;1. Настройка Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ сСрвСра&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# ОбновлСниС систСмы
sudo apt update &amp;&amp; sudo apt upgrade -y

# Установка Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
sudo apt install -y curl wget git unzip build-essential software-properties-common

# Настройка часового пояса
sudo timedatectl set-timezone Europe/Moscow

# Настройка Π»ΠΎΠΊΠ°Π»ΠΈ
sudo locale-gen ru_RU.UTF-8
sudo update-locale LANG=ru_RU.UTF-8&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;2. Установка PHP 8.1+&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ рСпозитория
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

# Установка PHP ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ
sudo apt install -y php8.1 php8.1-fpm php8.1-mysql php8.1-redis \
php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip \
php8.1-bcmath php8.1-common php8.1-intl php8.1-soap

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° вСрсии
php --version&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;3. Установка MySQL 8.0&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Установка MySQL
sudo apt install -y mysql-server mysql-client

# БСзопасная настройка
sudo mysql_secure_installation

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
sudo mysql -u root -p
CREATE DATABASE dexa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER &#039;dexa_user&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;strong_password&#039;;
GRANT ALL PRIVILEGES ON dexa.* TO &#039;dexa_user&#039;@&#039;localhost&#039;;
FLUSH PRIVILEGES;
EXIT;&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;4. Установка Redis&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Установка Redis
sudo apt install -y redis-server

# Настройка Redis
sudo nano /etc/redis/redis.conf
# Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ:
# maxmemory 256mb
# maxmemory-policy allkeys-lru
# requirepass ваш_ΠΏΠ°Ρ€ΠΎΠ»ΡŒ_redis

# ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ
sudo systemctl restart redis
sudo systemctl enable redis&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;5. Установка Nginx&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Установка Nginx
sudo apt install -y nginx

# Настройка firewall
sudo ufw allow &#039;Nginx Full&#039;
sudo ufw allow &#039;OpenSSH&#039;
sudo ufw --force enable&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π²Π΅Π±-сСрвСра&lt;/h2&gt;

&lt;h3&gt;ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ PHP-FPM&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ PHP-FPM
sudo nano /etc/php/8.1/fpm/php.ini

# ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ настройки:
memory_limit = 256M
upload_max_filesize = 10M
post_max_size = 12M
max_execution_time = 300
max_input_time = 300

# Настройки для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°
expose_php = Off
display_errors = Off
log_errors = On
error_log = /var/log/php/error.log

# Настройки сСссий
session.save_handler = redis
session.save_path = &quot;tcp://127.0.0.1:6379?auth=ваш_ΠΏΠ°Ρ€ΠΎΠ»ΡŒ_redis&quot;

# ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ PHP-FPM
sudo systemctl restart php8.1-fpm&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Nginx&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сайта
sudo nano /etc/nginx/sites-available/dexa

# ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ:
server {
    listen 80;
    server_name ваш-домСн.com www.ваш-домСн.com;
    root /var/www/dexa/public;

    index index.php index.html index.htm;

    # Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ
    add_header X-Frame-Options &quot;SAMEORIGIN&quot;;
    add_header X-Content-Type-Options &quot;nosniff&quot;;
    add_header X-XSS-Protection &quot;1; mode=block&quot;;

    # ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ настройки
    client_max_body_size 10M;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 256 16k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

    # БтатичСскиС Ρ„Π°ΠΉΠ»Ρ‹
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
        expires 1y;
        add_header Cache-Control &quot;public, immutable&quot;;
        log_not_found off;
    }

    # Π—Π°ΠΏΡ€Π΅Ρ‚ доступа ΠΊζ•ζ„Ÿ Ρ„Π°ΠΉΠ»Π°ΠΌ
    location ~ /\.env$ {
        deny all;
        return 403;
    }

    location ~ /storage/.*\.php$ {
        deny all;
        return 403;
    }
}

# Активация сайта
sudo ln -s /etc/nginx/sites-available/dexa /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Настройка SSL (ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Установка Certbot
sudo apt install -y certbot python3-certbot-nginx

# ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сСртификата
sudo certbot --nginx -d ваш-домСн.com -d www.ваш-домСн.com

# АвтоматичСскоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
sudo certbot renew --dry-run&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Π”Π΅ΠΏΠ»ΠΎΠΉ прилоТСния&lt;/h2&gt;

&lt;h3&gt;1. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для прилоТСния
sudo adduser --disabled-password --gecos &quot;&quot; dexa
sudo usermod -aG www-data dexa

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
sudo mkdir -p /var/www/dexa
sudo chown -R dexa:www-data /var/www/dexa
sudo chmod -R 775 /var/www/dexa/storage
sudo chmod -R 775 /var/www/dexa/bootstrap/cache&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;2. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ настройка&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ прилоТСния
sudo su - dexa

# ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСпозитория
git clone [repository-url] /var/www/dexa
cd /var/www/dexa

# Установка зависимостСй
composer install --optimize-autoloader --no-dev
npm install
npm run production

# ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
cp .env.example .env
nano .env  # Настройка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;3. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ .env для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;APP_NAME=&quot;DEXA Exchange&quot;
APP_ENV=production
APP_DEBUG=false
APP_URL=https://ваш-домСн.com
APP_TIMEZONE=Europe/Moscow

# Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dexa
DB_USERNAME=dexa_user
DB_PASSWORD=strong_password

# Redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=ваш_ΠΏΠ°Ρ€ΠΎΠ»ΡŒ_redis
REDIS_PORT=6379

# БСссии и кэш
SESSION_DRIVER=redis
CACHE_DRIVER=redis
QUEUE_CONNECTION=redis

# Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ
SESSION_SECURE_COOKIE=true
SESSION_HTTP_ONLY=true
SESSION_SAME_SITE=lax

# ΠŸΠΎΡ‡Ρ‚Π° (настройтС ΠΏΠΎΠ΄ вашСго ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°)
MAIL_MAILER=smtp
MAIL_HOST=smtp.mail.ru
MAIL_PORT=465
MAIL_USERNAME=ваш_email@mail.ru
MAIL_PASSWORD=ΠΏΠ°Ρ€ΠΎΠ»ΡŒ_ΠΏΠΎΡ‡Ρ‚Ρ‹
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=ваш_email@mail.ru
MAIL_FROM_NAME=&quot;DEXA Exchange&quot;

# Telegram Π±ΠΎΡ‚ (Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ)
TELEGRAM_BOT_TOKEN=
TELEGRAM_CHAT_ID=&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;4. Настройка прилоТСния&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# ГСнСрация ΠΊΠ»ΡŽΡ‡Π°
php artisan key:generate

# ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
php artisan migrate --force

# Запуск сидов (Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅)
php artisan db:seed --force

# ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Π‘ΠΈΠΌΠ»ΠΈΠ½ΠΊ storage
php artisan storage:link

# Установка ΠΏΡ€Π°Π²
sudo chown -R www-data:www-data /var/www/dexa/storage
sudo chown -R www-data:www-data /var/www/dexa/bootstrap/cache&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Настройка Supervisor&lt;/h2&gt;

&lt;h3&gt;ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ для ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Установка Supervisor
sudo apt install -y supervisor

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
sudo nano /etc/supervisor/conf.d/dexa-worker.conf

# ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ:
[program:dexa-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/dexa/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=dexa
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/dexa/storage/logs/worker.log
stopwaitsecs=3600

# Для Horizon (Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ)
[program:dexa-horizon]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/dexa/artisan horizon
autostart=true
autorestart=true
user=dexa
redirect_stderr=true
stdout_logfile=/var/www/dexa/storage/logs/horizon.log

# ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Supervisor
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start all&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Настройка Cron Π·Π°Π΄Π°Ρ‡&lt;/h2&gt;

&lt;h3&gt;ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ crontab
sudo crontab -u www-data -e

# Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ:
# ОбновлСниС курсов ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 10 ΠΌΠΈΠ½ΡƒΡ‚
*/10 * * * * cd /var/www/dexa &amp;&amp; php artisan schedule:run &gt;&gt; /dev/null 2&gt;&amp;1

# ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° старых сСссий Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ
0 0 * * * cd /var/www/dexa &amp;&amp; php artisan session:gc &gt;&gt; /dev/null 2&gt;&amp;1

# Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π‘Π” Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ Π² 2:00
0 2 * * * /usr/bin/mysqldump -u dexa_user -pstrong_password dexa | gzip &gt; /backups/dexa_$(date +\%Y\%m\%d).sql.gz

# ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° старых бэкапов (Ρ…Ρ€Π°Π½ΠΈΠΌ 30 Π΄Π½Π΅ΠΉ)
0 3 * * * find /backups -name &quot;*.sql.gz&quot; -mtime +30 -delete

# ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π»ΠΎΠ³ΠΎΠ² (Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½Ρ‹ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚)
0 8 * * * cd /var/www/dexa &amp;&amp; php artisan log:report &gt;&gt; /var/log/dexa-report.log

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ систСмы ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ час
0 * * * * cd /var/www/dexa &amp;&amp; php artisan system:health-check &gt;&gt; /dev/null 2&gt;&amp;1&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Schedule ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Laravel&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    // ОбновлСниС курсов
    $schedule-&gt;command(&#039;rates:update&#039;)
        -&gt;everyTenMinutes()
        -&gt;withoutOverlapping()
        -&gt;onOneServer();

    // ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° старых заявок
    $schedule-&gt;command(&#039;orders:cleanup&#039;)
        -&gt;daily()
        -&gt;at(&#039;03:00&#039;);

    // ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ²
    $schedule-&gt;command(&#039;reports:daily&#039;)
        -&gt;daily()
        -&gt;at(&#039;08:00&#039;);

    // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ API
    $schedule-&gt;command(&#039;api:health-check&#039;)
        -&gt;hourly();
}&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅&lt;/h2&gt;

&lt;h3&gt;Настройка Π»ΠΎΠ³ΠΎΠ²&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ для Π»ΠΎΠ³ΠΎΠ²
sudo mkdir -p /var/log/dexa
sudo chown -R www-data:www-data /var/log/dexa

# Настройка Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΎΠ²
sudo nano /etc/logrotate.d/dexa

# ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ:
/var/www/dexa/storage/logs/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 644 www-data www-data
    sharedscripts
    postrotate
        kill -USR1 `cat /var/run/php/php8.1-fpm.pid 2&gt;/dev/null` 2&gt;/dev/null || true
    endscript
}&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Laravel Telescope:&lt;/strong&gt; Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ (Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅)&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Laravel Horizon:&lt;/strong&gt; Для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Prometheus + Grafana:&lt;/strong&gt; Для ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Sentry:&lt;/strong&gt; Для отслСТивания ошибок&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;New Relic:&lt;/strong&gt; Для APM (Application Performance Monitoring)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅&lt;/h2&gt;

&lt;h3&gt;ΠŸΠΎΠ»Π½Ρ‹ΠΉ скрипт бэкапа&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# /usr/local/bin/dexa-backup.sh

BACKUP_DIR=&quot;/backups&quot;
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME=&quot;dexa&quot;
DB_USER=&quot;dexa_user&quot;
DB_PASS=&quot;strong_password&quot;

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
mkdir -p $BACKUP_DIR

# Бэкап Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip &gt; $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz

# Бэкап Ρ„Π°ΠΉΠ»ΠΎΠ² прилоТСния (Π±Π΅Π· vendor ΠΈ node_modules)
tar -czf $BACKUP_DIR/dexa_files_${DATE}.tar.gz \
    --exclude=&quot;vendor&quot; \
    --exclude=&quot;node_modules&quot; \
    --exclude=&quot;.git&quot; \
    /var/www/dexa

# Бэкап Π»ΠΎΠ³ΠΎΠ²
tar -czf $BACKUP_DIR/dexa_logs_${DATE}.tar.gz /var/log/dexa

# Бэкап ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ
tar -czf $BACKUP_DIR/dexa_configs_${DATE}.tar.gz \
    /etc/nginx/sites-available/dexa \
    /etc/supervisor/conf.d/dexa-worker.conf

# ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° старых бэкапов (Ρ…Ρ€Π°Π½ΠΈΠΌ 30 Π΄Π½Π΅ΠΉ)
find $BACKUP_DIR -name &quot;*.gz&quot; -mtime +30 -delete

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° увСдомлСния
echo &quot;Backup completed: $DATE&quot; &gt;&gt; /var/log/dexa-backup.log&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° обновлСния&lt;/h2&gt;

&lt;h3&gt;ΠŸΠ΅Ρ€Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ&lt;/h3&gt;
&lt;ol&gt;
    &lt;li&gt;Π£Π²Π΅Π΄ΠΎΠΌΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎ тСхничСских Ρ€Π°Π±ΠΎΡ‚Π°Ρ…&lt;/li&gt;
    &lt;li&gt;Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ бэкап систСмы&lt;/li&gt;
    &lt;li&gt;ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ обновлСния Π² тСстовом ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ&lt;/li&gt;
    &lt;li&gt;ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π½ ΠΎΡ‚ΠΊΠ°Ρ‚Π°&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;ΠŸΡ€ΠΎΡ†Π΅ΡΡ обновлСния&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² Ρ€Π΅ΠΆΠΈΠΌ обслуТивания
php artisan down --message=&quot;ОбновлСниС систСмы. ВСрнСмся Ρ‡Π΅Ρ€Π΅Π· 30 ΠΌΠΈΠ½ΡƒΡ‚.&quot;

# ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ
sudo supervisorctl stop all

# ОбновлСниС кода
git pull origin main

# ОбновлСниС зависимостСй
composer install --optimize-autoloader --no-dev
npm install
npm run production

# ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
php artisan migrate --force

# ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° кэшСй
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan cache:clear

# ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ Supervisor
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start all

# Запуск ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° обслуТивания
php artisan up

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° работоспособности
php artisan system:health-check&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;ΠžΡ‚ΠΊΠ°Ρ‚ обновлСния&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° обслуТивания
php artisan down

# ΠžΡ‚ΠΊΠ°Ρ‚ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ (Ссли Π½ΡƒΠΆΠ½ΠΎ)
php artisan migrate:rollback --step=1

# ВосстановлСниС ΠΈΠ· бэкапа
gunzip &lt; /backups/dexa_20240115.sql.gz | mysql -u dexa_user -p dexa

# ВосстановлСниС Ρ„Π°ΠΉΠ»ΠΎΠ²
tar -xzf /backups/dexa_files_20240115.tar.gz -C /

# ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ сСрвисов
sudo systemctl restart php8.1-fpm nginx
sudo supervisorctl restart all

# ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° обслуТивания
php artisan up&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ&lt;/h2&gt;

&lt;h3&gt;Настройка PHP-FPM&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# /etc/php/8.1/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

# OPCache настройки
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.fast_shutdown=1&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Настройка MySQL&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# /etc/mysql/my.cnf
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
query_cache_type = 1
query_cache_size = 128M
max_connections = 200
thread_cache_size = 8
table_open_cache = 2000&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅&lt;/h2&gt;

&lt;div class=&quot;danger&quot;&gt;
    &lt;p&gt;&lt;strong&gt;🚨 ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΠΎ:&lt;/strong&gt; Π­Ρ‚ΠΈ настройки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ запуском!&lt;/p&gt;
&lt;/div&gt;

&lt;h3&gt;ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ€Ρ‹&lt;/h3&gt;
&lt;ol&gt;
    &lt;li&gt;ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ„Π°ΠΉΡ€Π²ΠΎΠ» (UFW ΠΈΠ»ΠΈ iptables)&lt;/li&gt;
    &lt;li&gt;Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Fail2ban для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ брутфорса&lt;/li&gt;
    &lt;li&gt;ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ активности&lt;/li&gt;
    &lt;li&gt;РСгулярно ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹&lt;/li&gt;
    &lt;li&gt;Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слоТныС ΠΏΠ°Ρ€ΠΎΠ»ΠΈ для всСх сСрвисов&lt;/li&gt;
    &lt;li&gt;ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ root доступ ΠΏΠΎ SSH&lt;/li&gt;
    &lt;li&gt;ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π²ΡƒΡ…Ρ„Π°ΠΊΡ‚ΠΎΡ€Π½ΡƒΡŽ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ для SSH&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Fail2ban конфигурация&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Установка
sudo apt install -y fail2ban

# ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ для Laravel
sudo nano /etc/fail2ban/jail.local

[laravel]
enabled = true
port = http,https
filter = laravel
logpath = /var/www/dexa/storage/logs/laravel.log
maxretry = 5
bantime = 3600&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ&lt;/h2&gt;

&lt;h3&gt;ЧастыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹&lt;/h3&gt;
&lt;table&gt;
    &lt;thead&gt;
    &lt;tr&gt;
        &lt;th&gt;ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°&lt;/th&gt;
        &lt;th&gt;ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°&lt;/th&gt;
        &lt;th&gt;РСшСниС&lt;/th&gt;
    &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
    &lt;tr&gt;
        &lt;td&gt;502 Bad Gateway&lt;/td&gt;
        &lt;td&gt;PHP-FPM Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½&lt;/td&gt;
        &lt;td&gt;&lt;code&gt;sudo systemctl restart php8.1-fpm&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Ошибки ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ&lt;/td&gt;
        &lt;td&gt;НСт ΠΏΡ€Π°Π² Π½Π° Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…&lt;/td&gt;
        &lt;td&gt;ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ MySQL&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;МСдлСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°&lt;/td&gt;
        &lt;td&gt;НСт OPCache ΠΈΠ»ΠΈ Redis&lt;/td&gt;
        &lt;td&gt;ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Ошибки ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ&lt;/td&gt;
        &lt;td&gt;Supervisor Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½&lt;/td&gt;
        &lt;td&gt;ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ статус Supervisor&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;НСт ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠΎΡ‡Ρ‚Ρ‹&lt;/td&gt;
        &lt;td&gt;ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ SMTP настройки&lt;/td&gt;
        &lt;td&gt;ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ .env ΠΈ Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ&lt;/td&gt;
    &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π»ΠΎΠ³ΠΎΠ²
sudo tail -f /var/www/dexa/storage/logs/laravel.log
sudo journalctl -u nginx -f
sudo journalctl -u php8.1-fpm -f

# ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ рСсурсов
htop
iftop
iotop

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° дискового пространства
df -h
du -sh /var/www/dexa/*

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сСтСвых соСдинСний
netstat -tulpn
ss -tulpn&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;ВСхничСская ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°:&lt;/strong&gt; odeveloper@internet.ru&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;ЭкстрСнныС случаи:&lt;/strong&gt; Волько Ρ‡Π΅Ρ€Π΅Π· Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;ДокумСнтация:&lt;/strong&gt; /admin/documentation/developer&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³:&lt;/strong&gt; ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π°Π»Π΅Ρ€Ρ‚Ρ‹ Π² Telegram/Email&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;info&quot;&gt;
    &lt;p&gt;&lt;strong&gt;ℹ️ Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:&lt;/strong&gt; РСгулярно провСряйтС систСму, обновляйтС зависимости ΠΈ слСдитС Π·Π° Π»ΠΎΠ³Π°ΠΌΠΈ. Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ - ваша Π»ΡƒΡ‡ΡˆΠ°Ρ страховка.&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;