Dockerでセットアッププロジェクト
🐍
私たちはすべてのdjangoは、アプリケーションのためにも、私たちは、Dockerとの会話が良くなると知っている!
私はあなたにあなたの開発をスピードアップするだけでなく、あなたの環境をあなたのアプリケーションのために進めて、完了させることができるあなたのプロジェクトの初期のセットアップを示しますか?
興味ある?だから読んで、私に残りのままにします.
要件
始動✅
開発環境を作成するためにテストアプリケーションを使用するつもりですが、このセットアップはどんなプロジェクトにも適用されます.
ちょうどあなたが作る変更に留意してください.
1 -まず、我々はVenv環境を開始
python -m venv venv && source ./venv/bin/activate
2 -今私たちの依存関係をインストールします(と心配しないでください、私はあなたが何を行うかを教えてくれます)pip install django black python-dotenv psycopg2-binary
また、依存関係ファイルを作成することを忘れないでください.pip freeze > requirements.txt
Django --> メインフレームワーク
black --> Pythonコードフォーマッタ
python-dotenv --> Python dotenvはキーの値のペアを
.env
ファイルと環境変数として設定できます.psycopg2-binary --> Python用の最も人気のあるPostgreSQLデータベースアダプタ
ヒント
mysqlclient
django-admin startproject your_fantastic_name .
4 -作成.env
ファイルワークスペースのルートに移動し、
.env
この値を持つファイル# App
SECRET_KEY=your_ultra_secret_key
# 1 = True or 0 = False
DEBUG=
# localhost 127.0.0.1 0.0.0.0 ...
HOSTS=
# POSTGRES
POSTGRES_DB=
POSTGRES_USER=
POSTGRES_PASSWORD=
# PGADMIN
PGADMIN_DEFAULT_EMAIL=
PGADMIN_DEFAULT_PASSWORD=
後でこれらの値役に立つ
5 -アプリケーションの設定
まず、当社のアプリケーションのコアに移動しましょう
settings.py
ファイルといくつかのインポートを追加しますデフォルトではパスは既にインポートされますが、
python-dotenv
パッケージを2つ追加します.# settings.py
from pathlib import Path
from dotenv import load_dotenv
import os
そして、ちょうど下記の我々は使用しますos
プロジェクトを構成するには、次の手順に従います.# settings.py
load_dotenv()
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.getenv("SECRET_KEY")
DEBUG = int(os.getenv("DEBUG", default=0))
ALLOWED_HOSTS = os.getenv("HOSTS").split(" ")
ヒント2 :
# settings.py
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [os.path.join(BASE_DIR, "templates")],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
]
},
}
]
# settings.py
REST_FRAMEWORK = {
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination",
"PAGE_SIZE": 5,
"DEFAULT_RENDERER_CLASSES": ["rest_framework.renderers.JSONRenderer"],
"DEFAULT_PARSER_CLASSES": [
"rest_framework.parsers.JSONParser",
"rest_framework.parsers.FormParser",
],
"DEFAULT_THROTTLE_CLASSES": [
"rest_framework.throttling.AnonRateThrottle",
"rest_framework.throttling.UserRateThrottle",
],
"DEFAULT_THROTTLE_RATES": {"anon": "15/min", "user": "20/min"},
}
6 - Djangoでデータベースを設定するこの文脈では、Postgresを排他的に使用します.接続を構成するには、データベースオブジェクトを次の値で変更します.
# settings.py
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": os.getenv("POSTGRES_DB"),
"USER": os.getenv("POSTGRES_USER"),
"PASSWORD": os.getenv("POSTGRES_PASSWORD"),
"HOST": "db",
"PORT": 5432,
}
}
その他のヒント
# settings.py
LANGUAGE_CODE = "pt-BR"
TIME_ZONE = "America/Sao_Paulo"
USE_I18N = True
USE_TZ = True
STATIC_URL = "static/"
STATICFILES_DIRS = (os.path.join(BASE_DIR, "templates/static"),)
STATIC_ROOT = os.path.join("static")
MEDIA_URL = "media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
Dockerセットアップ🌊
まず最初に我々のアプリのビルドが必要です、彼を作成しましょう!
# Image of python with Debian
FROM python:3.9-bullseye
# Set Workdir
WORKDIR /usr/src/app
# Envs for don't generate pycache
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Some important libs
RUN apt update && apt upgrade -y \
&& apt install gcc python3-dev musl-dev bash build-essential libssl-dev libffi-dev -y
# Upgrade pip, copy requirements and install all the project dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# Entrypoint gonna be useful when we up the container
COPY entrypoint.sh .
RUN sed -i 's/\r$//g' /usr/src/app/entrypoint.sh
RUN chmod +x /usr/src/app/entrypoint.sh
# Copy all the files for the root dir
COPY . .
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]
今、我々はすべてのツールと我々のアプリケーションを作成するファイルが必要ですversion: "3"
services:
web:
build: .
container_name: "web-app-server"
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/usr/src/app/
ports:
- 8000:8000
networks:
- postgres
env_file:
- ./.env
depends_on:
- db
db:
image: postgres:13.0-alpine
container_name: "postgres-db-server"
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
networks:
- postgres
env_file:
- ./.env
pgadmin:
container_name: "pgadmin-django-server"
image: dpage/pgadmin4
environment:
- PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
- PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
volumes:
- pgadmin:/root/.pgadmin
ports:
- "5050:80"
networks:
- postgres
env_file:
- ./.env
depends_on:
- db
volumes:
postgres_data:
pgadmin:
networks:
postgres:
driver: bridge
あなたが気がつくならば、我々の構成は我々の価値を読んでいます我々が定義したそれ.envファイル、データベース名、ユーザー名、パスワードなどのように.値がわからない場合はが定義されている場合は
docker-compose config
端末では、すべての値を持つ構成を表示します.最後に、エントリポイントファイル
#!/bin/sh
# entrypoint.sh
# Verify if the database is connected
if [ "$DATABASE" = "postgres" ]
then
echo "Waiting for postgres..."
while ! nc -z $SQL_HOST $SQL_PORT; do
sleep 0.1
done
echo "PostgreSQL started"
fi
# Delete all the tables
python manage.py flush --no-input
# Do a new migrate
python manage.py migrate
exec "$@"
ええ、より多くのヒント😄:
.dockerignore
ビルドのフォルダを除外するvenv
さあ、アプリを始めましょう🎯
必要なのはほんのわずかなコマンドを与えるだけです.
docker-compose up
そして、それは、すべての3コンテナ、データベース、pgadminとあなた自身のアプリケーションをアップロードして、すべてのツールをカスタマイズし、新しいツールを実装する簡単です.
疑わしい場合には、「どうすればDockerで私のアプリケーションにアクセスできますか?」シンプルで、Dockerを使用すると、すべてを行うことができます!
ファーストタイプ:
docker ps
コンテナのIDを受け取ります.docker exec -it id_of_container bash
簡単な方法でアプリケーションを開発することができます.
今、我々は結果を見ることができます!
私はこのチュートリアルで私は特別なタッチであなたのジャンゴアプリケーションを作るのに役立っていることを願っています.
また会いましょう!
Reference
この問題について(Dockerでセットアッププロジェクト), 我々は、より多くの情報をここで見つけました https://dev.to/drack112/setup-a-django-project-with-docker-128fテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol