ご覧いただきありがとうございます!
領護(りょうご)です。
Djangoで作成したWEBサービスやアプリをネットに公開したいけど、AWSやGCPといったクラウドサービスはいくらかかるか分からないし、Linuxの勉強もしてみたい...。
そんな方に向けて、クラウドサービスより安く、Linuxの勉強もできる、レンタルサーバーにデプロイする方法を3つの準備編、構築編、運用編に分けて解説します。
今回は、サーバーの基本設定とDocker・docker-composeをインストールするサーバー構築編を書いていきます。
初心者向けに分かりやすく書いたつもりですが、もし分からない点などあればツイッターのDMかお問い合わせからご連絡ください。
準備編はこちら
準備編をまだ見ていない方は、こちらの記事からご覧ください。
準備編では、ConohaVPSのサーバー契約について解説しています。
TeraTermのインストール
サーバー構築に必要なツール「TeraTerm」をインストールしていきます。
TeraTerm(テラターム)は、サーバーにSSH接続して操作するために必要なツールです。
※ Macの方は、標準でSSH接続できる機能が備わっているので、TeraTermをインストールする必要はありません。
※ MacのSSH接続の仕方については、別のサイトを参考にしてみてください。
TeraTermのダウロードページにアクセスして、インストール版を「窓の杜からダウンロード」をクリックしてダウンロード
「teraterm-4.106.exe」のダウンロード完了後、ダブルクリックしてインストーラーを起動
使用する言語は、「日本語」を選択して「OK」をクリック
使用許諾は、「同意する」を選択して「次へ」をクリック
インストール先の指定は、デフォルトのままで「次へ」をクリック
コンポーネントの選択は、「標準インストール」を選択して「次へ」をクリック
言語の選択は、「日本語」を選択して「次へ」をクリック
プログラムグループの指定は、デフォルトのままで「次へ」をクリック
追加タスクの選択は、上2つにチェックを入れて「次へ」をクリック
インストール準備完了は、そのまま「インストール」をクリック
インストール完了後は、「今すぐTeraTermを実行する」にチェックを入れて「完了」をクリック
TeraTermの起動とショートカットファイルが生成されたら無事インストール完了です。
※ 画面が表示されない場合は、TeraTermのショートカットファイルをダブルクリックして起動してみてください。
TeraTermでサーバーに接続する
TeraTermを使用して、ConohaVPSで契約したサーバーに接続します。
接続するには、サーバーのIPアドレスが必要なので、IPアドレスの確認方法から解説します。
サーバーのIPアドレスを確認する
ConohaVPS管理画面のログインページにアクセスします。
メールアドレスとパスワードを入力して「ログイン」をクリック
※ メールアドレスとパスワードは、会員登録で設定したアカウントです。
2段階認証を設定している場合は、認証コードを入力して「ログイン」をクリック
ログイン完了後は、サービスにある契約したサーバーの右メニューから「詳細情報」をクリック
ネットワーク情報の「IPアドレス」にサーバーのIPアドレス番号が書いてあります。
後ほどサーバー接続に使用するので、控えておいてください。
ついでにサーバーが起動中か確認します。
「緑色の電源オンマーク」と「起動」が押せない状態になっていたらサーバーが起動中の状態です。
サーバーにSSH接続する
TeraTermを起動すると、「新しい接続」画面が表示されます。
TCP/IPのホストには、先ほど控えたサーバーのIPアドレスを入力します。
サービスの種類には、「SSH」を選択します。
TCPポートには、「22」を入力します。
SSHバージョンには、「SSH2」を選択します。
IPバージョンには、「AUTO」を選択します。
上記の内容で選択と入力ができたら「OK」をクリック
デフォルトのままで「続行」をクリック
※ サーバーに初めて接続する場合のみ表示されます。
ユーザー名とパスフレーズには、準備編で作成した一般ユーザーのユーザー名とパスワードを入力します。
認証方式には、「ブレインパスワードを使う」を選択します。
上記の内容で選択と入力ができたら「OK」をクリック
上記のコンソール画面が表示されて、コマンドの入力待ち状態になれば無事接続完了です。
サーバーの接続方法を公開鍵認証に変更する
現在、サーバー接続には、ユーザー名とパスワードを使用してログインしています。
でも毎回パスワードを入力するのは面倒ですよね?
そこで、パスワードを使わず、公開鍵認証でログインする方法に変更します。
公開鍵認証は、セキュリティ面でもパスワードより安全で、公開鍵認証でログインする方法が一般的です。
コマンドの実行とコマンドの貼り付け方法について
コマンドの実行は、コマンド入力後にエンターキーを押すと実行できます。
コマンドをコピーして貼り付けたい場合は、TeraTermの画面で右クリックすると貼り付けできます。
TeraTermを一度閉じ、再起動して「新しい接続」画面を表示します。
「新しい接続」画面右上の「×」をクリックして「新しい接続」画面を閉じます。
設定メニューから「SSH鍵生成」をクリック
鍵の種類には、「RSA」を選択します。
ビット数には、「2048」を入力します。
ラウンド数には、「16」を入力します。
上記の内容で選択と入力ができたら「生成」をクリック
鍵が生成されるので、「公開鍵の保存」と「秘密鍵の保存」をクリックして鍵を保存します。
「秘密鍵の保存」をクリックすると「空のパスフレーズを使用しますか?」と表示されるので「はい」をクリック
公開鍵(id_rsa.pub)と秘密鍵(id_rsa)の保存が完了しました。
TeraTermを再起動して一般ユーザーでログインします。
ログイン完了後は、公開鍵の「id_rsa.pub」ファイルをサーバーにアップロードします。
アップロード方法は、「id_rsa.pub」ファイルをTeraTermの画面内にドラッグ&ドロップします。
デフォルトのままで「OK」をクリック
ls
↓ 実行結果 ↓
# > id_rsa.pub
lsコマンドで「id_rsa.pub」が表示されたら無事アップロード完了です。
続いて公開鍵ファイルの配置と名前を変更します。
mkdir .ssh
chmod 700 .ssh
「.ssh」という名前でディレクトリを作成して、パーミッション権限を「700」に設定します。
mv id_rsa.pub .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
「id_rsa.pub」をホームディレクトリから「.ssh」に移動して、ファイル名を「authorized_keys」に変更します。
その後、「authorized_keys」のパーミッション権限を「600」に設定します。
これでサーバーに公開鍵の配置と名前の変更が完了しました。
実際に公開鍵認証でログインできるか確認します。
TeraTermを再起動して一般ユーザーでログインします。
ユーザー名には、一般ユーザーのユーザー名を入力します。
パスフレーズには、何も入れずに未入力にします。
認証方式には、「RSA/DSA/ECDSA/ED25519鍵を使う」を選択します。
秘密鍵には、先ほど生成した「id_rsa」ファイルを選択します。
上記の内容で選択と入力ができたら「OK」をクリック
上記のコンソール画面が表示されて、コマンドの入力待ち状態になれば無事接続完了です。
これで公開鍵認証でのログイン設定が完了しました。
サーバーを構築する
ここからは、サーバーの更新、サーバーの基本設定、セキュリティの設定、パッケージのインストールを行います。
サーバーを更新する
sudo apt -y update && sudo apt -y upgrade
サーバーにインストール済のパッケージを更新します。
コマンドの先頭に「sudo」を付けると管理者権限でコマンドを実行することができます。
このコマンドは、サーバーを操作する前によく使うコマンドなので覚えておくと良いですよ。
[sudo] password for [ユーザー名]:[一般ユーザーのパスワードを入力]
管理者権限でコマンドを実行する場合は、パスワードの入力が必要なので、一般ユーザーのパスワードを入力してエンターキーを押します。
[ユーザー名]には、一般ユーザーのユーザー名が表示されます。
注意!
入力したパスワードは、セキュリティの関係で表示されません。
もし、このような画面が表示されたら「N」と入力してエンターキーを押します。
「keep the local version currently installed」を選択してエンターキーを押します。
※ 選択は、上下の矢印キーで操作できます。
「OK」を選択した状態でエンターキーを押します。
デフォルトのままでエンターキーを押します。
以上でサーバーの更新は完了です。
サーバーを日本語に変更
操作しやすいようにサーバーの言語を日本語に変更します。
echo $LANG
↓ 実行結果 ↓
# > en_US.UTF-8
現在のサーバー言語は、英語なので「en_US.UTF-8」と表示されます。
sudo apt -y install language-pack-ja-base language-pack-ja
サーバーの言語を日本語化する日本語パッケージをインストールします。
もし、このような画面が表示されたら「OK」を選択した状態でエンターキーを押します。
もし、このような画面が表示されたらデフォルトのままでエンターキーを押します。
sudo update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
source /etc/default/locale
サーバーの言語を日本語に変更します。
echo $LANG
↓ 実行結果 ↓
# > ja_JP.UTF-8
サーバーの言語が「ja_JP.UTF-8」と表示されたら日本語に変更完了です。
タイムゾーンを日本時間に変更
date
↓ 実行結果 ↓
# > 2023年 5月 9日 火曜日 18:45:51 JST
サーバーのタイムゾーンを日本時間に変更します。
既に日本時間になっている場合は、スキップしてOKです。
もし日本時間になっていない場合は、下記の手順を参考に設定します。
sudo cp /etc/localtime /etc/localtime.org
「localtime」設定ファイルをバックアップしておきます。
sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime
日本時間に変更します。
date
↓ 実行結果 ↓
# > 2023年 5月 9日 火曜日 18:45:51 JST
サーバーのタイムゾーンが正しく日本時間で表示されたら変更完了です。
SSHの設定を変更
SSHの設定は、リモートでサーバーに接続する時に必要な設定です。
デフォルトのままだとセキュリティが弱いので、セキュリティを高めるために設定を変更します。
sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_`date +%Y%m%d-%H%M%S`
「sshd_config」設定ファイルをバックアップしておきます。
sudo nano /etc/ssh/sshd_config
「sshd_config」設定ファイルをnanoエディタで開きます。
# ポート番号を変更
#Port 22
↓
Port [49513~65535の間で好きな数字に変更]
# rootログインを禁止にする
PermitRootLogin yes
↓
PermitRootLogin no
# パスワードログインを禁止にする
PasswordAuthentication yes
↓
PasswordAuthentication no
# 最後の行に追加
Protocol 2
上記の設定項目を「sshd_config」設定ファイルから探して値を変更します。
ポート番号は、デフォルトの22番でも問題ありませんが、変更しておいた方が安全です。
Port 49500
PermitRootLogin no
PasswordAuthentication no
Protocol 2
実際の入力例です。
ポート番号は、49513~65535の間で指定した数字になります。
変更完了後は、「Ctrl」+「X」キーを押すと「変更されたバッファを保存しますか?」と表示されます。
表示後は、「Y」キーを押して「エンターキー」を押すと設定ファイルが上書き保存されます。
sudo systemctl restart sshd
「sshd_config」設定ファイルの設定を反映するために、SSHを再起動します。
これでSSHの設定は完了しました。
続いてファイヤーウォールとポート番号の許可設定を行います。
注意!
ポート番号を変更した場合は、次のファイヤーウォールとポート番号の許可設定を行わずにTeraTermを閉じないでください。
ここでTeraTermを閉じるとポート番号が許可されていないため、サーバーに接続できなくなります。
間違えて閉じてしまった場合は、ConohaVPS管理画面のコンソールからログインして、ポート番号を22番に戻してから作業を再開してください。
ファイヤーウォールとポート番号の許可設定
sudo ufw enable
↓ 実行結果 ↓
# > Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
ファイヤーウォールを有効化します。
「Command may disrupt existing ssh connections. Proceed with operation (y|n)?」と表示されたら「y」と入力してエンターキーを押します。
sudo ufw allow [指定したポート番号]/tcp
sudo ufw allow 80
sudo ufw allow 443
3つのポート番号をポート番号許可リストに追加します。
「80番」と「443番」は、公開したWEBサイトにアクセスを許可するために必要なポート番号になります。
[指定したポート番号]には、先ほどSSHの設定で指定したポート番号が入ります。
※ SSHの設定でポート番号を22番から変更していない方は、80番と443番のみ許可リストに追加してください。
sudo ufw status verbose
正しく追加されたか確認します。
「指定したポート番号/tcp」「80」「443」が(v6)と合わせて6つ追加されていたらOKです。
もし、ポート番号許可リストに「22/tcp (OpenSSH)」と「22/tcp (OpenSSH (v6))」がある場合は、使わないので削除しておきます。
sudo ufw delete 1
↓ 実行結果 ↓
# > 削除:
# > allow OpenSSH
# > 操作を続けますか (y|n)? y
# > ルールを削除しました
sudo ufw delete 4
↓ 実行結果 ↓
# > 削除:
# > allow OpenSSH
# > 操作を続けますか (y|n)? y
# > ルールを削除しました
「22/tcp (OpenSSH)」と「22/tcp (OpenSSH (v6))」を削除します。
削除で指定している「1」「4」の数字は、ポート番号許可リストを上から見た番号を指定しています。
「操作を続けますか」と表示されたら「y」と入力してエンターキーを押します。
これで「22/tcp」は削除されて、「指定したポート番号/tcp」「80」「443」のみ許可リストに追加ができました。
sudo ufw reload
↓ 実行結果 ↓
# > ファイアウォールを再読込しました
正しくポート番号許可リストに追加できたら、ファイヤーウォールを再起動して設定を反映します。
ログインできるか確認
変更した内容でログインできるか確認します。
TeraTermを一度閉じ、再起動して「新しい接続」画面を表示します。
サーバーのIPアドレスと先ほど設定したポート番号を入力して、「OK」をクリック
デフォルトのままで「続行」をクリック
公開鍵認証でログインします。
上記のコンソール画面が表示されて、コマンドの入力待ち状態になれば無事接続完了です。
Dockerとdocker-composeをインストール
Dockerをインストール
cd ~
ホームディレクトリに移動します。
curl -fsSL get.docker.com -o get-docker.sh
Dockerをインストールするシェルスクリプトをダウンロードします。
sudo sh get-docker.sh
ダウンロードしたシェルスクリプトを使用して、Dockerをインストールします。
docker version
↓ 実行結果 ↓
# > Client: Docker Engine - Community
# > Version: 23.0.6
# > API version: 1.42
# > Go version: go1.19.9
# > Git commit: ff56dvn
# > Built: Fri May 5 21:18:13 2023
# > OS/Arch: linux/amd64
# > Context: default
正しくDockerがインストールされているか確認します。
正しくインストールされているとDockerのバージョンを含めて詳細情報が表示されます。
※ 現在、最新バージョンの「23.0.6」がインストールされています。
sudo rm get-docker.sh
Dockerのインストール完了後は、「get-docker.sh」は必要ないので削除しておきます。
sudo usermod -aG docker [ユーザー名]
一般ユーザーでdockerコマンドが実行できるように、一般ユーザーをdockerグループに追加します。
[ユーザー名]には、サーバーの一般ユーザー名を入力します。
cat /etc/group | grep [ユーザー名]
一般ユーザーがdockerグループに追加されたか確認します。
docker:x:999:[ユーザー名]
上記のように表示されたらOKです。
sudo reboot
設定を反映するためにサーバーを再起動します。
再起動すると自動的にTeraTermが閉じるので、再度TeraTermを起動して、一般ユーザーでログインしてください。
続いてdocker-composeをインストールします。
docker-composeをインストール
sudo curl -L "https://github.com/docker/compose/releases/download/[最新バージョン]/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
docker-composeの最新バージョン確認ページからdocker-composeの最新バージョンを確認して、[最新バージョン]に現在の最新バージョンを入力します。
sudo chmod +x /usr/local/bin/docker-compose
docker-composeのコマンドが使えるように権限を許可します。
docker-compose -v
↓ 実行結果 ↓
# > Docker Compose version v2.17.3
正しくdocker-composeがインストールされているか確認します。
正しくインストールされているとdocker-composeのバージョンが表示されます。
※ 現在、最新バージョンの「v2.17.3」がインストールされています。
これでDockerとdocker-composeのインストールが完了しました。
以上でサーバー構築が完了しました。
お疲れ様でした!
最後に
今回は、サーバーの構築編を解説しました。
詳しく書いたので、結構長くなりましたが、分かりやすかったでしょうか...?
次回の運用編では、ドメインの追加・Djangoプロジェクトをサーバーにデプロイする方法を解説します!
いよいよ次でラストですね!あともうちょっとで自分が作ったWEBサービス・アプリがデプロイできますよ!
運用編も是非参考にしてください!
運用編はこちら
参考にさせて頂いたサイト様
https://support.conoha.jp/v/addusersshkey/
https://create-it-myself.com/know-how/construct-docker-env-on-conoha-vps/