- Implemented user authentication with JWT tokens - Added user and profile models with OneToOne relationship - Created service layer for business logic separation - Implemented DRF serializers and views - Added comprehensive test suite with model-bakery factories - Fixed ipdb/pdbpp dependency conflicts with custom test runner - Configured development and production environments - Added deployment configurations for Apache, systemd, and Docker
127 lines
4.6 KiB
Bash
127 lines
4.6 KiB
Bash
#!/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/" |