環境
やりたいこと
VPSさくっと借りてすぐ捨てたい。が、その度にサーバーセットアップするの面倒。
GCPは自動でユーザー作成と公開鍵登録までやってくれるが、AWSとかlinodeとか個別に設定しなきゃいけないのダルくなってきた。
cloud-initと呼ばれる共通設定規格があるのを知ったのでGCPで動くようにした
cloud-initとは
cloud-initとはcloud-initは、クラウド環境でのインスタンス初期化を自動化するためのツールだ。これを使えば、VPSを立ち上げる際に毎回行う面倒なセットアップ作業を省略できる。YAML形式で設定を記述し、インスタンス起動時に自動的に環境構築が行われる。
設定したい要件
- タイムゾーン設定: Asia/Tokyoに設定
- ロケール設定: 英語(米国)に設定
- パッケージ更新: システム起動時にパッケージリストの更新とアップグレードを実施
- SSHパスワード認証無効化: セキュリティ向上のためパスワード認証を無効に設定
- ユーザーとグループの設定: thr3aというユーザーを作成し、dockerグループに追加
- 公開鍵の登録: thr3aユーザーのSSH公開鍵を登録
- sudo権限の設定: thr3aユーザーにパスワードなしでsudoを実行する権限を付与
- 必要なパッケージのインストール: apt-transport-https、ca-certificates、curl、gnupg、lsb-release、unattended-upgrades、zshをインストール
- Dockerのインストールと設定: Docker関連のパッケージをインストールし、サービスを有効化・起動
- Oh My Zshのインストール: thr3aユーザーのシェルをZshに変更し、Oh My Zshをインストール
設定
#cloud-config timezone: Asia/Tokyo locale: en_US.UTF-8 package_update: true package_upgrade: true ssh_pwauth: false groups: - docker users: - lock_passwd: true name: thr3a ssh_authorized_keys: - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGXSyuKIS8LBdrDVLn8GcjYqyG3dpGlP/iRVuctqMBhS thr3a@thr3a-m2.local sudo: "ALL=NOPASSWD:ALL" groups: ["docker"] packages: - apt-transport-https - ca-certificates - curl - gnupg - lsb-release - unattended-upgrades - zsh # Install docker runcmd: - mkdir -p /etc/apt/keyrings - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg - echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null - apt-get update - apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin - systemctl enable docker - systemctl start docker - runuser -l thr3a sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" - chsh -s /bin/zsh thr3a
確認コマンド
cloud-initの設定が正しいかどうかを確認するには、以下のコマンドを実行する。
cloud-init schema --config-file cloud-config.yml
このコマンドは、指定した設定ファイルがcloud-initのスキーマに従っているかを検証する。エラーがあれば、それを指摘してくれる。
VSCodeで設定する場合
VSCodeでcloud-initの設定を行う場合、以下の設定をsettings.json
に追加する。
"yaml.schemas": { "https://raw.githubusercontent.com/canonical/cloud-init/main/cloudinit/config/schemas/versions.schema.cloud-config.json": "cloud-config.yml" },
この設定により、VSCodeはcloud-initのスキーマを使用してYAMLファイルを検証し、オートコンプリートやエラーチェックを提供する。これで、cloud-initの設定ファイルをより簡単に作成・編集できるようになる。