Anaconda + Diangoを連携
この記事では、Anaconda + Diangoを連携させLINEのBOTを作成します。かなりめんどくさいのでできるならやらないほうがいいです笑
環境を作成するところから書いていきます、それ以前の基本的なUbuntuの設定については済ませておいてください。
環境作成
Apacheの環境作成
Apacheの環境を作成します。必要なものをインストール
sudo apt-get install apache2 apache2-bin apache2-dev
Anaconda のインストール
つぎにAnacondaをインストールします。
wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
sudo bash Anaconda3-2020.02-Linux-x86_64.sh
案内に従ってインストールしてください。(condaも認識するように)
次にAnacondaの設定をしていきます。Djangoをインストール。
sudo conda install django
Djangoのバージョンは以下:
python -m django --version
3.0.3
Django プロジェクト作成
次にDjanogのプロジェクトを作成していきます。チュートリアルページが参考になりました:https://docs.djangoproject.com/ja/2.2/intro/tutorial01/
今回は適当に以下で実行。
django-admin startproject linebot
これで現在いるディレクトリ下にlinebotというフォルダが作られます。
python manage.py runserver 0.0.0.0:8000
これでサーバーを起動することができますので、見てみるといいでしょう。
ここから先はDjangoのアプリケーションを作成したり、チュートリアルを参考にしてください。(ここでは割愛します)
DjangoとApacheの連携
次に一番の鬼門であるDjangoとApacheの連携をしていきます。これをするにはmod_wsgiというもので先程のDjangoとApacheを連携させます。
まずはインストール
pip install mod_wsgi
次に、インストール先を見つけます。
python -c "import sys; print(sys.path)"
['', '/home/vagrant/anaconda3/lib/python37.zip', '/home/vagrant/anaconda3/lib/python3.7', '/home/vagrant/anaconda3/lib/python3.7/lib-dynload', '/home/vagrant/.local/lib/python3.7/site-packages', '/home/vagrant/anaconda3/lib/python3.7/site-packages']
(base) vagrant@vagrant:~/.local/lib/python3.7/site-packages/mod_wsgi/server$ ls
__init__.py apxs_config.py management
__pycache__ environ.py mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so
環境によって異なりますが、今回はvagrantでやっていたので、このような場所にありました。
/etc/apache2/mods-available/wsgi.load にこのようにパスを記載します。
LoadModule wsgi_module /home/vagrant/.local/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so
ついでに/etc/apache2/mods-available/wsgi.conf にもこのように記載します。
<IfModule mod_wsgi.c>
WSGIPythonHome /home/vagrant/anaconda3
WSGIPythonPath /home/vagrant/anaconda3/bin
</IfModule>
そしてwsgiを有効化します。
sudo a2enmod wsgi
Enabling module wsgi.
To activate the new configuration, you need to run:
systemctl restart apache2
このような表示が出たら大丈夫です。
次にサイトの設定ファイルを作っていきます。
/etc/apache2/sites-available/default-ssl.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerName mikuaka.ddo.jp
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
NameVirtualHost *:443
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin your@name.com
ServerName your.name.com
ServerAlias www.your.name.com
WSGIDaemonProcess name display-name=%{GROUP} user=www-data group=www-data python-path=/home/ubuntu/your/project
WSGIProcessGroup name
WSGIScriptAlias / /var/www/name/wsgi.py
<Directory "/var/www/name">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /static/ /var/www/name/static/
<Directory /var/www/name/static/>
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/your.name.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/your.name.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/your.name.com/chain.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
自分はこんな感じで作りました。↑はSSLの設定も入っています。
最後にapacheを再起動させます。
sudo service apache2 restart
ということでいかがだったでしょうか?DjangoとApacheの連携はかなりめんどくさいのでやらないい事がわかっていただけたと思いますw
この環境を使いLINE Bot作成を作成しているので、余裕があればそちらも記事にできたらと思っています。