XServer VPSの初期設定

## これは何？
Xserver VPSを設定する際に、毎回同じようなコマンドを打つのが面倒＆コマンドを毎回忘れるのでChatGPTに突っ込んでシェルスクリプトを作成してもらいました。

## 何ができるの？
この手順を踏むと、まっさらな状態のVPSから
- root権限を持ったroot以外のユーザーを追加
- 鍵認証を使用したSSH接続
（ポート番号は任意のものに変更＆rootでのログイン不可＆パスワード認証によるログイン不可）
- 実行した時点で最新バージョンのGitをインストール
- 実行した時点で最新バージョンのDockerとdocker composeをインストール
を簡単に行えます。

## .shファイル
````
#!/bin/bash
VPS_IP=$(curl -s ifconfig.me)

echo "===== Xserver VPS初期セットアップスクリプト v1.0 （Created by ucchy4646 on 2025/06/18） ====="

echo "-------------------------------------------"
echo "事前にローカル上でSSHキーを作成してサーバー上にアップロードしてください。"
echo "ローカルで以下のコマンドを打つと鍵の生成とサーバーへのアップロードができます。"
echo "cd ~/.ssh/ && ssh-keygen -t rsa -b 4096 -C '（任意の文字列を入力）'"
echo "chmod 600 id_rsa"
echo "scp ~/.ssh/id_rsa.pub root@$VPS_IP:/root/my_key.pub"
echo "-------------------------------------------"

# ローカルで鍵を作成済みか確認
read -p "ローカルで鍵を作成済みですか？ (y/n): " CONFIRM
if [[ "$CONFIRM" != "y" ]]; then
    echo "❌ 中止しました。ローカルで鍵を作成してから再度実行してください。"
    exit 1
fi

# === ユーザー入力 ===
read -p "👉 新規作成する管理ユーザー名を入力してください: " NEW_USER
read -p "👉 使用したいSSHポート番号（49152〜65535）を入力してください: " SSH_PORT
read -p "👉 サーバーに配置した公開鍵ファイルのパスを入力してください（例: /root/my_key.pub）: " PUB_KEY_PATH

# 入力の確認
echo ""
echo "📝 入力された内容:"
echo " - 新規ユーザー: $NEW_USER"
echo " - SSHポート: $SSH_PORT"
echo " - 公開鍵ファイル: $PUB_KEY_PATH"
echo ""
read -p "上記の内容で進めますか？ (y/n): " CONFIRM
if [[ "$CONFIRM" != "y" ]]; then
    echo "❌ 中止しました。"
    exit 1
fi

# === 1. 初回パッケージ更新 ===
echo "🔧 初回パッケージを更新中..."
apt update && apt upgrade -y && apt full-upgrade -y && apt autoremove -y && apt autoclean -y

# === 2. ユーザー作成 ===
echo "👤 新規ユーザー（$NEW_USER）を作成中..."
adduser --gecos "" $NEW_USER
usermod -aG sudo $NEW_USER

# === 3. 公開鍵認証設定 ===
echo "🔐 SSH公開鍵認証を設定中..."
mkdir -p /home/$NEW_USER/.ssh
if [ -f "$PUB_KEY_PATH" ]; then
    cat "$PUB_KEY_PATH" > /home/$NEW_USER/.ssh/authorized_keys
else
    echo "⚠️ 公開鍵ファイルが見つかりません: $PUB_KEY_PATH"
    exit 1
fi
chmod 700 /home/$NEW_USER/.ssh
chmod 600 /home/$NEW_USER/.ssh/authorized_keys
chown -R $NEW_USER:$NEW_USER /home/$NEW_USER/.ssh

# === 4. SSH設定の変更 ===
echo "🔒 SSH設定を変更中..."
sshd_config="/etc/ssh/sshd_config"
cp $sshd_config ${sshd_config}.bak.$(date +%s)
sed -i -e "s/^#\?Port .*/Port $SSH_PORT/" \
       -e "s/^#\?PermitRootLogin .*/PermitRootLogin no/" \
       -e "s/^#\?PasswordAuthentication .*/PasswordAuthentication no/" \
       -e "s/^#\?PubkeyAuthentication .*/PubkeyAuthentication yes/" \
       $sshd_config

# === 5. SSH再起動 ===
echo "🚀 SSHサービスを再起動中..."
systemctl restart sshd

# === 6. DockerとDocker Composeのインストール ===
echo "🐳 DockerとDocker Composeをインストール中..."
apt install -y ca-certificates curl gnupg lsb-release

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
    gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) \
  signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

usermod -aG docker $NEW_USER

# === 7. Gitのインストール ===
echo "📦 Gitをインストール中..."
add-apt-repository ppa:git-core/ppa -y
apt update && apt install -y git

# === 8. ソースコード配置用のディレクトリを作成 ===
mkdir -p /var/www/ && sudo chown -R $NEW_USER:$NEW_USER /var/www/

# === 9. 最終パッケージ更新 ===
echo "🔧 最終パッケージを更新中..."
apt update && apt upgrade -y && apt full-upgrade -y && apt autoremove -y && apt autoclean -y

# === 完了メッセージ ===
echo ""
echo "🎉 VPSセットアップ完了！次の点に注意してください："
echo "-------------------------------------------"
echo "✅ SSHポート: $SSH_PORT に変更されました。"
echo "   接続例: ssh -p $SSH_PORT $NEW_USER@$VPS_IP"
echo "✅ ufwファイアウォールが有効です（$SSH_PORT/tcp を許可）"
echo "✅ $NEW_USER は sudo, docker, git が使用可能です"
echo "このメッセージが表示されてからサーバーを再起動するので、少し時間をおいて接続を試してください"
echo "-------------------------------------------"

reboot
````

## 事前準備
1. 設定を行いたいサーバーのIPとパスワードを入力して[VPSパネル](https://secure.xserver.ne.jp/xapanel/login/xvps/vps/)にログイン
2. サイドバーの「パケットフィルター設定」から、SSH（22番ポート）を許可

![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727224/73e1a4b5-cf5d-4c61-8f7e-022d9b961c80.png)


## 初期設定
ローカルのターミナルから以下のコマンドを1行ずつ実行（画面の指示通りに進めれば問題なく設定が完了します）
※`vim /setup/setup-vps.sh`を打ったらshファイルの中身を丸々コピペして保存してください。
```
ssh root@（サーバーのIPアドレス）
mkdir /setup
vim /setup/setup-vps.sh
chmod +x /setup/setup-vps.sh
sudo /setup/setup-vps.sh
```

## 事後処理
- SSH接続のために設定したポート番号を、VPSの「パケットフィルター設定」から追加してください。
ついでに、22番ポートの設定は不要なのでこちらは削除してください。
![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727224/797e35cd-f258-41ca-831c-04d76f75304c.png)