なんでもITブログ

技術系の情報発信をしていきます

AI 機械学習 CentOS7にTensorflowとJupyter Notebookをインストールする

機械学習で有名なフレームワークTensorflowとJupyterをCentOSでインストールする方法をまとめていきます



以下のPythonのインストールを終えていることが前提となります
yryuu.hatenablog.com




インストールはすごく簡単です

// Tensorflowのインストール
$ pip install tensorflow
// jupyterのインストール
$ pip install jupyter

これでインストール完了です
以下のコマンドでtensorflowが正しく動くのかを確認してみてください

$ python3.6
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

Hello, TensorFlow!


次はjupyterを使えるのか見ていきます
以下のコマンドでpupyterを起動します

$ jupyter notebook --ip=0.0.0.0 --port=3000 --allow-root

これで3000ポートを使用してjupyterが起動しました
しかし3000ポートが外部向けに空いていないはずなのでブラウザから確認できません。
空けていきます

// 3000ポートを空ける
$ firewall-cmd --add-port=3000/tcp --zone=public --permanent
// ファイアウォールの設定を再読み込み
$ firewall-cmd --reload


こちらが完了したら
http://サーバのIP:3000でjupterが使用できるかと思います。
ぜひ参考にしてみてください。

CentOS7 Djangoで静的コンテンツを表示するApacheの設定

PHP(LaravelやCodeigniter,CakePHPなど)とかだと
あらかじめPublic領域が用意されていたり、するみたいですが
DjangoApache側の設定を触って公開領域を作成するみたいです。
これめちゃくちゃはまったので、共有しておきます。

前提条件としてDjangoApacheで動いていることを前提としていますので
動かしていなく動かしてみたい方はこちらの記事を参考にしていただけたらと思いますj
yryuu.hatenablog.com


今回はstaticというフォルダを
/srv/web/myapp/staticにおいて
その下に/srv/web/myapp/static/test.txtというファイルを置き、ブラウザでtxtファイルにアクセスできるところをやっていきます。

まずはファイルを置いておきます

$ mkdir /srv/web/myapp/static
$ touch /srv/web/myapp/static/test.txt
$ vi test.txt
// 以下を入力して保存してください
  静的コンテンツテスト


次にApacheの設定をしていきます
今回はwsgiのconfigファイルを触っていますが、各自設定によって変わってくると思うので
djangoの設定がされている箇所(DocumentRootなど)であればどこでも効くとは思います。

$ vi /etc/httpd/conf.modules.d/10-wsgi-python3.6.conf
// 以下を追加して保存する
    Alias /static/ /srv/web/myapp/static/
    <Directory /srv/web/myapp/static>
        Require all granted
    </Directory>

Aliasは "Alias リクエストのURLパス 実際のディレクトリ"という記載で
このURLが来たらこのディレクトリを見るという命令のことです
Require all grantedは全てのアクセスを許可しますという意味です


最後にApacheを再起動して設定を反映させます

$ systemctl restart httpd.service

これでhttp://サーバのIP/static/test.txtにアクセスして 静的コンテンツテストと表示出来たら完了です。
ぜひ参考にしてみてください

CentOS7 PythonフレームワークDjangoをApacheで動かす方法

今回はDjangoで作ったコンテンツをApacheで動かす方法を載せていきます


ApacheとPython3.6はすでにインストールしたところからスタートするので
ApachePythonをインストールしていない人はこちらを参考にしてください
CentOS7 Webサーバ構築ガイダンス2 Apacheのインストール - なんでもITブログ
CentOS7 Python3.6のインストール方法 - なんでもITブログ



ではまずWebサーバを公開するディレクトリを作ります

// srv配下にweb領域を作成する
$ mkdir /srv/web
// 所有ユーザとGroupをApacheに変更する(Apacheが使用するため)
$ chown -R apache:apache /srv/web


次にDjangoをインストールしていきます

// pipを最進化する
$ pip3.6 install pip
// djangoのインストール
$ pip3.6 install django


これでサーバにDjangoがインストールされました
次にweb領域にdjangoのプロジェクトを作成していきます

$ cd /srv/web
// web領域にmyappプロジェクトを作成
$ django-admin.py startproject myapp

これで/srv/web/myappというディレクトリが出来て、djangoフレームワークが置かれました
しかしこのままではApacheに来たリクエストをDjango(python)を使って捌くことはできません。
そういった設定が入っていないからです
そこでWSGI(ウィズギー)というWebサーバとPythonのWebアプリケーションフレームワークを繋ぐためのインターフェースがあるのでそれを利用します。

WSGIをインストールしていきます

$ yum install -y python36u-mod_wsgi

これでwsgiのインストールは完了です
このインストールが成功しているとApacheのモジュールの設定フォルダに以下のファイルが追加されるはずです
wsgiの設定ファイルになります
/etc/httpd/conf.modules.d/10-wsgi-python3.6.conf

こちらを設定していきます

$ vi /etc/httpd/conf.modules.d/10-wsgi-python3.6.conf

// 既存の設定は消して丸ごと以下をコピー貼り付けてください
<IfModule !wsgi_module>
    LoadModule wsgi_module modules/mod_wsgi_python3.6.so
    WSGIScriptAlias / /srv/web/myapp/myapp/wsgi.py
    WSGIPythonPath /srv/web/myapp/
    <Directory /srv/web/myapp/myapp>
    <Files wsgi.py>
        Require all granted
    </Files>
    </Directory>
</IfModule>


上記のファイルはWSGIdjango側のパスだったりApache側のwsgiモジュールのパスだったり、
そもそものコンテンツの場所などが書かれています。
一つ一つの意味は別途調べてみるとよいかと思います


最後にdjangoにはデフォルトでアクセス制限がかかっていて外部からのユーザがアクセスできなくなっています。
Webサーバだとそれでは困るので、これを許可していきます(管理画面とかだとその設定も有効)

$ vi /srv/web/myapp/myapp/settings.py

#ALLOWED_HOSTS = []
ALLOWED_HOSTS = ["*"]

これで全ての設定が完了です
Apacheの再起動をしてブラウザで確認してみましょう

$ systemctl restart httpd.service


http://サーバのIPでブラウザを確認してDjangoのデフォルトページが出来ていたら成功です。
もし動かなかったり、よりよい方法があればコメント欄などで教えてください

CentOS7 Python3.6のインストール方法

簡単なのでメモ代わりに残しておきます

CentOSにはPythonがそもそも入っています
以下のコマンドで確認できます

$ python -V
Python 2.7.5


ただPythonでよく使われているのは3系であり、2系とはそもそも文法構造などがかなり違うので3系も使えるようにしておきたいです

そこで3系と2系を両方使えるようにしてしまいます。
3系をインストールするコマンドは以下になります

// まずpython3系が入っているIUSレポジトリをインストールします。
// IUSは最新のパッケージが提供されているレポジトリです
$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm
// その後pythonをインストールします
yum install -y python36u python36u-libs python36u-devel python36u-pip


これでインストールは終わりです
では確認してみましょう

$ python -V
Python 2.7.5

$ python3.6 -V
Python 3.6.5

このように二つのコマンドを用いることでpython2系と3系の住み分けが可能になりました。
ぜひ参考にしてみてください

インフラ勉強会 WAFを作ろう

インフラ勉強会でWAFについて教えていただいたので共有させていただきます

正式な名前
WAF = Web Application Firewall

Firewallとの違い

Firewallはportに対してのセキュリティ
WAFはアプリケーションに対してのセキュリティ

WAFは値段が高い
でも高い。でも使いたい
mod_securityを使って作ってみよう


手順

①Apache HTTPのインストール
②ModSecurityのインストール
③ModSecurity.confの設定
④実験

①について(Apacheのインストール)

// お決まり
$ sudo yum install -y httpd

②について(ModSecurityのインストール)

$ yum install -y mod_security

③ModSecurity.confの設定

// confファイルを配置する位置まで移動
$ cd /etc/httpd/modsecurity.d/activated_rules
// confファイルを作成
$ touch test_modsec.conf

// confファイルを編集
$ vi test_modsec.conf
//以下を書き込んでください
SecRuleEngine On
SecRequestBodyAccess On

SecDefaultAction "phase:1,deny,log,status:403"

secRule QUERY_STRING "zash110" "id:'90000'"
secRule QUERY_STRING "zash.*110" "id:'90001'"

//設定を適用するためにApacheを再起動
$ systemctl restart httpd.service

④実験

$ curl localhost
200を返す

$ curl localhost/?q=zash110
// Permission to accessを返す
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.</p>
</body></html>


初めてやったけど、なかなか面白い
自分でWAFを作れるってなんかかっこいいイメージです


wp.infra-workshop.tech

djangoのチュートリアルをやってみる⑥ Djangoのインストール(仮想環境)

今回は実際にDjangoのインストールまでを行いました

ただPCやサーバにインストールするのでは他のモジュールやサービスに影響がある可能性があるので仮想環境を使用するみたいです

 以下のようにvenvコマンドというものが用意されており
実行したディレクトリ配下に仮想環境が作られるみたいです。
以下のコマンドで環境を起動したら、venvが勝手に最新のpythonを見てくれるのでpython3コマンドではなくpythonコマンドで最新のpythonを利用できるなどの利点があるみたいです。(おそらくpython3で起動したのでmyvenvでデフォルトで使用されるpythonはpython3になるのだと思います)

# 仮想環境myvenvを作成
python3 -m venv myvenv
# 仮想環境を起動する
source myvenv/bin/activate

 
最後に

#パッケージ管理システムpipを最新にして
pip install --upgrade pip
# djangoの1.11をインストール
pip install django==1.11

 
今回は簡単でしたが、pythonに特化した仮想環境があるのは知らなかったので勉強になりました

Djangoをインストールしよう · workshop_tutorialJP

djangoのチュートリアルをやってみる⑤ Pythonをはじめよう

今回はpython言語についての簡単なチュートリアルです。

 

どこにでもある、

計算や変数の使い方、

配列(リスト),オブジェクト(ディクショナリー)などの使い方や

ループ、条件式(if)の使い方などを1ページでまとめています。

 

Progateなどでもできて、はるかにわかりやすいと思いますが

チュートリアルを行うと実際に開発環境を自分で作って実行してみることになるので

より体系的に学習できるかと思います

 

ぜひやってみてください

 

Pythonをはじめよう · workshop_tutorialJP