<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はいらない。 wsgipython使うとき、プラス、その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

参考にさせてもらったところ。

qiita.com

www.bitlink.co.jp

www.yoheim.net

modwsgi.readthedocs.io

http://www.obenri.com/_webserver/user_directory.html

qiita.com

Mod wsgi notes - Helpful

<Linux, Admin> sudoできるようにする。

hogeユーザをsudoできるようにする。

/etc/sudoersをいじる。
visudoってやると、ファイルが開くか、vi /etc/sudoers

で、下記追加。パスワード無しでsudoできる。

hoge   ALL=(ALL)   NOPASSWD: ALL

あと、下記のようにして、ユーザのデフォルトのPATHを生かす。

#Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults        env_keep +="PATH"

おわり。

<Linux, ntp, Admin, systemctl> 時間合わせ

Linuxでの時間合わせ。

ntpというサービスがあるらしい。
手っ取り早くするには、ntpdateでする。

ntpをやるためんは、udp/123を開ける必要がる。
/etc/sysconfig/iptablesに下記書き込む。

-A INPUT -i eth0 -p udp -m udp --sport 123 -J ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 123 -j ACCEPT

が、、proxy下では、ポートが開いてないので、だめかも、、、がっくり。

qiita.com

http://www.obenri.com/_ntp_sshserver/ntpconf5.html

と、いうことで、他の方法。
httpのサイトから時間情報持ってきて、dateでセットする。

>date --set @"$(wget -q https://ntp-a1.nict.go.jp/cgi-bin/jst -O - | sed -n 4p | cut -d. -f1)"
>date -s "$(curl -I "http://www.google.com/" 2>&1 | grep ^Date | cut -d ' ' -f2-)"

qiita.com

blog.trippyboy.com

最後、タイムゾーンの変更。
まずは確認。

>date
>strings /etc/localtime

変更。

>cp /etc/localtime /etc/localtime.org
>ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

CentOS7だと、timedatectlちゅうコマンドで国を設定する。

>timedatectl set-timezone Asia/Tokyo
>timedatectl status
>timedatectl list-timezones | grep Tokyo

qiita.com

eng-entrance.com