Anacondaで作った画像処理プログラムをApache+Djangoで動かしたくなったので簡単な自分用メモ。SSLとかセキュリティ的なことは全くしていません。
#CentOS7のインストール
公式サイトから、centos7のx86_64をクリックして、CentOS-7-x86_64-DVD-2003.isoをインストールして、USBメモリに焼いていきます。4.7GBなので、DVD-Rだと無理そう。
https://www.centos.org/download/
イメージが入っているUSBをインストールしたいPCに挿して、CentOSインストーラを起動していきます。
起動すると、言語の設定など、いろいろ出てくると思いますが、ソフトウェアの設定で、「GNOME Desktop」を選択するようにすると使いやすいと思います。
ネットワークとホスト名の設定で、ホスト名を設定できますが、後で変更できるのでデフォルトでもいいですが、ドメイン名を含んだFQDN形式で設定すると尚いいと思います。
そのままインストールをしていきます。
この辺の説明に関してはCentOSのインストールにわかりやすく書いてあります(筆者もこれを見ながらインストールしました)。
途中でrootのパスワードを設定しますが、必ず覚えておきましょう。
#Apacheのインストール
無事にCentOSがインストールできたら、ターミナル(端末)を起動しましょう。ここではApacheをyumというコマンドでインストールしていきます。
$ su -
パスワード: (rootのパスワード)
# yum list | grep httpd
httpd.x86_64
httpd-devel.x86_64
httpd-manual.noarch
httpd-ttools.x86_64
(以下いろいろ)
# yum -y install httpd httpd-tools httpd-devel httpd-manual
(インストール)
# yum list installed | grep httpd
httpd.x86_64
httpd-devel.x86_64
httpd-manual.noarch
httpd-ttools.x86_64
# systemctl start httpd
# systemctl status httpd
(ここで、● httpd.service - The Apache HTTP Server)みたいなのが出てきたら正常に起動しています。)
ここからは自動起動の設定
# systemctl enable httpd
# systemctl is-enabled httpd
enabled
80番ポートのオープン
# iptables -I INPUT 7 -p tcp --dport 80 -j ACCEPT
# service iptables save
# firewall-cmd --add-service=http --permanent
# firewall-cmd --reload
success
# getenforce
Enforcing
# vi /etc/selinux/config
enforcing から disabled に変更します
SELINUX=disabled
一度パソコンを再起動します
# getenforce
Disabled
これで大丈夫です。ここまでできたら、
# ifconfig
enp3s0: flags=***
inet 192.168.***.*** netmask 255.255.240.0
(いろいろ)
でIPアドレスを確認して、ブラウザにhttp://192.168.〇〇〇.〇〇〇などのように入力して、Testing 123...というウェルカムページが表示されていれば完了です。
Anacondaのインストール
Anacondaをインストールするときに、バージョン管理ツールのpyenvを入れます。
パッケージのアップデート
# yum update -y
pyenvをgitから取得
# cd /usr/local/bin
# git clone git://github.com/yyuu/pyenv.git ./pyenv
アクセスできるようにパスを設定
# echo 'export PYENV_ROOT="/usr/local/bin/pyenv"' >> ~/.bashrc
# echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
# echo 'eval "$(pyenv init -)"' >> ~/.bashrc
# source ~/.bashrc
# exec $SHELL -l
# pyenv --version
pyenv 1.2.20-7-gdd62b0d
こうなれば、pyenvのインストールは完了です。
それでは、Anacondaをインストールしていきます。
# pyenv install --list | grep anaconda
(パッケージがいろいろ出てくるので最新版を取得しましょう)
(私は後で使うモジュールと合わせるためにanaconda3-4.4.0を選びました)
# pyenv install anaconda3-4.4.0
# pyenv rehash
# pyenv global anaconda3-4.4.0
# pyenv version
anaconda3-4.4.0 (set by /usr/local/bin/pyenv/version)
# python -V
Python 3.6.1
これでAnacondaのインストールは完了です。
Djangoのインストール
Djangoを使いたいのでインストールしていきます。
condaのアップデート
# conda update conda
# conda update --all
# conda install django
せっかくなので、仮想環境を作っていきます。
# source create -n django
# source activate django
ちなみに仮想環境を抜けるときは
# source deactivate django
としましょう。
実際にdjangoが使えているか確認します。
# cd /var/www/
ここの名前はkomonじゃなくて、好きな名前でいいです(mysiteなど)
# django-admin startproject komon
# cd komon
# python manage.py makemigrations
# python manage.py migrate
# python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
*月 **, 2020 - **:**:**
Django version 3.1, using settings 'komon.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-
として、http://127.0.0.1:8000 をブラウザで打ち込んでみて、ロケットのようなウェルカムページが表示されていれば完了です。
では実際に文字を表示させていきます。
# python manage.py startapp myapp
# cd myapp
# vi views.py -> 編集
# vi urls.py -> 編集
from django.shutcuts import render
# create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, World!")
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
# cd ..
# cd komon
# vi urls.py -> 編集
# vi settings.py -> 編集
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')),
]
DEBUG = False <- TrueからFalseにする
ALLOWED_HOSTS = ['*']
INSTALLED_APPS - [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', <- 追加
]
ROOT_URLCONF = 'komon.urls'
WSGI_APPLICATION = 'komon.wsgi.application'
これで設定は終わりです。
WSGIのインストール
djangoのインストールまでは比較的できると思いますが、つまづくのがこのWSGIのインストールです。Apacheはデフォルトでpythonに対応していないので、wsgiを用いて、djangoを認識するようにするようなものらしいです。
これまでyumでいろいろインストールしてきましたが、yumでインストールするとCentOSにデフォルトで入ってるpython2系と結びつくらしいので、pipを使いましょう。
# pip install mod_wsgi
# python -c "import sys;print(sys.path)"
['','/usr/local/bin/pyenv/versions/anaconda3-4.4.0/lib/python36.zip',
'/usr/local/bin/pyenv/versions/anaconda3-4.4.0/lib/python3.6',
'/usr/local/bin/pyenv/versions/anaconda3-4.4.0/lib/python3.6/lib-dynload',
'/usr/local/bin/pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages']
と出るので、
/usr/local/bin/pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packagesを次のコマンドで打ち込みます。
# ls /usr/local/bin/pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/mod_wsgi/server/
mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
のとなるので、
/usr/local/bin/pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
を覚えておきましょう。
ここから、先ほど作ったDjangoのプロジェクトとつなげていきます。
# cd /etc/httpd/conf.d/
# vi django.conf
ここには、何も書かれていないまっさらなテキストになるので、以下を記述していきます。
LoadModule wsgi_module /usr/local/bin/pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so (さっきのやつ)
ServerName 192.168.***.*** (IPアドレス)
WSGIScriptAlias / /var/www/komon/komon/wsgi.py
WSGIPythonPath /var/www/komon:/usr/local/bin/pyenv/versions/anaconda3-4.4.0/bin/python
<Directory /var/www/komon/komon>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
# systemctl restart httpd
ブラウザを起動して、http://192.168.〇〇〇.〇〇〇を入力して、Hello, World!を表示されていれば大丈夫です。同一ネットワークであれば、他のパソコンからもみることができると思います。
続きは, https://qiita.com/hinoma/items/9c57a1cf214ebf137ace
参考にしたURL・サイト
https://www.rem-system.com/centos-install/
https://hombre-nuevo.com/python/python0032/
https://engineers.weddingpark.co.jp/?p=1031
https://qiita.com/dekosuke-menti/items/e416f198980c0fd6e75b
冒頭にも書きましたが、セキュリティ的なことは全くやっていません。エラーなどはmod_wsgiに関する部分を占めると思うので、エラーコードなどチェックしていくといいと思います。