「 おっ、なんか 体が軽くなったぜ☆
左右にスペースができて エアコンの熱風も直撃しないしな☆」
cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@localhost /]# ps aux | grep python
root 727 0.0 0.7 358188 29256 ? Ssl 1月12 0:04 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
root 1068 0.0 0.4 573824 17176 ? Ssl 1月12 1:36 /usr/bin/python -Es /usr/sbin/tuned -l -P
root 7251 0.0 0.0 112724 980 pts/0 S+ 17:59 0:00 grep --color=auto python
「 CentOS7 と Ubuntu はだいぶ違う感じだなあ☆」
cd /usr/local
mkdir www
cd www
pwd
/usr/local/www
sudo yum groupinstall "development tools"
--> 衝突を処理しています: git2u-perl-Git-2.16.5-1.ius.centos7.noarch は perl-Git < 2.16.5 と衝突しています
エラー: git2u-perl-Git conflicts with perl-Git-1.8.3.1-21.el7_7.noarch
問題を回避するために --skip-broken を用いることができます。
これらを試行できます: rpm -Va --nofiles --nodigest
rpm -Va --nofiles --nodigest
sudo yum install bzip2-devel gdbm-devel libffi-devel \
libuuid-devel ncurses-devel openssl-devel readline-devel \
sqlite-devel tk-devel wget xz-devel zlib-devel
「 ファイルをダウンロードしろと記事に書いてあるが、CUI環境で どうやるんだぜ……☆?」
curl -O https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
ls
Python-3.7.3.tgz
tar xf Python-3.7.3.tgz
ls
Python-3.7.3 Python-3.7.3.tgz
cd Python-3.7.3
./configure
# なんかチェックが始まる。
make
# なんかコンパイルが始まる。長い……☆
sudo make altinstall
# なんかインストールしてる……☆
python -V
Python 2.7.5
「 なんだこの クソ記事は……☆ Python2 が入ってるじゃないか☆」
yum remove python
```
python -V
Python 2.7.5
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 消えんなあ☆」
[Python 3 を CentOS 7 に yum でインストールする手順](https://weblabo.oscasierra.net/python3-centos7-yum-install/)
yum install -y https://centos7.iuscommunity.org/ius-release.rpm
yum search python3
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 python34 とか、 python36 とかが見つかるぜ☆」
python3.7 -V
Python 3.7.3
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 あっ、 python3.7.3 が入ってたぜ☆」
[CentOS7にFlask+nginx+uwsgiの環境構築をする](https://qiita.com/kyo_developer/items/850ac3feaa43e6c140a5)
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 `pyenv` って何だぜ☆? `virtualenv` じゃないの☆?」
[Flask](https://palletsprojects.com/p/flask/)
[User’s Guide](https://flask.palletsprojects.com/en/1.1.x/)
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 公式ページ読も……☆」
pip3 install virtualenv
-bash: pip3: コマンドが見つかりません
pip3.7 -V
pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 コマンドの名前に バージョン番号付けるのは イケてなくないかだぜ☆?」
pip3.7 install virtualenv
You should consider upgrading via the 'pip install --upgrade pip' command.
pip install --upgrade pip
-bash: pip: コマンドが見つかりません
pip3.7 install --upgrade pip3.7
Could not find a version that satisfies the requirement pip3.7 (from versions: )
No matching distribution found for pip3.7
pip3.7 install --upgrade pip
pip3.7 install Flask
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 今どき Flask なんか使われてんのかな☆」
pip3.7 install -U https://github.com/pallets/flask/archive/master.tar.gz
sudo yum install python-virtualenv
[Quickstart](https://flask.palletsprojects.com/en/1.1.x/quickstart/)
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 もう使えるようになってんのかな……☆?」
cd /usr/local/www
mkdir myproject
cd myproject
python3.7 -m venv venv
ls
venv
. venv/bin/activate
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 手順を間違えていたかだぜ☆(^~^) やり直し☆」
pip3.7 install Flask
pip3.7 install --upgrade pip3.7
pip3.7 install -U https://github.com/pallets/flask/archive/master.tar.gz
sudo yum install python-virtualenv
[Quickstart](https://flask.palletsprojects.com/en/1.1.x/quickstart/)
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 また読み直すぜ☆」
cd /usr/local/www/myproject
vim hello.py
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 ファイル転送がめんどくさいので vim でコーディングするぜ☆」
from flask import Flask
app = Flask(name)
@app.route('/')
def hello_world():
return 'Hello, World!'
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 `i` で挿入モードにして右クリックで貼り付け、`[Esc]:wq[Enter]`」
export FLASK_APP=hello.py
flask run
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 なんかサーバーが動いているのかもしれないが☆
バックグラウンドで動かさないと コマンド打てなくないかだぜ☆?」
flask run&
curl http://127.0.0.1:5000/
Output:
127.0.0.1 - - [25/Jan/2020 19:28:56] "GET / HTTP/1.1" 200 -
Hello, World!(venv) [root@localhost myproject]#
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 動いているみたいだな☆」
python3.7 -m flask run&
Output:
OSError: [Errno 98] Address already in use
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 つら……☆」
jobs
[1]+ 実行中 flask run &
kill %1
jobs
[1]+ Terminated flask run
python3.7 -m flask run&
curl http://127.0.0.1:5000/
127.0.0.1 - - [25/Jan/2020 19:38:59] "GET / HTTP/1.1" 200 -
Hello, World!
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 Python コマンドでも動くようだ……☆」
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 外部のマシンから見えないけど☆」
flask run --host=0.0.0.0
![OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif](https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5e2c15dcb1dd3.gif)
「 IPアドレスを指定して実行する必要があるんじゃないの?」
ip a
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 ふむ……☆」
flask run --host=192.168.10.13&
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 ブラウザでアクセスしてみてくれだぜ☆」
`http://192.168.10.13:5000/`
![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e2c161ac6324.gif)
「 ダメだぜ☆」
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 ポートが開いてないのかなあ☆?」
[【すぐわかる】CentOSのポート開放のやり方](https://eng-entrance.com/linux-centos-port)
firewall-cmd --list-all
Output:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client http
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 ポートは何も開いてなさげ☆」
firewall-cmd --zone=public --add-port=5000/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
Output:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client http
ports: 5000/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 5000番を開けたらいいんじゃないかだぜ☆?」
![20200125blog5.png](https://crieit.now.sh/upload_images/522c254c00bbf29f8ce335c66c34450a5e2c3548134b3.png)
`http://192.168.10.13:5000/`
![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e2c161ac6324.gif)
「 おっ、ブラウザでアクセスできたぜ☆」
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 じゃあ プライベート・ネットワーク内で見えてるな☆ 十分だぜ☆」
[muzudho/python3-flask-web-server](https://github.com/muzudho/python3-flask-web-server)
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 ↑ さっそく Git hub に置いておこう☆」
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 URLと ページの内容は 一対一で見やすそうだな☆」
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 サーバーをリロードするには どうすればいいんだぜ☆?」
[Flaskでソースの変更を検知して、Webアプリを自動リロードする[Python Tips]](https://www.sukerou.com/2018/11/flaskwebpython-tips.html)
![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e2c161ac6324.gif)
「 デバッグ・モードでいいんじゃないか☆?」
flask run --reload
![OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif](https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5e2c15dcb1dd3.gif)
「 リロードのコマンドライン引数を付けたらどうなの?」
Output:
OSError: [Errno 98] Address already in use
[3]+ 終了 1 flask run --host=192.168.10.13
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 エラー吐いて止まったぜ☆」
jobs
[1]- 実行中 python3.7 -m flask run &
[2]+ 実行中 flask run --host=192.168.10.13 &
kill %2
kill %1
python3.7 -m flask run --reload&
jobs
[2]+ 停止 python3.7 -m flask run --reload
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 うまくいかんなあ☆」
flask run --host=192.168.10.13 --reload&
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 うまくいかんなあ☆」
flask run --host=192.168.10.13&
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 これなら うまくいく☆」
![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e2c161ac6324.gif)
「 ジョブを キル するの、イケてないだろ☆ サーバーの ストップと 設定のリロードのコマンドは無いのかだぜ☆?」
flask run --host=192.168.10.13 --debugger --reload&
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 デバッグ・モードなら リロードが効くみたいだぜ☆」
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 ブラウザでアクセスしてみてくれだぜ☆」
`http://192.168.10.13:5000/hello`
![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e2c161ac6324.gif)
「 ダメぽっぽ☆」
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 エラーを吐いてくれないのかだぜ☆?」
![OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif](https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5e2c15dcb1dd3.gif)
「 バックグラウンドで動かしていたら 視えないんじゃないの? 末尾の `&` を外しなさいよ」
![20200125blog6.png](https://crieit.now.sh/upload_images/2ac69eaceb65f74c4f0751b81991e5df5e2c454f43d6d.png)
![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e2c161ac6324.gif)
「 見えたぜ☆」
![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif)
「 不安な動きだな……☆」
@app.route('/user/')
def show_user_profile(username):
# show the user profile for that user
return 'User %s' % escape(username)
```
「 ↑こんな風に書けば 変わる文字列も受け取れるみたいだな☆ 他のパターンもドキュメントに載ってるぜ☆」
<書きかけ>
Crieitは個人で開発中です。
興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!