Dockerでセットアッププロジェクト


🐍


私たちはすべてのdjangoは、アプリケーションのためにも、私たちは、Dockerとの会話が良くなると知っている!
私はあなたにあなたの開発をスピードアップするだけでなく、あなたの環境をあなたのアプリケーションのために進めて、完了させることができるあなたのプロジェクトの初期のセットアップを示しますか?
興味ある?だから読んで、私に残りのままにします.

要件

  • Python
  • ドック
  • 始動✅


    開発環境を作成するためにテストアプリケーションを使用するつもりですが、このセットアップはどんなプロジェクトにも適用されます.
    ちょうどあなたが作る変更に留意してください.
    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データベースアダプタ
  • ヒント

  • MySQLとデリバティブの種類についてはmysqlclient
  • 3 -我々のアプリinitしましょう
    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 :

  • HTMLとCSSでdjangoを使用する人々のために、私はすべての静的ファイルをテンプレートフォルダに入れたいです
  • # 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,
        }
    }
    

    その他のヒント

  • このオプションはrecomendyです.
  • # 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
    

    簡単な方法でアプリケーションを開発することができます.
    今、我々は結果を見ることができます!

    私はこのチュートリアルで私は特別なタッチであなたのジャンゴアプリケーションを作るのに役立っていることを願っています.
    また会いましょう!