エックスサーバーなどの共用サーバーでDjangoをデプロイする

Python
この記事は約10分で読めます。
スポンサーリンク

本記事では共用サーバにDjangoをデプロイする方法を全工程丁寧に解説します。

エックスサーバーやロリポップ!、さくらのレンタルサーバなどの共用サーバにてご確認いただける内容となっております。今回はエックスサーバーを例にとって解説します。

なお、サーバーの契約は完了しているという前提で進めますのでまだ解説していない方は下記よりエックスサーバー をご契約の上お進みください。

全体の流れ

下記の通りに、全工程をご紹介いたします。

エックスサーバーなどの共用サーバーでDjangoをデプロイする流れ

SSH接続

サーバー上でSSH接続を有効化し、その後アプリを使用してご自身のPCからSSH接続を行う流れとなります。

まず、ご自身のでご契約中のサーバー設定から、下記の手順でSSH接続を有効化します。

サーバー上でのSSH接続の有効化

以下よりエックスサーバーでのマニュアルをご紹介しますが、どの共用サーバーでも同じ流れで設定可能です。

1. ログイン後、「SSH設定」をクリック

サーバーパネルへログインし、「SSH設定」をクリックします。
サーバーパネル SSH設定メニューをクリック

2.「ONにする」を選択し、「設定する」ボタンをクリック

SSH設定画面が表示されますので、「ONにする」を選択し、「設定する」ボタンをクリックします。
「ONにする」を選択

3.状態の確認

再度「SSH設定」をクリックし、「状態」が【ON】になっていることを確認します。
SSH設定の状態がONになっていることを確認

4.ログイン後、「公開鍵認証用鍵ペアの生成」へ

サーバーパネルへログインし、「SSH設定」から「公開鍵認証用鍵ペアの生成」へ進みます。
公開鍵認証用鍵ペアの生成 入力画面

5.「パスフレーズ」を入力し、「確認画面へ進む」をクリック

公開鍵認証設定画面が表示されましたら「パスフレーズ」の入力を行い、「確認画面へ進む」ボタンをクリックします。
確認画面へ進む

6.「生成する」をクリック

確認画面が表示されますので「生成する」ボタンをクリックします。
生成する

7.秘密鍵をPC上の任意の場所に保存

「公開鍵認証用の鍵ペア生成処理を実行しました」画面が表示され、自動的に秘密鍵のダウンロードが始まりますので、PC上の任意の場所に保存します。
(ファイル名:[サーバーID].key)
保存された秘密鍵を利用してSSHクライアントからの接続を行ってください。(例:Tera Termでの接続方法)
公開鍵認証用の鍵ペア生成完了画面

SSH設定 | レンタルサーバーならエックスサーバー

PCからのSSH接続

つぎに、ご使用のPCからサーバーにSSH接続を行う方法をご紹介します。

ここではTera Termを使用した接続方法をご紹介いたしますので、事前準備としてダウンロードをお願いいたします。

Tera Term - Terminal Emulator for Windows
Tera Term is a terminal emulator running on Windows. It supports telnet/ssh/serial connection.

こちらについてもエックスサーバーでのマニュアルをご紹介します。必要な情報は下記のとおりですのでご自身でご準備の上お進みください。

  • ホスト名
  • 接続ポート
  • ユーザー名
  • パスフレーズ
  • 公開鍵などの認証

Tera Termを起動し、「setup」メニューから「SSH Authentication…」を選択します。

※Tera Term起動直後はNew connectionウィンドウが表示される場合があります。こちらのウィンドウが表示されましたら、「Cancel」ボタンをクリックしてウィンドウを閉じてください。

Tera Term SSH Authenticationメニュー

TTSSH: Authentication Setupウィンドウが表示されますので、「Use RSA/DSA/ECDSA key to log in」を選択し、「Private key file:」ボタンをクリックします。
秘密鍵を選択するダイアログが表示されますので、「サーバー上で公開鍵認証用鍵ペアの生成を行う場合」の手順4にてダウンロードを行った(「サーバーID」.key)ファイル又は「公開鍵登録・更新」にて登録されました公開鍵に対応するお手元の秘密鍵を指定し、「OK」ボタンをクリックします。

TTSSH: Authentication Setup画面

「File」メニューから「New connection」をお選びいただき、「New connection」ウィンドウを開きます。
「New connection」ウィンドウにてHostにお客さまの初期ドメイン名、TCP port#に「10022」をご入力いただき、下記項目をお選びの上、「OK」ボタンをクリックします。

Tera Term New connection

SSH Authenticationウィンドウが表示されますので、「User name」にお客さまのサーバーID、「Passphrase」に選択した秘密鍵のパスフレーズを入力し、「Use RSA/DSA/ECDSA key to log in」が選択されている事を確認して「OK」ボタンをクリックします。

SSH Authentication
SSH接続方法

Python及びDjangoのインストール

SSH接続のセットアップが完了したら、サーバー上にPython及びDjangoをインストールします。

Tera Term上にて下記のコマンドを実行してください。

2つ目のAnacondaのインストールでは何行も情報が表示されますが、Enter長押しでスキップし、最後の「Do you accept the license terms? [yes|no]」のみ[yes]としておけばOKです。

# 最新のAnacondaをダウンロード(2023年8月時点)
$ wget https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh
# Anacondaのインストール
$ bash Anaconda3-2023.07-2-Linux-x86_64.sh
# Anacondaの有効化
$ source ~/.bashrc

最後に、下記よりDjangoをインストールします。

# Djangoのインストール
$ pip install django

こちらでエラーが発生する場合はAnacondaがインストールできていない可能性があります。下記のコマンドを実行してエラーが無いかや最新版のAnacondaがイントールできているか確認してください。

# Anaconda及びPythonの情報確認
$ conda info

Djangoで新プロジェクトの作成

次に、Djangoで新しいプロジェクトを作成する方法を解説します。ご自身がインストールしたいドメインの[public_html]フォルダに移動し、通常通りプロジェクトを作成してください。

# ディレクトリの移動
$ cd [独自ドメイン名]
$ cd [public_html]

# サブディレクトリにてインストールされたい方は、さらにサブドメインのディレクトリに移動します
# $ [サブドメイン名]

# 任意の名前のプロジェクトの作成
$ django-admin startproject [Project名]

# 任意の名前のアプリケーションの作成
$ cd [Project名]
$ django-admin startapp [App名]

.htaccessとindex.cgiの編集

次に、.htaccessとindex.cgiの編集を行います。

それぞれのファイルについて下記のコードをコピペして、public_htmlフォルダにアップロードしてください。なお、index.cgiについてはパーミッションを755に設定してください。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L]
#!/home/[サーバーID]/anaconda3/bin/python
# encoding: utf-8

import sys, os

sys.path.append("/home/[サーバーID]/[独自ドメイン名]/public_html/[Project名]/")
# サブドメインの場合は下記
# 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)

ドメインのURLにアクセスしてみて”500 Internal Server Error“が発生する場合は下記の2点を再確認してください。

  • index.cgiのパーミッションが755に設定されているか
  • Python及びサーバーのホームディレクトリ(“/home/[サーバー名]/”のパスが合っているか
    シェル(Tera Term)にて確認する方法は下記のとおりです。
# ホームディレクトリの確認方法
## homeディレクトリへ移動
$ cd $home
## 現在のパスの取得 ("/home/[サーバーID]"の部分)
$ pwd
# Pythonのパスの確認方法
## Pythonのパスの取得(返り値における"~/"の部分を上記に置き換えてください)
$ which python

settings.pyの編集

最後に、settings.pyを編集して完了となります。

なお、フォルダ構成に関して下記のようになっています。

public_html (サブドメイン名)
└───[プロジェクト名]
    ├── manage.py
    └── [プロジェクト名 (config)]
        ├── __init__.py
        ├── asgi.py
        ├── settings.py
        ├── urls.py
        ├── wsgi.py
        └── __pycache__

タイムゾーン及び言語設定

まず、タイムゾーンと言語設定を行います。下記のコードのように編集してください。

LANGUAGE_CODE = "ja" # "en-us" -> "ja"に変更

TIME_ZONE = "Asia/Tokyo" # "UTC" -> "Asia/Tokyo"に変更

こちらを行った時点で、ホームページが日本語になっていることを確認できます。

Staticディレクトリの設定

まず、プロジェクトのファイルディレクトリ内にstaticフォルダない場合を想定し、先程同様にsettings.pyに追記を行います。こちらにより、Djangoプロジェクト内のstatic関連ファイルを[プロジェクト名]/static_root内に集める準備が完了します。

import os # 追記
STATIC_ROOT = os.path.join(BASE_DIR, 'static_root') # 追記

次に、Tera Termより下記コマンドを実行します。こちらにより、Djangoプロジェクト内のstatic関連ファイルが一箇所に集められ、その後staticフォルダとしてpublic_htmlまたはサブドメイン直下に配置されます。

# staticファイルの収集
$ python manage.py collectstatic
# staticファイルの移動し、saticという名前にリネーム
$ mv static_root ../static

おわりに

以上が、エックスサーバーなどの共用サーバーにてDjangoをインストールする方法になります。

ご精読いただきありがとうございました。

コメント

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