UbuntuにAnsibleでLEMP環境とNetdata監視を構築する手順書
本記事では、Ansibleを使用してUbuntu 24.04上にWebサーバー(Nginx)、データベース(MySQL)、PHP 8.3、そしてリアルタイム監視ツール(Netdata)を自動構築する手順の備忘録です。
動機は「とりあえずAnsibleを触ってみたかったから」です。
そもそもAnsibleってなんぞや
一言でいうと、「サーバーの設定をコードで管理し、自動化するためのツール」 らしいです。
通常、新しいサーバーを立てた後は、黒い画面(ターミナル)で以下のような作業を延々と行う必要があります。
-
apt update を打つ
-
Nginx を入れる
-
設定ファイルを書き換える
-
PHP を入れる...(以下ループ)
これを一台ずつ手動でやっていると、「あれ、2台目の設定どこまでやったっけ?」とか「タイポして動かない!」 といったミスが必ず起きます。
Ansible を使うメリット
-
playbook.yml を読むだけで、そのサーバーがどんな構成か一目でわかる
-
何度実行しても同じ結果になる
-
操作される側のサーバーに特別なソフトを入れる必要がない。SSHさえ繋がればOK
今回は、この「レシピ(Playbook)」を一度実行するだけで、Webサーバーの構築から監視ツールの導入までを全自動で行います。
1. 環境構成
操作側: Mac / Linux (Ansibleインストール済み)
構築対象サーバー: Ubuntu 24.04 (私はUTM上の仮想マシンを使用しました)
インストール内容:
Nginx: Webサーバー
MySQL 8.0: データベース
PHP 8.3: PHP実行環境 (FPM)
Netdata: リアルタイム監視ダッシュボード
2. 事前準備
Playbookを実行する前に、操作側の端末(Macなど)の準備をします。
Ansibleのインストール(Macの場合)
brew install ansible
SSH接続の準備(公開鍵認証)
AnsibleはSSHを使ってサーバーを操作します。パスワード入力を省略するため、あらかじめ公開鍵をサーバーに転送しておきます。
ssh-copy-id ubuntu@192.168.64.7
※ ubuntu はユーザー名、192.168.64.7 は自身のサーバーIPに書き換えてください。
3. フォルダ構成
最終的な構成は以下の通りです。
Plaintext
.
├── hosts # 接続先サーバーの情報
└── playbook.yml # 自動構築のレシピ
4. 設定ファイルの作成
インベントリファイル (hosts)
[webserver]
192.168.64.7 ansible_user=ubuntu
Playbook (playbook.yml)
Ubuntu 24.04の標準リポジトリで提供される PHP 8.3 に最適化した構成です。
- name: 自動構築(LEMP + 監視ダッシュボード)
hosts: all
become: true
tasks:
- name: パッケージ情報の更新
ansible.builtin.apt:
update_cache: true
- name: ミドルウェアのインストール
ansible.builtin.apt:
name: [nginx, mysql-server, php-fpm, php-mysql, curl]
state: present
- name: Nginxの設定(PHP 8.3用)
ansible.builtin.copy:
dest: /etc/nginx/sites-available/default
content: |
server {
listen 80 default_server;
root /var/www/html;
index index.php index.html;
location / { try_files $uri $uri/ =404; }
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}
}
notify: Nginx再起動
- name: 初期HTMLの削除
ansible.builtin.file:
path: /var/www/html/index.html
state: absent
- name: 動作確認用PHPファイルの配置
ansible.builtin.copy:
dest: /var/www/html/index.php
content: |
<?php
echo "<h1 style='color: #2ecc71;'>AnsibleでLEMP構築成功!</h1>";
echo "<p>PHP Version: " . phpversion() . "</p>";
echo "<p>Server Time: " . date("Y-m-d H:i:s") . "</p>";
?>
- name: Netdataのインストール
ansible.builtin.shell: |
curl -s https://my-netdata.io/kickstart.sh > /tmp/netdata-kickstart.sh
bash /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry --non-interactive
args:
creates: /usr/sbin/netdata
handlers:
- name: Nginx再起動
ansible.builtin.service:
name: nginx
state: restarted
5. 実行コマンド
ansible-playbook -i hosts playbook.yml -K
こんな感じで色々出てきます
PLAY [自動構築(LEMP + 監視ダッシュボード)] ***********************************************************************************
TASK [Gathering Facts] *********************************************************************************************************
ok: [192.168.64.7]
TASK [パッケージ情報の更新] ****************************************************************************************************
changed: [192.168.64.7]
TASK [LEMP関連パッケージと監視ツールのインストール] ****************************************************************************
ok: [192.168.64.7]
TASK [Nginxの設定をPHP 8.3用に上書き] ******************************************************************************************
ok: [192.168.64.7]
TASK [初期HTMLを削除] **********************************************************************************************************
ok: [192.168.64.7]
TASK [100パーセント表示されるPHPファイル作成] **********************************************************************************
changed: [192.168.64.7]
TASK [Netdataのインストール] ***************************************************************************************************
ok: [192.168.64.7]
PLAY RECAP *********************************************************************************************************************
192.168.64.7 : ok=7 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
6. 動作確認
① Webサイトの確認
http://<サーバーIP>/ にアクセスし、緑色の成功メッセージを確認します。

② 監視画面 (Netdata) の確認
http://<サーバーIP>:19999/ にアクセスします。

初回はログインを促されますが、右下の「Skip」を押すと、カッコいいリアルタイムグラフが表示されます。

7. 注意点とハマりどころ
-
PHPのバージョン:
/var/run/php/php8.3-fpm.sock のパスはOSのバージョンに依存します。動かない場合はサーバー側で ls /var/run/php/ を叩いて実際の名前を確認てくだせえ。 -
YAMLの記述:
become: true などの書き方は、Ansibleのバージョンによって推奨が異なることがありますが、現在は true が一般的みたいです。
おわりに
「とりあえず触ってみたい」から始めたAnsibleでしたが、一度コード化しておけば環境を何度でも作り直せる安心感があります。自動化の第一歩として、LEMP環境構築はとてもおすすめです!まだまだ色々ゴニョゴニョしてきたい。