#!/bin/bash # Скрипт развертывания проекта на сервере Astra Linux set -e # Прекращать выполнение при ошибках PROJECT_NAME="project" PROJECT_PATH="/var/www/${PROJECT_NAME}" REPO_URL="ваш_репозиторий.git" BRANCH="main" echo "=== Начало развертывания проекта ===" # Обновление системы echo "Обновление системы..." apt-get update && apt-get upgrade -y # Установка uv echo "Установка uv package manager..." curl -LsSf https://astral.sh/uv/install.sh | sh source $HOME/.cargo/env || true # Установка необходимых пакетов echo "Установка системных зависимостей..." apt-get install -y \ python3.11 \ python3.11-venv \ python3.11-dev \ postgresql-15 \ postgresql-client-15 \ redis-server \ apache2 \ libapache2-mod-wsgi-py3 \ git \ build-essential \ libpq-dev \ libffi-dev \ libxml2-dev \ libxslt1-dev \ zlib1g-dev # Создание пользователя для проекта echo "Создание пользователя проекта..." if ! id "www-data" &>/dev/null; then useradd -r -s /bin/false www-data fi # Создание директорий проекта echo "Создание структуры директорий..." mkdir -p ${PROJECT_PATH}/{src,logs,media,staticfiles,venv} chown -R www-data:www-data ${PROJECT_PATH} # Клонирование репозитория echo "Клонирование репозитория..." cd ${PROJECT_PATH} if [ -d ".git" ]; then git pull origin ${BRANCH} else git clone ${REPO_URL} . git checkout ${BRANCH} fi # Создание виртуального окружения с uv echo "Создание виртуального окружения с uv..." uv venv ${PROJECT_PATH}/venv source ${PROJECT_PATH}/venv/bin/activate # Установка зависимостей через uv echo "Установка Python зависимостей через uv..." uv pip install --upgrade pip uv pip install -r requirements.txt uv pip install -r requirements-dev.txt # Настройка переменных окружения echo "Настройка переменных окружения..." cp .env.example .env # Здесь можно автоматически заполнить .env файл или запросить ввод # Настройка базы данных echo "Настройка базы данных..." sudo -u postgres psql -c "CREATE DATABASE ${PROJECT_NAME}_prod;" || true sudo -u postgres psql -c "CREATE USER ${PROJECT_NAME}_user WITH PASSWORD '${PROJECT_NAME}_password';" || true sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE ${PROJECT_NAME}_prod TO ${PROJECT_NAME}_user;" || true # Выполнение миграций Django echo "Выполнение миграций..." cd ${PROJECT_PATH}/src python manage.py makemigrations python manage.py migrate python manage.py collectstatic --noinput # Создание суперпользователя (опционально) echo "Создание суперпользователя..." echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin@example.com', 'adminpass') if not User.objects.filter(username='admin').exists() else None" | python manage.py shell # Настройка systemd сервисов echo "Настройка systemd сервисов..." cp ../deploy/systemd/*.service /etc/systemd/system/ systemctl daemon-reload # Настройка Apache echo "Настройка Apache..." cp ../deploy/apache/project.conf /etc/apache2/sites-available/${PROJECT_NAME}.conf a2ensite ${PROJECT_NAME}.conf a2enmod ssl rewrite headers expires a2dissite 000-default # Настройка прав доступа echo "Настройка прав доступа..." chown -R www-data:www-data ${PROJECT_PATH} chmod -R 755 ${PROJECT_PATH} # Запуск сервисов echo "Запуск сервисов..." systemctl enable gunicorn.service systemctl enable celery-worker.service systemctl enable celery-beat.service systemctl enable apache2 systemctl start gunicorn.service systemctl start celery-worker.service systemctl start celery-beat.service systemctl restart apache2 echo "=== Развертывание завершено успешно ===" echo "Проект доступен по адресу: https://ваш-ip-адрес" echo "Админка Django: https://ваш-ip-адрес/admin/" echo "API документация: https://ваш-ip-адрес/api/"