複雑になりがちなFlaskを用いたサーバーをインストールから
実装は実装編で
登場人物
Nginx
Webサーバー 基本的にクライアントからの接続はこいつを 通してから処理される いわば元請けuWSGI
アプリケーションサーバー 今回はWebサーバー(Nginx)とWebアプリケーション(Flask) とを繋ぐ橋渡し役 いわば中間業者そもそもWSGIとは?
WebServerGatewayInterfaceの略(ウィスキーと読むらしい) Webアプリケーション(Flask)とWebサーバー(Nginx)間の取り決めのこと ようするにプロトコル(仕様)これがないと
例えばあるWebサーバー(A)を使った場合
その仕様に乗っ取ったWebアプリケーション(A')
を使わなければいけないことになる(現に昔はそうしてたらしい)
逆もまたしかり
その仕様を標準化した形がWSGIということ
当たり前だがこれから使うFlaskもWSGIの仕様に乗っ取ってる
Flask
ウェブアプリケーションフレームワーク 実際の処理はこいつが行う いわば下請けPythonの主要なフレームワークとしてDjangoがあるが
Djangoと比べると必要最低限の機能しか搭載してないので
超軽量かつ簡単に実装できてしまう
NetflixやRedditなどが使っている
Virtualenv
Pythonの仮想環境 システムがパッケージで混雑になることを防止 なくても実装はできるがあった方がよい事前準備
リポジトリをアップデート$ sudo apt update
パッケージの更新
$ sudo apt upgrade
gcc,gdbなどの開発ツールをインストールしておく(uwsgiのビルドに必要)
$ sudo apt install build-essential
opensslをインストール
$ sudo apt install openssl
pip3をインストール
$ sudo apt install python3-pip
ファイアウォール
ファイアウォールの設定 ubuntu側でもファイアウォールを設定しておく 必要ないと思ったら飛ばしてOKufwをインストール
$ sudo apt install ufw
すべてのポートを閉じる
$ sudo ufw default deny
必要なポートは開けておく
自分の場合はSSH(22), http(80)
$ sudo ufw allow 22
$ sudo ufw allow 80
ファイアウォールを有効化
& sudo ufw enable
ステータスを確認
$ sudo ufw status
ちなみにSSHで接続している場合
この順番を守らないと接続できなくなる
可能性があるので注意
Nginx
最新版のnginxを入れる方法は https://nginx.org/en/linux_packages.html https://xn--o9j8h1c9hb5756dt0ua226amc1a.com/?p=3100 から別に最新版を入れる必要はないならインストールまで
飛ばしてOK
PGPキーをダウンロード
$ wget https://nginx.org/keys/nginx_signing.key
キーをインポート
$ sudo apt-key add nginx_signing.key
リポジトリを登録
$ sudo vi /etc/apt/sources.list
# 末尾に追加 bionicの部分はubuntuの開発コード
deb http://nginx.org/packages/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/ubuntu/ bionic nginx
~/ubuntu/bionic nginxのbionicの部分は
Ubuntuのバージョンによって書き換える
バージョン | 開発コード |
---|---|
16.04 | xenial |
18.04 | bionic |
19.10 | eoan |
20.04 | focal |
ubuntuのversion確認方法は
$ cat /etc/lsb-release
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
リポジトリ情報を更新
sudo apt update
バージョンを確認
$ apt show nginx
Package: nginx
Version: 1.18.0-1~bionic
記事を書いてる時点で1.18.0が安定版らしい
http://nginx.org/en/download.html
で最新版かどうか確認できる
---ここまでが最新版を入れる方法---
インストール
$ sudo apt install nginx
バージョン確認
$ nginx -v
nginx version: nginx/1.18.0
あらかじめサービスに登録しておく
$ sudo systemctl enable nginx
$ sudo systemctl start nginx
アクセスできれば成功
$ curl http://localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
80番ポートが開いているなら
許可されてるIPから
$ curl http://<パブリックIP>
でも確認しておく
Virtualenv
pip3でインストール$ sudo pip3 install virtualenv
バージョン確認
$ virtualenv --version
環境を作成
$ virtualenv py36_flask_server --python=python3.6
ちなみに指定したバージョンのPythonが入っていない場合
作成に失敗するので事前にインストールしておく
下記で環境に入れればOK
$ . <環境名>/bin/activate
(py36_flask_server) ubuntu@ip-10-0-0-14:~$
uWSGI
virtualenvで作成した環境からpip3でインストール$pip3 install uwsgi
バージョンを確認
$uwsgi --version
ちなみにVirtualenvではなくAnacondaを使うという手もあった
ただuWSGIをインストールする段階でエラーが多発するので注意
Anacondaを使いたい場合
時間はかかるが解決はするので下記の記事を参考
https://katsuwosashimi.com/archives/300/python-conda-install-uwsgi-failed/
Flask
virtualenvで作成した環境からpipでインストール$pip3 install flask
以上
まとめ
インストールの段階でだいぶ長くなってしまった次は実装編で