В процессе работы над множеством проектов выработал для себя типовую структуру Django проекта, которая удовлетворяет всем моим требованиям и удобна как для разработки так и для поддержки.
Как всегда я использую свой стандартный стэк: Debian/Ubuntu + Python 3.* + PostgreSQL + NGINX + virtualenv + Django
Структура моих проектах основывается на рекомендациях
apps
app1
templates
index.html
...
app1_files
...
app2
app2_files
...
deploy
django_nginx.ini # ini файл для uwsgi процессов
django_wsgi.py # wsgi файл для проекта
project.nginx # NGINX настройки виртуального хоста для проекта
uwsgi_project.conf # конфигурационный файл для supervisor
uwsgi_project.sh # bash скрипт для запуска процессов через супервизор
project*
settings # Настройки проекта с выделенными локальными переменными и настройками
base.py
local.py
local_envs.py
project_files
...
public
media
media_files
...
static
collectstatic_files
...
requirements
debug.txt
product.txt
static # Статика проекта
css
fonts
img
js
templates # Шаблоны проекта
includes
include.html
...
base.html
index.html
.gitignore
manage.py
README.md
* основную папку проекта я настраиваю как обычное приложение для того чтобы можно было создавать централизованные команды менеджмента и задачи на весь проект.
Долгое время оттачивал для себя эту структуру и когда наконец понял, что она состоялась запилил типовой шаблон для быстрого разворачивания этой структуры под свой стэк.
Для создания шаблона использовал
Полученный в итоге шаблон позволяет поднимать пустой проект за минимум времени (если не сравнивать конечно с Докером ;)) и существенно экономит мне время.
Итак для разворачивания проекта из шаблона необходимо произвести следующие манипуляции:
1. Разворачиваем новое виртуальное окружение под свой проект:
python3 -m venv --system-site-packages env
2. Устанавливаем cookiecutter:
pip install cookiecutter
3. Клонируем шаблон из репозитория
git clone https://bitbucket.org/AOwlman/dj_templ
4. Запускаем установку шаблона
cookiecutter dj_templ
Или делаем 3 и 4й шаги через cookiecutter без клонирования:
cookiecutter https://AOwlman@bitbucket.org/AOwlman/dj_templ.git
В процессе разворачивания cookiecutter спросит:
- env_name: Окружение для нового проекта. То в котором вы разворачиваете проект. Обязательное поле
- project_name: название проекта. Так будет назван модуль Python, поэтому выбирайте валидное имя.
- user_name: Пользователь в /home которого располагается проект с его окружением. Обязательное поле
- admin_name и admin_email: контакты администратора. Будут использованы в настройке Django ADMINS.
- version: версия с которой начинать проект.
- production_host: адрес боевого сервера.
- site_name: адрес сайта. Используется в ALLOWED_HOSTS. Обязательное поле
- local_db_name, local_db_user, local_db_password: реквизиты локальной БД Postgres.
- secret_key: Секретный ключ Django.
- ... и другие настройки из файла cookiecutter.json
При заполнении Обязательных полей проект будет запускаться runserver с установками по умолчанию. Например:
./manage.py runserver 0.0.0.0:8000
Соответственно по указанному Вами site_name:8000 будет доступна первая страница проекта
Комментарии