<Apache> アパッチ
アパッチ Apache
、えい、や、とう。
インストール。
>yum install httpd httpd-devel >httpd -v # Apacheのversion確認 >pip install mod_wsgi >python -c 'import sys; print(sys.path)' # PYTHONPATHの確認
systemctl
であぱっちさん
の起動する時に渡す環境変数は/etc/systemconfig/httpd
に書き込む。
bashじゃないので、export
はいらない。
wsgi
でpython
使うとき、プラス、そのpython
が別にインストールされたものの場合、
下記環境変数をセットしないと、python
を見つけられず、あぱっちさん
がエラーを吐くっす。
PATH="/opt/anaconda3/bin:$PATH" PYTHONHOME=/opt/anaconda3/bin PYTOHNPATH=/opt/anaconda3/lib/python3.7/site-packages
で、/etc/httpd/cond.d/wsgi.conf
とファイルを作り、下記書き込む。
LoadModule
の行がないと、あぱっちさん
がブーたれる。
LoadModule wsgi_module /opt/anaconda3/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so WSGIDaemonProcess myapp user=hoge group=hoge #指定しないとrootで、こける。 WSGIProcessGroup myapp WSGISocketPrefix /var/run/wsgi WSGIScriptAlias / /var/www/app # これで、この下のスクリプトが全部動く。 #WSGIScriptAlias /app /var/www/app/app.wsgi <Directory /var/www/app/> Options ExecCGI MultiViews Indexes MultiViewsMatch Handlers AddHandler wsgi-script .py AddHandler wsgi-script .wsgi DirectoryIndex index.html index.py app.wsgi #この順でアクセス。 Order allow,deny Allow from all </Directory>
で、httpdサービススタート。
>systemctl start httpd
さて、本題。個人のディレクトリを有効化する。
/etc/httpd/conf.d/userdir.conf
を下記のようにする。
ミソは、WSGIScriptAliasMatch
の指定。
正規表現で、ユーザ名を拾って、それを、$1
で渡す。
そうすっと、public_html
以下のスクリプトが動く。
ここまで発見するのに時間かかった。。。
LoadModule wsgi_module /opt/anaconda3/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so <IfModule mod_userdir.c> #UserDir disable UserDir public_html # こっちを活かす WSGIDaemonProcess myapp user=hoge group=hoge #指定しないとrootで、こける。 WSGIProcessGroup myapp WSGISocketPrefix /var/run/wsgi WSGIScriptAliasMatch ~([^/]+) /home/$1/public_html/ # これで、この下のスクリプトが全部動く。 </IfModule>
で、対象のディレクトリたちを、appache
ユーザ権限で見れるように、chmod 755
する。
はまりがちなのが、上位階層のディレクトリに実行権限を与え忘れること。
>chmod 701 /home/hoge >chmod 755 /home/hoge/public_html
htaccess
あと、個人のディレクトリでリダイレクトする設定。
これで、http://hagehage.com/~hage
とアクセスすると、python
のスクリプトapp.wsgi
に飛んでいく。
RewriteEngine On RewriteBase /~hage RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ app.wsgi [L]
ログ達。
>more /var/log/httpd/access_log >more /var/log/httpd/error_log