Conoha VPS(Ubuntu)のセットアップ手順

インフラ

VPSを始めるときに、戸惑うことが少しあったので、分かりやすくまとめていこうと思います。自分の環境はメモリ12GBのUbuntuですが、基本的にはどのOSでも同じなはずです。

webサービスを運用するための仕様にいているので、同じ用途に使う人には参考になると思います。

画面での設定

図1:VPSセットアップ画面

まずは左のバーにある、「サーバー」をクリックして、自分の設定したいサーバーを選択します。そして、ネットワーク情報の中にあるセキュリティグループの右側にある「ペンのアイコン」をクリックします。

そこで、「IPv4v6-SSH」と「IPv4v6-Web」を追加します。これをすることによって、SSH接続ができるようになり、Webサービスを公開する準備ができました。

SSH接続をした後の処理

ここからは、IPアドレスとVPSを契約したときに設定したrootパスワードを使ってSSH接続をしたことを前提に進めます。

そして、基本のセキュリティアップデートを行います。

sudo apt update # パッケージ情報の更新
sudo apt upgrade # パッケージの更新
sudo apt autoremove # (必要なくなった)パッケージの自動削除

作業用のユーザーを追加

最初は、強力な権限があるroot にパスワードでログインしました。これはセキュリティリスクがあるので、SSHの接続ポートや作業ユーザーを作成します。

[ユーザー名] をユーザー名に変えてください。アルファベット入力です。

sudo adduser [ユーザー名]

パスワードの設定など聞かれるので、入力していきます。メールアドレスや住所などを聞かれますが、Enterでスキップして問題ありません。

次に、作業用のユーザーを管理者の権限を渡して高度な操作を可能にします。

sudo gpasswd -a [ユーザー名] sudo

SSHの証明書の発行

この状態では、パスワードでログインできる状態のためrootなどのユーザーでパスワードのランダムアタックされるリスクがあります。

なので、証明書を発行してログインをできるようにします。

Tera Termでの作業方法です。

図2:TeraTerm画面

まずは、上にある「設定」をクリックして、「SSH鍵生成」を選択します。

図3:鍵の作成方法

 そして、「鍵のパスフレーズ」を入力してから、「生成」を押します。

「公開鍵の保存」と「秘密鍵の保存」で、保存して、安全な場所に保管しておいてください。「パスフレーズ」も覚えておくか、保管しておいてください。次回以降のSSH接続時に使います。

鍵を無くすとログインできなくなります。

鍵の登録

上で作成した作業用ユーザーでSSHログインします。

そのまま、TeraTermの画面に「公開鍵」をドラッグ&ドロップでSCP送信してください。

.pubという拡張子の方が「公開鍵」です。

sudo mkdir .ssh
sudo mv [公開鍵のファイル名] .ssh/authorized_keys

SSHの設定

SSHの設定ファイルである、/etc/ssh/sshd_config を編集します。

(行頭に # がある場合はコメントアウトになっていて、無効化されています。)

sudo vim /etc/ssh/sshd_config

Port 22と書いているところを探して、ポート番号に変更します。22はデフォルトでSSHで使われているので、攻撃者に狙われやすいです。

Port 2222

そして、Port 2222に変更します。

PermitRootLogin no

次に、 root でのログインを禁止します。

PubkeyAuthentication yes

そして、公開鍵でのログインを有効にします。

PasswordAuthentication no

最後に、パスワードでのログインを禁止します。

sudo systemctl restart ssh

これらの設定の変更を読み込むため、SSHサービスを再起動させます。

SSHポートの開放

ポート番号を変更しましたが、そのポートを開けておかないとログインできません。

sudo ufw allow 2222
sudo ufw reload

今回の場合は、2222番ポートです。

sudo ufw enable

そして、ファイアウォールを有効化します。

作成したユーザーで接続

図4:ポート番号の指定

自分のサーバーのIPアドレスか、逆引きホスト名を入力して、TCPポートを2222にして、OKをクリックします。

図5:必要事項の入力

「ユーザー名」と「鍵」を作るときに設定した「パスフレーズ」を入力します。

「RSA/DSA/ECDSA/ED25519鍵」を使うを選択し、保存してある秘密鍵をフォルダーから選択して「OK」をクリックします。

Nginxのインストール

sudo apt update
sudo apt install nginx

パッケージのアップデートと、インストールを行います。

sudo ufw allow 'Nginx FULL'

そして、Nginxが使うポートを開放します。

User@vm-def3f7e9-d5:~$ sudo ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
2222                       ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
2222 (v6)                  ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

このコマンドを入力して、Nginxがポートを使っているかを確認します。ここではNginxとSSHが動いていることが分かります。

sudo systemctl start nginx    # 起動
sudo systemctl enable nginx   # サーバ起動時の自動起動設定
sudo systemctl status nginx   # ステータス確認。

そして、起動の確認をします。

良く使うnginxコマンド

sudo nginx -t

設定ファイルの構文チェックをします。

sudo systemctl reload nginx

設定ファイルの反映をします。

Docker/Docker Composeのインストール

ステップ1:必要なパッケージのインストールと古いバージョンの削除

まず、aptがHTTPS経由でリポジトリを使えるように、必要なパッケージをインストールします。また、もし古いDockerがインストールされている場合は、ここでクリーンアップします。

# aptパッケージインデックスを更新し、必要なパッケージをインストール
sudo apt-get update
sudo apt-get install -y ca-certificates curl

# 古いバージョンのDockerがあれば削除(なくてもエラーにはなりません)
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove -y $pkg; done

ステップ2: Dockerの公式GPGキーを追加

Dockerリポジトリが信頼できるものであることをシステムに教えるため、公式のGPGキーを追加します。

# Dockerの公式GPGキーを保存するためのディレクトリを作成
sudo install -m 0755 -d /etc/apt/keyrings

# DockerのGPGキーをダウンロードして保存
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

# ファイルの権限を設定
sudo chmod a+r /etc/apt/keyrings/docker.asc

ステップ3: DockerのAPTリポジトリを設定

Dockerをダウンロードするためのリポジトリ情報をaptのソースリストに追加します。

# APTリポジトリを追加
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# aptパッケージインデックスを再度更新
sudo apt-get update

ステップ4: Docker EngineとComposeのインストール

いよいよDocker本体と、目的のDocker Composeをインストールします。

# 最新版のDocker Engine, CLI, containerd, そしてDocker Composeプラグインをインストール
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

インストール後の確認

1.Dockerが動作しているか確認

hello-world という簡単なコンテナを動かしてみます。Hello from Docker! というメッセージが表示されれば、Dockerは正しくインストールされています。

sudo docker run hello-world

2.Docker Composeが使えるか確認

最初の目的だったコマンドを再度実行します。

docker compose version

以下のようにバージョン情報が表示されるはずです。

# ここは実行用ではなく、出力です。
Docker Compose version v2.27.0

【推奨】毎回sudoを打たずにdockerコマンドを実行する方法

毎回dockerコマンドの前にsudoを付けるのは少し面倒です。現在のユーザーをdockerグループに追加することで、sudoなしで実行できるようになります。

# 1. dockerグループに現在のユーザーを追加
sudo usermod -aG docker $USER

# 2. 設定を反映させる
# このコマンドを実行するか、一度ログアウトして再度ログインしてください
newgrp docker

上記設定後、ターミナルを再起動(またはPCを再起動)すれば、sudoなしで docker psdocker compose version などのコマンドが実行できるようになります。

補足:$USERは自分のユーザー名に置き換えず、 $USERのままで大丈夫です。

ディレクトリの作成

まずは、nginxの設定用のフォルダーと、それぞれのアプリケーション用のフォルダーを作成していきます。

sudo mkdir -p /var/www/nginx_file
sudo mkdir -p /var/www/app1
sudo mkdir -p /var/www/app2

複数のサービスを運用する予定なので、nginx用の設定フォルダーと、2つのフォルダーを作成します。

「-p」は、–parents の略で、指定したディレクトリの親ディレクトリが存在しない場合に、それらもまとめて作成するためのオプションです。

sudo chown -R [ユーザー名]:[ユーザー名] /var/www/nginx_file/
sudo chown -R [ユーザー名]:[ユーザー名] /var/www/app1/
sudo chown -R [ユーザー名]:[ユーザー名] /var/www/app2/

フォルダーの編集権限を、自分で作成した作業用のユーザーにします。

[ユーザー名]は上で自分で作成した作業用のユーザーの名前にしてください。

Nginxのシンボリックリンクの作成

events {
}

http {
    server {
        // 80番ポートでリクエストを待ち受ける
        listen 80;

        // ドキュメントルート(Webコンテンツを置くディレクトリ)
        root /var/www/html;
    }
}

nginxファイルを簡単に作成しておきます。

Nginxのメインの設定ファイルは/etc/nginx/nginx.confです。
nginx.conf内で/etc/nginx/conf.d/フォルダから*.confファイルを読み取るようになっています。

sudo ln -s /var/www/nginx_file/main_nginx.conf /etc/nginx/conf.d/

確認のために、中身を見ておきます。

cat /etc/nginx/conf.d/main_nginx.conf

補足:SSL化をする

sudo certbot --nginx

このコマンドを実行することで、自分の環境に合わせて証明書をインストールして設定してくれます。

コメント