知識の枝

"All is well"

ホームページの作り方⑤サーバー

約454日前 2020年8月29日14:49
デジタル
ホームページ ConoHa Django

改訂履歴


2020/8/29 投稿


「ホームページの作り方」シリーズの第5章です。

第1章・・・導入
第2章・・・準備
第3章・・・ベース作り
第4章・・・テンプレート適用
第5章・・・サーバーNow
第6章・・・ドメイン設定
第7章・・・常時SSL接続化


1. 前準備


この章を開始する前にブログテンプレートの設定はお済みでしょうか?
まだの方は第4章の内容に沿って導入をお願い致します。
4章へ



2. この章のゴール


自前のDjangoプロジェクトを外部サーバーにデプロイし、
インターネット上に公開する。


3. ConoHa VPS


レンタル可能なサーバーの種類は複数あり、
今パッと思いつくだけでも
・ConoHa
・さくらインターネット
・Xserver
の3つが出てきました。

じゃあどれにすればいいの?と思いますよね。
月額の料金や通信速度で比較して決めたら良いと思いますが、
私はConoHaにしました。
理由は覚えていませんが、安くて速いっていう広告を見たからだと思います。
ここではConoHaでデプロイする方法についてお伝えします。

3.1 - ConoHa VPSの契約


ConoHaのホームページにいきましょう。
https://www.conoha.jp/<splt>ConoHaへのリンク

ConoHa VPSを選択して下さい。


今すぐお申込みをクリック。


「はじめての方」というフォームを入力し、
アカウントを作成しましょう。

立ち上げるサーバーを選択しましょう。
サーバーのスペックによって利用料金が変化します。
880円/月の性能で十分かと思います。
(お財布と相談して好きなものを選んで下さい)


イメージタイプは
「アプリケーション」タブ →「他のアプリケーション見る」をクリックし、
「Django」を選択して下さい。


「rootパスワード」はサーバーをroot権限で操作するときのパスワードです。
忘れないようにしましょう。

「ネームタグ」は自分の分かりやすい名前でOKです。
ConoHaの管理画面で表示されるサーバー名です。

全て決まったらサーバーを追加しましょう。

サーバー管理画面でサーバーの起動まで少し待ちましょう。
ネットワーク情報のIPアドレスの部分に「aaa.bbb.ccc.ddd」のような数字がありますよね?
サーバーの起動が終わったらブラウザの別タブを開き、
そのIPアドレスを入力してアクセスしてみましょう。


あのDjangoのロケット画面が出ましたね!
もちろんスマホからでもアクセスできます。
あなたのホームページです!

サーバー料金は後払いで、使用状況によって変化します。
1日ごとに何十円と加算されていき、最大で880円/月になります。
(月額料金は契約した内容によって異なります)

1ヵ月目はだいたい日割り金額、2ヵ月目以降は880円って感じです。

3.2 - ユーザーの作成


ここからはサーバー側の初期設定と、Django関係ファイルを移す前の準備を行っていきます。
まずはユーザーの作成です。

rootでサーバー操作を行うことは推奨されてないようですので、
サーバー操作時に使用するユーザーを作ります。
(セキュリティ上の問題のようです)

まずConoHaでコンソールをクリックします。
すると黒い画面が立ち上がります。


サーバーへのログインが求められるので、
まず「root」と入力してエンターを押しましょう。
※aaa.bbb.ccc.dddの箇所はあなたのサーバーのIPアドレスが表示されています。
aaa.bbb.ccc.ddd login: root

パスワードの入力を求められるので、
サーバー契約時に設定した「rootパスワード」を入力し、エンターを押します。
※このとき入力しても画面上には何も表示されませんが、それが普通ですので気にしなくてOKです。

パスワードを間違えてなければ、
「Welcome to Django application!」というメッセージと共にDjango関連ファイルの情報が表示されます。

入力待機が下記のようになっていると思います。
[root@aaa-bbb-ccc-ddd ~]#   #ログインできました

今あなたはサーバーにroot権限でログインしています。

ユーザーを追加するコマンドは以下の通りです。
adduser testuser

adduser 半角スペース 追加したいユーザー名
※今回は「testuser」としています。

追加したユーザーのログインパスワードを下記コマンドで設定します。
passwd testuser

passwd 半角スペース 追加したユーザー名

すると下記のようにパスワード入力待機になりますので、

Changing password for user testuser.
New password: #ここにパスワードを入力
Retype new password: #確認の為もう一度入力

パスワードの設定に成功したら
passwd: all authentication tokens updated successfully.

とメッセージがでます。

追加したユーザーにsudo権限を与えるため、
下記コマンドを実行下さい。
gpasswd -a testuser wheel

「wheel」というグループにユーザーを追加しました。

なぜ「wheel」というグループ名なのかについては下記サイトで説明されていました。
気になって気持ち悪いという方は見てきて下さい。
なぜ sudo する権限のあるグループが「 wheel 」という名前なのか

それでは作成したユーザーでログインしましょう。
下記コマンドでログイン可能です。
su testuser

ログインに成功すると、入力待機の左側の部分の名前が変わります。

【変更前】
[root@aaa-bbb-ccc-ddd ~]#   #rootアカウント

【変更後】
[testuser@aaa-bbb-ccc-ddd root]$   #ユーザーアカウント

※以降「testuser@aaa-bbb-ccc-ddd」の部分を省略して「user@IP」とします。

ユーザーの作成については以上です。

3.3 - SSH接続の設定


このままConoHaのコンソールで作業を続けることもできるのですが、
コピペが出来ない、動作が遅い等 不満がたまるのでSSH接続を許可します。

この設定を行うことで、
わざわざ「ConoHaにログインしてコンソールを起動する」という面倒な手順を踏まなくてもサーバーをいじれるようになります。
便利!

SSH接続について・・・

SSH(Secure Shell)とは、安全に通信を行って、ネットワークに接続された機器を遠隔操作するための通信手段(プロトコル)の1つです。「通信する側とされる側で、SSHでやり取りをしよう!」と取り決めることで安全に通信を行います。

Qiita

リンク

SSH接続について設定するファイルが
/etc/ssh/sshd_config ←これです

etcフォルダの中の
sshフォルダの中の
sshd_configファイルを編集します。

コンソール画面に下記コマンドを入力しましょう。
※パスワードを聞かれたらユーザーのパスワードを入力して下さい。
sudo vi /etc/ssh/sshd_config  #入力したらエンターを押して下さい

「sudo」はrootと同等の権限でファイルを操作するコマンドです。
superuser doの略と言われています。

「vi」はファイルの中身を開いて編集するエディタです。

上記コマンドの意味は
「root権限で/etc/sshフォルダ内のsshf_configファイルをviエディタで開く」
と解釈できます。

ConoHaコンソールではマウスでカーソル操作が出来ない為、
「↑↓←→」キーでカーソルを移動します。

下記箇所を探して書き換えていきましょう。

・ポート番号
【変更前】
#Port 22

【変更後】
Port XXXXX

ポート番号を変更する目的はセキュリティ向上の為です。
デフォルトでは22番のポートが解放されています。

49152番~65535番の中で好きな番号を選んで書き換えて下さい。
※なぜこの番号範囲なのかについてはこちら

viエディタの使い方が特殊なので簡単に説明します。

「vi」コマンドでファイルを開いたままの状態では、何も書き換えることができません。
キーボードの「i」を押すと編集モードになります。

十字キーでカーソルを移動させ、
消したい場所で「Backspace」、
書き換えましょう。

編集モードは「Esc」キーで抜けることができます。

編集モードを抜けた後に「:wq」を入力してエンターを押すことで上書き保存ができます。

それでは、sshd_config編集の続きです。

・rootログインを許可しない
【変更前】
PermitRootLogin yes

【変更後】
PermitRootLogin no

セキュリティ向上の為にrootログインを出来なくしておきます。
(これ以降、サーバーをいじる際はこのユーザーアカウントを使用します)

sshd_configの変更は以上です。
設定を変更したので下記コマンドで「sshd」を再起動します。
sudo service sshd restart


続いて上記で設定したポート番号でのssh接続許可をfirewallに設定します。
下記コマンドを実行し、firewall設定ファイルをviエディタで開きましょう。
sudo vi /usr/lib/firewalld/services/ssh.xml

開くとこんな画面がでると思います。
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
<port protocol="tcp" port="22"/>
</service>

上記の「port="22"」の部分を「port="あなたが設定したポート番号"」に変更します。
書き換えたらEsc → :wq で上書き保存をしましょう。

設定を変更したので「firewall」をリロードしましょう。
下記コマンドを実行して下さい。
sudo systemctl reload firewalld

これでSSH接続する準備が出来ました。

試しに接続してみましょう。

ここでやっと2章でインストールした「Tera Term」を使用します。
未インストールの方は2章の4.4項を参考に導入しましょう。

Tera Termを起動後、
ホスト欄に「ユーザー名@IPアドレス」、
TCPポート#欄に「設定したポート番号」を入力しましょう。
※私はポート番号設定を「50000」にしました。


「OK」を押すと画面が切り替わり「セキュリティ警告」が出ます。
「続行」を押しましょう。

再度画面が変わり「パスフレーズ」の入力を要求されます。
先ほどコンソールで追加したユーザーのログインパスワードを入力しましょう。

「OK」を押すとサーバーにSSH接続できます!

4. アップロード


さて、この章の最終項です。
ここでは4章で作成したDjangoプロジェクトをConoHa VPS上に移行し、サーバー上での動作確認まで進めます。

4.1 - GitHub登録


2章でインストールしたGitを使用して操作を行います。
未インストールの方は2章の4.3項を参考に導入しましょう。

サーバーにファイル類をアップロードする際、
GitHubというサイトを中継してファイルを送ります。

まずGitHubのアカウントを作成しましょう。
GitHub



右上の「サインアップ」から登録を行いましょう。

登録が完了したら左上のRepositoriesの緑色の「New」をクリックしましょう。


「リポジトリ名」を入力し、「Create repository」でリポジトリを作成しましょう。
※私は例としてリポジトリ名を「homepage」としています。


4.2 - ローカル → GitHub


あなたのPC内(ローカル)のDjangoファイルを中継地(GitHub)にアップロードします。

2章でインストールしたGit cmdを起動下さい。

黒い画面が起動したら「myhp」フォルダに移動しましょう。
※myhp部分はあなたのDjangoプロジェクトフォルダの名前を入れて下さい。
C:\Users\ユーザー名>cd C:\Users\ユーザー名\myhp   #「myhp」フォルダに移動

次にGitにこのフォルダの変更履歴を監視するように設定します。
この設定を行うことで、中継地(GitHub)にファイルを送る際、差分のみを送ることができるようになります。

Git cmdで下記コマンドを実行下さい。
C:\Users\ユーザー名\myhp>git init
Initialized empty Git repository in C:/Users/ユーザー名/myhp/.git/ #無事設定できました。

次にユーザー名とメールアドレスを登録します。
これをやらないと後で下記のように怒られます。
*** Please tell me who you are.

Run

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address

「誰か分かんないから名前とメールアドレスを登録して」と言われます。

では登録しましょう。
下記コマンドでユーザー名を登録します。
git config --global user.name "user_abc"

下記コマンドでメールアドレスを登録します。
git config --global user.email myadress@gmail.com

これでOKです。

「myhp」フォルダ内にはサーバーへ送る必要のないファイルも存在するので、
監視対象から除外します。

Visual Studio Codeを起動し、
「myhp」の右側にある「新しいファイル」をクリックします。
※このときmyhp内の他のフォルダを選択した状態だと、そのフォルダ内に新しいファイルを生成してしまう為、
 フォルダ以外のファイルを選択した状態(例えばmanage.py)で「新しいファイル」をクリックしましょう。


ファイル名を入力するボックスが出るので、
「.gitingore」という名前を入力してエンターを押します。


ファイル中に下記を記入して上書き保存(Ctrlキー+「S」)して下さい。
*.pyc
*~
/.vscode
__pycache__
myvenv
db.sqlite3
/static
.DS_Store
requirements.txt
.gitignore


それではこれからGitHub(中継地)にデータを送ります。
まずは下記コマンドをgit cmd上で実行下さい。
C:\Users\ユーザー名\myhp>git status   #git statusを実行
On branch master

No commits yet

Untracked files:
(use "git add <file>..." to include in what will be committed)
blog/
config/
manage.py

nothing added to commit but untracked files present (use "git add" to track)

「blog/」
「config/」
「manage.py」
の3つが赤色で表示されていると思います。
先ほどの「.gitignore」に書いたファイルはここには表示されません。
移動させたくないファイルがある場合は「.gitignore」ファイルに追加しましょう。

続いて下記コマンドを実行下さい。
※「--add」のダッシュ「-」は2つです。
※最後の「--add」の後に半角スペースを空けて「.」を入れることを忘れないで下さい。
 「.」には、「このフォルダ内の」という意味があります。
C:\Users\ユーザー名\myhp>git add --all .

コマンドを実行すると、ずらーっとログが表示されます。

次に下記コマンドでこれからGitHubに送るファイルにコメントを付けます。
コメントを付けておくことで、後から見たときに何の為に送ったファイルかを思い出せます。
「””」の内側にコメントを入れましょう。
C:\Users\ユーザー名\myhp>git commit -m "First Django files for my homepage."
[master (root-commit) 51f2282] First Django files for my homepage.
49 files changed, 2110 insertions(+)
create mode 100644 blog/__init__.py
create mode 100644 blog/admin.py
.
.
.
ずらーっと出ます。


次にGit cmdとGitHubを紐づけます。
GitHubで紐づけ用のURLをコピーしてきましょう。



コピーしたURLを下記コマンドでGitに登録します。
C:\Users\ユーザー名\myhp>git remote add origin https://github.com/GitHubユーザー名/homepage.git

最後に送信コマンドを実行します。
C:\Users\ユーザー名\myhp>git push -u origin master

そうするとGitHubのログインが要求されるので、自分のアカウントでログインしましょう。


こんな感じでファイルが送信されます。
Enumerating objects: 61, done.
Counting objects: 100% (61/61), done.
Delta compression using up to 2 threads
Compressing objects: 100% (56/56), done.
Writing objects: 100% (61/61), 31.36 KiB | 891.00 KiB/s, done.
Total 61 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), done.
To https://github.com/chunao/homepage.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

送信が終わったらGitHubのサイトで確認してみよう。



「blog」フォルダ、
「config」フォルダ、
manage.pyファイルの3つがGitに上がっていると思います。


4.3 - GitHub → ConoHa


あともう一息です!
続いてはGitHubからConoHaサーバー上にファイルを送信します。

Tera Termを起動しサーバーにログインしましょう.。

サーバー内には既にDjangoフォルダが作られているので、
その中にホームページ用のフォルダを作ります。

まずは下記コマンドでDjangoフォルダ内に移動します。
[user@IP ~]$ cd /home/django   #移動コマンド
[user@IP django]$ #←移動後

ここでフォルダ内の中身を確認してみましょう。
[user@IP django]$ ls
sample

「ls」は現在のフォルダに存在するファイルを表示してくれるコマンドです。
「sample」というフォルダがありますね。

このsampleフォルダはConoHaを立ち上げたときに生成されたフォルダで、
初期設定ではこのsampleフォルダ内のDjangoファイルがホームページとして表示されます。

これから先は使わないフォルダなので消してしまってOKです。
消さなくてもOKです。
消す場合は下記コマンドで消去可能です。
[user@IP django]$ sudo rm -rf sample

sudoパスワードを聞かれたらログインしているユーザーのパスワードを入力して下さい。

lsコマンドで確認してみると、「sample」フォルダが無くなっていると思います。

ではホームページ用のフォルダをここに作りましょう。
下記コマンドでフォルダの生成が可能です。
※例として「homepage」という名前にしておきます。名前は何でもOKです。
[user@IP django]$ sudo mkdir homepage   #homepageというフォルダを作りました

lsコマンドで確認してみると、「homepage」フォルダが存在することを確認できます。

作ったフォルダのグループとパーミッションを設定します。
下記2つのコマンドを実行下さい。
[user@IP django]$ sudo chgrp apache homepage
[user@IP django]$ sudo chmod 775 homepage

次の作ったフォルダへ移動します。
[user@IP django]$ cd homepage   #homepageフォルダに移動


ではこのフォルダにGitHubからファイルを持ってきます。
下記コマンドを実行します。URL部分はGitHubのリポジトリページでコピーできます。
※URLのあとに半角スペースを空けて「.」を入れることを忘れないように!

[user@IP homepage]$ sudo git clone https://github.com/Gitのユーザー名/homepage.git .
[sudo] password for testuser: #sudoパスワードを聞かれたら入力しましょう
Cloning into '.'...
remote: Enumerating objects: 61, done.
remote: Counting objects: 100% (61/61), done.
remote: Compressing objects: 100% (54/54), done.
remote: Total 61 (delta 2), reused 61 (delta 2), pack-reused 0
Unpacking objects: 100% (61/61), done.

「ls」コマンドで「homepage」フォルダ内を確認すると、
GitHubにあったファイルがしっかりコピーされていることが確認できます。
[user@IP homepage]$ ls
blog config manage.py


5. Django設定


ホームページを構成する基本的なファイルの移動が終わりました。
後はサーバー側で設定を進めていきます。

5.1 - データベース


「migrate」コマンドのことを覚えていますか?
投稿した記事の情報を保存するデータベースを用意する必要があります。

ローカル(自分のPC)で作成したデータベースファイル「db.sqlite3」はサーバーに持ってきていません。
一般的にローカルとサーバーはデータベースを分けるべきと言われています。
ですのでサーバー側専用のデータベースを下記コマンドで作成しましょう。
※pythonバージョンを指定せずコマンドを実行するとエラーがでます。
(python2.7系では未対応のルールでpythonファイルが作成されている為)
 「python3.6」と指定してコマンドを実行します。
[user@IP homepage]$ sudo python3.6 manage.py migrate

実はこのコマンドを実行するとエラーが出ます。
エラー内容を見てみましょう。※最後の2行です
raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version)
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).

「SQLiteのバージョンが3.8.3以上じゃないとダメだよ。あなたのは3.7.17だから古いよ」
と言っています。

少し手間ですがアップグレードさせましょう。
まず下記コマンドでホームディレクトリに移動します。
※ホームディレクトリ:一番上のディレクトリ
cd   #「cd」とだけ入力してエンター

次に
SQLiteの最新版をダウンロードします。
まず下記サイトで最新版のファイル名を確認して、コピーして下さい。
※ファイルをダウンロードする必要はありません。
https://www.sqlite.org/download.html



コピーしたファイル名を使って下記コマンドを実行します。
※URLの最後の部分をコピーしてきたファイル名にします。
[user@IP ~]$ wget https://www.sqlite.org/2020/sqlite-autoconf-3330000.tar.gz
--2020-08-30 23:30:12-- https://www.sqlite.org/2020/sqlite-autoconf-3330000.tar.gz
Resolving www.sqlite.org (www.sqlite.org)... 2600:3c00::f03c:91ff:fe96:b959, 45.33.6.223
Connecting to www.sqlite.org (www.sqlite.org)|2600:3c00::f03c:91ff:fe96:b959|:443... failed: Connection timed out.
Connecting to www.sqlite.org (www.sqlite.org)|45.33.6.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2913759 (2.8M) [application/x-gzip]
Saving to: ‘sqlite-autoconf-3330000.tar.gz’

100%[======================================>] 2,913,759 2.38MB/s in 1.2s

2020-08-30 23:32:21 (2.38 MB/s) - ‘sqlite-autoconf-3330000.tar.gz’ saved [2913759/2913759]

続いて下記コマンドでダウンロードしたファイルを解凍します。
[user@IP ~]$ tar xvfz sqlite-autoconf-3330000.tar.gz   #解凍コマンド
sqlite-autoconf-3330000/ #生成されたフォルダ
sqlite-autoconf-3330000/sqlite3.rc #以下、フォルダ内に生成されたファイル
sqlite-autoconf-3330000/README.txt
sqlite-autoconf-3330000/aclocal.m4
sqlite-autoconf-3330000/sqlite3.c
sqlite-autoconf-3330000/Makefile.am
sqlite-autoconf-3330000/configure
sqlite-autoconf-3330000/configure.ac
.
.
.
ずらーっとファイルが生成

生成されたフォルダに移動します。
[user@IP ~]$ cd sqlite-autoconf-3330000   #移動コマンド
[user@IP sqlite-autoconf-3330000]$ #移動後

移動後、下記コマンドを実行して下さい。
ログがずらーっと出ます。
[user@IP sqlite-autoconf-3330000]$ ./configure --prefix=/usr/local

済んだら、次は下記コマンドを実行下さい。
※この「make」コマンドは完了までに時間が掛かるので気長に待ちましょう。
 完了したら入力待機になります。
[user@IP sqlite-autoconf-3330000]$ make

終わったらインストールコマンドを実行します。
[user@IP sqlite-autoconf-3330000]$ sudo make install
[sudo] password for testuser: #パスワードを要求されたら入力して下さい
make[1]: Entering directory `/home/testuser/sqlite-autoconf-3330000'
/usr/bin/mkdir -p '/usr/local/lib'
/bin/sh ./libtool --mode=install /usr/bin/install -c libsqlite3.la '/usr/local/lib'
libtool: install: /usr/bin/install -c .libs/libsqlite3.so.0.8.6 /usr/local/lib/libsqlite3.so.0.8.6
libtool: install: (cd /usr/local/lib && { ln -s -f libsqlite3.so.0.8.6 libsqlite3.so.0 || { rm -f libsqlite3.so.0 && ln -s libsqlite3.so.0.8.6 libsqlite3.so.0; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libsqlite3.so.0.8.6 libsqlite3.so || { rm -f libsqlite3.so && ln -s libsqlite3.so.0.8.6 libsqlite3.so; }; })
libtool: install: /usr/bin/install -c .libs/libsqlite3.lai /usr/local/lib/libsqlite3.la
libtool: install: /usr/bin/install -c .libs/libsqlite3.a /usr/local/lib/libsqlite3.a
libtool: install: chmod 644 /usr/local/lib/libsqlite3.a
libtool: install: ranlib /usr/local/lib/libsqlite3.a
libtool: finish: PATH="/sbin:/bin:/usr/sbin:/usr/bin:/sbin" ldconfig -n /usr/local/lib
----------------------------------------------------------------------
Libraries have been installed in:
/usr/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the 'LD_RUN_PATH' environment variable
during linking
- use the '-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
/usr/bin/mkdir -p '/usr/local/bin'
/bin/sh ./libtool --mode=install /usr/bin/install -c sqlite3 '/usr/local/bin'
libtool: install: /usr/bin/install -c sqlite3 /usr/local/bin/sqlite3
/usr/bin/mkdir -p '/usr/local/include'
/usr/bin/install -c -m 644 sqlite3.h sqlite3ext.h '/usr/local/include'
/usr/bin/mkdir -p '/usr/local/share/man/man1'
/usr/bin/install -c -m 644 sqlite3.1 '/usr/local/share/man/man1'
/usr/bin/mkdir -p '/usr/local/lib/pkgconfig'
/usr/bin/install -c -m 644 sqlite3.pc '/usr/local/lib/pkgconfig'
make[1]: Leaving directory `/home/testuser/sqlite-autoconf-3330000'

インストールが終わったので不要なものは削除します。
[user@IP sqlite-autoconf-3330000]$ cd   #ホームディレクトリに戻って
[user@IP ~]$ sudo rm sqlite-autoconf-3330000.tar.gz #ダウンロードしたファイルを削除
[user@IP ~]$ sudo rm -rf ./sqlite-autoconf-3330000 #解凍したファイルを削除

SQLiteのバージョンを確認しましょう。
[user@IP ~]$ /usr/local/bin/sqlite3 --version   #新しくインストールしたSQLite
3.33.0 2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f
[user@IP ~]$ /usr/bin/sqlite3 --version #元々入っていた古いSQLite
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668

新しいSQLite「3.33.0」
古いSQLite「3.7.17」

古いSQLiteを新しいものと置き換える為、
古いほうを「sqlite_old」というフォルダに避難させましょう。
[user@IP ~]$ sudo mv /usr/bin/sqlite3 /usr/bin/sqlite3_old
[sudo] password for testuder: #パスワードを聞かれたら入力して下さい

「mv」はファイルの移動コマンドです。
/usr/binフォルダ内のsqlite3をsqlite3_oldフォルダに移し替えました。

次に新しいSQLiteを古いSQLiteがあったフォルダにリンクします
[user@IP ~]$ sudo ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3

最後に下記ファイルの設定を書き換えます。
[user@IP ~]$ sudo vi /etc/ld.so.conf

【変更前】
include ld.so.conf.d/*.conf

【変更後】
include ld.so.conf.d/*.conf
/usr/local/lib

書き換えた後、下記コマンドを実行下さい。
[user@IP ~]$ sudo ldconfig

これで「migrate」コマンドでSQLiteのバージョンに関するエラーが出ないはずです。
[user@IP ~]$ cd /home/django/homepage   #Djangoプロジェクトフォルダに移動
[user@IP homepage]$ sudo python3.6 manage.py migrate #migrateコマンド

ここでまた別のエラーが出ます。
※エラーコードを読むとエラーが出たときにどうしたら良いか分かるようになります。
SQLiteのエラーは回避しましたが次は「Pillow」というファイルが入っていないというエラーです。
すぐに導入できるので安心して下さい。

下記コマンドを実行するだけです。
[user@IP homepage]$ sudo python3.6 -m pip install Pillow
WARNING: Running pip install with root privileges is generally not a good idea. Try `__main__.py install --user` instead.
Collecting Pillow
Downloading https://files.pythonhosted.org/packages/30/bf/92385b4262178ca22b34f82e0e09c2922eb351fe39f3cc7b8ba9ea555b41/Pillow-7.2.0-cp36-cp36m-manylinux1_x86_64.whl (2.2MB)
100% |????????????????????????????????| 2.2MB 563kB/s
Installing collected packages: Pillow
Successfully installed Pillow-7.2.0

無事「Pillow」がインストールされましたので、
改めてmigrateを実行したいと思います。
[user@IP homepage]$ sudo python3.6 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions, sites
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying sites.0001_initial... OK
Applying sites.0002_alter_domain_unique... OK
Applying blog.0001_initial... OK
Applying blog.0002_auto_20180416_2344... OK
Applying sessions.0001_initial... OK

無事にデータベースファイルが生成されました!
あとは「db.sqlite3」のパーミッションを変更します。
下記コマンド2つを実行下さい。
[user@IP homepage]$ sudo chgrp apache db.sqlite3
[user@IP homepage]$ sudo chmod g=rw db.sqlite3

データベースに関しては以上です。
お疲れ様でした。

5.2 - 接続設定


デフォルトの設定では「sample」フォルダ内のDjangoファイルが読み込まれるようになっていますので、
「homepage」を読み込むように変更していきます。

「httpd.conf」というファイルの設定を変更します。
下記コマンドを実行下さい。
[user@IP homepage]$ sudo vi /etc/httpd/conf/httpd.conf

全部で370行弱のファイルが開きます。
一番下にDjangoの設定があるので下まで移動しましょう。
※viエディタで「:set number」を実行してみましょう。左側に行番号が表示されます。

358行目と359行目を下記のように書き換えて下さい。
【変更前】
WSGIScriptAlias / /home/django/sample/sample/wsgi.py
WSGIPythonPath /home/django/sample

【変更後】
WSGIScriptAlias / /home/django/homepage/config/wsgi.py
WSGIPythonPath /home/django/homepage

参照先を「sample」フォルダから「homepage」フォルダに変更しました。

続いて365行目を下記通り書き換えます。
【変更前】
<Directory /home/django/sample/sample>
<Files wsgi.py>
Require all granted
</Files>

【変更後】
<Directory /home/django/homepage/config>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

書き換え終わったら「ESC」キーで編集モードを抜け、
「:wq」で上書き保存をしましょう。

続いて「Django.conf」の設定を変更します。
下記コマンドを実行し、Django.confをviエディタで開きます。
[user@IP homepage]$ sudo vi /etc/httpd/conf.d/django.conf

下記通り書き換えましょう。
【変更前】
#
Alias /static/ /home/django/sample/static/
<Directory /home/django/sample/static/>
Require all granted
</Directory>

【変更後】
#
Alias /static/ /home/django/homepage/static/
<Directory /home/django/homepage/static/>
Require all granted
</Directory>

Alias /media/ /home/django/homepage/media/
<Directory /home/django/homepage/media/>
Require all granted
</Directory>

「:wq」で上書きして保存して下さいね。

何をやったかというと、
静的ファイルと呼ばれる「CSS」や「JAVA」、「メディアファイル」までのパスを書き替えました。
これをやらないと自分で用意したファイルが読み込まれなくて寂しいホームページになります。

「httpd」の設定を変更したので、下記コマンドで再起動させます。
[user@IP homepage]$ sudo service httpd restart
Redirecting to /bin/systemctl restart httpd.service


あと2つ3つやることがあるのでDjangoのフォルダに戻ります。
あと少しでゴールですよ!

[user@IP ~]$ cd /home/django/homepage   #djangoのフォルダに戻ります


まだ「static」フォルダと「media」フォルダを作ってなかったので、
早速下記コマンドでつくります。
[user@IP homepage]$ sudo mkdir static
[user@IP homepage]$ sudo mkdir media

次に「settings.py」を修正します。
「config」フォルダに入って「settings.py」を開きましょう。
[user@IP homepage]$ cd config
[user@IP homepage]$ sudo vi settings.py

編集ヵ所が複数あります。
import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'hyu()65u87cg+r)t3&ts$v-@z99hbuuvl4l=12as)1@63+ww%2' #この鍵はダミーです

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False #True → Falseに変更・・・1ヵ所目

ALLOWED_HOSTS = ['aaa.bbb.ccc.ddd'] #'自分のIPアドレス'を入力・・・2ヵ所目


# Application definition

INSTALLED_APPS = [
'blog.apps.BlogConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'django.contrib.sitemaps',
]

SITE_ID = 1

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'config.urls'

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'blog.context_processors.common',
],
},
},
]

WSGI_APPLICATION = 'config.wsgi.application'


# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}


# Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]


# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/

STATIC_ROOT = os.path.join(BASE_DIR, 'static') #この一文を追加・・・3ヵ所目
STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

全部で3ヵ所を編集したら「:wq」で上書き保存しましょう。

1個上のディレクトリに戻りましょう
[user@IP config]$ cd ../

下記コマンドを実行し、staticファイルを集めます。
[user@IP homepage]$ sudo python3.6 manage.py collectstatic

134 static files copied to '/home/django/homepage/static'.

これで設定は以上です!

6. 動作確認


ブラウザのURLに自分のIPアドレスを入力してアクセスしてみましょう。


無事にホームページが表示されましたか?
表示されたら成功です!

かなり長くなりましたが5章はこれで以上です。
お疲れ様でした!