サーバーの自動化は、効果的かつ技術に精通した方法でサーバーを管理および監視する、安全で信頼性の高いプロセスです。専任の専門家チームによって管理されるデータセンターでサーバーを管理する従来のスタイルとは異なり、すべてのサーバーは自動化を使用して管理されます。その結果、ヒューマンエラーが最小限に抑えられます。
次のような構成管理ツールは、Ansible, Puppet, Terraformなどが、一般的にサーバーの自動化に使用されます。これらのツールは、新しいサーバーの標準的な手順を確立することで自動化を使用してサーバーをセットアップし、手動で行う場合に発生する可能性のあるエラーを排除します。
Ansibleは、頑健なオープンソースプロジェクトです。柔軟で使いやすく、最も簡素化されたアーキテクチャを備えています。Ansible Playbookを使用するのにコーディングの経験は必要なく、ノードにソフトウェアをインストールする必要もありません。何よりも、スクリプトを作成して自動化を合理化できる優れた機能が満載されています。
このガイドでは、Ansibleを使用してUbuntu 20.04にLAMPをインストールおよび設定する手順を説明します.
前提条件
このチュートリアルを進めるには、以下が必要です。
- Ubuntuがインストールされていること(システムに)。
- 1つ以上のAnsibleホスト:最新のUbuntuを実行している1つ以上のリモートAnsibleホストを最初にセットアップする必要があります。セットアップについては、チュートリアル「AnsibleとUbuntu 20.04を使用したサーバーセットアップの自動化」を参照してください。
- 1つのAnsibleコントロールノード:Ansibleがインストール、設定され、以下を使用してAnsibleホストに接続されているUbuntuマシン:SSHキー:
-
- コントロールノードには、以下が必要です:sudo権限を持つユーザーおよび有効(ON.
- )になっているファイアウォール。Ansibleのセットアップにヘルプが必要な場合は、次のチュートリアルを確認してください:Ubuntu 20.04でのAnsibleのインストールと設定.
Ansible Playbookの目的は何ですか?
このAnsible Playbookは、ガイド「LAMPスタックのセットアップ – Linux Apache MySQL PHP.
Ansible Playbookを実行すると、Ansibleホストで次のアクションが実行されます。
-
インストールする: aptitude(Ansibleが推奨する、 aptパッケージマネージャーの代替)。
-
必要なすべてのLAMPパッケージをインストールする。
-
新しいApacheの VirtualHostを作成し、専用のドキュメントルートを設定する。
-
有効(ON)にする:新しい VirtualHost.
-
無効(OFF)にする:デフォルトのApache Webサイト。つまり、disable_default変数を true.
-
に設定する。MySQLのrootユーザーのパスワードを選択する。
-
匿名のMySQLアカウントとテストデータベースを削除する。
-
設定されたポート(デフォルトは )でHTTPトラフィックを許可するようにUFWを設定する。80.
-
PHPテストスクリプトをセットアップする。
Ansible Playbookの実行が完了すると、設定した構成に従ってApache上で動作するWeb PHP環境が表示されます。
Ansible Playbookの利用
まず、LAMP Playbookとその依存関係をdo-community/ansible-playbooksリポジトリから取得します。次に、LAMP Playbookを含むリポジトリをAnsibleコントロールノード内のローカルフォルダーにクローンします。
次の git pullコマンドを実行して、このチュートリアルで使用する適切なコンテンツにアクセスできることを確認します。
|
1 2 |
cd ~/ansible-playbooks git pull |
初めて do-community/ansible-playbooksリポジトリを使用する場合は、ホームフォルダーにリポジトリをクローンすることを検討してください:
|
1 2 3 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Go to the lamp_ubuntu2004フォルダーに移動すると、次のような構造が表示されます:
|
1 2 3 4 5 6 7 8 |
lamp_ubuntu2004 ├── files │ ├── apache.conf.j2 │ └── info.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md |
これらのファイルが何を意味するかの概要は次のとおりです:
-
files/info.php.j2:これは、WebサーバーのルートにPHPテストページをセットアップできるテンプレートファイルです。
-
files/apache.conf.j2:Apache VirtualHostのセットアップに使用されるもう1つのテンプレートファイルです。
-
vars/default.yml:Playbookの設定をカスタマイズするための変数ファイルです。
-
playbook.yml:このファイルには、リモートサーバーで実行されるタスクのすべての内容が含まれています。
-
readme.md: このプレイブックに関する情報が含まれているREADMEファイル。
プレイブックの変数ファイルを変更して、MySQLとApacheの設定をカスタマイズしましょう。 lamp_ubuntu2004 ディレクトリに移動し、 vars/default.yml ファイルを nano エディタを使用して開きます:
|
1 2 |
cd lamp_ubuntu2004 nano vars/default.yml |
On opening the vars/default.yml ファイルを開くと、変更が必要な変数のリストが表示されます:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
それぞれの変数について詳しく理解しましょう:
-
mysql_root_password: root MySQLアカウントのパスワードを保存します。
-
app_user: アプリケーションファイルの所有者として機能する、Ansibleホスト上のリモートの非rootユーザーです。
-
http_host: ドメイン名を表示します。
-
http_conf: Apache内に作成された設定ファイルの名前を表示します。
-
http_port: このバーチャルホストのHTTPポートであり、 80 がデフォルトです。
-
disable_default: Apacheに付属するデフォルトのオプションを無効にするために使用されます。
その後、 vars/default.yml ファイルを保存して閉じます。
すべてのセットアップが完了したら、サーバー上でこのプレイブックを実行する準備が整います。デフォルトでは、プレイブックのほとんどのサーバーは、インベントリ内のすべてのサーバーで実行されるように設定されています。それでは、 -l フラグを使用して、プレイブックの影響を受ける単一のサーバーまたは選択したグループのサブセットのみに影響を与えましょう。あるいは、 -u フラグを使用して、どのリモートサーバーが接続され、リモートホスト上で実行されているかの詳細なビューを取得することもできます。
1つのサーバー server1 でプレイブックを実行し、1つのユーザー justin:
|
1 |
ansible-playbook playbook.yml -l server1 -u justin |
以下のような出力が表示されます:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PLAY [all] ********************************************************************************************************* TASK [Gathering Facts] *********************************************************************************************************ok: [server1] TASK [Install prerequisites] *********************************************************************************************************ok: [server1] => (item=aptitude) ... TASK [UFW - Allow HTTP on port 80] ********************************************************************************************************* changed: [server1] TASK [Sets Up PHP Info Page] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Reload Apache] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Restart Apache] ********************************************************************************************************* changed: [server1] PLAY RECAP ********************************************************************************************************* server1 : ok=15 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
プレイブックの実行完了を確認したら、Webブラウザを開いてサーバーのホストにアクセスします。IPの末尾に /info.php を追加するのを忘れないでください:
|
1 |
http://server_host_or_IP/info.php |
このURLをクリックすると、次のようなページが表示されます:
|
警告: 表示されたページには、PHP環境に関する機密情報が含まれています。そのため、次のコマンドを使用してサーバーから個人情報を削除することをお勧めします。 rm -f /var/www/info.php |
プレイブックには何が含まれていますか?
次に、 ansible-プレイブックのコンテンツで使用されているファイルの意義と重要性を理解しましょう:
-
vars/default.yml
The default.yml 変数ファイルには、MySQLの root アカウントのドメイン名とパスワードが含まれています。これらは、 ansible-プレイブック のタスクで使用されるデフォルト値です:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
- files/apache.conf.j2
The apache.conf.j2 ファイルは、新しいApache VirtualHostを構成するために使用される Jinja 2 テンプレートファイルです。このテンプレート内で使用される変数は、 vars/default.yml 変数ファイルで定義されている必要があります:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
- files/info.php.j2
Similar to files/apache.conf.j2 と同様に、 info.php.j2 ファイルもJinjaテンプレートです。このファイルを使用して、新しく構成されたLAMPサーバーのドキュメントルートにテスト用のPHPスクリプトをセットアップします:
|
1 2 |
<?php phpinfo(); |
-
playbook.yml
The プレイブック.yml ファイルは、このセットアップのすべてのタスクが定義されている場所です。このファイルで、すべてのLAMPスタックが構成されます。対象となるサーバーのグループの定義から始まり、これは all に設定されます。また、 become の値を true ( become: true)として受け取り、実行する必要があるすべてのタスクを定義します。次に、 yaml ファイルには、構成オプションをロードするためのデフォルトファイルである vars/default.yml 変数ファイルがあります:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: インストール 必須パッケージ apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes loop: [ 'aptitude' ] #Apacheの設定 - name: インストール LAMP パッケージ apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] - name: 作成 ドキュメント ルート file: path: "/var/www/{{ http_host }}" state: directory owner: "{{ app_user }}" mode: '0755' - name: セット アップ Apache バーチャルホスト template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: 再読み込み Apache - name: 有効化 新規 サイト shell: /usr/sbin/a2ensite {{ http_conf }} notify: 再読み込み Apache - name: 無効化 デフォルト Apache サイト shell: /usr/sbin/a2dissite 000-デフォルト.conf when: disable_default notify: 再読み込み Apache # MySQLの設定 - name: 設定 the root パスワード mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock - name: 削除 すべて 匿名 ユーザー アカウント mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" - name: 削除 the MySQL テスト データベース mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" # UFWの設定 - name: "UFW - ポート {{ http_port }} でのHTTPを許可" ufw: rule: allow port: "{{ http_port }}" proto: tcp # PHP情報ページ - name: 設定 アップ PHP 情報 ページ template: src: "files/info.php.j2" dest: "/var/www/{{ http_host }}/info.php" handlers: - name: 再読み込み Apache service: name: apache2 state: reloaded - name: 再起動 Apache service: name: apache2 state: restarted |
プロジェクトのニーズや要件に基づいて、これらのファイルを変更できます。
まとめ
このチュートリアルでは、Ansibleを使用してリモートサーバーにLAMPをインストールし、設定する手順を説明しました。他にも実験できるカスタマイズオプションはたくさんあります。例えば、Ansible公式ドキュメント を参照したり、Ansibleモジュールの mysql_user の使用例を参考にすることは、スキルアップに最適な方法です。また、このガイドで説明した手順に従って、他の構成管理ツールやOSを使用した自動化を練習し、難易度を上げてみてください。
LAMPスタックが初めてで、このトピックを深く掘り下げたいですか?次のチュートリアルを、当社のブログでご覧ください::
- Ubuntu 20.04にLAMPを使用してWordPressをインストールする方法
- Centos-7にLinux、Apache、MySQL、PHP (LAMP) スタックをインストールする方法
- Ubuntu 20.04にLEMPスタック(Linux、Nginx、MySQL、PHP)をインストールする方法
快適なコンピューティングを!

コメント
コメントはまだありません。最初のコメントを投稿しましょう。