0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

dockerを使ってPython+django+nginx+MySQL環境を構築

Last updated at Posted at 2020-12-20

Dockerを使ってWebシステム開発環境を構築

Dockerを使う理由

自身での環境構築に苦戦

別記事で環境構築について投稿しています。
その時に非常に苦戦しました。(というか敗北しました…)

「今回はDockerを使って環境構築をするのも手。」

ということで、自身での環境構築はまた理解が深まった際に、もう1度リベンジしようと思います。

なぜDockerなのか?

まずDockerについて理解を深めます。
以下の記事を参照しました。
https://koni.hateblo.jp/entry/2017/01/28/150522
https://knowledge.sakura.ad.jp/13265/
https://www.kagoya.jp/howto/rentalserver/container-03/

Docker-composeとは

Docker compose とは、複数のコンテナから成るサービスを構築・実行する手順を自動的にし、管理を容易にする機能です。
Docker compose では、compose ファイルを用意してコマンドを1 回実行することで、そのファイルから設定を読み込んですべてのコンテナサービスを起動することができます。

参照
https://qiita.com/TsutomuNakamura/items/7e90e5efb36601c5bc8a

# yum install git
# ~~~の部分は自身が構築する環境に合わせて、githubからコピー
# git clone https://github.com/~~~~~~

Cloning into 'docker-django'...
remote: Enumerating objects: 315, done.
remote: Counting objects: 100% (315/315), done.
remote: Compressing objects: 100% (96/96), done.
remote: Total 315 (delta 214), reused 308 (delta 211), pack-reused 0
Receiving objects: 100% (315/315), 5.81 MiB | 1.48 MiB/s, done.
Resolving deltas: 100% (214/214), done.

ダウンロード完了後の階層は以下のようになっています。

# ll
total 0
drwxr-xr-x. 8 root root 99 Dec 17 07:36 docker-django

Dockerのインストール

インストールに関しては以下の記事を参考にしました。
https://zenn.dev/ymasaoka/articles/install-docker-centos-7

Dockerのバージョンを確認します。

# docker --version
-bash: docker: command not found

当然インストールされていないので、インストールしていきます。

公式サイトではCentOSのメンテナンスバージョンのみサポートと記載されています。
https://docs.docker.com/engine/install/centos/

そこでまずCentOSを最新の状態にします。
5分ほど時間がかかります。

# yum update

公式レポジトリのインストール

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Docker CEのインストール

yum install -y docker-ce docker-ce-cli containerd.io

バージョン確認

# docker --version
Docker version 20.10.1, build 831ebea

Dockerの起動

# systemctl start docker

自動起動設定

# systemctl enable docker

Docker-composeのインストール

以下の公式サイトを参考にしました。
https://docs.docker.com/compose/install/

# sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   651  100   651    0     0   4672      0 --:--:-- --:--:-- --:--:--  4683
100 11.6M  100 11.6M    0     0  1663k      0  0:00:07  0:00:07 --:--:-- 1983k

Docker-composeインストールの確認

# docker-compose --version
docker-compose version 1.27.4, build 40524192

Docker-composeの権限

まずDocker-compose upを行ったところ、権限に関するエラーが発生しました

# docker-compose up
-bash: /usr/local/bin/docker-compose: Permission denied

権限を付与します。
+xで実行権限を付与します。
権限の付与については以下の記事を参考にしました。
https://qiita.com/ntkgcj/items/6450e25c5564ccaa1b95

sudo chmod +x /usr/local/bin/docker-compose

Docker-composeの実行

# docker-compose up

【メモ】
最後に-dをつけるとバックグラウンドで起動します。

docker-composeでコンテナを起動します。

実行結果の最後の方のみ記載。
(エラーは出ていないはず??次回作業時確認!)

Digest: sha256:b1d09e9718890e6ebbbd2bc319ef1611559e30ce1b6f56b2e3b479d9da51dc35
Status: Downloaded newer image for nginx:1.13
Creating docker-django_db_1 ... done
Creating docker-django_python_1 ... done
Creating docker-django_nginx_1  ... done
Attaching to docker-django_db_1, docker-django_python_1, docker-django_nginx_1
db_1      | 2020-12-17 08:26:22+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.32-1debian10 started.
db_1      | 2020-12-17 08:26:23+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
db_1      | 2020-12-17 08:26:23+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.32-1debian10 started.
db_1      | 2020-12-16T23:26:23.591372Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
db_1      | 2020-12-16T23:26:23.598365Z 0 [Note] mysqld (mysqld 5.7.32) starting as process 1 ...
db_1      | 2020-12-16T23:26:23.601759Z 0 [Note] InnoDB: PUNCH HOLE support available
db_1      | 2020-12-16T23:26:23.601790Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
db_1      | 2020-12-16T23:26:23.601798Z 0 [Note] InnoDB: Uses event mutexes
db_1      | 2020-12-16T23:26:23.601806Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
db_1      | 2020-12-16T23:26:23.601814Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
db_1      | 2020-12-16T23:26:23.601824Z 0 [Note] InnoDB: Using Linux native AIO
db_1      | 2020-12-16T23:26:23.602178Z 0 [Note] InnoDB: Number of pools: 1
db_1      | 2020-12-16T23:26:23.602323Z 0 [Note] InnoDB: Using CPU crc32 instructions
db_1      | 2020-12-16T23:26:23.613511Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
db_1      | 2020-12-16T23:26:23.626984Z 0 [Note] InnoDB: Completed initialization of buffer pool
db_1      | 2020-12-16T23:26:23.629335Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
db_1      | 2020-12-16T23:26:23.651521Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
db_1      | 2020-12-16T23:26:23.750055Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
db_1      | 2020-12-16T23:26:23.760013Z 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
db_1      | 2020-12-16T23:26:23.819358Z 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
db_1      | 2020-12-16T23:26:23.820262Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
db_1      | 2020-12-16T23:26:23.820287Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
db_1      | 2020-12-16T23:26:23.820537Z 0 [Note] InnoDB: Waiting for purge to start
db_1      | 2020-12-16T23:26:23.871301Z 0 [Note] InnoDB: 5.7.32 started; log sequence number 13003109
db_1      | 2020-12-16T23:26:23.873814Z 0 [Note] Plugin 'FEDERATED' is disabled.
db_1      | 2020-12-16T23:26:23.874376Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
db_1      | 2020-12-16T23:26:23.950993Z 0 [Note] Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to enable SSL support using them.
db_1      | 2020-12-16T23:26:23.951023Z 0 [Note] Skipping generation of SSL certificates as certificate files are present in data directory.
db_1      | 2020-12-16T23:26:23.963368Z 0 [Warning] CA certificate ca.pem is self signed.
db_1      | 2020-12-16T23:26:23.963432Z 0 [Note] Skipping generation of RSA key pair as key files are present in data directory.
db_1      | 2020-12-16T23:26:23.974071Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
db_1      | 2020-12-16T23:26:23.974182Z 0 [Note] IPv6 is available.
db_1      | 2020-12-16T23:26:23.974204Z 0 [Note]   - '::' resolves to '::';
db_1      | 2020-12-16T23:26:23.974242Z 0 [Note] Server socket created on IP: '::'.
db_1      | 2020-12-16T23:26:24.040014Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
db_1      | 2020-12-16T23:26:24.067064Z 0 [Note] InnoDB: Buffer pool(s) load completed at 201217  8:26:24
db_1      | 2020-12-16T23:26:24.350990Z 0 [Note] Event Scheduler: Loaded 0 events
db_1      | 2020-12-16T23:26:24.351267Z 0 [Note] mysqld: ready for connections.
db_1      | Version: '5.7.32'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

docker-compose.ymlの中身

version: '3'
services:
    nginx:
       image: nginx:1.13
       ports:
          - "80:80"
       volumes:
          - ./nginx/conf:/etc/nginx/conf.d
       depends_on:
          - python
    db:
        image: mysql:5.7
        ports:
          - "3306:3306"
        environment:
          MYSQL_ROOT_PASSWORD: mysql
          MYSQL_DATABASE: mysql
          MYSQL_USER: mysql
          MYSQL_PASSWORD: mysql
          TZ: 'Asia/Tokyo'
        volumes:
          - ./mysql:/var/lib/mysql
          - ./sql:/docker-entrypoint-initdb.d
    python:
        build: ./python
        command: uwsgi --socket :8001 --module app.wsgi --py-autoreload 1 --logt
o /tmp/mylog.log
        volumes:
           - ./src:/code
           - ./static:/static
        expose:
           - "8001"
        depends_on:
           - db

ブラウザからのアクセス

docker-composeで起動した後、webからアクセスしてみます。
http://[IPアドレス]
http://[IPアドレス]:80

アクセス画面(上手くいっていない?)

image.png

アクセスするとTera Term上でこのように反応がありました。

nginx_1   | 103.5.140.159 - - [17/Dec/2020:22:45:03 +0000] "GET / HTTP/1.1" 500 32 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" "-"
nginx_1   | 103.5.140.159 - - [17/Dec/2020:22:45:04 +0000] "GET /favicon.ico HTTP/1.1" 500 32 "http://140.227.75.4/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" "-"

ALLOWD HOSTを設定していませんでした。

./src/mysite/settings.pyの

ALLOWED_HOSTS = ['[IPアドレス]',]

まだアクセスできない。
docker-ps
を使って状態を見てみます。

# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                               NAMES
f4ef866fe8e8   nginx:1.13             "nginx -g 'daemon of…"   24 hours ago     Up 3 minutes    0.0.0.0:80->80/tcp                  docker-django_nginx_1
6c7057c4c1fd   docker-django_python   "uwsgi --socket :800…"   24 hours ago     Up 3 minutes    8001/tcp                            docker-django_python_1
ba3f3cfef45d   mysql:5.7              "docker-entrypoint.s…"   24 hours ago     Up 3 minutes    0.0.0.0:3306->3306/tcp, 33060/tcp   docker-django_db_1
[root@qsbbvu1t docker-django]#

STATUSがupなので立ち上がってはいそうです。

Dockerのマイグレーション

マイグレーション作業を行っていませんでした。
以下のサイトを参考に作業を行います。
https://qiita.com/kenkono/items/6221ad12670d1ae8b1dd#django%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E5%AE%9F%E8%A1%8C

以下のエラー発生。
MySQL関連ですね。
pymysqlがdjangoの新バージョンにまだ対応していないとのこと。

# docker-compose run python ./manage.py makemigrations

raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.8.0.

同じエラー発生。
調べたところpymysqlはそもそもdjango2.2に対応していないとのこと。

解決するには、
①pymysqlの代わりにmysqlclientを入れる(django推奨)
②djangoのバージョンを2.2から2.1に下げる

sqlclientのインストール

djangoのバージョンを下げることはセキュリティ上適切ではありません。
そこで、今回はpymysqlの代わりにmysqlclientを使用することにしました。

エラーの中にはmysqlclientのバージョン1.3.13以上が必要と記載されていました。
そこで、requirements.txtの内容を以下にかきかえました。

# vi requirements.txt

Django==2.2.13
uwsgi==2.0.17
mysqlclient==1.3.13

マイグレーション

マイグレーションとは以下の意味です。
プログラムやデータ、OSなどの環境やプラットフォームを移行、変換すること。

manage.pyが存在するディレクトリまで移動して以下を実行。

[root@qsbbvu1t src]# docker-compose run python ./manage.py makemigrations

以下、エラー発生。

Creating docker-django_python_run ... done
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 361, in execute
    self.check()
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 390, in check
    include_deployment_checks=include_deployment_checks,
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 377, in _run_checks
    return checks.run_checks(**kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/core/checks/registry.py", line 72, in run_checks
    new_errors = check(app_configs=app_configs)
  File "/usr/local/lib/python3.6/site-packages/django/core/checks/urls.py", line 10, in check_url_config
    if getattr(settings, 'ROOT_URLCONF', None):
  File "/usr/local/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/local/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/code/app/settings.py", line 14, in <module>
    import pymysql
ModuleNotFoundError: No module named 'pymysql'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 336, in run_from_argv
    connections.close_all()
  File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 219, in close_all
    for alias in self:
  File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 213, in __iter__
    return iter(self.databases)
  File "/usr/local/lib/python3.6/site-packages/django/utils/functional.py", line 80, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 147, in databases
    self._databases = settings.DATABASES
  File "/usr/local/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/local/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/code/app/settings.py", line 14, in <module>
    import pymysql
ModuleNotFoundError: No module named 'pymysql'

pymysqlの記述があるところがエラーの原因みたいです。
mysqlclientに書き換えていきます。

# vi settings.py

pymysqlをコメントアウトし、mysqlclientのimportを追記しました。

import os
import mysqlclient
# import pymysql

# connect mysql
# pymysql.install_as_MySQLdb()
mysqlclient.install_as_MySQLdb()

もう1回マイグレーションしてみます。

エラー発生。

# docker-compose run python ./manage.py makemigrations
Creating docker-django_python_run ... done
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 361, in execute
    self.check()
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 390, in check
    include_deployment_checks=include_deployment_checks,
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 377, in _run_checks
    return checks.run_checks(**kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/core/checks/registry.py", line 72, in run_checks
    new_errors = check(app_configs=app_configs)
  File "/usr/local/lib/python3.6/site-packages/django/core/checks/urls.py", line 10, in check_url_config
    if getattr(settings, 'ROOT_URLCONF', None):
  File "/usr/local/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/local/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/code/app/settings.py", line 14, in <module>
    import mysqlclient
ModuleNotFoundError: No module named 'mysqlclient'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 336, in run_from_argv
    connections.close_all()
  File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 219, in close_all
    for alias in self:
  File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 213, in __iter__
    return iter(self.databases)
  File "/usr/local/lib/python3.6/site-packages/django/utils/functional.py", line 80, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 147, in databases
    self._databases = settings.DATABASES
  File "/usr/local/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/local/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/code/app/settings.py", line 14, in <module>
    import mysqlclient
ModuleNotFoundError: No module named 'mysqlclient'

んー。上手くいかない。
調べていたところ、settings.pyにimport mysqlclientを記載しなくてよいような情報を発見。
https://zerofromlight.com/blogs/detail/29/

試してみます。

# vi settings.py
import os
# import mysqlclient
# import pymysql

# connect mysql
# pymysql.install_as_MySQLdb()
# mysqlclient.install_as_MySQLdb()
# docker-compose run python ./manage.py makemigrations
Creating docker-django_python_run ... done
No changes detected

上手くいったのか?
マイグレーションを実行。

# docker-compose run python ./manage.py migrate
Creating docker-django_python_run ... done
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK

お、行けたっぽい気がする。

dockerコンテナの立ち上げ

# docker-compose build
db uses an image, skipping
nginx uses an image, skipping
Building python
Step 1/7 : FROM python:3.6
 ---> 4a03e5e8adde
Step 2/7 : ENV PYTHONUNBUFFERED 1
 ---> Using cache
 ---> 8c1a88d570f3
Step 3/7 : RUN mkdir /code
 ---> Using cache
 ---> 7f012356f716
Step 4/7 : WORKDIR /code
 ---> Using cache
 ---> 647e9247446c
Step 5/7 : ADD requirements.txt /code/
 ---> Using cache
 ---> 31fc46edeab4
Step 6/7 : RUN pip install -r requirements.txt
 ---> Using cache
 ---> ec091df899d8
Step 7/7 : ADD . /code/
 ---> Using cache
 ---> ff87162e0f0d

Successfully built ff87162e0f0d
Successfully tagged docker-django_python:latest
# docker-compose up

特にエラーは出ず、以下のところでストップ。
(コマンドは入力できない状態)

db_1      | Version: '5.7.32'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

コマンド入力できないので、バックグラウンドで立ち上げます。

# docker-compose up -d
Starting docker-django_db_1 ... done
Starting docker-django_python_1 ... done
Starting docker-django_nginx_1  ... done

起動できているかの確認。
STATUSがUpなので大丈夫っぽいです。

# docker-compose ps
         Name                   Command           State           Ports
--------------------------------------------------------------------------------
docker-django_db_1       docker-entrypoint.sh     Up      0.0.0.0:3306->3306/tcp
                         mysql ...                        , 33060/tcp
docker-django_nginx_1    nginx -g daemon off;     Up      0.0.0.0:80->80/tcp
docker-django_python_1   uwsgi --socket :8001     Up      8001/tcp
                         --mod ...

http://[IPアドレス]:[ポート番号(自分は80)]
でwebから接続。

image.png

やっとアクセスできました!!

CSSの適用

管理者画面(http://[IPアドレス]/admin)に行くと、CSSが適用されていないことが確認されました。

image.png

CSSを適用させます。

# vi settings.py

STATIC_ROOTを追記しました。

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = '/static'

以下のコマンドを実行。

# docker-compose run python ./manage.py collectstatic
Creating docker-django_python_run ... done

119 static files copied to '/static'.

ブラウザのページを更新します。
CSSが適用されて見やすくなりました。

image.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?