DjangoアプリケーションをHerokuからXserverに移行する

DjangoアプリケーションをHerokuからXserverに移行するDjango
ゆうすけ
ゆうすけ

Djangoで作ったアプリをHerokuからXserverに移行したいです

資格マフィア
資格マフィア

いくつかのXserver特有の問題に注意しないとハマるぞ

 

✔️ 本記事のテーマ

Heroku上のDjangoアプリをXserverに移行する

 

✔️ 読者さんへの前置きメッセージ

本記事は「作成したDjangoアプリをXserverにデプロイする方法」について書いています。

 

先日、Herokuの無料プランの終了が発表されました。

 

今まで Heroku の無料プランでWebサービスを運用してきて、
移行先を探している方も多いのではないでしょうか?

 

そこでこの記事では

Heroku上のDjangoアプリケーションをXserverに移管する手順について書いていきます。

 

ただし、XserverにDjangoをデプロイする際にはいくつかのポイントがあります。

このポイントを理解していないと
「500 Internal Server Error」の文字に苦しむことになるでしょう。

 

それでは、いくつかのステップを踏んで解説していきましょう。

※ 注意点として、移行作業は上手くいかなかった場合に元に戻せることが大切です。
※ 「バックアップを取る」「元に戻せる手順を把握しておく」などの対策を取って移行しましょう。

(前提知識)Xserver とは?

Xserver とはサーバーレンタルサービスです。

 

サーバーレンタルサービスとは自分が使用できるサーバー環境を借りることができるサービスです。Xserver はサーバーレンタルサービスの中ではコスパが良く、知名度も高いです。

 

少し細かな説明をすると、Xserver のサーバーレンタル形態は共用サーバーです。そのため、各ユーザーに強い権限が与えられず、専有サーバーに比べて価格が抑えられているのが特徴です。

 

また、利用者も多いので、 Xserver について何かを調べる際に参考情報も多く、問題解決までのスピードが早いのも嬉しいポイントです。

 

サーバー契約すると 1 ドメイン無料などのキャンペーンを行っている時もあり、さらにコスパが良区なることがあるので、新たなサーバー契約を考えている方は検討してみると良いと思います。

 

↓↓↓ Xserverへのリンク ↓↓↓

移行作業の全体の流れ

移行作業の全体の流れ

Heroku から Xserver への Django アプリケーションの移行作業は以下の流れで行います。

  1. 独自ドメインと Xserver を紐づける
  2. Xserver に ssh 接続できるようにする
  3. Xserver に Python をインストールする
  4. Xserver 上で Django Project と Djnago app を作成する
  5. Django Project をXserver にアップロードして作成した Project と入れ替える
  6. .htaccess, index.cgi を作成する
  7. static ディレクトリの階層を移動する

 

途中までは既に終わっているという方は対応するステップから
全く何もしてない方は順番にお読み頂ければお役に立つと思います。

 

「とりあえずデプロイしたけど 500 internal server error で落ちる!」という方は
4. Xserver 上で Django Project と Djnago app を作成する」あたりからが参考になると思います。

1. 独自ドメインとXserverを紐付ける

1. 独自ドメインとXserverを紐付ける

△ 全体の流れに戻る

まず、今まで運用していたドメインを Xserver に紐付けましょう。

 

ドメインを Xserver に紐づけることで

Xserver上にドメインに紐づくディレクトリが自動的に作成されます。

 

なお、紐づけるには

  • Xserver での作業
  • ドメイン取得サービスでの作業

が必要になります。

 

一例として、お名前ドットコムとXserverの紐付けの作業は以下の記事で詳しく解説しています。

 

独自ドメインの取得について

独自ドメインを取得していない場合はまずドメインを取得しましょう

 

ドメインはそこまで高くないです。高くても 1000 円以下、末尾を「.com」にしたいなどのこだわりがなければ数十円で取得可能です。

 

ドメイン取得サービスは「お名前.com」「Xserverドメイン」などが有名でコスパも良いです。

 

「お名前.com」はおそらく最も知名度の高いドメイン取得サービスです。

よくキャンペーンを行っていて、数円でドメインを取得できることがあります。

 

「Xserverドメイン」はXserverと同じサービス元が運営するサービスです。

そのため、ドメインとサーバーとの紐付け作業が不要になります。

面倒な作業がないのがメリットです。

 

慣れている方はドメイン取得作業に慣れている方は「お名前.com」

サーバーとドメインの紐付け作業に不安がある方は「Xserverドメイン」

でドメインを取得すると良いでしょう。

 

↓↓↓ お名前.comへのリンク ↓↓↓

↓↓↓ Xserverドメインへのリンク ↓↓↓

 

2. Xserver に ssh 接続できるようにする

2. Xserver に ssh 接続できるようにする

△ 全体の流れに戻る

Django を Xserver にデプロイするにあたって、
Xserver 上でいくつかのコマンド実行が必要になります。

 

そのため、Xserver に ssh でログインするための設定を行いましょう。

 

具体的には以下の作業が必要です。

  • Xserver サーバーパネルで SSH 設定を ON にする
  • 公開認証用鍵ペアの生成
  • ローカルからターミナルで秘密鍵を使用してコマンド実行

 

画面キャプチャを交えた詳しい手順は以下の記事で解説しています。

 

3. Xserver に Python をインストールする

3. Xserver に Python をインストールする

△ 全体の流れに戻る

Django で動かすためには Python 環境が必要です。

ここからの作業は少し Xserver の特徴を考慮した作業が必要となります。

 

実は Xserver には Python が既に入っています。

 

ところが、Xserver は共用サーバーなので、各ユーザーに root権限が与えられません。

そのため、既存の Python には pip などのコマンドが使えないので、新たにユーザーが自由に使える Python をインストールする必要があるのです。

 

なお、Python のインストールには Anaconda などの仮想環境を使うのをオススメします。
(ここが1つ目のつまずきポイントだと思います)

 

もちろん仮想環境を使わずに Python を直接入れたりすることもできるのですが、
Linuxbrew を入れたり、Python PATH を通したりするのが面倒 & 自身の環境に合わせるハードルが高いです。

 

Anaconda を使えば管理も分かりやすく、自動で PATHも通してくれるので簡単かつ参考記事との差分も生まれにくいです。

 

まず、Linux対応のAnacondaのインストーラを公式のリポジトリから ダウンロードします。

wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh

 

続いて、以下のコマンドを実行して Anaconda をインストールします。

コマンドプロンプトの表示合わせて yes や ENTERキーの押下を行いましょう。

bash Anaconda3-2021.11-Linux-x86_64.sh

 

以下のメッセージが表示されたらインストールに成功しています。

... 略 ...
Thank you for installing Anaconda3!

===========================================================================

Working with Python and Jupyter notebooks is a breeze with PyCharm Pro,
designed to be used with Anaconda. Download now and have the best data
tools at your fingertips.

PyCharm Pro for Anaconda is available at: https://www.anaconda.com/pycharm

 

インストールに成功したら以下のコマンドを実行して anaconda をアクティベートしましょう。

source ~/.bashrc

このコマンドを実行しないと後で Django をインストールする段階で pip コマンドを実行できません。(ここが2つ目のつまずきポイントだと思います)

 

詳細な標準出力例を交えた詳しいコマンド実行手順は以下の記事で解説しています。

  • 記事執筆予定

4. Xserver 上で Django Project と Django App を作成する

4. Xserver 上で Django Project と Django App を作成する

△ 全体の流れに戻る

ここからが Xserver への Django デプロイで最もキモとなるところです。

 

Xserver 上で Django で動かすには

Xserver 上で一度 Project と App を作成する必要があります。

 

Xserver 上に Project ごといきなりアップロードして動かそうとすると 500 Internal Server Errorが送出されます。

 

これは Xserver の仕様なのですが、エラーログを見ても “ とだけ書いてあって「何がなんだか分からない…」と途方にくれるハメになります。

 

これを回避するために

  1. Xserver 上で Project と App を作成する
  2. アップロードした Project とすげ替える

という手順を踏みましょう。

 

では、実行するコマンドを順番に解説します。

Python に Django をインストールする

まずは、構築した Python 環境に Django をインストールしましょう。

 

Xserver に ssh ログインしている & anaconda active になっている状態で
以下のコマンドを実行します。

$ pip install django

 

以下のメッセージが出力されればインストールに成功しています。

... 略 ...
Successfully installed asgiref-3.5.2 django-4.1.1 sqlparse-0.4.2

Django Project を作成する

続いて、以下のコマンドで Xserver 上に Project を作成します。

cd 独自ドメイン名
cd public_html
django-admin startproject [Project 名]

 

なお、[Project 名]は既に運用しているプロジェクト(というより Xserver にアップロードする予定のプロジェクト)と同じ名前にしましょう。

Django App を作成する

次に、作成したプロジェクト配下に App を作成します。

cd [Project 名]
django-admin startapp [App 名]

 

こちらも同様に、
Xserver にアップロードする予定のプロジェクト配下の App と同じ名前にしましょう。

 

ここまでで Xserver に Django アプリケーションをデプロイするための前準備が完了しました。

5. Django Project をXserver にアップロードする

5. Django Project をXserver にアップロードする

△ 全体の流れに戻る

では、いよいよデプロイ作業を行っていきます。

このデプロイ作業で

  1. 運用していた Django Project をアップロードする
  2. 先ほど作成した Project をアップロードした Project に入れ替える

をする必要があります。

 

Xserver のファイルマネージャーから Django プロジェクトをアップロードします。

 

ローカルの Django プロジェクトを圧縮して Xserver 上にアップロード -> Xserver 上で展開すれば OK です。

 

Xserver のファイルマネージャーはXserverアカウントへログインし、ページ下部「ご契約一覧 > サーバー」の「ファイル管理」からアクセスが可能です。

そして、このアップロードした Project を先ほど作成した Project と入れ替えます。

  1. 前の手順で Xserver 上に作成した Project の中にアップロードしたファイルを展開する
  2. 前の手順で作成した App を削除する
  3. ディレクトリ構成を Project -> App となるように整える

 

展開後のディレクトリ構成は以下になるように気をつけましょう。

  • /home/[独自ドメイン名]/public_html/[Project 名]/[App 名]

 

[独自ドメイン名], [Project 名], [App 名] は自分の環境と合わせて下さい。

 

6. .htaccess, index.cgi を作成する

6. .htaccess, index.cgi を作成する

△ 全体の流れに戻る

Xserver で Django アプリケーションを稼働させるには以下の 2 つのファイルをが必要となります。

  • .htaccess
  • index.cgi

それぞれ説明していきます。

なお、どちらのファイルも public_html ディレクトリの直下に作成します。

 

.htaccess

.htaccess は対象のドメインにアクセスした際の挙動を定義するファイルです。

今回は以下のように記述します。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L]

 

対象ドメインへのアクセスを受けたら index.cgi を叩くようにしています。

index.cgi

index.cgi は .htaccess から呼び出される実行ファイルです。

以下のように記述します。

#!/home/[サーバーID]/anaconda3/bin/python
# encoding: utf-8

import sys, os

sys.path.append("/home/[サーバーID]/[独自ドメイン名]/public_html/[Project 名]/")

os.environ['DJANGO_SETTINGS_MODULE'] = "[Project 名].settings"

from wsgiref.handlers import CGIHandler
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
CGIHandler().run(application)

今回は Django アプリケーションを起動するコードになっています。

 

上記コードの [サーバーID], [独自ドメイン名], [Project 名] は全て自分の環境に置き換えて下さい。

 

[サーバーID]は Xserver のサーバーパネルにログインしたページに記載されています。

あるいは Xsever に ssh ログインして pwd コマンドを実行すると分かります。

$ pwd
/home/[サーバーID]/...

7. static ディレクトリを移動する

7. static ディレクトリを移動する

△ 全体の流れに戻る

ここまでの作業が完了すれば、
対象の URL にアクセスしたときに Django アプリケーションが動いているはずです。

 

ただ、Django アプロケーションで javascript や css などの静的ファイルを参照している場合、上手く読み込めていないかもしれません。

 

これは Xserver の独自の仕様によるものです。

 

本来、Django アプリケーションの static ディレクトリは以下のような構成になっていることが多いと思います。

  • [Project 名]/[App 名]/static

 

この static ディレクトリを Xserver 上では public_html 直下に移動しましょう。

  • /home/[独自ドメイン名]/public_html/static

 

こうすることで javascript や css を正しく読み込むことができるはずです。

まとめ

まとめ

Django アプリケーションを Xserver に デプロイする方法について解説しました。

 

Django を Xserver 上で動かすには少しコツが必要ですが、

手順に沿って行えば Django アプリケーションのデプロイができるはずです。

 

Heroku が無料期間を終了する前に移行する必要があり、

すでに Xserver を契約している人にとっては最もコスパの良い移行先だと思います。

 

ぜひ順調な移行で快適な Django ライフを!

エンジニアとしての自身の価値をチェックする(完全無料)

エンジニアとして、

自分の価値がどれくらいのものかご存知でしょうか?

 

エンジニアとしてIT業界に身を置いていると

今の会社でずっと働くのか、フリーランスとして独立するのか …

と様々な選択肢があります。

 

どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも

自身の価値を知っておくことはとても重要です。

 

TechClips ME では、

職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。

▼▼▼▼▼

▲▲▲▲▲

しかもTechClips MEでは想定年収を企業から提示してくれるので、

自身の価値を数字で分かりやすくたしかめることができます。

 

登録はもちろん完全無料なので、一度登録してみると良いかもしれません。

 

コメント

タイトルとURLをコピーしました