RのWeb制作

Webサービス制作のための技術情報を。データ分析(Python、機械学習コンペ他)や自作野球ゲームMeisyoのこと中心。

Web制作 Python SQL VPS

VPSでつくるPythonでのWebアプリ運用環境(連載記事)

投稿日:2021年5月2日 更新日:

今風のWebアプリをリリースするにはレンタルサーバーでは物足りない!

例えば、PythonやRubyに対応しているレンタルサーバーはあまりありません。加えて、データサイエンスや機械学習に強いプログラム言語Pythonは頻繁にアップデートされますので、レンタルサーバーではアップデートに対応して即時に変更反映・・・なんてものはできません。

例えば、私はPython3.Xが入っていないから、変更後のライブラリ〇〇が使えない…ことを何度も体験してきましたorz

そこで、VPS(Virtual Private Server)を使って開発環境を丸ごと借り、自由度の高いサーバーを構築していきます。今回はさくらVPS(https://vps.sakura.ad.jp/)を使っていきます。

VPSにした理由は、クラウドサービスに比べVPSは割安だからです。

よく例に挙がるAWSやGCPは利用料金が高いです。本格的に収益の上がるサイトができた場合は移行するといいかもしれません。

AWSは、1ノードを20日程度放置していただけでも月3万の請求が来ていました。AWSの勉強をしてただけなのに怖いですね。GCPも、仕事で使う分には気にならない程度で、機械学習・データ分析用途でアクセスが多く(1000程度)ても月10万PV行かないくらいで3万以上です。個人開発では高いですね。

なんと、VPSは最小構成で月約650円です。レンタルサーバーに比べて自由度が高いので、ある程度満足できる金額ではないでしょうか。

さくらにした理由は、レンタルサーバーを借りていた際に満足できる経験をしたからです。
①2年以上運用していたが、サーバー停止など大きなトラブルがなかった。
②さくらサーバーからエックスサーバーへの移行時(利用停止時)にさくらのカスタマーサポートに相談したが、その時でさえサポートが充実していた。

まずは、構築環境を下記の通りに示します。
構築する環境はあくまでアプリに合わせて選ぶものなので、あなたのアプリに合わない場合は適宜変更してください。

続いて、具体的に何をするのか目次をリストアップします。
大きな目的である直接の運用コストを減らすためにVPSを採用していますが、VPSはセキュリティ等を含め全てを自分で管理する必要があります。
そのため、手間を減らす必要があるので、自動起動・アップデートの自動化なども忘れずに導入しておきます。

最後に、VPSの総括を行います。
良い点、悪い点、引っかかりやすいポイントなどなど。

補足として、この記事内に作者のバックグラウンド(Webサーバー関連の理解度など)も記載しておきます。ご参考に。

(1)構築環境

基本構成

OS:CentOS7

CentOS8までの中でサポートが一番長い。事例が多い。

Webサーバ:Nginx

Apacheより動的なアクセス処理が得意(らしいので)、今回のWebアプリに最適。

APサーバ:Nginx Unit

より新しく(2018年リリース)、Nginxと併用されやすいGunicornより導入が簡単だった。

その他構成

サーバーへのアクセス:SSH

サーバー管理・設定変更の安全のため。

FTP

サーバーへのファイル転送のため。

SSL接続(HTTPS)のみ

HTTPはNginxの設定で遮断。SSLは独自ドメインの取得が必須。

アプリ

ソーシャルトラッキングアプリ(目標管理+ルームチャット)です。
目標管理に加え、オンラインもくもく会や勉強会ができる感じのアプリです。
→ ある程度小さいデータのやり取りを何度も行う想定。
→ 将来的にレコメンドなどの機械学習システムを導入したい。

Python3.6.8(Flask)+pip3+MySQL

構築がより簡単なため。
Python3.6.82.7.5以外の場合はNginx Unitは非推奨。(理由は後述)

Flask+BluePrint

機能拡張を行うために、BluePrintを導入。

MySQL(MariaDB)+PHP+phpMyAdmin

GUIでデータベースを操作したい。(CUIでの操作は面倒…)

(2)利用環境

OS:Windows10

サーバーへのアクセス:TeraTerm

FTP:WinSCP

データベース管理:phpMyAdmin

仮想環境:pyenv+pip

以上が構築環境、利用環境です。
続いて、目次に移ります。

(3)目次

全体構成としては、下記の図の通りです。それを一つずつ構築していきます。

基礎設定

1. VPSへのログイン
2. CentOS7のインストール

PythonでHello World

3. NginxでHello World
4. Pythonのバージョンを2.7.5から3.6.8にする
5. Python仮想環境venvの導入
6. Nginx Unit+venv+FlaskでHello World

データベース+PHPインストール

7. Nginx+PHPでHello World
8. MariaDB(MySQL)インストール
9. phpMyAdminインストール

FTP

10. WinSCPでFTP接続

Pythonアプリ導入

11. PythonでMariaDB(MySQL)へ接続できるアプリを触ってみよう
12. Python(Flask)でMariaDB(MySQL)へ接続できるアプリをもっと読みやすく改良してみよう
13. Socket通信を使ったモダンなチャットアプリをFlaskで作ろう

その他

14. セキュリティ設定
15. Let’s EncryptでVPS上のWebサイトをSSL(HTTPS)接続にしよう

総括

総括・変更履歴

(4)作者のバックグラウンド

具体的には、このWebサーバー構築前はAPサーバーって何やねんってレベルでした…
インフラわからん!
趣味でレンタルサーバーを借りていて、Webサイト(ApacheでCakePHP2(PHP5+MySQL))を10年近く運営しています。
ただ、今回のWebサーバ(Nginx+Nginx Unit(or Gunicorn)でFlask(Python3+MariaDB))を構築するのに1か月近くかかった程度のレベル感です。orz

執筆時の状況は、仕事はエンジニアではなく、コンサルティング(データ・AI系)なので前知識ほぼありません。基本情報技術者レベルの知識はありました。

さいごに

最後までお読みいただき誠にありがとうございました。

試行錯誤の末にどうにかVPSでWebサーバーを動かせるようになりました…。
これまでは、個人ではレンタルサーバー任せ、仕事ではクラウド任せだったので、APサーバーなどを全く意識せずに使っていて今回かなり引っかかりましたorz
このページのように情報を統合して書いておくと、他の人も時間を無駄にしなくて済むといいな~と思って書いています。

分かり辛い点や解釈がおかしい部分があればコメントいただけると幸いです。
よろしくお願いいたします。

-Web制作, Python, SQL, VPS

執筆者:


  1. […] Flaskの詳細な構成については、VPSでつくるPythonでのWebアプリ運用環境(連載記事)をご覧ください。基本的な設計思考は同じです。 […]

comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

[Meisyo]ver0.03へのアップデート

名将と呼ばれた者達、アップデートを行います。 大幅な変更をしたため、バージョンを0.02から0.03へ変更します。 変更点 1・各種表示の不具合の修正、改善 2・投手起用方法の不具合の修正 3・試合の …

no image

[PHP]まとめ読みをPSRで改良する(1)

今回の改良対象 → ミニ四駆まとめサイト なぜやるのか? PHPのバージョンアップによる速度の向上 一番はこれでしょう。 今のはPHP5.2で動いています。 1割から5割の速度向上が見込まれます。 1 …

[Meisyo]練習試合にレーティング制を導入

練習試合にレーティング制を導入しました。 レートはメイン画面に下記のように表示されます。 平均レートは1000です。 レーティングの変動⊿Rは下記の式で表されます。 a(レートRa)がb(レートRb) …

[Meisyo]練習試合のバグ修正

練習試合のバグ修正を修正しました。 練習試合で大阪桐蔭2018(NPC)と当たるってマジ? 久々のバグ報告(ありがたい!)で、なんでこうなるかなーと思ってみたら、 下記のようにしたつもりが・・・ $v …

Pandas DataFrameでの表示列・行をすべて表示する(表示制限を解除する)

Jupyter NotebookでPandasのDataFrameを表示する際、行数・列数が多すぎると省略されてしまう場合があります。 制限を解除しましょう。 pd.set_option(‘displ …