おはこんばんちは!
株式会社HitsujiDesignの辻です。
最近はdjangoで遊んでいます。
今回はVPS上にdocker+djangoでサーバ構築したので、備忘も兼ねてやったことを書いていこうと思います。
※ 勉強中ゆえ、間違っている部分があるかもしれないですm(_ _)m
Dockerって?
ざっくりとしたジャンルでいうと仮想化技術の1つです。
Dockerfileにイメージの定義を記述し、その通りにイメージを構築します。
パブリックリポジトリのイメージを使用する場合、再配布が容易です。
つまりVMイメージそのものを配布する必要がないということですね。
Dockerで大事になる用語が「イメージ」と「コンテナ」です。
イメージはざっくりいうとVMイメージ
コンテナはざっくりいうとVMのプロセスに近いイメージです。
Dockerで動くコンテナ同士を関連付けることもできます。
その際登場するのが、「docker-compose」です。
まさに今回はdocker-composeを使用しています。
詳しくは以下のページを参照してください。
Djangoって?
PythonのFWの一種です。すごく楽にWEBアプリが開発できます。
個人的なイメージとしては、モデル設計(データ設計)が大事で、それに伴ってVIEWの設計を行っていくのがやりやすいです。
Controlの設計はほぼURLの設計を行うだけです。
また認証機能も標準で備わっており、それもまた便利です。
まずは単純にDjangoコンテナのみで構築してみる。
を参考にDockerfileなどを作成。
起動はしたものの、Chromeでは見れず。。。
どうやらhttps通信ができないことが原因のようだ。
そこでこんな疑問が・・・
「dockerでhttps通信の設定ってどうするんだ?」
https-portalを使えばいいらしい
上記記事にたどり着き、どうやらいい感じにやってくれるコンテナイメージがあるらしい。
というわけでhttps-portalを組み込んで見る。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
version: '3' services: https-portal: image: steveltn/https-portal:1 ports: - '80:80' - '443:443' links: - web restart: always environment: DOMAINS: 'xxxx -> http://web:8080' STAGE: 'production' # 'local' or 'production' volumes: - /var/lib/ssl_certs:/var/lib/https-portal web: build: . volumes: - .:/code ports: - '8080' command: python manage.py runserver 0.0.0.0:8080 |
簡単に解説すると
ホストがポート80、443で受けた通信をhttps-portalコンテナに転送し、その通信をwebコンテナに転送します。
docker-compose up してみると・・・
無事いつもの画面が表示されました!
あとはアプリを実装していくだけです。
Dockerおもしろい!
Dockerいいですね!
昔携わった案件でvagrantを使ったことがあるのですが、その時はよくわからずやってましたが
改めて勉強するとおもしろかったです!
キャッチアップで割と大変な(というより面倒くさい)環境構築が簡単にできるのは最高です。
弊社でも積極的に取り入れてまいります。
株式会社HitsujiDesign
https://hitsuji.design/