Vagrant+Python3+Django環境でHelloWorld

# はじめに
唐突にLINE botを作りたいなぁ、と思い立って、Vagrant、CentOS7でPython3 + Django環境を作りました
**インストール待ちとか除けば1時間あればHello World!までできる**と思います。

ちなみに前提としてはvagrant+virtualboxがインストールされていることです。

**最終的にLINE bot作成まで行う予定ですが、今回は最初のステップとして環境構築まで**

# VagrantでCentOS7の環境構築

vagrantについては [Vagrant + VirtualBoxでWindows上に開発環境をサクッと構築する](https://qiita.com/ozawan/items/160728f7c6b10c73b97e) がわかりやすいです。（Windowsへのインストールですが。。。）

centos7をboxに追加＋立ち上げ＋ログイン（cents7は公式で）

```shell-session
vagrant box add centos/7
vagrant init centos/7
vagrant up
vagrant ssh
```

# Python3のインストール

```shell-session
[vagrant@localhost ~]$ python --version
Python 2.7.5
[vagrant@localhost ~]$ yum search python3
```

どうやら２系しか入っていないので、[Python.org](https://www.python.org/)からダウンロードして、[Unix プラットフォームで Python を使う](https://docs.python.org/ja/3.7/using/unix.html#building-python) にそってインストールする
※pythonのバージョン違う場合は、バージョンの数値だけいじれば問題ないと思います。

**先にハマりポイント**
先に必要なものはインストールしておかないとあとあとハマるから注意！！！
※どんな感じにハマるかは[python3にpipがインストールされてないし、できなくてハマってる人へ](https://qiita.com/192_60_33_2/items/5de1fe9fcfd89ff0faeb)を参照

```shell-session
sudo yum install -y zlib-devel
sudo yum install -y libffi-devel
sudo yum install -y wget
sudo yum install -y openssl-devel
sudo yum install -y postgresql-devel
sudo yum install -y sqlite-devel

## postgresqlはあとあと使う予定
```

上のインストールが終わったら、こっちにもどる

```shell-session
[vagrant@localhost ~]$ cd /usr/local/bin
[vagrant@localhost bin]$ sudo wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
[vagrant@localhost bin]$ sudo tar xvzf Python-3.7.0.tgz
[vagrant@localhost bin]$ cd Python-3.7.0/
[vagrant@localhost Python-3.7.0]$ sudo ./configure
[vagrant@localhost Python-3.7.0]$ sudo make altinstall
[vagrant@localhost Python-3.7.0]$ /usr/local/bin/python3.7 --version
Python 3.7.0
```

一応パスを通す（`python3`にしたいだけ）
そしたら、python2系と3系を使い分けれる感じになった

```shell-session
[vagrant@localhost Python-3.7.0]$ sudo ln -s /usr/local/bin/python3.7 /usr/bin/python3
[vagrant@localhost Python-3.7.0]$ python3 --version
Python 3.7.0
[vagrant@localhost Python-3.7.0]$ python --version
Python 2.7.5
```

# Djangoをインストール

[Djangoのインストール方法](https://docs.djangoproject.com/ja/2.0/topics/install/)のなすがままにインストールする

### まずは、古いバージョンの Django を削除する

`pip or easy_install`でインストールしていれば特に削除する必要なし。勝手に最新版になる。
`python setup.py install`使ったならDjangoのディレクトリごと消してやればいい。
（って解釈しました）

で、このコマンドでバージョンが返ってこなければOK

```shell-session
[vagrant@localhost app]$ python -c "import django; print(django.__path__)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named django
```

### pipでインストールする(オフィシャルリリースをインストールするのやり方)

`pip`は、python3.4以降であればデフォルトで入っているので気にしない、パスを通す（`pip3`にしたいだけ）のとバージョンの最新化を実施

```shell-session
[vagrant@localhost bin]$ pip3.7 list
Package    Version
---------- -------
pip        10.0.1 
setuptools 39.0.1 
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skippin
[vagrant@localhost bin]$ sudo ln -s /usr/local/bin/pip3.7  /usr/bin/pip3
[vagrant@localhost bin]$ pip3 --version
pip 10.0.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
[vagrant@localhost bin]$ sudo pip3 install --upgrade pip
Successfully installed pip-18.0
```

※ちなみに`pip3.7` と `python3.7 -m pip` は同じです

virtualenv、virtualenvwrapper、djangoをインストール

```shell-session
[vagrant@localhost bin]$ sudo pip3 install virtualenv
[vagrant@localhost bin]$ sudo pip3 install virtualenvwrapper
[vagrant@localhost bin]$ sudo pip3 install Django
```

# DjangoでHello World！

[はじめての Django アプリ作成、その 1](https://docs.djangoproject.com/ja/2.0/intro/tutorial01/) のなすがままに進める

**「python」→「python3」で実行する（3.7を新しくインストールしたので。）**

Djangoがインストールされているかチェック！

```shell-session
[vagrant@localhost bin]$ python3 -m django --version
2.0.7
```

アプリケーションを置きたいところで、以下を実行

```shell-session
[vagrant@localhost app]$ django-admin startproject mysite
[vagrant@localhost app]$ cd mysite
[vagrant@localhost mysite]$ python3 manage.py runserver
```

本来、ここでHelloWorldのページが見れるはず。
しかし、仮想環境に作成したため`http://127.0.0.1:8000`では確認できず。
一度、仮想環境からログアウトして`forwarded_port`設定をおこなう

`Vagrantfile`に`config.vm.network "forwarded_port", guest: 8000, host: 18000 `を追加する
※元々、`config.vm.network "forwarded_port"`がコメントアウトされているので、その下にでも足してください。

再度、仮想環境へログイン

```shell-session
vagrant reload
vagrant ssh
```

サーバを起動
ただし、今回はちょっとしたオプションを追加（他PCからも見れるよ設定を追加）

```shell-session
[vagrant@localhost -]$ cd app/mysite
[vagrant@localhost mysite]$ python3 manage.py runserver 0:8000
```

これで`http://127.0.0.1:18000/`でページがひらけたはず！

「The install worked successfully! Congratulations!」というメッセージとロケットみたいなのが表示されたらOK！

# おわりに

今回はここまで

どうですかね？待ち時間含めても2〜3時間でここまでいけたのでは？と思います。
もしハマりポイントがあれば、ご指摘ください。

次回は、DjangoでCRUDを作るところを記載しようと思います。
LINE botはまだ先になりそうだ。。。