Files
state-corp-backend/deploy/scripts/deploy.sh
Aleksandr Meshchriakov e9d7f24aaa
Some checks failed
CI/CD Pipeline / Run Tests (push) Failing after 0s
CI/CD Pipeline / Code Quality Checks (push) Failing after 1m43s
CI/CD Pipeline / Build Docker Images (push) Has been skipped
CI/CD Pipeline / Push to Gitea Registry (push) Has been skipped
first commit
2026-01-21 12:07:35 +01:00

127 lines
4.6 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
# Здесь можно автоматически заполнить .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/"