Djangoを一からセットアップしてみた（Vagrant, Centos, Python3）

# はじめに
先日、ローカル環境でAnacondaを使ってみたのですが、「これをブラウザで表示することはできないものか…？」と思い、Djangoを使える環境を作ることにしました。

今回はVagrantのbox立ち上げから、ブラウザにDjangoの仮想サーバ画面を表示するところまで行いました。

最終的には、
　ブラウザ上でフォームに入力
→送られたデータを基にサーバ側で機械学習モデルが計算
→結果をブラウザに返す
という感じのアプリが作れたらなと思っております。

# 実行環境
ホストOS： Windows10
ゲストOS： Centos7(Vagrant)

# VagrantのBoxを作る
こちらは[Vagrant+Python3+Django環境でHelloWorld](https://qiita.com/192_60_33_2/items/73df25e2dd64217165ae)を参考にしました。
コマンドプロンプトで作業します。

```
vagrant box add centos/7
vagrant init centos/7
```

生成されたVagrantfileに以下の2行を追記。

```
config.vm.synced_folder "./", "/home/vagrant/work"
config.vm.network "forwarded_port", guest: 8000, host: 18000
```
コマンドプロンプトに戻ってvagrantを起動します。

```
vagrant up
vagrant ssh
```
# Python3をインストール
デフォルトで入っているのがpython2系のみだったので、python3を入れたい。今後のことを考えると、バージョン管理ソフトを使うのが得策かなと思ったので、pyenvを使うことにしました。非推奨らしいですが……。
[pyenv を用いた Python3 インストール](https://qiita.com/hasepyon/items/45ea509c64a6469ca5b6)を参考にしています。


必要な諸々を準備。ここからはTeratermで作業しています。vagrant sshでも良いかも知れません。

```
$ sudo yum groupinstall "Development tools"
$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git
```
pyenvをインストール

```
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source .bash_profile
```

pyenvを最新版に

```
$ pyenv --version
pyenv 1.2.3-43-g35f7ef8
$ pyenv install --list # インストール可能なpythonが大量に出てきます
$ pyenv install 3.8.3 # 使いたいバージョンがあることを確認し、インストール
$ pyenv global 3.8.3
```

pyenv, pythonのバージョンを確認

```
$ pyenv versions
  system
* 3.8.3 (set by /home/vagrant/.pyenv/version)
$ python --version
Python 3.8.3

```

# Djangoをインストール
旧Djangoを削除（存在しないことが確認できれば良し）

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

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

```
$ pip install virtualenv
$ pip install virtualenvwrapper
$ pip install Django
```

Djangoのバージョン確認

```
$ python -m django --version
3.0.6
```

# SQLite3のバージョンアップ
Vagrantのデフォルトで入っているSQLite3はバージョンが古いらしく、そのままサーバを立ち上げようとするとエラーが出るので、新しいものをインストールします。
[Django入門 (チュートリアル) - とほほのWWW入門](http://www.tohoho-web.com/django/tutorial.html)が参考になりました。

```
$ yum install -y wget gcc make
$ wget https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz
$ tar zxvf ./sqlite-autoconf-3290000.tar.gz
$ cd ./sqlite-autoconf-3290000
$ ./configure --prefix=/usr/local
$ make
$ make install
$ cd ..
$ rm -rf ./sqlite-autoconf-3290000 ./sqlite-autoconf-3290000.tar.gz
$ mv /usr/bin/sqlite3 /usr/bin/sqlite3_old
$ ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3
$ echo 'export LD_LIBRARY_PATH="/usr/local/lib"' >> ~/.bashrc
$ source ~/.bashrc
```

# Djangoの仮想サーバに接続
/home/vagrant/work配下にプロジェクトを作成。
Vagrantfileで設定したので、ここに作ったファイルやアプリがローカルと仮想環境で共有されます。

※確認（Vagrantfile）

```
config.vm.synced_folder "./", "/home/vagrant/work"
```

Djangoプロジェクト作成

```
$ cd /home/vagrant/work
$ django-admin startproject mysite # mysiteはお好みのプロジェクト名で
$ cd mysite # プロジェクト内へ移動
$ python manage.py runserver 0:8000 # サーバ起動
```

あとはhttp://127.0.0.1:8000 をブラウザに打ち込めばページが開けます！

![django.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647951/517af70a-aac2-018a-d359-e4fa6a115196.jpeg)

# 後記
当初、サーバは起動しているのにブラウザでは何も表示できず、かなり手間取りました。何とか自力で解決できて良かったです。
でも、やりきったぞ感はあるけどこれはあくまで準備段階。アプリケーションを完成させるまで道のりは遠そうです。

# 参考
VagrantからDjangoインストールまで全般：
[Vagrant+Python3+Django環境でHelloWorld](https://qiita.com/192_60_33_2/items/73df25e2dd64217165ae)

SQLite3のバージョンアップ：
[Django入門 (チュートリアル) - とほほのWWW入門](http://www.tohoho-web.com/django/tutorial.html)

pythonのインストール・管理：
[pyenv を用いた Python3 インストール](https://qiita.com/hasepyon/items/45ea509c64a6469ca5b6)