クライアントの指示でさくらインターネットの共有サーバー上でFlaskで作成したWEBサイトをデプロイする必要があって、かなり手こずったので備忘録も兼ねてやり方を解説します。
前提条件
- さくらのレンタルサーバー スタンダードプラン 以上を契約している
- ローカル環境でエラーなく実行できるFlask構築のWEBアプリがある状態
デプロイの流れ
- さくらサーバーにpip & flaskをインストールする
- FTPソフトでwwwディレクトリにWebアプリケーションをアップロード
- index.cgi & .htaccessの作成
- デプロイの確認
さくらサーバーにpip & flaskをインストールする
まず、sshでレンタルサーバーに接続する。ssh接続は、sshクライアントを使うか、もしくは windows備え付けの コマンドプロンプト(以下cmdと省略)で行います。
cmdで以下のコマンドを入力。
ssh ユーザー名@サーバードメイン名
ユーザー名とサーバードメインはさくらサーバーコントロールパネルから確認できます。
アカウントがユーザー名で、初期ドメインがサーバードメイン名。
パスワードの入力を求められるので、契約時に設定したパスワードを入力。
ssh接続ができたら、まずは以下のコマンドでpipのインストーラーをカレントディレクトリにダウンロード
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
次にインストーラーを起動
python get-pip.py
下記の画面が出てきたらインストール完了。
ただし、PATHは設定されてないので、そのままでは pipが使えません。
pipがインストールされたディレクトリに移動します。
cd .local/bin
pipでflask & 各種ライブラリをインストール
python pip install flask
Successfully installed … と表示されればインストール完了
FTPソフトでwwwディレクトリにWebアプリケーションをアップロード
FTPクライアントソフトでサーバーとFTP通信を行いますが、FTPソフトのホスト名はwww○○○.sakura.ne.jp
であることに注意、コントロールのサーバー情報→サーバー情報で確認ができます。
ローカルから/home/username/www/
に各種ファイルを転送。
index.cgi & .htaccessの作成
色んな文献や記事の通りに書いてもうまくいかなく、最終的にChatGPTの力も借りながら、色んな事を試して結果以下の内容となりました。
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import cgitb
cgitb.enable()
from wsgiref.handlers import CGIHandler
from app import app
from sys import path
class ProxyFix(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
return self.app(environ, start_response)
if __name__ == '__main__':
app.wsgi_app = ProxyFix(app.wsgi_app)
CGIHandler().run(app)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L]
<Files ~ "\.py$">
deny from all
</Files>
パーミッションはそれぞれ755
デプロイの確認
最後にサイトのURLを叩いて、実際に表示されるか確認。表示されなければ、各ファイルや app.pyにエラーは発生してるか確認を行う。