feat: Add comprehensive Django user app with tests using model-bakery

- 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
This commit is contained in:
2026-01-19 14:12:33 +01:00
commit cbfbd8652d
51 changed files with 4183 additions and 0 deletions

127
deploy/scripts/deploy.sh Normal file
View File

@@ -0,0 +1,127 @@
#!/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/"