CentOS7+Anaconda+Django+ApacheでWebサーバを立てる

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のインストール](https://www.rem-system.com/centos-install/)にわかりやすく書いてあります(筆者もこれを見ながらインストールしました)。
途中で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  -> 編集
```

```python:views.py
from django.shutcuts import render
# create your views here.
from django.http import HttpResponse

def index(request):
  return HttpResponse("Hello, World!")
```
```python:urls.py
from django.urls import path
from . import views

urlpatterns = [
  path('', views.index, name='index'),
]
```
```
# cd ..
# cd komon
# vi urls.py  -> 編集
# vi settings.py  -> 編集
```
```python:urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
  path('admin/', admin.site.urls),
  path('', include('myapp.urls')),
]
```
```python:settings.py
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
```
ここには、何も書かれていないまっさらなテキストになるので、以下を記述していきます。

```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に関する部分を占めると思うので、エラーコードなどチェックしていくといいと思います。