Files
mostovik-backend/deploy/scripts/deploy.sh
Aleksandr Meshchriakov 44355deeb3
All checks were successful
CI/CD Pipeline / Code Quality Checks (pull_request) Successful in 1m6s
CI/CD Pipeline / Run Tests (pull_request) Successful in 1m18s
CI/CD Pipeline / Build Docker Images (pull_request) Has been skipped
CI/CD Pipeline / Push to Gitea Registry (pull_request) Has been skipped
feat: add parser source dashboard and scheduling
2026-04-28 00:20:08 +02:00

132 lines
4.7 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
# Скрипт развертывания проекта на сервере 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
sed -i 's/^DJANGO_SETTINGS_MODULE=.*/DJANGO_SETTINGS_MODULE=config.settings.production/' .env
sed -i 's/^DEBUG=.*/DEBUG=False/' .env
export DJANGO_SETTINGS_MODULE=config.settings.production
# Здесь нужно заполнить SECRET_KEY, ALLOWED_HOSTS и доступы к БД перед запуском
# Настройка базы данных
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
# Создание суперпользователя выполняется только через переменные окружения Django.
if [ "${CREATE_DJANGO_SUPERUSER:-false}" = "true" ]; then
python manage.py createsuperuser --noinput
fi
# Настройка 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/"