お名前.comの共用サーバー環境でPythonアプリケーション(Flask/FastAPI/スクレイピング等)を本番運用する際、「画面に500 Internal Server Errorが表示される」「Cronが動かない」といったトラブルは非常に多く発生します。
原因特定と即時復旧のための「トラブルシューティングFAQ&チェックリスト」です。
Q1. 画面に「500 Internal Server Error」が表示される
最も頻出するエラーです。共用サーバー(CGI実行環境)では、主に以下の3つが原因です。
- 原因①:改行コードが Windows 形式(
CRLF)になっている- 対処: ファイルの改行コードを
LF(Unix形式)に変換して再保存・転送してください。VS Code等のステータスバー(右下)からCRLFをLFに切り替えるか、ターミナルでdos2unix index.cgiを実行します。
- 対処: ファイルの改行コードを
- 原因②:シバング(1行目のPythonパス)が誤っている
- 対処:
#!/usr/bin/bin/python3やpythonなどの相対指定は動かない場合があります。必ずサーバー上の仮想環境(venv)の絶対パスを記述してください。Bash#!/home/アカウントID/public_html/ドメイン名/venv/bin/python3
- 対処:
- 原因③:ファイル・ディレクトリのパーミッション(権限)違反
- 対処: お名前.comのCGI仕様に合わせ、パーミッションを変更してください(下記チェックリスト参照)。
Q2. ターミナルからは動くのに、Web経由やCronだとエラー(ModuleNotFoundError)になる
- 原因:環境変数やモジュール検索パス(
sys.path)の不一致- 手動でログインしたSSH環境と、CGI/Cronが実行される環境では作業ディレクトリ(カレントディレクトリ)や読み込まれる環境変数が異なります。
- 対処法: スクリプトの冒頭で明示的にディレクトリパスを
sys.pathに追加してください。Pythonimport sys import os # スクリプトが存在するディレクトリの絶対パスを取得して追加 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, BASE_DIR)
Q3. Cron(定期実行)を設定したのに全く実行されない
- 原因①:相対パスでファイル指定している
- Cron実行時はホームディレクトリ等がカレントディレクトリになるため、相対パスで記述されたファイル読み書きやスクリプト指定が失敗します。
- 原因②:CGI/Python実行コマンドに絶対パスを使っていない
- 対処法: Cron登録コマンドには、「Python実行ファイル」と「実行するスクリプト」の双方に絶対パスを指定します。Bash
# 正しいCronコマンドの設定例 /home/アカウントID/public_html/ドメイン名/venv/bin/python3 /home/アカウントID/public_html/ドメイン名/cron_script.py > /dev/null 2>&1
Q4. データベース(MySQL/MariaDB)に接続できない
- 原因①:ホスト名に
localhostを指定している- お名前.comの共用サーバーでは、Webサーバーとデータベースサーバーが別筐体で動いていることが多く、
localhostでは接続できません。
- お名前.comの共用サーバーでは、Webサーバーとデータベースサーバーが別筐体で動いていることが多く、
- 原因②:
mysqlclientライブラリのビルド失敗- root権限がないため、C言語ビルドが必要な
mysqlclientのインストールが失敗することがあります。
- root権限がないため、C言語ビルドが必要な
- 対処法:
- コントロールパネルのデータベース設定画面に記載されている「DBサーバーホスト名(例:
mysql123.g.gslb.onamae.un-dc.jp)」を指定します。 - Pythonライブラリには純Python実装の
PyMySQLを使用します。Pythonimport pymysql pymysql.install_as_MySQLdb() # SQLAlchemy等を使う場合の互換処理
- コントロールパネルのデータベース設定画面に記載されている「DBサーバーホスト名(例:
📋 本番公開前・エラー時チェックリスト
障害が発生した際は、以下のリストを上から順番に確認・修正してください。
| チェック項目 | 設定・確認内容 | 判定 |
| 改行コード | index.cgi および .htaccess の改行コードが LF になっているか | [ ] |
| パーミッション | index.cgi の属性が 755(rwxr-xr-x)になっているか | [ ] |
| パーミッション | .htaccess の属性が 644(rw-r--r--)になっているか | [ ] |
| シバング | 1行目(#!/home/...)に venv の絶対パスが正しく記述されているか | [ ] |
| パス設定 | スクリプト内で sys.path.insert(0, os.path.dirname(__file__)) を実行しているか | [ ] |
| エラーログ | コントロールパネルの「エラーログ(error_log)」でスタックトレースを確認したか | [ ] |

コメント