LoginSignup
0
3

More than 3 years have passed since last update.

Anaconda + Diangoを連携

Posted at

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

これでサーバーを起動することができますので、見てみるといいでしょう。

_2020-04-03_18.17.13.png

ここから先は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作成を作成しているので、余裕があればそちらも記事にできたらと思っています。

0
3
0

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
0
3