VPSを始めるときに、戸惑うことが少しあったので、分かりやすくまとめていこうと思います。自分の環境はメモリ12GBのUbuntuですが、基本的にはどのOSでも同じなはずです。
webサービスを運用するための仕様にいているので、同じ用途に使う人には参考になると思います。
画面での設定

まずは左のバーにある、「サーバー」をクリックして、自分の設定したいサーバーを選択します。そして、ネットワーク情報の中にあるセキュリティグループの右側にある「ペンのアイコン」をクリックします。
そこで、「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での作業方法です。

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

そして、「鍵のパスフレーズ」を入力してから、「生成」を押します。
「公開鍵の保存」と「秘密鍵の保存」で、保存して、安全な場所に保管しておいてください。「パスフレーズ」も覚えておくか、保管しておいてください。次回以降の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
そして、ファイアウォールを有効化します。
作成したユーザーで接続

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

「ユーザー名」と「鍵」を作るときに設定した「パスフレーズ」を入力します。
「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 ps
や docker 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
このコマンドを実行することで、自分の環境に合わせて証明書をインストールして設定してくれます。
コメント