Инструкция по развёртыванию системы "Симулятор регионов"
1. Предварительные требования
1.1 Системные требования
Минимальные требования:
- ОС: Ubuntu 20.04 LTS / CentOS 8+ / RHEL 8+
- ОЗУ: 4 GB
- Процессор: 2 ядра
- Дисковое пространство: 20 GB свободного места
- Сеть: доступ в Интернет для загрузки зависимостей
Рекомендуемые требования:
- ОС: Ubuntu 22.04 LTS
- ОЗУ: 8 GB или больше
- Процессор: 4 ядра или больше
- Дисковое пространство: 50 GB или больше
- SSD диск для лучшей производительности БД
1.2 Необходимое программное обеспечение
Убедитесь, что следующие компоненты установлены:
- Docker версии 20.10+
- Docker Compose версии 2.0+
- Nginx версии 1.18+
- Git версии 2.25+
- Curl для загрузки скриптов
2. Подготовка к установке
2.1 Обновление системы
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
# CentOS/RHEL
sudo yum update -y
2.2 Установка базовых зависимостей
Ubuntu/Debian:
# Установка основных пакетов
sudo apt install -y curl wget git unzip htop
# Установка Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# Установка 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
# Установка Nginx
sudo apt install -y nginx
# Запуск служб
sudo systemctl enable docker nginx
sudo systemctl start docker nginx
CentOS/RHEL:
# Установка основных пакетов
sudo yum install -y curl wget git unzip htop
# Установка Docker
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker $USER
# Установка 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
# Установка Nginx
sudo yum install -y nginx
# Запуск служб
sudo systemctl enable docker nginx
sudo systemctl start docker nginx
2.3 Настройка пользователя приложения
# Создание пользователя для приложения
sudo useradd -m -s /bin/bash regionsim
sudo usermod -aG docker regionsim
# Создание рабочих директорий
sudo mkdir -p /opt/regionsim/{backups,logs,scripts}
sudo chown -R regionsim:regionsim /opt/regionsim
# Переключение на пользователя приложения
sudo su - regionsim
2.4 Установка Node.js через NVM
# Установка NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# Перезагрузка shell
source ~/.bashrc
# Установка Node.js версии 20.10.0
nvm install 20.10.0
nvm use 20.10.0
nvm alias default 20.10.0
# Установка PM2 глобально
npm install -g pm2
# Проверка установки
node --version
npm --version
pm2 --version
3. Настройка репозитория и SSH ключей
3.1 Генерация SSH ключей
# Генерация SSH ключа для сервера
ssh-keygen -t rsa -b 4096 -C "regionsim@$(hostname)"
# Вывод публичного ключа для добавления в репозиторий
cat ~/.ssh/id_rsa.pub
Важно: Скопируйте публичный ключ и добавьте его в настройки deploy keys вашего Git репозитория.
3.2 Тестирование подключения к репозиторию
# Тестирование SSH соединения с GitHub
ssh -T git@github.com
# Или для GitLab
ssh -T git@gitlab.com
# Должно вернуть сообщение об успешной аутентификации
4. Создание файлов конфигурации
4.1 Создание конфигурационного файла
Создайте файл /home/regionsim/config_sim_region:
cat > /home/regionsim/config_sim_region << 'EOF'
#!/bin/bash
# config_sim_region
# Конфигурационный файл для установки RegionSim
# === ОСНОВНЫЕ НАСТРОЙКИ ===
# URL репозитория (замените на ваш репозиторий)
REPO_URL="git@github.com:your-organization/regionsim.git"
# Ветка для развертывания
GIT_BRANCH="main"
# === НАСТРОЙКИ БАЗЫ ДАННЫХ ===
DB_USER="postgres"
DB_PASSWORD="secure_password_here_123!"
DB_NAME="regions"
DB_PORT="5432"
# === НАСТРОЙКИ ПРИЛОЖЕНИЯ ===
NODE_ENV="production"
APP_PORT="3000"
# JWT секрет для аутентификации (сгенерируйте уникальный)
JWT_SECRET="your_very_secure_jwt_secret_here_456!"
# === НАСТРОЙКИ MINIO (если используется) ===
MINIO_ACCESS_KEY="regionsim_access"
MINIO_SECRET_KEY="secure_minio_secret_789!"
MINIO_PORT="9000"
# === НАСТРОЙКИ МОНИТОРИНГА ===
# Telegram bot для алертов (опционально)
TELEGRAM_BOT_TOKEN=""
TELEGRAM_CHAT_ID=""
# === НАСТРОЙКИ NGINX ===
DOMAIN_NAME="your-domain.com"
SSL_EMAIL="admin@your-domain.com"
# === НАСТРОЙКИ РЕЗЕРВНОГО КОПИРОВАНИЯ ===
BACKUP_RETENTION_DAYS="30"
BACKUP_TIME="02:00"
EOF
4.2 Создание установочного скрипта
Создайте файл /home/regionsim/install_sim_region.sh:
cat > /home/regionsim/install_sim_region.sh << 'EOF'
#!/bin/bash
# install_sim_region.sh
# Скрипт автоматической установки RegionSim
set -e
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Функция для вывода сообщений
log() {
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}"
}
error() {
echo -e "${RED}[ERROR] $1${NC}" >&2
}
warning() {
echo -e "${YELLOW}[WARNING] $1${NC}"
}
# Проверка запуска от имени пользователя regionsim
if [ "$(whoami)" != "regionsim" ]; then
error "Скрипт должен запускаться от имени пользователя regionsim"
exit 1
fi
# Загрузка конфигурации
if [ -f "./config_sim_region" ]; then
source ./config_sim_region
log "Конфигурация загружена"
else
error "Файл конфигурации config_sim_region не найден"
exit 1
fi
log "=== Начало установки RegionSim ==="
# Проверка зависимостей
log "Проверка зависимостей..."
if ! command -v docker &> /dev/null; then
error "Docker не установлен"
exit 1
fi
if ! command -v node &> /dev/null; then
error "Node.js не установлен"
exit 1
fi
if ! command -v pm2 &> /dev/null; then
error "PM2 не установлен"
exit 1
fi
log "Все зависимости установлены"
# Клонирование репозитория
log "Клонирование репозитория..."
if [ -d "regionsim" ]; then
warning "Директория regionsim уже существует, обновляем код..."
cd regionsim
git fetch origin
git reset --hard origin/$GIT_BRANCH
cd ..
else
git clone -b $GIT_BRANCH $REPO_URL regionsim
fi
cd regionsim
# Создание .env файла
log "Создание .env файла..."
cat > .env << ENVEOF
# Основные настройки
NODE_ENV=$NODE_ENV
PORT=$APP_PORT
# База данных
DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost:$DB_PORT/$DB_NAME"
# Аутентификация
JWT_SECRET="$JWT_SECRET"
# Minio (если используется)
MINIO_ENDPOINT="localhost:$MINIO_PORT"
MINIO_ACCESS_KEY="$MINIO_ACCESS_KEY"
MINIO_SECRET_KEY="$MINIO_SECRET_KEY"
# Дополнительные настройки
LOG_LEVEL="info"
ENVEOF
# Обновление docker-compose.yml с паролями из конфигурации
log "Настройка docker-compose.yml..."
sed -i "s/POSTGRES_PASSWORD: postgres/POSTGRES_PASSWORD: $DB_PASSWORD/" docker-compose.yml
sed -i "s/POSTGRES_USER: postgres/POSTGRES_USER: $DB_USER/" docker-compose.yml
sed -i "s/POSTGRES_DB: regions/POSTGRES_DB: $DB_NAME/" docker-compose.yml
# Запуск инфраструктуры
log "Запуск инфраструктуры (PostgreSQL, Minio)..."
docker-compose up -d
# Ожидание запуска БД
log "Ожидание запуска PostgreSQL..."
sleep 30
# Проверка подключения к БД
until PGPASSWORD=$DB_PASSWORD psql -h localhost -U $DB_USER -d $DB_NAME -c '\q' 2>/dev/null; do
log "Ожидание PostgreSQL..."
sleep 5
done
log "PostgreSQL готов к работе"
# Установка зависимостей
log "Установка npm зависимостей..."
npm install
# Генерация Prisma клиента
log "Генерация Prisma клиента..."
npm run prisma:generate
# Выполнение миграций
log "Выполнение миграций базы данных..."
npx prisma migrate deploy
# Заполнение начальными данными
log "Заполнение базы данных начальными данными..."
npm run seed
# Сборка приложения
log "Сборка приложения..."
npm run build
# Запуск через PM2
log "Запуск приложения через PM2..."
pm2 start ecosystem.config.js
pm2 save
# Настройка автозапуска PM2
pm2 startup | tail -n 1 | bash
log "=== Установка завершена успешно! ==="
log "Приложение доступно по адресу: http://localhost:$APP_PORT"
log "Swagger документация: http://localhost:$APP_PORT/api-docs"
log ""
log "Для настройки Nginx выполните команду:"
log "sudo $(pwd)/setup_nginx.sh"
EOF
chmod +x /home/regionsim/install_sim_region.sh
5. Процедура установки
5.1 Заполнение конфигурации
- Отредактируйте файл
/home/regionsim/config_sim_region:- Укажите правильный URL репозитория
- Задайте безопасные пароли для БД и JWT
- Укажите ваш домен
nano /home/regionsim/config_sim_region
5.2 Запуск установки
# Переключение на пользователя regionsim
sudo su - regionsim
# Запуск установочного скрипта
./install_sim_region.sh
6. Проверка установки
6.1 Проверка статуса сервисов
# Проверка Docker контейнеров
docker ps
# Проверка PM2 процессов
sudo su - regionsim -c "pm2 status"
# Проверка Nginx
sudo systemctl status nginx
6.2 Тестирование API
# Тест основного API endpoint
curl -X GET http://localhost:3000/api/test
# Должен вернуть: {"ok": true}
6.3 Проверка логов
# Логи приложения
sudo su - regionsim -c "pm2 logs"
# Логи Nginx
sudo tail -f /var/log/nginx/error.log
# Логи PostgreSQL
sudo tail -f /var/log/postgresql/postgresql-*.log
7. Обновление системы
7.1 Создание скрипта обновления
cat > /home/regionsim/update.sh << 'EOF'
#!/bin/bash
set -e
cd /home/regionsim/regionsim
echo "=== Обновление RegionSim ==="
# Обновление кода
git fetch origin
git reset --hard origin/main
# Установка зависимостей
npm install
# Выполнение миграций
npx prisma migrate deploy
# Генерация клиента
npm run prisma:generate
# Сборка
npm run build
# Перезапуск
pm2 restart all
echo "=== Обновление завершено ==="
EOF
chmod +x /home/regionsim/update.sh
8. Решение типичных проблем
8.1 Проблемы с памятью
# Настройка PM2 для контроля памяти
pm2 start ecosystem.config.js --max-memory-restart 1G
8.2 Проблемы с подключением к БД
# Проверка статуса PostgreSQL
sudo systemctl status postgresql
# Перезапуск PostgreSQL
sudo systemctl restart postgresql
8.3 Проблемы с Nginx
# Проверка конфигурации
sudo nginx -t
# Перезагрузка конфигурации
sudo systemctl reload nginx
9. Финальная проверка
После завершения установки выполните:
# 1. Проверка доступности API
curl http://localhost:3000/api/test
# 2. Проверка документации
curl http://localhost:3000/api-docs
# 3. Проверка статуса
pm2 status
Важно: Сохраните все пароли и конфигурационные файлы в безопасном месте. Регулярно выполняйте резервное копирование и мониторинг системы.
No comments to display
No comments to display