2022年8月9日火曜日

Flask + uWSGI + Nginx を使って Web アプリを作る【前編】 - WebARENA Indigo の設定

Flask + uWSGI + Nginx を使って 青果物市況情報 Web API を作りました。

それほど難しくないような気もしつつ、雰囲気で作ったらやはりところどころ突っかかったので、備忘録がてらざっくり設定手順を書いておこうと思います。

サーバーには、WebARENA Indigo という VPS を使用しました。OS は Ubuntu 22.04、クライアントは Windows 10 です。

同じような感じで突っかかっている方の参考になれば幸いです。


▼ WebARENA Indigo の設定


① 「SSH 鍵の作成」→「インスタンスの作成・起動」→「秘密鍵を使って SSH でログイン」

WebARENA Indigo のダッシュボードで SSH 鍵を作成・保存。インスタンスの作成・起動。秘密鍵をクライアントの「.ssh」に設置。

PowerShell にて SSH ログイン。初期ユーザー名は「ubuntu」。
> ssh ubuntu@インスタンスのIPアドレス -i ~/.ssh/private_key.txt


② タイムゾーンの変更と日本語化

タイムゾーンを Asia/Tokyo に変更。
$ sudo timedatectl set-timezone Asia/Tokyo

日本語パッケージをインストールして設定。
$ sudo apt install language-pack-ja-base language-pack-ja ibus-mozc
$ sudo localectl set-locale LANG=ja_JP.UTF-8


③ WebARENA Indigo でファイアーウォールを設定をする

WebARENA Indigo のダッシュボードからファイアーウォールを作成(「ネットワーク管理」内)。

SSH 及び Web アプリで使うポートを開けます(HTTP「80」、HTTPS「443」)。SSH はセキュリティ向上のため22番ポートから変更したいため、22番ポートと任意のポートを開けておきます。後ほど22番は閉じます。IP アドレスは「0.0.0.0」。

インスタンスに適用。


④ SSH のポートを変更

sshd_config のポートを変更して再起動。
$ sudo nano /etc/ssh/sshd_config

#Port 22
Port 2222 (任意のポート番号)

$ sudo systemctl restart sshd

PowerShell の別ウィンドウを開き、変更後のポートからアクセス。
> ssh -p 2222 ubuntu@IPアドレス -i ~/.ssh/private_key.txt

無事にログインできたら WebARENA Indigo のファイアーウォール設定で22番ポートを閉じます。


⑤ ufw でファイアーウォールを設定する

ufw をインストール。
$ sudo apt install ufw

incoming ポリシーを deny (破棄) に設定。
$ sudo ufw default deny

IPv6 を無効化。
$ sudo nano /etc/default/ufw

IPV6=no

必要なポートを開放。
$ sudo ufw allow 2222
$ sudo ufw allow 80
$ sudo ufw allow 443

ufw を有効化。
$ sudo ufw enable


⑥ 「ユーザーを作成」→「SSH ユーザー化」→「初期ユーザーの削除」

初期ユーザーのままだとセキュリティ上よろしくないので、新たにユーザーを作成します。パスワードを2回入力(その他は空欄でも問題なし)。sudo 権限を付与。
$ sudo adduser 新ユーザー名
$ sudo gpasswd -a 新ユーザー名 sudo

ubuntu (ユーザー名) の SSH 公開鍵を新しいユーザーにコピー。所有者を変更。
$ sudo cp -r .ssh/ /home/新ユーザー名/
$ sudo chown -R 新ユーザー名:新ユーザー名 /home/新ユーザー名/.ssh/

新ユーザーで SSH ログインが可能になります。
> ssh -p 2222 新ユーザー名@IPアドレス -i ~/.ssh/private_key.txt

scp はこうなります。(後編で使います)
> scp -P 2222 -i ~/.ssh/private_key.txt ./Desktop/test.txt 新ユーザー名@IPアドレス:/home/新ユーザー名/ (インスタンスへファイルをコピー)
> scp -P 2222 -i ~/.ssh/private_key.txt 新ユーザー名@IPアドレス:/home/新ユーザー名/test.txt ./Desktop/ (クライアントへファイルをコピー)

初期ユーザーの削除。他のプロセスで使用中とのメッセージが出た場合は sudo kill してから再度削除。
$ sudo userdel -r ubuntu




ということで、WebARENA Indigo の設定でした。

次の後編では、突っかかった Flask + uWSGI + Nginx の部分を作っていきます。




・関連投稿


Twitter (@nkkmd) 日々更新中です。