これからProxmox環境でサーバー構築をはじめていく方、毎回OSをイチからインストールするのが面倒だと感じている方向けに、DebianのVMテンプレートを作成する手順を指南していきます。
OSはDebian13.7を前提としています。
12や今後リリースされる14でも通用するとは思いますが、保証はできないのでご注意を。
はじめに
仮想環境でいくつもサーバーを立ち上げては潰してとやっていると毎回の構築がだるい非効率的なので、自分はテンプレートを使用しています。
今回は備忘録がてら、最小構成のDebianテンプレートを作成し、デプロイ時に便利な設定を組み込んでいく手順を紹介します。
ちなみに、この手順は基本的に物理サーバーや他の仮想環境(ESXi, Hyper-V, VirtualBOX)でも利用できる手順なので、ぜひ参考にしてください。
なお、この手順ではTeratermなど使用するため、以下も併せて読むのをオススメします。
• Teraterm設定指南
また、各手順において画像を挿入している箇所もあるため、▶をクリックして画像を表示させてください。
VM作成手順
1. イメージのアップロードとVM作成
まずはProxmoxの管理画面からDebianのISOイメージをアップロードし、VMを作成していきます。
基本的には手順の画像のとおりに進めていけばOKです。
- VMID / 名前: 任意の数字・名前でOKです。
- ディスクサイズ: 自分は20GBで作成しています。用途に合わせて任意ですが、少なすぎるのはNGです。
- CPUコア: とりあえず1コアでOK。テンプレートから展開したあとにいくらでも変更できるので、とりあえずは少なめで問題ありません(2コア〜でも可)。
- CPU種別: 手順画像では
hostを選択していますが、余ったPCなど再利用されている方はCPUの世代で動作が変わってしまうため、互換性の観点からはx86-64-v3がオススメです。 - メモリ: 2GBにしていますが、動かすサービスによっては1GBでも十分です。こちらも後から変更可能です。
手順画像(10枚 計150KB))
OSインストールと初期設定
VMを起動し、コンソールからDebianのインストールを進めます。
言語とネットワーク設定
- 言語設定: 「日本語」でOKです。
- ネットワーク設定: 進めるとDHCPで自動的に設定されます。もし静的IPを割り当てたい場合は、ホストの設定画面で「戻る」を1回押して手動設定してください。
ホスト名とユーザー設定
- ホスト名 / ドメイン名: 基本的に好きな名前でOKです。複数サーバーを立てる場合はドメイン名を統一しておくと管理が楽です。
- rootパスワード: セキュリティの観点から、強力なものを設定しましょう。rootはすべてのリソースにアクセスできるマスターキーのようなものだからです。
- 一般ユーザー名 / パスワード: 好きな名前でOK。ただし、rootパスワードとの使い回しは非推奨です。
ディスクのパーティショニング
ここが少し重要です。後々のディスク拡張を見据えて、デフォルトの自動設定はやめた方がよいです。
恐らくこの記事を見ている方ホントに見に来てるかはわからんは初心者の方が多いと思いますが、今後の勉強のためにもパーティションの作成には手を出しておくことをオススメします。
- 手順は以下の画像のとおりです。
- efi領域とswap領域は、root領域(/)の前に配置する。これで今後ディスクを拡張する際、末尾にあるroot領域をスムーズに広げることが可能になります。
- swap領域のサイズについては、初心者で8GB以上もメモリを積むようなサーバーを構築するケースは稀だと思うので、基本はメモリ容量 × 2と考えておけば大丈夫です。
手順画像(16枚 計300KB)
余談ですが…
自分はインストール時にはswap領域を作成せず、インストール後にroot領域内にファイルとして割り当てていますが、現段階でこの説明を理解できない方は、上記手順通りにパーティションを分けるのが無難です。
パッケージの選択
- アーカイブミラーの国は「日本」でデフォルトのままでよいです。プロキシ情報も空欄で進めます。
- ソフトウェアの選択: チェックは全て外します。
今回のテンプレート作成は「最小構成」を想定しているため、余計なものは一切入れません。
インストールが完了すると自動的に再起動されるので、ログイン画面が表示されるまで待ちます。
SSH接続の準備とバックアップ
コンソール画面から、インストール時に作成した一般ユーザーでログインします。
openssh-serverのインストール
以下のコマンドを実行して root に切り替えます。
su -
root@ホスト名:~# と表示されたら、以下のコマンドでSSHサーバーをインストールします。
apt update
apt install openssh-server -y
手順画像(2枚 計130KB)
インストールが完了したら、以下のコマンドを実行して一旦シャットダウンします。
shutdown -h now
スナップショット(バックアップ)の取得
ここで、画像のとおりProxmoxの画面からバックアップとスナップショットを取得しておきます。
こうすることで、この後の構築中に不具合が発生しても、OSインストールの直後まで一瞬で巻き戻せるようになります。セーブポイントです。
手順画像(3枚 計85KB)
パッケージのインストールと設定
ここからはログを取得しているため、ログも参考に置いておきます
※自動でダウンロードされます
• 構築ログ
VMを再度起動し、コンソールでログインします。
以下のコマンドを実行してIPアドレスを確認し、Tera TermなどのターミナルソフトからSSH接続を行います。
ip a
SSH接続できたら、再度以下のコマンドを実行して root に切り替えます。
su -
必須・便利パッケージのインストール
最低限のツール、セキュリティ基盤、ネットワーク、ファイルサービス関連のパッケージを一気にインストールしていきます。
最低限のツール
apt install -y vim curl wget gnupg apt-transport-https ca-certificates sudo
セキュリティ・基盤系サービス※Proxmoxの仮想マシン上に構築しない場合、qemu-guest-agent は不要です。
apt install -y ufw qemu-guest-agent
ネットワーク系ツール
apt install -y network-manager traceroute netcat-openbsd bind9-dnsutils tcpdump rpcbind
ファイルサービス系ツール
apt install -y samba nfs-common rpcbind cifs-utils rsync
余談ですが…
テキストエディタにはよく知られているものとしてvi,vim,nanoなどがありますが、個人的にはvimが好みなのでパッケージに入れています。不要であればインストールしなくてよいです。
(オプション)必要に応じたパッケージ
用途に合わせて以下のパッケージもインストールを検討してください。
chrony: 時刻同期(NTP)cron: 定期実行タスクrsyslog: ログ管理fail2ban: 不正アクセス対策postfix: メール送信用zabbix-agent2: 監視ツール用エージェント
最後にインストールされたパッケージ一覧を確認したかったら、以下のコマンドを実行します。
apt list --installed
共通グループの作成
もし、システム共通でユーザーに所属させたいグループがある場合は、テンプレートの段階で先に作成しておくのも良いです。
その場合は以下のコマンドを実行します。
groupadd -g <1001以上の任意の数字> <グループ名>
# 例:groupadd -g 1001 newkunlun
グループ作成後は、確認するために以下のコマンドを実行します。
cat /etc/group
一番下の行などに グループ名:x:gid: (例: newkunlun:x:1001:)と表示されればOKです。
ファイアウォール(UFW)の設定
セキュリティ向上のため、ファイアウォールの設定をします。
まずはSSH(22番ポート)の通信を許可します。
ufw allow 22/tcp comment "SSH"
ufw status
Rules updated と表示され、Status: inactive と返ってくるのを確認したら、以下のコマンドを実行します。
ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
と返ってきますが、「有効にするとSSH接続が切断されるかもよ?」という警告なので、無視してyで続行してよいです。
有効になったら以下のコマンドを実行して、ファイアウォールがシステム上で正しく動いているか確認します。
ufw status
systemctl enable --now ufw
systemctl status ufw
ufw status
念のため、exit を2回実行して完全にログアウトし、再接続できるかテストしておくのをオススメします。
テンプレート化の準備(クリーンアップ)
基本的な設定はここまで。
ここからはテンプレートとして作成し、デプロイする場合に便利なコマンドを置いておきます。
このままこのマシンを使用する場合は以下の手順は不要です
Tips
もしコマンドの意味を知りたかったら、AIに「以下のコマンドの意味を教えて」と聞けばOK。
全手順を終えて、テンプレート化する準備が整ったら root にて以下のコマンドを1つずつ実行していきます。
rm -f /etc/ssh/ssh_host_*
truncate -s 0 /etc/machine-id
rm /var/lib/dbus/machine-id
ln -s /etc/machine-id /var/lib/dbus/machine-id
apt clean
find /var/log -type f -exec truncate -s 0 {} \;
find /tmp -type f -atime +1 -delete
find /var/tmp -type f -atime +1 -delete
history -c
history -w
fstrim -av
shutdown -h now
これでテンプレートの作成手順としては以上になります。 デプロイ方法はまたページ作っておきます。
余談
これ、Geminiにテンプレートの情報ぶん投げて手順書作れって言って出てきたやつを少し整備してるだけなんですよね。
手順作りながら構築して、メモ取って、構築終わったらGeminiに「コマンド変更せずにマークダウンに落とし込んで」って、前の記事を添付するだけでほぼ完成形まで持っていってくれるんですよ。
これなかったらこの記事書くのに一体何時間かかることやらって感じです。
ちなみにAI使っても3時間以上かかってるわけですが。備忘録兼ねてなかったらやってない…