LoginSignup
20

More than 5 years have passed since last update.

Docker上でAnacondaを使って入れたDjangoをHerokuで動かす

Last updated at Posted at 2017-02-05

はじめに

1.Djangoを触ってみようと思った
2.pythonのパッケージ管理は全部anacondaのcondaでやりたい
3.Dockerで環境を分けるのでcondaで仮想環境とかは用意しない
4.ローカルの開発環境も本番環境もDockerでやりたい
5.Djangoの入門におすすめらしいDjango GirlsのTutorialを動かす前提でやる
6.本番環境はDjango GirlsのTutorialに従ってHerokuに公開する

こんな感じの方針でHeroku上でDockerを動かし、そこでAnaconda経由で入れたDjangoを動かす環境の用意の仕方をまとめます。

※※※※※
普段Djangoどころかサーバーサイドのプログラムをしない素人のまとめです。
Dockerも触り始めたばかりでもっと効率良い仕組みもある気がしてます。
何かこうした方がいいとかあればぜひ教えてください。
※※※※※

参考

Django入門にはDjango Girls Tutorialがおすすめ
データサイエンティストを目指す人のpython環境構築 2016
Dockerの作業済みコンテナからイメージを作って移植を楽にする
Django Girls Tutorial
Heroku Container Registry and Runtime

事前準備

各自のコマンドライン環境でgitとdockerとherokuは使えるようにしておいてください。

最終的なファイル構成

djangogirls/
     ├Dockerfile
     └webapp/
        └<django project>

環境構築方法

(※ホスト)側と(※コンテナ)側で実行します。

※※※※※
手っ取り早く試したい人はdocker pull sakiyamak/djangoを取って、「9.herokuにデプロイするためのDockerfileを用意する」まで進んでください。
※※※※※

1.プロジェクトのルートディレクトリを用意する

(ホスト側)
mkdir path/to/djangogirls
mkdir path/to/djangogirls/webapp
cd path/to/djangogirls

2.webapp/をマウントしてubuntuのコンテナを立ち上げる

(ホスト側)
docker pull ubuntu-upstart
docker run --name django -v path/to/djangogirls/webapp:/root/webapp -i -t ubuntu-upstart:latest /bin/bash

3.gitを入れる

(コンテナ側)
apt-get update
apt-get install git -y

4.pyenvを入れる

(コンテナ側)
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc

5.miniconda3(またはanaconda3)を入れる

(コンテナ側)
pyenv install miniconda3-latest
pyenv rehash
pyenv global miniconda3-latest

6.djangoを入れる

(コンテナ側)
conda install -c conda-forge django=1.10.5 -y

7.マウントしたディレクトリにdjangoプロジェクトを作成する

(コンテナ側)
cd ~/webapp
django-admin startproject mysite .

※これ以降はdjangogirlsに従ってdjangoの作業を進めました

8.コンテナをイメージとして保存

(ホスト側)
docker commit django djangogirls:1.0.0

ここまででローカルの開発環境は完成です。
同様の構成をしたイメージは以下で取得できます。

docker pull sakiyamak/django

9.herokuにデプロイするためのDockerfileを用意する

(ホスト側)djangogirls/Dockerfile
FROM djangogirls:1.0.0
COPY webapp/ ~/webapp
WORKDIR ~/webapp
CMD /root/.pyenv/shims/python manage.py runserver 0.0.0.0:$PORT

※anacondaを入れた場合はCMDのパスを変えてください
docker pull sakiyamak/djangoでイメージを作った人はFROMの部分を変えてください

10.herokuの管理画面でapp(yourappnameとする)を用意する

スクリーンショット 2017-02-06 0.08.52.png

スクリーンショット 2017-02-06 0.13.22.png

11.herokuにDockerfileをデプロイする

(ホスト側)
heroku plugins:install heroku-container-registry
heroku container:login
heroku container:push web --app yourappname

これでheroku上にDockerでdjangoの環境が用意できました!

12.ローカル環境の確認

(ホスト側)
docker rm -f django
docker run --name django -v path/to/djangoglrs/webapp:/root/webapp -p 8000:8000 -it djangogirls:1.0.0
(コンテナ側)
cd ~/webapp
python manage.py runserver 0.0.0.0:8000

http://0.0.0.0:8000 にアクセス

13.Heroku環境の確認

https://yourappname.herokuapp.com/ にアクセス

終わり

Django Girls Tutorialを進めるとこんな感じのサイトがHeroku上のDocker上で動きました

スクリーンショット 2017-02-06 0.31.48.png

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
20