こんにちは、情シス先輩です。
- VMを作るたびに毎回同じ設定を手作業でやっていて面倒…
- IPやユーザー設定を忘れて起動後に直すことが多い…
- 複数台をまとめて作る時にもっと効率化したい…
そんな悩みを解決する方法がCloud-initとAnsibleの組み合わせです。
本記事ではUbuntu環境を前提に、Proxmox上でCloud-initを使って初期ユーザー作成やIP設定を自動化し、その後AnsibleでタイムゾーンやNTP、IPv6無効化、不要サービス停止、ファイアウォール設定などの必須初期設定を一括適用する流れを解説します。
この方法を使えばラボ環境の構築が圧倒的に速くなるだけでなく、設定の抜け漏れ防止や再現性向上にもつながります。
本格的なラボ構築を考えている方はコストや性能を比較したおすすめミニPCランキングや、実際の構築手順を紹介したUM870SlimにProxmoxをインストールして、自宅ラボ環境を構築してみた!もあわせて参考にしてください。
Cloud-initとは
Cloud-initはクラウドや仮想環境の初回起動時に自動的にユーザー作成、ネットワーク設定、SSH鍵登録などを行う仕組みです。
Proxmoxも標準でCloud-initをサポートしており、GUIやCLIから設定できます。
Ansibleとは
Ansibleはサーバーの構成管理ツールで、YAMLファイルで書かれたPlaybookを使って複数台のサーバー設定を自動化できます。
Cloud-initで初期設定を行いAnsibleで追加設定やソフトウェア導入を行うのが効率的です。
ProxmoxでCloud-initを使ったUbuntu VM作成手順

事前準備(SSH鍵の生成または配置)
ローカル端末でSSH鍵を生成(既存の鍵があれば省略可)
ssh-keygen -t rsa -b 4096
既存の公開鍵を使う場合はProxmoxの適当なディレクトリ(例:/root/keys
)にコピーしておきます。
mkdir -p /root/keys
cp XXX/id_rsa.pub /root/keys/
Cloud-init対応Ubuntuイメージを取得
次にUbuntuのCloud-init対応イメージをダウンロードします。
bashコピーする編集するwget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
Proxmoxの「local」ストレージのtemplate
ディレクトリに配置します。
cp noble-server-cloudimg-amd64.img /var/lib/vz/template/
VMの作成(CLI)
qm create 9000 --name ubuntu-cloud --memory 2048 --net0 virtio,bridge=vmbr0 --cores 2
qm importdisk 9000 /var/lib/vz/template/noble-server-cloudimg-amd64.img local-lvm
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --serial0 socket --vga serial0
ディスクを拡張する
デフォルトでは8GB程度なので用途に合わせて拡張します。
qm resize 9000 scsi0 20G
Cloud-initの初期設定を指定する
ansible
ユーザーを作成し、パスワードとSSH公開鍵を登録します。
IPアドレスは192.168.1.100 、GWを192.168.1.1としていますが適宜読み替えてください。
qm set 9000 --ciuser ansible --cipassword yourpassword --sshkey /root/.ssh/id_rsa.pub --ipconfig0 ip=192.168.1.100/24,gw=192.168.1.1
VM起動
qm start 9000
これでIP・ユーザー・パスワード・SSH鍵が自動設定されたUbuntu VMが起動します。
Ansibleによる初期設定投入例

以下の例ではIPv6無効化、タイムゾーン設定、NTP有効化、不要サービス停止(avahi-daemon)、UFW初期設定、パッケージ最新化、ホスト名設定を行います。
---
- hosts: all
become: true
tasks:
# パッケージ最新化
- name: Update all packages
ansible.builtin.apt:
upgrade: dist
update_cache: yes
# IPv6無効化
- name: Disable IPv6
ansible.builtin.sysctl:
name: net.ipv6.conf.all.disable_ipv6
value: '1'
sysctl_set: yes
state: present
reload: yes
# タイムゾーン設定
- name: Set timezone to Asia/Tokyo
community.general.timezone:
name: Asia/Tokyo
# NTP有効化
- name: Ensure chrony is installed and enabled
ansible.builtin.apt:
name: chrony
state: present
- name: Enable chrony
ansible.builtin.systemd:
name: chrony
state: started
enabled: yes
# 不要サービス停止
- name: Disable avahi-daemon
ansible.builtin.systemd:
name: avahi-daemon
state: stopped
enabled: no
# UFW設定
- name: Install ufw
ansible.builtin.apt:
name: ufw
state: present
- name: Allow SSH
community.general.ufw:
rule: allow
port: '22'
proto: tcp
- name: Enable ufw
community.general.ufw:
state: enabled
# ホスト名設定
- name: Set hostname
ansible.builtin.hostname:
name: my-lab-server
これを使えばVM起動後に即座に基本設定を統一できます。
実際の運用例とメリット
- 再現性の高い検証環境:同じ設定のVMを何度でも作れる
- スピードアップ:数分で初期構築完了
- 設定漏れ防止:人手作業によるミスを排除
まとめ
Cloud-initとAnsibleを組み合わせればラボ環境構築の手間を大幅に削減できます。
初期ユーザー作成やIP設定などのベース構築をCloud-initで自動化し、その後の細かな設定をAnsibleで投入すれば設定漏れや作業ミスを防ぎつつ再現性の高い環境が構築できます。
本格的に試すなら、安定してProxmoxを動かせるミニPCを使うのがおすすめです。
当ブログではコストや性能を比較したおすすめミニPCランキングや、実際に構築した手順をまとめた UM870SlimにProxmoxをインストールして、自宅ラボ環境を構築してみた!も公開していますので、ぜひ参考にしてください。
関連記事:目的にあわせたLinux環境の作り方ガイド
自宅でLinuxサーバーや自動化の検証環境を構築したい方向けに、VPSやミニPCを使ったはじめ方や比較記事を目的別にまとめました。
実際に手を動かしながら学びたい方におすすめです。
VPS初心者の方におすすめ
自宅ラボを始めたい方向け
比較して選びたい方向け