はじめに
先日、ローカル環境でAnacondaを使ってみたのですが、「これをブラウザで表示することはできないものか…?」と思い、Djangoを使える環境を作ることにしました。
今回はVagrantのbox立ち上げから、ブラウザにDjangoの仮想サーバ画面を表示するところまで行いました。
最終的には、
ブラウザ上でフォームに入力
→送られたデータを基にサーバ側で機械学習モデルが計算
→結果をブラウザに返す
という感じのアプリが作れたらなと思っております。
実行環境
ホストOS: Windows10
ゲストOS: Centos7(Vagrant)
VagrantのBoxを作る
こちらはVagrant+Python3+Django環境でHelloWorldを参考にしました。
コマンドプロンプトで作業します。
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 インストールを参考にしています。
必要な諸々を準備。ここからは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入門が参考になりました。
$ 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 をブラウザに打ち込めばページが開けます!
後記
当初、サーバは起動しているのにブラウザでは何も表示できず、かなり手間取りました。何とか自力で解決できて良かったです。
でも、やりきったぞ感はあるけどこれはあくまで準備段階。アプリケーションを完成させるまで道のりは遠そうです。
参考
VagrantからDjangoインストールまで全般:
Vagrant+Python3+Django環境でHelloWorld
SQLite3のバージョンアップ:
Django入門 (チュートリアル) - とほほのWWW入門
pythonのインストール・管理:
pyenv を用いた Python3 インストール