0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UbuntuにAnsibleでLEMP環境とNetdata監視を構築する手順書

0
Last updated at Posted at 2026-03-31

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>/ にアクセスし、緑色の成功メッセージを確認します。
スクリーンショット 2026-03-31 14.40.15.png

② 監視画面 (Netdata) の確認

http://<サーバーIP>:19999/ にアクセスします。
スクリーンショット 2026-03-31 14.41.52.png

初回はログインを促されますが、右下の「Skip」を押すと、カッコいいリアルタイムグラフが表示されます。
スクリーンショット 2026-03-31 14.45.25.png

7. 注意点とハマりどころ

  • PHPのバージョン:
    /var/run/php/php8.3-fpm.sock のパスはOSのバージョンに依存します。動かない場合はサーバー側で ls /var/run/php/ を叩いて実際の名前を確認てくだせえ。

  • YAMLの記述:
    become: true などの書き方は、Ansibleのバージョンによって推奨が異なることがありますが、現在は true が一般的みたいです。

おわりに

「とりあえず触ってみたい」から始めたAnsibleでしたが、一度コード化しておけば環境を何度でも作り直せる安心感があります。自動化の第一歩として、LEMP環境構築はとてもおすすめです!まだまだ色々ゴニョゴニョしてきたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?