【2025年版】XserverにFlaskアプリをデプロイする一番確実な方法(CGI方式)

「よし、PythonのFlaskでWebアプリが完成した!…でも、このアプリをどうやってインターネットに公開(デプロイ)すればいいんだろう?」

「Xserverは契約したけど『SSH』とか『.htaccess』とか、よく分からない言葉だらけで手が止まってしまった…」

Flaskでのアプリ開発を終えたあなたが、今まさにこのような悩みを抱えているのではないでしょうか。

ご安心ください。何を隠そう、この記事を書いている私も、最初はよりモダンだとされる「WSGI方式」でのデプロイに挑戦し、見事に挫折した経験があります。

しかし、この記事で解説する「CGI方式」なら、専門的なサーバー知識に自信がない方でも、一番確実にあなたの作ったFlaskアプリを世界に公開できます。

Xserverの利用歴は6年以上、Flaskでのアプリ開発・運用歴は3年の私が、実際につまずいたポイントや、500エラー(Internal Server Error)で4時間溶かした経験も交えながら、どこよりも丁寧に解説しますので、安心してください。

本記事では、デプロイに必要なサーバーの基礎知識から、具体的な手順、そして初心者が陥りがちなエラーの解決法まで、あなたのデプロイ作業を完全サポートします。

この記事で分かること
  • XserverでFlaskアプリを動かすためのサーバー知識
  • SSHとFTPの具体的な設定方法
  • CGI方式による一番確実なデプロイ手順
  • 初心者がハマる「500エラー(Internal Server Error)」の原因と解決法
目次

なぜFlaskのデプロイ先にXserverが選ばれるのか?

数あるレンタルサーバーの中で、なぜ多くの開発者がFlaskアプリのデプロイ先に「Xserver」を選ぶのでしょうか。

結論から言うと、その理由は…

  • 「圧倒的な安定性と信頼性」
  • 「豊富な情報量」
  • 「優れたコストパフォーマンス」

という3つの大きなメリットがあるからです。

私自身が6年以上利用している経験も踏まえて、一つずつ解説します。

理由①:圧倒的な安定性と信頼性

私が初めてXserverを契約したのは6年以上前になりますが、WordPressでのブログ運営からFlaskでのWebアプリ開発まで、サーバーが原因の大きなトラブルを経験したことは一度もありません。

特に、安い価格帯のレンタルサーバーで時々聞かれる「アクセスが集中するとサーバーが落ちる」といった不安定さとは無縁です。

あなたの開発した大切なアプリケーションを安心して預けられる、この「いつでも安定して動き続ける」という信頼感が、Xserverが選ばれる最大の理由です。

理由②:国内シェアNo.1ならではの豊富な情報量

正直なところ、レンタルサーバーでFlaskアプリケーションを動かすのは、少し特殊なケースです。そのため、予期せぬエラーに遭遇することも少なくありません。

そんな時、Xserverは国内シェアNo.1のレンタルサーバーであるため、インターネット上に日本語での情報が非常に豊富です。

エラーメッセージをコピーして検索するだけで、先人たちが残してくれた解決策のブログ記事やフォーラムの投稿がすぐに見つかります。 サーバー操作に慣れていない初心者にとって、この「困ったときに頼れる情報が多い」という点は、何物にも代えがたい安心材料になります。

理由③:個人開発に最適な料金プランとコスパ

「でも、Xserverって高いんじゃないの?」と思うかもしれませんが、そのコストパフォーマンスは非常に優れています。

まず、ほとんどの個人開発であれば、一番安い「スタンダード」プランで全く問題ありません。

私自身、過去にFlaskで開発したファンクラブサイトや、常時スクレイピングを行うような少し負荷のかかる自動化ツールも、このスタンダードプランで運用していました。 (※常時稼働のツールで利用者が20人を超えたあたりで動作が重くなりましたが、一般的なWebアプリなら十分な性能です)

なおくん

つまり、月額1,000円程度からあなたのWebアプリを世界に公開できる、ということです!

さらに、Xserverは「独自ドメイン永久無料特典」を提供しており、サーバーを契約している限り.com.netといった人気のドメインが最大2つまで無料で利用できます。

通常、ドメインは毎年更新費用がかかるため、サーバー代だけでドメインの維持費もカバーできるのは、個人開発者にとって非常に大きなメリットです。

デプロイ作業の全体像とサーバーの基礎知識

ここからいよいよ、あなたのFlaskアプリをXserverにデプロイする具体的な作業に入っていきます。

「専門用語が多くて難しそう…」と不安に思うかもしれませんが、大丈夫です。 やるべきことは非常にシンプルで、大きく分けるとたったの4ステップしかありません。

デプロイ作業の4つのステップ

これから行う作業の全体像を、先に確認しておきましょう。

  1. 【STEP1】サーバーに接続するための準備
    • PCからXserverに安全に接続するための「SSH」と、ファイルを送るための「FTP」を設定します。
  2. 【STEP2】Flaskアプリをサーバーにアップロードする
    • あなたのPCで開発したFlaskアプリのファイル一式を、Xserverにアップロードします。
  3. 【STEP3】サーバー側での設定とデプロイ
    • アップロードしたアプリが正しく動くように、サーバー側で設定ファイルを作成・編集します。ここが一番の山場です。
  4. 【STEP4】動作確認とエラー解決
    • ブラウザで実際にアクセスしてみて、アプリが正しく表示されるかを確認します。

この順番通りに進めれば誰でも完了できるように、一つずつ丁寧に解説していきます。

つまずかないためのサーバー基礎知識

本格的な作業に入る前に、少しだけ専門用語のお話をさせてください。 今後の作業で登場する「Apache」「CGI」「.htaccess」という3つの言葉の意味を、レストランに例えてざっくり理解しておくと、作業内容がすんなり頭に入ってきます。

【初心者向けコラム】サーバーの仕組みをレストランに例えると…
  • Webサーバー (Apache)
    • レストランの「ホールスタッフ」のような存在です。
    • お客様(ブラウザ)からの「このページが見たい」という注文(アクセス)を受け付け、決まった料理(HTMLファイルなど)をすぐに提供します。
  • あなたのFlaskアプリ
    • 特別なレシピ(Pythonコード)で料理を作る「厨房の料理人」です。
    • ホールスタッフだけでは対応できない、お客様の要望に応じた特別な料理(動的に生成されるWebページ)を作ることができます。
  • CGI (シージーアイ)
    • ホールスタッフ(Apache)と料理人(Flaskアプリ)の間をつなぐ「通訳 兼 ウェイター」です。
    • 通常、ホールスタッフは厨房に入れません。特別な注文が入ったときだけ、このCGIという通訳を介して、料理人に正しく注文を伝えます。
  • .htaccess (エイチティーアクセス)
    • ホールスタッフ向けの「行動マニュアル」が書かれたファイルです。
    • 「『/profile』という特別な注文が来たら、必ずCGIという通訳さんを呼んで、厨房のFlaskさんに繋ぐこと」といったルールを、このファイルに書き込んでおきます。
なおくん

なんとなくイメージできましたか?
つまり、これから我々がやることは「.htaccessというマニュアルを書いて、お客様のアクセスをCGIという通訳を介してFlaskアプリに正しく伝える設定」なのです。

このイメージさえ持てていれば大丈夫です。では、最初のステップに進みましょう!

【STEP1】サーバーに接続するための準備 (SSH & FTP設定)

デプロイ作業は、まずあなたのパソコンとXserverを安全に接続するところから始まります。 ここでは、サーバーに命令を送るための「SSH」とファイルを転送するための「FTP」という2つの重要な設定を行います。

SSH接続を有効にする

SSH(Secure Shell)とは、一言でいうと「あなたのパソコンとサーバーを繋ぐ、暗号化された安全なトンネル」のようなものです。

この安全なトンネルを通して、私たちはサーバーに「このコマンドを実行して」という命令を送ります。Xserverでは、セキュリティのために初めはSSHが無効になっているので、まずはこれを有効化しましょう。

1. サーバーパネルにログインする:まずXserverのトップページから「サーバー管理」ボタンをクリックして、サーバーパネルにログインします。

Xserverトップページからサーバー管理へ

2. 「SSH設定」メニューを開く:サーバーパネルのメニューの中から「SSH設定」をクリックします。

サーバーパネルの「SSH設定」メニュー

3. 公開鍵を登録する:「SSH設定」のタブが開いていることを確認し「公開鍵を登録」ボタンをクリックします。

「公開鍵を登録」ボタンをクリック

4. 秘密鍵を生成・ダウンロードする 設定画面が表示されたら、以下の通りに進めます。

  1. 登録方式:「自動生成」が選択されていることを確認します。
  2. ラベル:「ラベル」に秘密鍵の名前(なんでも良い)を決めます。※初期値でもOK
  3. パスフレーズ「設定する」にチェックを入れ、パスフレーズ(秘密鍵を使うためのパスワード)を入力します。
  4. ダウンロード:最後に「登録して秘密鍵をダウンロードする」ボタンをクリックします。
セキュリティのため、パスフレーズは必ず設定しましょう!

パスフレーズを設定しないと、万が一「秘密の鍵」ファイルが流出した際に、誰でもサーバーに不正アクセスできてしまいます。必ず設定してください。

ダウンロードされたファイル(.keyという拡張子)が、あなたのPCとサーバーを繋ぐ「秘密の鍵」になります。

パスフレーズを設定し、秘密鍵をダウンロード
なおくん

これは、あなたの家の鍵と同じくらい大切なファイルです。絶対に他人に見せたり、失くしたりしないよう、安全な場所に保管してくださいね!

これでSSH接続を有効にする準備が整いました。

FTPアカウントを作成する

FTP(File Transfer Protocol)は、一言でいうと「ファイルをやり取りするための専用ルート」です。

先ほどのSSHがサーバーに「命令」を送るための安全なトンネルなら、このFTPは開発したアプリのファイル一式を、あなたのパソコンからサーバーへ「配送」するために使います。

1. 「FTP」メニューを開く:Xserverのサーバーパネルのメニューから「FTPアカウント設定」をクリックします。

サーバーパネルの「FTPアカウント設定」メニュー

2. FTPアカウントの追加画面を開く:「FTPアカウント設定」のタブが開いていることを確認し「+FTPアカウントを追加」をクリックします。

「+FTPアカウントを追加」をクリック

3. FTPアカウント情報を入力する:アカウントの追加画面が表示されたら、各項目を入力していきます。

  • FTPユーザーID: 任意の半角英数字でIDを決めます。「@」以降はFlaskアプリをデプロイするドメインを選択します。
  • パスワード: 推測されにくい強力なパスワードを設定します。
  • 接続先ディレクトリ: ファイルをどこにアップロードするかの設定です。通常は初期設定のままで問題ありません。
  • FTP容量: 容量を制限できますが、特に設定しなくても大丈夫です。
なおくん

FTPユーザーIDとパスワードは、次のステップでファイル転送ソフト(FileZillaなど)に設定します。忘れないように必ずメモしておきましょう!

4. アカウントを追加する:すべて入力したら、「追加する」ボタンをクリックします。

必要事項を入力してFTPアカウントを追加

これで、サーバーにファイルを配送するための準備も完了です。 お疲れ様でした!次のステップでは、いよいよあなたのFlaskアプリをサーバーにアップロードしていきます。

【STEP2】Flaskアプリをサーバーにアップロードする2つの方法

サーバーに接続する準備が整いましたね。 このステップでは、あなたのパソコンの中にあるFlaskアプリのファイル一式を、Xserverにアップロードします。

アップロードする方法は主に2つあります。

  1. ファイルマネージャーを使う方法(手軽さ重視)
  2. FTPソフトを使う方法(本格派・定番)

どちらの方法でも結果は同じですが、それぞれのメリット・デメリットを解説しますので、あなたに合った方法を選んでください。

方法①:手軽さNo.1!ファイルマネージャーを使う

サーバーパネル上部からファイルマネージャーにアクセス

ファイルマネージャーは、Xserverが提供している、ブラウザ上でファイルのアップロードや編集ができる公式ツールです。

特別なソフトをインストールする必要がなく、サーバーパネルにログインさえすればすぐに使える手軽さが最大の魅力です。

なおくん

私も実際に使っていますが、その使い勝手はこんな感じです!

メリット:

  • ソフトのインストールが不要で、すぐに使える
  • 画面がシンプルで、初心者でも直感的に操作できる

デメリット:

  • ファイルを削除したのに画面に残り続けるなど、表示に少しバグがある
  • 操作がワンテンポ遅れるような、若干のラグを感じ
ファイルマネージャーはこんな人におすすめ
  • 「FTPソフトのインストールや設定が面倒…」と感じる方
  • とりあえず早くファイルを1、2個だけアップロードしたい方

まずはこのファイルマネージャーから試してみて、もし使い勝手に不満を感じたら、次に紹介するFTPソフトを導入するのがおすすめです。

方法②:本格派のあなたへ!FTPソフト (FileZilla) を使う

ファイルマネージャーの手軽さも魅力的ですが、今後のWeb開発を本格的に行っていくなら、FTPソフトの使い方を覚えておくことを強くおすすめします。

FTPソフトは、ファイルの送受信に特化した専用アプリケーションのことです。 ファイルマネージャーと比較して動作が安定しており、大量のファイルも高速に転送できるため、Web開発の現場ではこちらが標準的に使われています。

なおくん

数あるFTPソフトの中でも、特におすすめなのが「FileZilla」です。無料で使える世界的な定番ソフトで、私も普段から愛用しています。

1. FileZillaをインストールする:まずは、以下の公式サイトからFileZillaをダウンロードし、あなたのPCにインストールしてください。

ダウンロードしたファイルを実行できない場合(windows11)

私はWindows11のPCにFileZillaをインストールする際、ダウンロードした「FileZilla_3.69.3_win64_sponsored2-setup.exe」を実行すると「ファイルにウイルスまたは望ましくない…」というエラーが発生しました。

調べてみると、これはWindowsセキュリティがウイルスとして検知しているためでした。なのでWindowsセキュリティを開いて「アプリとブラウザー コントロール」または「保護の履歴」を確認すると、このように「望ましくない可能性のあるアプリ…」というタブがあったので開いて、右下の青色の「操作」をクリックして「デバイスで許可」をクリックする。

再度、ダウンロードしたファイルを実行すると無事にインストールが開始される。

2. FileZillaにXserverの情報を設定する:インストールが完了したら、FileZillaを起動します。 STEP1で作成したFTPアカウントの情報を、FileZillaに設定していきましょう。

FileZillaのサイトマネージャーを開く

左上のアイコンをクリックすると「サイトマネージャー」が起動します。

サイトマネージャーの左側でFTPの設定に名前を付けましょう。「自分のサイト」の下に画像のような項目が初めから存在する場合は「名前の変更」をクリックして適当な名前を付けましょう。画像のような項目が存在しない場合は「新しいサイト」をクリックしてから「名前の変更」をクリックして適当な名前を付けましょう。

次にサイトマネージャーの右側でFTPの情報を入力します。

  • プロトコル: FTP – ファイル転送プロトコル
  • ホスト: Xserverの「FTPアカウント設定」の「FTPソフト設定」というタブに記載されている「FTPサーバー(ホスト)名」のアドレス
  • ポート: 21
  • 暗号化: 使用可能なら明示的な FTP over TLS を使用
  • ログオンの種類: 通常
  • ユーザー: STEP1で作成したFTPユーザーID
  • パスワード: STEP1で作成したパスワード

3. サーバーに接続してファイルをアップロードする:設定が完了したら、「接続」ボタンを押します。 接続に成功すると、画面が左右に分かれて表示されます。

左側があなたのPC、右側がXserverのファイル一覧です。

FileZillaの画面。左がPC、右がサーバー。

ファイルのアップロードは非常に簡単です。 左側(あなたのPC)にあるFlaskアプリのファイルやフォルダを、右側(サーバー)の目的の場所(public_htmlなど)にドラッグ&ドロップするだけで、転送が開始されます。

FTPソフトを使うメリット

一度この設定をしてしまえば、次回からは左上のアイコン横のトグルボタンをクリックして、先ほど設定したFTPの設定の名前をクリックするだけで、すぐにファイル転送を開始できます。大量のファイルも安定して高速に転送できるため、本格的なアプリ開発・運用の必須ツールと言えるでしょう。

【STEP3】サーバー側での設定とデプロイ (CGI方式)

お疲れ様です!いよいよここからがデプロイ作業の山場です。
SSHを使ってサーバーに接続し、あなたのFlaskアプリが動くための専用環境をサーバー上に作っていきます。
黒い画面でのコマンド操作になりますが、一つずつコピー&ペーストしていけば大丈夫なので、落ち着いて進めていきましょう。

SSHでサーバーに接続し、仮想環境を構築する

1. コマンドプロンプトからSSH接続する:まず、あなたのPCのコマンドプロンプト(またはターミナル)を開きます。 そして、以下の形式でコマンドを入力して、Enterキーを押してください。

ssh -i [秘密鍵へのパス] [ユーザー名]@[ホスト名] -p 10022
  • [秘密鍵へのパス]: STEP1でダウンロードした.keyファイルが保存されている場所とファイル名です。(例: C:\Users\YourName\Downloads\secret-ssh.key
  • [ユーザー名]: XserverのサーバーIDです。(例:temp
  • [ホスト名]: Xserverのサーバーパネル「サーバー情報」に記載のホスト名です。(例:yourname.xsrv.jp

初めて接続する際は、以下のように本当に接続してよいか聞かれますので、yesと入力してEnterキーを押します。 Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

次に、秘密鍵のパスフレーズを聞かれますので、STEP1で設定したパスフレーズを入力してください。(入力中は画面に何も表示されませんが、ちゃんと入力されています) Enter passphrase for key '...':

無事にログインできると、[temp@sv123456 ~]$のような表示に切り替わります。これでサーバーに接続できました!

2. 仮想環境を構築し、Flaskをインストールする:次に、あなたのFlaskアプリ専用のPython環境をサーバー上に作ります。これを「仮想環境」と呼びます。 以下のコマンドを一行ずつ、順番に実行してください。

# アプリを設置したいディレクトリに移動します (例)
cd nao-kun.com/public_html/insane.nao-kun.com/

# Python3.6を使い、pipなしで仮想環境「venv」を作成
python3.6 -m venv venv --without-pip

# 作成した仮想環境を有効化する
source venv/bin/activate

# pipをインストールするためのスクリプトをダウンロード
curl https://bootstrap.pypa.io/pip/3.6/get-pip.py -o get-pip.py

# ダウンロードしたスクリプトを使ってpipをインストール
python get-pip.py

# 最後に、仮想環境にFlaskをインストール(他にも必要なライブラリがあればインストールする)
pip install Flask
なぜこんなに複雑なの?

XserverのPython 3.6の環境では、パッケージ管理ツール「pip」が標準で入っていないため、少し遠回りな手順が必要になります。これはXserverの仕様なので「こういうものだ」と理解しておけば大丈夫です。

ちなみにXserverではPythonが2.7系、3.4系、3.6系しかインストールされていないため、他のバージョンを使用する場合は最後に紹介する「Pythonのバージョンをアップグレードする」を参考にしてインストールしてください。

なおくん

お疲れ様です!これでサーバーの中に、あなたのFlaskアプリが動くための清潔な専用キッチン(仮想環境)が用意できました。あともう少しです!

ファイルを配置し、設定ファイルを編集する

ここからは、STEP2でアップロードしたファイルに加えて、サーバー側で設定ファイルを作成・編集していきます。

最終的なファイル構成は以下のようになります。STEP2でアップロードした run.pytemplates フォルダと同じ階層に、.htaccess というファイルを作成します。

/public_html/insane.nao-kun.com/
|
|-- venv/              # 先ほど作成した仮想環境
|-- .htaccess          # ★これから作成する、Webサーバー設定ファイル
|-- run.py             # ★これから編集する、Flaskアプリ本体
|-- templates/         # あなたが作成したHTMLテンプレートフォルダ
    |-- base.html
    |-- index.html
    |-- ...

.htaccess:アクセスの交通整理を行うマニュアル

.htaccessは、Webサーバー(Apache)の動きを制御するための設定ファイルです。 ファイルマネージャーやSSHのtouch .htaccessコマンドで、run.pyと同じ階層にこの名前のファイルを作成し、以下の内容を記述してください。

Options +ExecCGI
AddHandler cgi-script .py
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /run.py/$1 [L]
各行の意味
  • Options +ExecCGI: CGIプログラムの実行を許可します。
  • AddHandler cgi-script .py: .pyで終わるファイルをCGIプログラムとして扱います。
  • RewriteEngine On: URLの書き換え機能を有効にします。
  • RewriteCondRewriteRule: ファイルやディレクトリが存在しないアクセスを、すべてrun.pyに送ります。これにより、Flaskのルーティングが機能するようになります。

run.py:Flaskアプリ本体 兼 CGI起動スクリプト

次に、STEP2でアップロードした、あなたのFlaskアプリ本体であるrun.pyを編集します。 ここには、CGI環境でFlaskを動かすための非常に重要な「おまじない」を2つ追記します。

#!/usr/bin/python3.6
# -*- coding: utf-8 -*-

import sys
from wsgiref.handlers import CGIHandler
import cgitb
cgitb.enable()

# --- 【成功の鍵1】: 仮想環境のライブラリパスを強制的に読み込む ---
# サーバーの構成に合わせて、実際のsite-packagesのパスを指定
site_packages_path = '/home/your-server/nao-kun.com/public_html/insane.nao-kun.com/venv/lib/python3.6/site-packages'
if site_packages_path not in sys.path:
    sys.path.insert(0, site_packages_path)
# ----------------------------------------------------

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

# (ここにあなたが作成した他のルーティング処理...)

# --- 【成功の鍵2】: CGI環境では常にCGIHandlerを使用する ---
# app.run() をCGI環境で実行しないようにする
CGIHandler().run(app)
注意:ここのパスはあなたの環境に合わせて書き換えてください!

上記コードのsite_packages_pathのパスは、あくまで私の環境の例です。/home/以降の部分を、あなたのサーバーIDやディレクトリ構造に合わせて正しく書き換えてください。ここを間違えるとFlaskが見つからず、500エラーの原因になります。

【成功の鍵1】仮想環境のライブラリパスを強制的に読み込む

CGIとしてスクリプトが動く際、仮想環境がうまく認識されず「Flaskモジュールがない」というエラーが起きがちです。このコードは、スクリプトの実行時に「ライブラリはここにあるよ!」とPythonに直接教えてあげる、非常に重要な役割を果たします。

なおくん

何を隠そう、この解決策はAIに教えてもらったんです!「CGIでは環境変数が引き継がれないことがある」という的確なアドバイスのおかげで、何時間も悩んだエラーが解決しました。

【成功の鍵2】CGI環境ではCGIHandlerを使う

ローカル環境で開発する際はapp.run()でテストサーバーを起動しますが、CGI環境では動きません。代わりに、CGIとして正しく動作させるためのCGIHandler().run(app)を使います。これもCGIデプロイの定番のお作法です。

最後の砦!パーミッションを設定する

さて、設定作業の本当に最後の仕上げです。 サーバーに対して「この run.py は、ただのテキストファイルではなく、実行していいプログラムですよ」と正式に教えてあげる作業、それがパーミッション(権限)の設定です。

なおくん

レストランの例えで言うとrun.pyという厨房の扉に「関係者(Webサーバー)立ち入り許可」の札を貼ってあげるようなイメージですね。これを忘れると、Webサーバーはプログラムを実行できず、確実に500エラーが発生します。

SSHでサーバーに接続した状態でrun.pyをアップロードしたディレクトリに移動して、以下のコマンドを実行してください。

chmod 755 run.py

これだけです。コマンドが成功すれば、特に何もメッセージは表示されません。

「chmod 755」ってどういう意味?

chmod:change mode」の略で、ファイルやフォルダの権限を変更するコマンドです。

755: 権限の種類を示す数字です。「所有者は読み書き実行OK、その他の人は読み取りと実行だけOK」という意味の、Webで公開するプログラムの定番設定です。これにより、Webサーバー(他人)があなたのrun.pyを実行できるようになります。

なおくん

おめでとうございます!これでサーバー側のすべての設定が完了しました。ここまで本当にお疲れ様でした。いよいよ、あなたのアプリが動くか確認する、感動の瞬間です!

【STEP4】動作確認と”あの500エラー”が出た時の解決法

さあ、すべての設定が完了しました。 ブラウザを開いて、あなたのFlaskアプリを設置したドメイン(例:https://insane.nao-kun.com/)にアクセスしてみましょう。

あなたの作ったWebアプリがブラウザに表示されたなら…おめでとうございます!デプロイ成功です!

…しかし、もし画面に「500 Internal Server Error」と表示されても、決して焦らないでください。

これは、デプロイ作業で誰もが一度は通る道です。

なおくん

何を隠そう、私も最初は500エラーが出て、原因がわかるまで3〜4時間かかりました…。でも、原因は必ずありますから、一つずつ確認していきましょう。

500エラーが出たら?冷静にここをチェック!

1. パーミッションは設定しましたか?
 最もよくある原因が、パーミッションの設定忘れです。 STEP3の最後で行った chmod 755 run.py のコマンドを、もう一度実行してみてください。

2. run.pyのパスは正しいですか?
 次に多いのが、run.pyに記述したsite_packages_pathのパス間違いです。 /home/あなたのサーバーID/あなたのドメイン/public_html/... の部分に、一字一句間違いがないか、大文字と小文字も含めて再度確認してください。

3. サーバーのエラーログを確認する
 上記2つを確認しても解決しない場合は、エラーログを確認するのが一番の近道です。

Xserverのサーバーパネルにある「エラーログ」メニューから、ログを確認できます。

サーバーパネルの「エラーログ」メニュー

おそらく、ログの中に以下のような記録が残っているはずです。 End of script output before headers

これは「Webページとして表示する前に、Pythonスクリプトが何らかの理由で異常終了してしまいました」という意味です。 このエラーが出ている場合、原因のほとんどはrun.pyの記述ミスです。

  • site_packages_pathのパスが間違っている
  • Flaskのコード自体に構文エラーがある
  • importしているライブラリが、サーバーの仮想環境にインストールされていない

エラーログをヒントに、もう一度run.pyの中身を見直してみてください。

エラーを解決し、無事にあなたのアプリが表示されたら、デプロイ作業はすべて完了です!

(応用編) さらに開発を効率化するために

無事にFlaskアプリをデプロイできましたが、ここでは一歩進んで、今後の開発やメンテナンスをさらに効率化するためのテクニックを3つ紹介します。

Pythonのバージョンをアップグレードする

今回の手順では、Xserverに標準でインストールされているPython 3.6を使用しました。 しかし、開発を進める中で、新しいPythonの機能を使いたくなったり、特定のライブラリが新しいバージョンを要求したりすることがあります。

その場合、pyenv のようなツールを使って、Xserverに新しいバージョンのPythonをインストールすることが可能です。

詳しい手順は長くなるためここでは割愛しますが、大まかな流れは以下のようになります。

# pyenvをサーバーにインストール
# .bashrcなどの設定ファイルにpyenv用のパスを追加
# pyenv install 3.10.4  (←インストールしたいバージョンを指定)
# cd (アプリのディレクトリ)
# pyenv local 3.10.4    (←このディレクトリで使うPythonのバージョンを指定)

pyenvを使えば、サーバーのシステム全体に影響を与えることなく、プロジェクトごとにPythonのバージョンを切り替えられるようになり、より柔軟な開発が可能になります。

SSH接続を効率化する

毎回 ssh -i [秘密鍵へのパス] [ユーザー名]@[ホスト名] -p 10022 という長いコマンドを打つのは、少し面倒ですよね。 実は、SSHの設定ファイルに「よく使う接続先」を登録しておくことで、この接続コマンドを劇的に短くすることができます。(Windowsの場合のみ紹介します)

1. .sshフォルダとconfigファイルを確認する:まず、あなたのPCのC:\Users\[あなたのユーザー名]\の中に.sshというフォルダがあるか確認します。なければ作成してください。 次に.sshフォルダの中にconfigという名前のファイルを作成します。(拡張子はありません)

2. 秘密鍵を.sshフォルダに移動する:STEP1でXserverからダウンロードした秘密鍵ファイル(.keyファイル)を、この.sshフォルダの中に移動させます。

3. configファイルに接続情報を書き込むconfigファイルをテキストエディタで開き、以下のようにあなたのサーバー情報を書き込みます。

Host TempServer
  HostName temp.xsrv.jp
  User temp
  Port 10022
  IdentityFile ~/.ssh/temp-ssh.key
各項目の設定
  • Host: あなたが自由に決められる接続のショートカット名(エイリアス)です。
  • HostName: Xserverのホスト名。
  • User: XserverのサーバーID。
  • Port: XserverのSSHポート番号10022
  • IdentityFile: .sshフォルダに置いた秘密鍵ファイルの場所を指定します。~/はホームディレクトリを指すので、このままの記述で大丈夫です。

これで設定は完了です。
次回からコマンドプロンプトで、以下のように入力するだけで接続できるようになります。

ssh TempServer

パスフレーズを入力すれば、すぐにサーバーに接続できます。

なおくん

あの長かったコマンドが、自分で決めた好きな名前に変わりました!複数のサーバーを管理するようになると、この設定がさらに真価を発揮しますよ。

requirements.txtでライブラリを一括管理する

あなたのアプリが大きくなるにつれて、Flask以外にも様々なライブラリを追加していくことになります。 そのたびにサーバーにSSHで接続し、pip installを繰り返すのは非常に手間がかかります。

そこで使うのがrequirements.txtというファイルです。

1. あなたのPCで、ライブラリの一覧ファイルを作成する まず、あなたのPCの開発環境(仮想環境を有効化した状態)で、以下のコマンドを実行します。

pip freeze > requirements.txt

すると、requirements.txtというファイルが作成され、その中には現在インストールされているライブラリ名とバージョンがすべて書き出されます。

2. サーバー側で、ファイルから一括インストールする 次に、作成されたrequirements.txtをサーバーにアップロードします。 そして、サーバーの仮想環境を有効化した状態で、以下のコマンドを実行するだけです。

pip install -r requirements.txt

たったこれだけで、requirements.txtに書かれたすべてのライブラリが、指定されたバージョン通りに一括でサーバーにインストールされます。


なおくん

これで、XserverへのFlaskアプリのデプロイガイドはすべて終了です!本当にお疲れ様でした。
「黒い画面」にたくさんのコマンドを打ち込み、エラーと戦い、ついにあなたのアプリを世界に公開することができましたね。この経験は、あなたをWeb開発者として、間違いなく一段階上のレベルへと引き上げてくれたはずです。

まとめ:これであなたもWebアプリを世界に公開できる!

本当にお疲れ様でした! この記事では、XserverレンタルサーバーにPython Flaskアプリをデプロイする方法を、基礎知識から具体的な手順、そしてエラー解決法まで一貫して解説しました。

本記事であなたが達成したこと
  • サーバーの基礎知識(CGI, .htaccess)を理解した
  • SSHとFTPの設定を自分の手で完了させた
  • Flaskアプリをサーバーにアップロードし、正しくファイルを設定した
  • CGI方式でアプリが動くようにパーミッションを設定した
  • 誰もが通る「500エラー」の壁を乗り越え、問題を解決した

あなたのパソコンの中でしか動かなかったアプリケーションが、今、世界中の誰もがアクセスできるWebサーバー上で動いています。

これは、単にコードを書けるプログラマーから、サービスを世界に届けられるWeb開発者へと進化した、非常に大きな一歩です。

もちろん、ここがゴールではありません。 これからデータベースを連携させたり、新しい機能を追加したりと、あなたのアプリはさらに成長していくことでしょう。

なおくん

今回のデプロイで得たサーバーの知識と、エラーを乗り越えた自信は、これからのあなたの開発者人生において、間違いなく大きな武器になります。これからも素晴らしい作品を世界に送り出していってください。応援しています!

目次