/
grigorin
/
InterviewHelper
Обзор
Документация
Войти
/
grigorin
/
InterviewHelper
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
deploy-nginx.sh
139 строк
4 KB
Grigory Nevarov
обновил README.md
12 дек 2025, 16:02
12 дек 2025, 16:02
d560e85
Код
Авторство
О чём код?
#!/bin/bash # Скрипт автоматической установки CTO Interview Helper на Linux сервер с Nginx # Использование: sudo bash deploy-nginx.sh set -e # Остановка при ошибке echo "🚀 Начинаем развертывание CTO Interview Helper..." # Проверка прав root if [ "$EUID" -ne 0 ]; then echo "❌ Пожалуйста, запустите скрипт с правами sudo: sudo bash deploy-nginx.sh" exit 1 fi # Переменные PROJECT_DIR="/var/www/interview-helper" DOMAIN="${1:-localhost}" # Можно передать домен как аргумент: ./deploy-nginx.sh your-domain.com echo "📦 Обновление системы..." apt update && apt upgrade -y echo "📦 Установка Node.js..." if ! command -v node &> /dev/null; then curl -fsSL https://deb.nodesource.com/setup_20.x | bash - apt install -y nodejs else echo "✅ Node.js уже установлен: $(node --version)" fi echo "📦 Установка Nginx..." if ! command -v nginx &> /dev/null; then apt install -y nginx systemctl enable nginx systemctl start nginx else echo "✅ Nginx уже установлен" fi echo "📁 Проверка проекта..." if [ ! -d "$PROJECT_DIR" ]; then echo "❌ Проект не найден в $PROJECT_DIR" echo "Пожалуйста, склонируйте проект или скопируйте файлы в эту директорию" exit 1 fi cd "$PROJECT_DIR" echo "📦 Установка зависимостей..." npm install echo "🔨 Сборка проекта..." npm run build if [ ! -d "dist" ]; then echo "❌ Ошибка сборки: папка dist не найдена" exit 1 fi echo "📝 Создание конфигурации Nginx..." cat > /etc/nginx/sites-available/interview-helper <<EOF server { listen 80; server_name $DOMAIN; root $PROJECT_DIR/dist; index index.html; # Логирование access_log /var/log/nginx/interview-helper-access.log; error_log /var/log/nginx/interview-helper-error.log; # Gzip сжатие gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/json; # Основная локация location / { try_files \$uri \$uri/ /index.html; } # Кэширование статических файлов location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { expires 1y; add_header Cache-Control "public, immutable"; } # Безопасность add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; } EOF echo "🔗 Активация конфигурации..." if [ -L /etc/nginx/sites-enabled/interview-helper ]; then rm /etc/nginx/sites-enabled/interview-helper fi ln -s /etc/nginx/sites-available/interview-helper /etc/nginx/sites-enabled/ echo "🔍 Проверка конфигурации Nginx..." if nginx -t; then echo "✅ Конфигурация корректна" else echo "❌ Ошибка в конфигурации Nginx" exit 1 fi echo "🔐 Настройка прав доступа..." chown -R www-data:www-data "$PROJECT_DIR/dist" chmod -R 755 "$PROJECT_DIR" echo "🔄 Перезагрузка Nginx..." systemctl reload nginx echo "" echo "✅ Установка завершена успешно!" echo "" echo "📋 Информация:" echo " - Проект: $PROJECT_DIR" echo " - Домен: $DOMAIN" echo " - Статус Nginx: $(systemctl is-active nginx)" echo "" echo "🌐 Приложение доступно по адресу:" if [ "$DOMAIN" != "localhost" ]; then echo " http://$DOMAIN" else echo " http://$(hostname -I | awk '{print $1}')" echo " или http://localhost" fi echo "" echo "📝 Полезные команды:" echo " - Логи Nginx: sudo tail -f /var/log/nginx/interview-helper-error.log" echo " - Статус Nginx: sudo systemctl status nginx" echo " - Перезапуск Nginx: sudo systemctl reload nginx" echo " - Обновление проекта: cd $PROJECT_DIR && git pull && npm run build && sudo systemctl reload nginx" echo ""