برنامه نویسی

راه اندازی پروژه جنگو – قسمت 1

Summarize this content to 400 words in Persian Lang

مقدمه

این محتوای پیشرفته در مورد چگونگی ساختار جنگوی خود برای یک پروژه جدید است. من از استارت‌پروژه اولیه و استارتاپ صرفنظر کرده‌ام، مطالب زیادی در این زمینه وجود دارد. بنابراین، پروژه با Poetry، django، .gitignore، git repo، صفحه اصلی ساده و django-allauth آغاز شد.

این برای برنامه های کوچک/متوسط، مانند یک استارتاپ یا کسب و کار کوچک است. پس از رشد کسب و کار، باید معماری را توسعه دهید.

در این سری از پست ها قصد داریم یک پروژه جنگو را برای یک محیط توسعه کارآمد راه اندازی کنیم (به نظر من). در پایان، ما یک راه اندازی با:

پایتون
شعر
جانگو
جنگو-محیط
django-extences
جنگو آلوث
فقط
داخل
راف
django-debug-toolbar
pytest
pytest-django
اسب شاخدار
نویز سفید
sentry-sdk
django-browser-reload
htmx
django-htmx
دم بادcss
یخ آلپ
داکر
Postgres
README.md، بله یکی از ستون هاست.
اکشن های git، github و github
برنامه را در fly.io اجرا کنید
postgres را در neon.tech … و موارد دیگر را مستقر کنید

این یک سریال 8 قسمتی است، این اولین قسمت است.

توجه داشته باشید که هنوز همه قسمت ها منتشر نشده اند، این یک کار در حال انجام است.

قسمت 1: راه اندازی داکر. dockerization ساده، حتی قبل از پیکربندی Postgres.
قسمت 2: Postgres. Postgres را برای استفاده در جنگو و پیکربندی در compose.yml پیکربندی کنید.
بخش 3: ادغام مداوم. Pytest را اضافه کنید، ruff کنید و آن را روی اکشن github در PR اجرا کنید تا از شکسته شدن کد جلوگیری کنید و از کیفیت کد اطمینان حاصل کنید.
قسمت 4: HTMX، TailwindCSS و AlpineJS. HTMX را در پروژه پیکربندی کنید، چند ترفند برای جنگو وجود دارد. nodej ها را روی کانتینر و tailwind watcher در حال توسعه پیکربندی کنید. پیکربندی AlpineJS، ساده تر از HTMX و TailwindCSS.
قسمت 5: ابزارهای توسعه دهنده، ابزارهایی مانند Marimo، django-extensions، django-toolbar، django-browser-reload.
قسمت 6: تحویل مداوم. Staticfiles را در این مورد با whitenoise پیکربندی کنید. استقرار در fly.io و neon.tech و البته استفاده از اکشن github برای آن.

قسمت 1 راه اندازی داکر

من قصد ندارم توضیح دهم که Docker چیست و چرا باید از آن استفاده کنید. من فرض می کنم که شما اصول اولیه را می دانید.

برای شروع به چه چیزی نیاز داریم؟

در حال حاضر، Docker and Just و، البته، پروژه جنگو ما را با یک صفحه اصلی ساده، در این مورد با استفاده از شعر، نصب کنید.Just دستورات را برای استفاده راحت تر کپسوله کنید. در اینجا یک مثال از یک justfile آورده شده است:

build:
docker compose build
runserver:
docker compose up –build
mng command:
docker compose run –rm web python manage.py {{command}}
sh:
docker compose run –rm web sh

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

… و سپس می توانیم اجرا کنیم$ just build$ just runserver$ just mng createsuperuser

خوب، بیایید فایل ها را ایجاد کنیم.

نگران نباشید، هر کدام را توضیح خواهم داد.ابتدا تمام آن فایل های خالی را ایجاد کنید:

docker/dev/Dockerfile – مراحل ایجاد تصویر

docker/dev/start – فایل Bash برای شروع کانتینر از طریق نقطه ورودی در docker-compose

compose.yml – ارکستراسیون ساده کانتینرها، فعلاً فقط یکی.

.env – متغیرهای محیطی ما توسط compose.yml به ظرف تزریق می‌شوند، به gitignore. اضافه می‌شوند.

.env.template – همان کلید env. اما با مقادیر خالی برای مرجع، این کلید در مخزن باقی می ماند.

justfile – Wrapper برای دستورات.

README.md – می دانید چرا، مرده بازی نکنید.

django-environ را نصب کنید

django-environ – برای مدیریت env var$ poetry add django-environ

Dockerfile

# Pull official base image
FROM python:3.12.6-alpine3.19

# Set working directory in the image
WORKDIR /app

# Set env variables
# Don’t write out pyc files
ENV PYTHONDONTWRITEBYTECODE 1
# No buffering stdin/stdout
ENV PYTHONUNBUFFERED 1

# update the alpine linux
RUN apk update
# install bash on image, alpine uses ash, but we have a script that uses bash
RUN apk add –no-cache bash

# Copy our poetry artifacts to the building image
COPY poetry.lock pyproject.toml /app

RUN pip3 install poetry
# No need to create a virtual env in the container
RUN poetry config virtualenvs.create false
# Install dependencies with the dev dependecies
RUN poetry install –with dev

# Copy start bash script with the instruction on how to start and serve Django.
COPY ./docker/dev/start /start
RUN sed -i ‘s/\r$//g’ /start
RUN chmod +x /start

# Copy all project files to the image.
COPY . /app

# Not used, the app are going to be running through docker compose
CMD [“manage.py”, “runserver”, “0.0.0.0:8000”]

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شروع کنید

#!/bin/bash

set -o errexit
set -o pipefail
set -o nounset

# Apply migrations if has a new one.
echo “Running migrations…”
python manage.py migrate

# Start the server for development
echo “Starting runserver”
exec python manage.py runserver 0.0.0.0:8000

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

compose.yml

services:
# The service to be created on docker
web:
# how to build the image for this service
build:
# Where is the directory to work on…
context: .
# … with what Dockerfile instructions
dockerfile: ./docker/dev/Dockerfile
image: palindrome_local
container_name: palindrome_local
volumes:
– .:/app:z
env_file:
– .env
ports:
– “8000:8000”
# The bash file to execute, the one created above and added to Dockerfile
command: /start

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

justfile

# List all just commands
default:
just –list

# Build the docker image
build:
docker compose build

# Run the Django app in development mode
runserver:
docker compose up –build

# Run manage.py inside the container like createsuperuser
mng command:
docker compose run –rm web python manage.py {{command}}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

env

DEBUG=True
SECRET_KEY=’dev-key-(g!%yi9at$h6$*sz**^ld6+j)r305*=6i^3ho1bq=z@8c#b7ml’
ALLOWED_HOSTS=*

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

.env.template

میتونه فعلا همینطور باشه

DEBUG=True
SECRET_KEY=’dev-key-(g!%yi9at$h6$*sz**^ld6+j)r305*=6i^3ho1bq=z@8c#b7ml’
ALLOWED_HOSTS=*

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

settings.py را به روز کنید

در حال حاضر فقط این تنظیمات، مقدار از فایل .env آمده است:

import environ

env = environ.Env()
SECRET_KEY = env(‘SECRET_KEY’)
DEBUG = env.bool(‘DEBUG’, False)
ALLOWED_HOSTS = env.list(‘ALLOWED_HOSTS’)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

README.md را به روز کنید

# Palindrome project

Project used to explain my view on a django project architecture

## Tools, libs, etc. Some time related files.

Versions on Poetry.

– [Python](https://www.python.org/) Programming languange
– [django-environ](https://django-environ.readthedocs.io) Manage .envs in Django
– [Poetry](https://python-poetry.org/) Python packaging and dependency management
– poetry.lock
– pyproject.toml
– [Django](https://www.djangoproject.com/) Web framework written in Python
– [Docker](https://www.docker.com/) Manage containers for dev environment
– compose.yaml
– compose/dev/Dockerfile
– compose/dev/start
– .env
– [Just](https://just.systems/) encapsulate commands for easier use
– justfile

## Dev environment setup

1. Install Just, Docker and Poetry(opcional).
2. Copy .env.example to .env, no need for edtion.
3. Certified that docker is up and running
4. `$ just build`

## Run the server for development

1. Certified that docker is up and running
2. `$ just runserver`

You can access on http://0.0.0.0:8000/

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بسازید و اجرا کنید

خوب، با اجرای داکر شما و راه‌اندازی همه چیز، اکنون می‌توانیم به آن برویم قسمت 2: Postgres، Postgres را روی تنظیمات، داکر و غیره پیکربندی کنید.

موفق باشید و به یاد داشته باشید که در سال 1971 چه اتفاقی افتاد.

پیوندها

https://www.djangoproject.com/start/https://docs.docker.com/get-docker/https://just.systems/man/en/

مقدمه

این محتوای پیشرفته در مورد چگونگی ساختار جنگوی خود برای یک پروژه جدید است. من از استارت‌پروژه اولیه و استارتاپ صرفنظر کرده‌ام، مطالب زیادی در این زمینه وجود دارد. بنابراین، پروژه با Poetry، django، .gitignore، git repo، صفحه اصلی ساده و django-allauth آغاز شد.

این برای برنامه های کوچک/متوسط، مانند یک استارتاپ یا کسب و کار کوچک است. پس از رشد کسب و کار، باید معماری را توسعه دهید.

در این سری از پست ها قصد داریم یک پروژه جنگو را برای یک محیط توسعه کارآمد راه اندازی کنیم (به نظر من). در پایان، ما یک راه اندازی با:

  • پایتون
  • شعر
  • جانگو
  • جنگو-محیط
  • django-extences
  • جنگو آلوث
  • فقط
  • داخل
  • راف
  • django-debug-toolbar
  • pytest
  • pytest-django
  • اسب شاخدار
  • نویز سفید
  • sentry-sdk
  • django-browser-reload
  • htmx
  • django-htmx
  • دم بادcss
  • یخ آلپ
  • داکر
  • Postgres
  • README.md، بله یکی از ستون هاست.
  • اکشن های git، github و github
  • برنامه را در fly.io اجرا کنید
  • postgres را در neon.tech … و موارد دیگر را مستقر کنید

این یک سریال 8 قسمتی است، این اولین قسمت است.

توجه داشته باشید که هنوز همه قسمت ها منتشر نشده اند، این یک کار در حال انجام است.

  • قسمت 1: راه اندازی داکر. dockerization ساده، حتی قبل از پیکربندی Postgres.
  • قسمت 2: Postgres. Postgres را برای استفاده در جنگو و پیکربندی در compose.yml پیکربندی کنید.
  • بخش 3: ادغام مداوم. Pytest را اضافه کنید، ruff کنید و آن را روی اکشن github در PR اجرا کنید تا از شکسته شدن کد جلوگیری کنید و از کیفیت کد اطمینان حاصل کنید.
  • قسمت 4: HTMX، TailwindCSS و AlpineJS. HTMX را در پروژه پیکربندی کنید، چند ترفند برای جنگو وجود دارد. nodej ها را روی کانتینر و tailwind watcher در حال توسعه پیکربندی کنید. پیکربندی AlpineJS، ساده تر از HTMX و TailwindCSS.
  • قسمت 5: ابزارهای توسعه دهنده، ابزارهایی مانند Marimo، django-extensions، django-toolbar، django-browser-reload.
  • قسمت 6: تحویل مداوم. Staticfiles را در این مورد با whitenoise پیکربندی کنید. استقرار در fly.io و neon.tech و البته استفاده از اکشن github برای آن.

قسمت 1 راه اندازی داکر

من قصد ندارم توضیح دهم که Docker چیست و چرا باید از آن استفاده کنید. من فرض می کنم که شما اصول اولیه را می دانید.

برای شروع به چه چیزی نیاز داریم؟

در حال حاضر، Docker and Just و، البته، پروژه جنگو ما را با یک صفحه اصلی ساده، در این مورد با استفاده از شعر، نصب کنید.

Just دستورات را برای استفاده راحت تر کپسوله کنید. در اینجا یک مثال از یک justfile آورده شده است:

build:
  docker compose build
runserver:
  docker compose up --build
mng command:
  docker compose run --rm web python manage.py {{command}}
sh:
  docker compose run --rm web sh
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

… و سپس می توانیم اجرا کنیم
$ just build
$ just runserver
$ just mng createsuperuser

خوب، بیایید فایل ها را ایجاد کنیم.

نگران نباشید، هر کدام را توضیح خواهم داد.

ابتدا تمام آن فایل های خالی را ایجاد کنید:

  • docker/dev/Dockerfile – مراحل ایجاد تصویر
  • docker/dev/start – فایل Bash برای شروع کانتینر از طریق نقطه ورودی در docker-compose
  • compose.yml – ارکستراسیون ساده کانتینرها، فعلاً فقط یکی.
  • .env – متغیرهای محیطی ما توسط compose.yml به ظرف تزریق می‌شوند، به gitignore. اضافه می‌شوند.
  • .env.template – همان کلید env. اما با مقادیر خالی برای مرجع، این کلید در مخزن باقی می ماند.
  • justfile – Wrapper برای دستورات.
  • README.md – می دانید چرا، مرده بازی نکنید.

django-environ را نصب کنید

django-environ – برای مدیریت env var
$ poetry add django-environ

Dockerfile

# Pull official base image
FROM python:3.12.6-alpine3.19

# Set working directory in the image
WORKDIR /app

# Set env variables
# Don't write out pyc files
ENV PYTHONDONTWRITEBYTECODE 1
# No buffering stdin/stdout
ENV PYTHONUNBUFFERED 1

# update the alpine linux
RUN apk update
# install bash on image, alpine uses ash, but we have a script that uses bash
RUN apk add --no-cache bash

# Copy our poetry artifacts to the building image
COPY poetry.lock pyproject.toml /app

RUN pip3 install poetry
# No need to create a virtual env in the container
RUN poetry config virtualenvs.create false
# Install dependencies with the dev dependecies
RUN poetry install --with dev

# Copy start bash script with the instruction on how to start and serve Django.
COPY ./docker/dev/start /start
RUN sed -i 's/\r$//g' /start
RUN chmod +x /start

# Copy all project files to the image.
COPY . /app

# Not used, the app are going to be running through docker compose
CMD ["manage.py", "runserver", "0.0.0.0:8000"]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شروع کنید

#!/bin/bash

set -o errexit
set -o pipefail
set -o nounset

# Apply migrations if has a new one.
echo "Running migrations..."
python manage.py migrate

# Start the server for development
echo "Starting runserver"
exec python manage.py runserver 0.0.0.0:8000
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

compose.yml

services:
# The service to be created on docker
  web:
    # how to build the image for this service
    build:
      # Where is the directory to work on...
      context: .
      # ... with what Dockerfile instructions
      dockerfile: ./docker/dev/Dockerfile
    image: palindrome_local
    container_name: palindrome_local
    volumes:
      - .:/app:z
    env_file:
      - .env
    ports:
      - "8000:8000"
    # The bash file to execute, the one created above and added to Dockerfile
    command: /start

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

justfile

# List all just commands
default:
  just --list

# Build the docker image
build:
  docker compose build

# Run the Django app in development mode
runserver:
  docker compose up --build

# Run manage.py inside the container like createsuperuser
mng command:
  docker compose run --rm web python manage.py {{command}}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

env

DEBUG=True
SECRET_KEY='dev-key-(g!%yi9at$h6$*sz**^ld6+j)r305*=6i^3ho1bq=z@8c#b7ml'
ALLOWED_HOSTS=*
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

.env.template

میتونه فعلا همینطور باشه

DEBUG=True
SECRET_KEY='dev-key-(g!%yi9at$h6$*sz**^ld6+j)r305*=6i^3ho1bq=z@8c#b7ml'
ALLOWED_HOSTS=*
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

settings.py را به روز کنید

در حال حاضر فقط این تنظیمات، مقدار از فایل .env آمده است:

import environ

...

env = environ.Env()
SECRET_KEY = env('SECRET_KEY')
DEBUG = env.bool('DEBUG', False)
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')

...
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

README.md را به روز کنید

# Palindrome project

Project used to explain my view on a django project architecture

## Tools, libs, etc. Some time related files.

Versions on Poetry.

- [Python](https://www.python.org/) Programming languange
- [django-environ](https://django-environ.readthedocs.io) Manage .envs in Django
- [Poetry](https://python-poetry.org/) Python packaging and dependency management
    - poetry.lock
    - pyproject.toml
- [Django](https://www.djangoproject.com/) Web framework written in Python
- [Docker](https://www.docker.com/) Manage containers for dev environment
    - compose.yaml
    - compose/dev/Dockerfile
    - compose/dev/start
    - .env
- [Just](https://just.systems/) encapsulate commands for easier use
    - justfile

## Dev environment setup

1. Install Just, Docker and Poetry(opcional).
2. Copy .env.example to .env, no need for edtion. 
3. Certified that docker is up and running
4. `$ just build`

## Run the server for development

1. Certified that docker is up and running
2. `$ just runserver`

You can access on http://0.0.0.0:8000/
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بسازید و اجرا کنید

خوب، با اجرای داکر شما و راه‌اندازی همه چیز، اکنون می‌توانیم به آن برویم قسمت 2: Postgres، Postgres را روی تنظیمات، داکر و غیره پیکربندی کنید.

موفق باشید و به یاد داشته باشید که در سال 1971 چه اتفاقی افتاد.

پیوندها

https://www.djangoproject.com/start/
https://docs.docker.com/get-docker/
https://just.systems/man/en/

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا