CORESERVERでDjangoのサイトを作るまで

# 始めに
DjangoでWebサイトを作成しようと思い、Webや書籍で情報を集めていました。
『Hello World!』を表示する所までですが、まずまず苦労したので記録に残しておきます。

# CORESERVER
レンタルサーバを幾つか探したのですが、[CORESERVER](https://www.coreserver.jp/)では、30日間の無料トライアルが設けられています。
かつ、ライトプランのCORE-MINIでは、月198円という格安で継続利用することが出来ます。
無料トライアル期間中にサイトの構築を行い、そのまま運用する事もできるかと思います。

### 無料トライアル
登録方法などは一般的なものだったので、割愛します。

1点だけ。登録の過程で、「お支払い情報をスキップ」を選択すると、決済情報（クレジットカード番号等）なしで登録完了できました。
![0003A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/addac638-2018-4bb9-0978-5a2f08adc2fb.png)

登録後、確認メールが登録メールアドレスに送られてきます。
ここに確認パスワードが記載されていますので、メールにあるリンク先から確認作業を行います。

### サーバー作成
ログイン後の画面から　サーバー　→　コアサーバー　を選択します。
![0006A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/1a232f20-4259-affd-89a0-84c19c9e6b56.png)
「コアサーバーの新規アカウントを作成」をクリック。
![0007A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/595393b6-3497-fd99-5e14-959876812e8f.png)
「CORE-MINI プランを取得」をクリック。
![0008A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/d849e22b-bf34-baac-6ac8-570370abd9fb.png)
アカウント名を指定して、下部の「30日間（YYYY-MM-DDまで）のお試し登録」をクリック。
![0009A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/3f943ebd-be62-4a18-cdf9-e1c222d282aa.png)
再度、サーバー　→　コアサーバー　を選択すると、サーバーが登録されていることが確認できます。
![0010A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/d6966792-9f9f-f058-ccbe-5ec66666f90e.png)

### ダッシュボード
新規登録したサーバーにある「新コントロールパネル」のリンクをクリックします。
「サイト設定」を選択するとサイトの一覧が表示されます。
![0011A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/774ae369-ca7e-c41b-577f-e844a03a678c.png)
サイト名をクリックすると、サイトの詳細が表示されます。
「FTP/SFTP接続情報」の項目に、
・ホスト名
・アカウント
・パスワード
の情報が表示されています。
この情報を使用してSSHアクセスを行います。
![0012A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/8ea76bcd-b470-3cf9-1095-5f05ef0076f7.png)

サイト設定　→　ツール／セキュリティー　を選択します。
「SSH接続IP許可」のこうもくから、「SSH接続IP許可」のボタンをクリックします。
![0015A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/9726e6d2-0f13-9cd2-6002-7b2f910033f5.png)
「SSH接続のIPを許可する」をクリックし、現在使用中の端末からサーバへのアクセスを許可します。
![0016A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/cb66273c-f021-10de-fe16-531f42eb4e95.png)
設定の繁栄に5分程度の時間がかかる旨表示されます。
しばらく待ちましょう。

# SSH ログイン
TeraTermでSSHログインします。Hostに、上記のホスト名を指定。
当初アカウント作成した物とはアカウント、パスワードともに違いますのでご注意ください。
![0013.png](https://qiita-image-store.s3.amazonaws.com/0/248779/2acf7b41-fb3d-ba2a-a388-2a913f49b5f5.png)
User Name と Password の項目を埋めてＯＫを押します。
![0018.png](https://qiita-image-store.s3.amazonaws.com/0/248779/2465d6e5-8a6f-eba8-09fc-2b588a41a277.png)
ログイン
![0017A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/63ec87d7-3be4-2c8e-d3fa-32a1c69bf204.png)

# シェル 変更
CORESERVER では、デフォルトシェルが rbash に設定されています。
これを、bash に変更しておきます。

![0019A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/0c465c31-9a0c-f5ad-5edf-1223c5f7c909.png)
一度ログアウトし、ログインしなおすとシェルの変更が適用される様です。
![0020A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/34395e1f-e0d1-9cbb-10d7-0656f9dd2d16.png)

# Python の準備
### pyenv インストール
CORESERVERでは、Python 2.7.5 と Python 3.5.1 がセットアップされています。（記事作成時点）
が、運用性を考慮しpyenvを使用します。

まずはpyenvをローカルにコピー

```
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
```

.bash_profile に以下を追加。

``` :.bash_profile
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
```
設定を反映します。

```
$source .bash_profile
```

### pyenv に python をインストール

pyenv install --list　コマンドでインストール可能なPython のバージョンを確認します。
3.7.0が最新だったので、こちらを使用しました。

```
$ pyenv install 3.7.0
Downloading Python-3.7.0.tar.xz...
-> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
Installing Python-3.7.0...
Installed Python-3.7.0 to /virtual/twinoze201809/.pyenv/versions/3.7.0
```
コマンド完了までに数分かかりました。

pyenv で使用するPythonのバージョンを指定します。
global を指定すると、システム全体で有効になります。

```
$ pyenv version
system (set by /virtual/twinoze201809/.pyenv/version)
[twinoze201809@m1001 ~]$ pyenv global 3.7.0
[twinoze201809@m1001 ~]$ pyenv version
3.7.0 (set by /virtual/twinoze201809/.pyenv/version)
```

.bashrc に以下を追加。pyenv をデフォルトで有効にします。

```:.bashrc
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"

export PYTHONPATH=/virtual/twinoze201809/.pyenv/versions/3.7.0/lib/python3.7/site-packages
```
設定を反映します。

```
$source .bash_profile
```

Python のバージョンを確認すると、反映されている事が分かります。

```
$ python -V
Python 3.7.0 (default, Sep 20 2018, 11:54:11)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
```
python にセットアップされているパッケージを確認。

```
$ python -m pip list
Package    Version
---------- -------
pip        10.0.1
setuptools 39.0.1
You are using pip version 10.0.1, however version 18.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
```
pip のアップグレードを推奨されていますので、アップグレードしておきます。

# Django のセットアップ

pip で Django をセットアップします。

```
$ python -m pip install django
...
Installing collected packages: pytz, django
Successfully installed django-2.1.1 pytz-2018.5
```

# Django のテストプロジェクト作成
[Django のチュートリアル](https://docs.djangoproject.com/ja/2.1/intro/)を参考にテスト用プロジェクトを作成します。

チュートリアルに沿ってプロジェクトを作成しようとしましたが、

```
$ django-admin startproject mysite
-bash: django-admin: command not found
```
コマンドが見つからないとの事で、怒られました。
そこで、以下の1行を追加しました。

```:.bashrc
export PATH=/virtual/twinoze201809/.pyenv/versions/3.7.0/bin:$PATH
```
その後改めて django-admin コマンドを使用し、プロジェクトを作成します。

### mysite プロジェクトの編集
ここでは、簡単のためmysite に直接 ビューを定義しました。

```mysite/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world.")
```

```mysite/urls.py
from django.contrib import admin
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('admin/', admin.site.urls),
]
```
settings.py にある ALLOWED_HOSTS にサーバーのURLを設定します。

```:mysite/settings.py
ALLOWED_HOSTS = ['twinoze201809.m1001.coreserver.jp']
```

# 公開ディレクトに django.cgi を定義
・[さくらのレンタルサーバでpyenvとDjangoを動かす](http://blog.chibiegg.net/2015/05/05_23_791.htm)を参考に、 pulic_html/ にpython3 用のdjango.cgi を設置します。

```
$ wget --no-check-certificate https://raw.githubusercontent.com/chibiegg/django-cgi/master/django-python3.cgi
```

### django.cgi の編集
環境に合わせてシバン(#!)を編集します。

```
$ which python
~/.pyenv/versions/3.7.0/bin/python
```

```:django-python3.cgi
#!/virtual/twinoze201809/.pyenv/versions/3.7.0/bin/python
```

import os, sys の次の行に Django プロジェクトのパス指定する行を追加します。

```:django-python3.cgi
sys.path.append('/virtual/twinoze201809/mysite')
```

environ = dict(os.environ.items())　の次の行に下記を追加します。

```:django-python3.cgi
    environ['PATH_INFO']         = environ.get('PATH_INFO', "/")
```
行末付近の以下の行を

```:django-python3.cgi
os.environ['DJANGO_SETTINGS_MODULE'] = 'application.settings'
```
この様に修正します。

```:django-python3.cgi
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
```

django-python3.cgi　の名称を変更し、実行権限を付けました。

```
# mv django-python3.cgi django.cgi
$ chmod 705 django.cgi
```

# .htaccess　の設定
サイトを開いた際に、上記 django.cgi を実行するよう設定します。


```:.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /django.cgi/$1 [QSA,L]
```
[2019/01/13 追記]
.htaccess　は ~/public_html/ に配置します。

## .htaccess　について
[2019/01/13 追記]
この項目について質問を頂きました。
確かに、説明が簡単すぎたかもしれません(^^ゞ
.htaccess　は、WebサーバであるApatche の補助設定ファイルです。
Apatcheの(基本)設定ファイルは、 /etc/httpd/conf/httpd.conf に記述します。
(セットアップ方式により異なる場合があるようです)

httpd.conf はApatche共通の設定として機能しますが、公開ディレクトリ毎に個別の設定を行う目的で .htaccess を使用します。

CORESERVER では、サーバのOSおよびApacheサーバも他のユーザと共有しますので、個別のユーザのために共通設定を修正することが出来ません。
そこで、 .htaccess を使用してユーザ毎の設定を行うことになります。

## .htaccess　について　その２
.htaccess　の様に、ドットで始まるファイルはLinux上では隠しファイルとして扱われます。
ので、通常の

```
$ls
```
コマンドでは表示されません。ですので、

```
$ls -a
```
この様に、 -a オプションを付けて表示させて下さい。

# テスト
サイトをブラウザで開いてみます。
![0021A.png](https://qiita-image-store.s3.amazonaws.com/0/248779/39ad4164-16e4-124e-fdf7-a28baad65c9f.png)
無事、開くことが出来ました。

# CORESERVER アカウント閉鎖
この記事公開次点で、今回テストに使用したアカウントは閉鎖しています。
以下のマニュアルを参考にしましたが、手順が若干変更されている様です。
・[CORESERVER アカウント閉鎖](https://www.value-domain.com/userguide/manual/server_close/)

# リンクリスト
参考にしたサイトのリンクをまとめておきます。

・[CORESERVER](https://www.coreserver.jp/)
・[.htaccess について](https://httpd.apache.org/docs/2.4/ja/howto/htaccess.html)
・[Django](https://www.djangoproject.com/)
・[XREAでDjangoを動かす](https://errormaker.blog.fc2.com/blog-entry-56.html)
・[さくらのレンタルサーバでpyenvとDjangoを動かす](http://blog.chibiegg.net/2015/05/05_23_791.htm)
・[CORESERVER アカウント閉鎖](https://www.value-domain.com/userguide/manual/server_close/)
・[pyenv を用いた Python3 インストール](https://qiita.com/hasepyon/items/45ea509c64a6469ca5b6)

ここにあげていないもので、参考にさせてもらったサイトも多数ありますが、メモしてなかったので割愛。
どなたかの参考になれば幸いです。