Files
DomainMapper/web/web_install.sh
Ground-Zerro c299efc6bf web
2024-12-31 19:07:12 +11:00

133 lines
5.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Переменные
USERNAME="test123"
APP_DIR="/home/$USERNAME/dns_resolver_app"
SERVICE_FILE="/etc/systemd/system/dns_resolver.service"
NGINX_CONF="/etc/nginx/sites-available/dns_resolver"
EMAIL_ADR="email@example.com"
DOMAIN_NAME="your-domain.com"
# Проверка существования пользователя
if ! id "$USERNAME" &>/dev/null; then
echo "Пользователь $USERNAME не существует."
read -p "Хотите создать пользователя? (y/n): " CREATE_USER
if [[ "$CREATE_USER" =~ ^[Yy]$ ]]; then
sudo useradd -m -s /bin/bash "$USERNAME"
echo "Пользователь $USERNAME успешно создан."
else
echo "Скрипт завершён, так как пользователь не существует."
exit 1
fi
fi
# Обновление системы и установка зависимостей
echo "Обновляем систему и устанавливаем зависимости..."
sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-pip python3-venv gunicorn nginx certbot python3-certbot-nginx -y
# Создание директории приложения
echo "Создаем директорию приложения..."
sudo -u $USERNAME mkdir -p $APP_DIR
# Перемещение в директорию приложения
cd $APP_DIR
# Создание виртуального окружения
echo "Создаем виртуальное окружение..."
sudo -u $USERNAME python3 -m venv venv
# Активация виртуального окружения и установка библиотек
echo "Устанавливаем зависимости Python..."
# Загрузка файла requirements.txt
curl -o $APP_DIR/requirements.txt https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/requirements.txt
# Установка зависимостей из requirements.txt и добавление необходимых библиотек
sudo -u $USERNAME bash -c "source $APP_DIR/venv/bin/activate && pip install -r $APP_DIR/requirements.txt fastapi uvicorn pydantic"
# Загрузка файлов приложения
echo "Загружаем файлы приложения..."
curl -o "$APP_DIR/index.html" -L "https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/web/index.html"
curl -o "$APP_DIR/app.py" -L "https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/web/app.py"
curl -o "$APP_DIR/main.py" -L "https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/main.py"
chown "$USERNAME":"$USERNAME" "$APP_DIR/main.py"
# Создание системного сервиса
echo "Создаем системный сервис..."
sudo tee $SERVICE_FILE > /dev/null <<EOF
[Unit]
Description=DNS Resolver Web App
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=$APP_DIR
ExecStart=$APP_DIR/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app
[Install]
WantedBy=multi-user.target
EOF
# Активация и запуск сервиса
echo "Активируем и запускаем сервис..."
sudo systemctl daemon-reload
sudo systemctl start dns_resolver
sudo systemctl enable dns_resolver
# Настройка Nginx
echo "Настраиваем Nginx..."
sudo rm -f /etc/nginx/sites-enabled/default # Удаляем стандартный конфиг
sudo tee $NGINX_CONF > /dev/null <<EOF
server {
listen 80;
server_name _;
root $APP_DIR;
index index.html;
location / {
try_files \$uri /index.html;
}
error_page 404 /index.html;
}
EOF
# Создаем символическую ссылку для конфигурации
sudo ln -sf $NGINX_CONF /etc/nginx/sites-enabled/
# Проверяем конфигурацию Nginx
sudo nginx -t
# Перезапускаем Nginx
sudo systemctl restart nginx
# Настройка прав доступа к директории приложения
echo "Настраиваем права доступа для Nginx..."
sudo chown -R www-data:www-data $APP_DIR
sudo chmod -R 755 $APP_DIR
# Настраиваем доступ к домашней директории пользователя, если это требуется
HOME_DIR=$(dirname "$APP_DIR")
sudo chmod 755 $HOME_DIR
echo "Права доступа к директории приложения настроены."
# Открытие портов для Nginx
echo "Открываем порты для Nginx..."
sudo ufw allow 'Nginx Full'
sudo ufw reload
echo "Конфигурация Nginx завершена."
# Настройка HTTPS с помощью Certbot
echo "Настраиваем HTTPS с помощью Certbot..."
sudo certbot --nginx -n --agree-tos --email $EMAIL_ADR -d $DOMAIN_NAME
# Завершение
echo "Настройка завершена. Приложение доступно по адресу $DOMAIN_NAME"