====== 27 Docker Djnago ====== Docker でJango環境を作ってみる。 pipでのインストールは、[[15_python:01_django:01_install]] です。 ===== 1 ファイル用意 ===== FROM python:3.11 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip3 install -r requirements.txt ADD . /code/ EXPOSE 8000 Django>=4.2 mysqlclient==1.4.6 djangorestframework==3.14.0 django-cors-headers==4.3.1 version: '3' services: django: container_name: "django" build: . command: python3 manage.py runserver 0.0.0.0:8000 working_dir: /code ports: - 8000:8000 volumes: - .:/code depends_on: - db environment: - CHOKIDAR_USEPOLLING=true db: container_name: "db" image: mysql:8.0 restart: always environment: MYSQL_DATABASE: "db" MYSQL_ROOT_PASSWORD: 'password' volumes: - ./mysql:/var/lib/mysql ports: - 3306:3306 ※CHOKIDAR_USEPOLLING=Trueを入れておくと、編集するとホットリロードしてくれる。 ==== Let's Encryptリバースプロキシを利用する場合のdocker-compose.yml ==== [[06_virtualization:05_container:25_let_s_encrypt_proxy]]で、SSL化して利用する場合 version: '3' services: django: container_name: "django" build: . command: python3 manage.py runserver 0.0.0.0:8000 working_dir: /code #ports: # - 8000:8000 volumes: - .:/code depends_on: - db environment: - CHOKIDAR_USEPOLLING=true - VIRTUAL_HOST=django.fl8.jp - LETSENCRYPT_HOST=django.fl8.jp networks: - app_proxy-tier - default db: container_name: "db" image: mysql:8.0 restart: always environment: MYSQL_DATABASE: "db" MYSQL_ROOT_PASSWORD: 'password' volumes: - ./mysql:/var/lib/mysql ports: - 3306:3306 networks: app_proxy-tier: external: true ===== 2 build ===== docker-compose build ===== 3 Jangoプロジェクト作成 ===== ※[プロジェクト名]の後ろのドットが重要 docker-compose run django django-admin startproject [プロジェクト名] . 例: docker-compose run django django-admin startproject testproject . ==== プロジェクト作成後 ==== [プロジェクト名]/settings.pyに下記を追加 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'db', 'USER': 'root', 'PASSWORD': 'password', 'HOST': 'db', 'POST': 3306, 'OPTIONS': { 'charset': 'utf8mb4' } } } ===== 4 起動 ===== docker-compose up -d ==== ALLOWED_HOSTS追加 ==== この画面が出るので、ALLOWED_HOSTSにホスト名を追加 {{:06_virtualization:05_container:pasted:20231214-125010.png}} ALLOWED_HOSTS = ['django.fl8.jp'] or ALLOWED_HOSTS = ['{IP}'] ===== 5 確認 ===== ブラウザで http://[IP]:8000 をアクセス {{:06_virtualization:05_container:pasted:20230602-222642.png}} ===== 6 自動起動 ===== 再起動後の自動起動は、/etc/rc.localを使うのが良いかも [[06_virtualization:05_container:26_docker_iptables|Docker iptablesの話]] #!/bin/sh sleep 5 iptables -I DOCKER-USER -p tcp --dport 3306 -d 0.0.0.0/0 -d 172.23.0.2 -j DROP iptables -I DOCKER-USER -p tcp --dport 3306 -s 172.23.0.3 -d 172.23.0.2 -j ACCEPT iptables -I DOCKER-USER -p tcp --dport 3306 -s 192.168.10.10 -d 172.23.0.2 -j ACCEPT docker start django {{tag>docker django python}}