Skip to main content

Настройка окружения

Подготовка и конфигурация окружения для развертывания Arisweb Marketplace.

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

Минимальные требования

Производительность:
CPU: 2 ядра
RAM: 4 GB
Storage: 50 GB SSD
Network: 100 Mbps

Рекомендуемые:
CPU: 4+ ядра
RAM: 8+ GB
Storage: 100+ GB NVMe SSD
Network: 1 Gbps

Поддерживаемые операционные системы

  • Ubuntu 20.04+ LTS
  • CentOS 8+
  • Debian 11+
  • RHEL 8+
  • Amazon Linux 2
  • Docker Desktop (разработка)

Подготовка сервера

Обновление системы

# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git unzip

# CentOS/RHEL
sudo yum update -y
sudo yum install -y curl wget git unzip

# Установка дополнительных пакетов
sudo apt install -y software-properties-common apt-transport-https ca-certificates gnupg lsb-release

Настройка пользователя

# Создание пользователя для приложения
sudo useradd -m -s /bin/bash marketplace
sudo usermod -aG sudo marketplace
sudo usermod -aG docker marketplace

# Настройка SSH ключей
sudo mkdir -p /home/marketplace/.ssh
sudo cp ~/.ssh/authorized_keys /home/marketplace/.ssh/
sudo chown -R marketplace:marketplace /home/marketplace/.ssh
sudo chmod 700 /home/marketplace/.ssh
sudo chmod 600 /home/marketplace/.ssh/authorized_keys

Установка Docker

Docker Engine

# Добавление официального GPG ключа Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Добавление репозитория Docker
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Установка Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Запуск и автозапуск Docker
sudo systemctl start docker
sudo systemctl enable docker

# Проверка установки
docker --version
docker compose version

Docker Compose

# Установка Docker Compose (если не установлен с плагином)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# Проверка установки
docker-compose --version

Node.js окружение

Установка Node.js через NodeSource

# Добавление репозитория NodeSource
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

# Установка Node.js
sudo apt install -y nodejs

# Проверка установки
node --version
npm --version

Установка через nvm (рекомендуется)

# Установка nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc

# Установка Node.js LTS
nvm install --lts
nvm use --lts
nvm alias default node

# Установка глобальных пакетов
npm install -g pm2 @supabase/cli

База данных PostgreSQL

Установка PostgreSQL

# Установка PostgreSQL
sudo apt install -y postgresql postgresql-contrib

# Запуск и автозапуск
sudo systemctl start postgresql
sudo systemctl enable postgresql

# Настройка пользователя
sudo -u postgres createuser --interactive --pwprompt marketplace
sudo -u postgres createdb -O marketplace marketplace_db

Настройка PostgreSQL

# Редактирование конфигурации
sudo nano /etc/postgresql/14/main/postgresql.conf

# Основные настройки
listen_addresses = 'localhost'
port = 5432
max_connections = 100
shared_buffers = 256MB
effective_cache_size = 1GB
maintenance_work_mem = 64MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200

# Настройка аутентификации
sudo nano /etc/postgresql/14/main/pg_hba.conf

# Добавить строку для локального доступа
local marketplace_db marketplace md5
host marketplace_db marketplace 127.0.0.1/32 md5

Redis кеширование

Установка Redis

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

# Настройка конфигурации
sudo nano /etc/redis/redis.conf

# Основные настройки
bind 127.0.0.1
port 6379
requirepass your_redis_password
maxmemory 512mb
maxmemory-policy allkeys-lru
save 900 1
save 300 10
save 60 10000

# Перезапуск Redis
sudo systemctl restart redis-server
sudo systemctl enable redis-server

Nginx веб-сервер

Установка Nginx

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

# Удаление дефолтной конфигурации
sudo rm /etc/nginx/sites-enabled/default

# Создание конфигурации для маркетплейса
sudo nano /etc/nginx/sites-available/marketplace

Конфигурация Nginx

server {
listen 80;
server_name your-domain.com www.your-domain.com;

# Перенаправление на HTTPS
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl http2;
server_name your-domain.com www.your-domain.com;

# SSL сертификаты
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

# SSL настройки
ssl_session_timeout 1d;
ssl_session_cache shared:MozTLS:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;

# Безопасность
add_header Strict-Transport-Security "max-age=63072000" always;
add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;

# Основная локация
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}

# Статические файлы
location /static/ {
alias /var/www/marketplace/static/;
expires 1y;
add_header Cache-Control "public, immutable";
}
}

Активация конфигурации

# Создание символической ссылки
sudo ln -s /etc/nginx/sites-available/marketplace /etc/nginx/sites-enabled/

# Проверка конфигурации
sudo nginx -t

# Перезапуск Nginx
sudo systemctl restart nginx
sudo systemctl enable nginx

SSL сертификаты

Установка Certbot

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

# Получение SSL сертификата
sudo certbot --nginx -d your-domain.com -d www.your-domain.com

# Автоматическое обновление
sudo crontab -e
# Добавить строку:
0 12 * * * /usr/bin/certbot renew --quiet

Firewall настройки

UFW (Ubuntu)

# Включение UFW
sudo ufw enable

# Разрешение SSH
sudo ufw allow ssh

# Разрешение HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Разрешение для конкретных сервисов (только с localhost)
sudo ufw allow from 127.0.0.1 to any port 5432 # PostgreSQL
sudo ufw allow from 127.0.0.1 to any port 6379 # Redis

# Проверка статуса
sudo ufw status verbose

Environment переменные

Системные переменные

# Создание файла переменных окружения
sudo nano /etc/environment

# Добавление переменных
NODE_ENV=production
MARKETPLACE_HOME=/var/www/marketplace
DATABASE_URL=postgresql://marketplace:password@localhost:5432/marketplace_db
REDIS_URL=redis://:password@localhost:6379

Переменные приложения

# Создание .env файла
nano /var/www/marketplace/.env

# Основные настройки
NODE_ENV=production
PORT=3000

# Supabase
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=your_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key

# База данных
DATABASE_URL=postgresql://marketplace:password@localhost:5432/marketplace_db

# Redis
REDIS_URL=redis://:password@localhost:6379

# JWT
JWT_SECRET=your_very_long_and_secure_jwt_secret_key_here
JWT_EXPIRY=86400

# Email
RESEND_API_KEY=your_resend_api_key

# Платежи
YUKASSA_SHOP_ID=your_yukassa_shop_id
YUKASSA_SECRET_KEY=your_yukassa_secret_key

# Домен
SITE_URL=https://your-domain.com
CORS_ORIGIN=https://your-domain.com

Создание структуры проекта

Директории приложения

# Создание основной директории
sudo mkdir -p /var/www/marketplace
sudo chown -R marketplace:marketplace /var/www/marketplace

# Создание поддиректорий
mkdir -p /var/www/marketplace/{logs,uploads,backups,ssl}

# Настройка прав доступа
chmod 755 /var/www/marketplace
chmod 755 /var/www/marketplace/uploads
chmod 700 /var/www/marketplace/ssl
chmod 750 /var/www/marketplace/logs

Мониторинг и логирование

Системные логи

# Настройка logrotate для приложения
sudo nano /etc/logrotate.d/marketplace

/var/www/marketplace/logs/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 644 marketplace marketplace
postrotate
systemctl reload nginx
endscript
}

Мониторинг ресурсов

# Установка инструментов мониторинга
sudo apt install -y htop iotop nethogs

# Мониторинг дискового пространства
df -h
du -sh /var/www/marketplace/*

# Мониторинг памяти
free -h

# Мониторинг процессов
ps aux | grep node
ps aux | grep nginx
ps aux | grep postgres

Автоматизация развертывания

Systemd сервис

# Создание systemd сервиса
sudo nano /etc/systemd/system/marketplace.service

[Unit]
Description=Arisweb Marketplace Application
After=network.target postgresql.service redis.service

[Service]
Type=simple
User=marketplace
WorkingDirectory=/var/www/marketplace
Environment=NODE_ENV=production
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=marketplace

[Install]
WantedBy=multi-user.target

Активация сервиса

# Перезагрузка systemd
sudo systemctl daemon-reload

# Включение автозапуска
sudo systemctl enable marketplace

# Запуск сервиса
sudo systemctl start marketplace

# Проверка статуса
sudo systemctl status marketplace

Проверка готовности окружения

Скрипт проверки

#!/bin/bash

echo "Проверка готовности окружения..."

# Проверка Docker
if command -v docker &> /dev/null; then
echo "✓ Docker установлен"
else
echo "✗ Docker не установлен"
fi

# Проверка PostgreSQL
if systemctl is-active --quiet postgresql; then
echo "✓ PostgreSQL запущен"
else
echo "✗ PostgreSQL не запущен"
fi

# Проверка Redis
if systemctl is-active --quiet redis-server; then
echo "✓ Redis запущен"
else
echo "✗ Redis не запущен"
fi

# Проверка Nginx
if systemctl is-active --quiet nginx; then
echo "✓ Nginx запущен"
else
echo "✗ Nginx не запущен"
fi

# Проверка портов
netstat -tuln | grep :80 && echo "✓ Порт 80 открыт"
netstat -tuln | grep :443 && echo "✓ Порт 443 открыт"
netstat -tuln | grep :5432 && echo "✓ PostgreSQL порт открыт"
netstat -tuln | grep :6379 && echo "✓ Redis порт открыт"

echo "Проверка завершена."