Unsibleを使用してUbuntu18.04にLAMPをインストールおよびセットアップする方法
序章
最新のアプリケーション環境は使い捨てであるため、サーバーの自動化はシステム管理において重要な役割を果たしています。 構成管理ツール( Ansible など)は通常、新しいサーバーの標準手順を確立することでサーバーセットアップを自動化するプロセスを合理化すると同時に、手動セットアップに関連する人的エラーを削減するために使用されます。
Ansibleは、ノードに特別なソフトウェアをインストールする必要のないシンプルなアーキテクチャを提供します。 また、自動化スクリプトの作成を容易にする堅牢な機能セットと組み込みモジュールも提供します。
このガイドでは、Ansibleを使用して、 Ubuntu 18.04 にLinux、Apache、MySQL、およびPHP(LAMP)をインストールする方法に関するガイドに含まれる手順を自動化する方法について説明します。 「LAMP」スタックは、サーバーが動的なWebサイトやWebアプリをホストできるようにするために通常一緒にインストールされるオープンソースソフトウェアのグループです。 この用語は、実際には LinuxオペレーティングシステムとApacheWebサーバーを表す頭字語です。 サイトデータはM ySQLデータベースに保存され、動的コンテンツは PHPによって処理されます。
前提条件
このガイドで説明しているプレイブックが提供する自動セットアップを実行するには、次のものが必要です。
- 1つのAnsibleコントロールノード:SSHキーを使用してAnsibleホストに接続するようにAnsibleがインストールおよび構成されたUbuntu18.04マシン。 サーバーの初期設定ガイドで説明されているように、コントロールノードにsudo権限とファイアウォールが有効になっている通常のユーザーがいることを確認してください。 Ansibleをセットアップするには、 Ubuntu18.04にAnsibleをインストールして構成する方法に関するガイドに従ってください。
- 1つ以上のAnsibleホスト:Ubuntu18.04でAnsibleを使用して初期サーバーセットアップを自動化する方法のガイドに従って以前にセットアップされた1つ以上のリモートUbuntu18.04サーバー。
先に進む前に、まず、AnsibleコントロールノードがAnsibleホストに接続してコマンドを実行できることを確認する必要があります。 接続テストについては、 Ubuntu18.04にAnsibleをインストールして構成する方法のステップ3を確認してください。
このハンドブックは何をしますか?
このAnsibleプレイブックは、 Ubuntu 18.04 にLinux、Apache、MySQL、およびPHP(LAMP)をインストールする方法に関するガイドで概説されている手順を手動で実行する代わりの方法を提供します。
このプレイブックを実行すると、Ansibleホストで次のアクションが実行されます。
aptitude
をインストールします。これは、apt
パッケージマネージャーの代わりにAnsibleで推奨されています。- 必要なLAMPパッケージをインストールします。
- 新しいApache
VirtualHost
を作成し、その専用のドキュメントルートを設定します。 - 新しい
VirtualHost
を有効にします。 - disable_default変数が
true
に設定されている場合は、デフォルトのApacheWebサイトを無効にします。 - MySQL rootユーザーのパスワードを設定します。
- 匿名のMySQLアカウントとテストデータベースを削除します。
- 設定されたポートでHTTPトラフィックを許可するようにUFWを設定します(デフォルトでは
80
)。 - 提供されたテンプレートを使用してPHPテストスクリプトを設定します。
プレイブックの実行が完了すると、構成変数内で定義したオプションに基づいて、Apache上でWebPHP環境が実行されます。
このハンドブックの使い方
最初に行う必要があるのは、 do-community /ansible-playbooksリポジトリからLAMPプレイブックとその依存関係を取得することです。 このリポジトリをAnsibleコントロールノード内のローカルフォルダーに複製する必要があります。
別のガイドに従って以前にこのリポジトリのクローンを作成したことがある場合は、既存のansible-playbooks
コピーにアクセスし、git pull
コマンドを実行して、内容が更新されていることを確認してください。
cd ~/ansible-playbooks git pull
do-community/ansible-playbooks
リポジトリを初めて使用する場合は、次のコマンドを使用してリポジトリをホームフォルダに複製することから始める必要があります。
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks
関心のあるファイルは、lamp_ubuntu1804
フォルダー内にあります。このフォルダーの構造は次のとおりです。
lamp_ubuntu1804 ├── files │ ├── apache.conf.j2 │ └── info.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md
これらの各ファイルは次のとおりです。
files/info.php.j2
:WebサーバーのルートにPHPテストページを設定するためのテンプレートファイルfiles/apache.conf.j2
:ApacheVirtualHostをセットアップするためのテンプレートファイル。vars/default.yml
:プレイブックの設定をカスタマイズするための可変ファイル。playbook.yml
:リモートサーバーで実行されるタスクを含むプレイブックファイル。readme.md
:このハンドブックに関する情報を含むテキストファイル。
プレイブックの変数ファイルを編集して、MySQLとApacheの両方の構成をカスタマイズします。 lamp_ubuntu1804
ディレクトリにアクセスし、選択したコマンドラインエディタを使用してvars/default.yml
ファイルを開きます。
cd lamp_ubuntu1804 nano vars/default.yml
このファイルには、注意が必要ないくつかの変数が含まれています。
vars / default.yml
--- mysql_root_password: "mysql_root_password" app_user: "sammy" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true
次のリストには、これらの各変数の簡単な説明と、それらを変更する方法が含まれています。
mysql_root_password
: rootMySQLアカウントに必要なパスワード。app_user
:アプリケーションファイルの所有者として設定されるAnsibleホスト上のroot以外のリモートユーザー。http_host
:ドメイン名。http_conf
:Apache内で作成される構成ファイルの名前。http_port
:この仮想ホストのHTTPポート。80
がデフォルトです。disable_default
:Apacheに付属しているデフォルトのWebサイトを無効にするかどうか。
vars/default.yml
内の変数の更新が完了したら、このファイルを保存して閉じます。 nano
を使用した場合は、CTRL + X
、Y
、ENTER
の順に押してください。
これで、このプレイブックを1つ以上のサーバーで実行する準備が整いました。 ほとんどのプレイブックは、デフォルトでインベントリ内のすべてのサーバーで実行されるように構成されています。 -l
フラグを使用して、サーバーのサブセットまたは単一のサーバーのみがプレイブックの影響を受けるようにすることができます。 -u
フラグを使用して、リモートホストでPlaybookコマンドを接続および実行するために使用しているリモートサーバー上のユーザーを指定することもできます。
server1
でのみプレイブックを実行し、sammy
として接続するには、次のコマンドを使用できます。
ansible-playbook playbook.yml -l server1 -u sammy
次のような出力が得られます。
Output 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
注:Ansibleプレイブックの実行方法の詳細については、Ansibleチートシートガイドを確認してください。
プレイブックの実行が終了したら、Webブラウザーに移動し、プレイブック変数で構成されているサーバーのホストまたはIPアドレスにアクセスし、続いて/info.php
にアクセスします。
http://server_host_or_IP/info.php
次のようなページが表示されます。
このページにはPHP環境に関する機密情報が含まれているため、セットアップが完了したら、rm -f /var/www/info.php
コマンドを実行してサーバーから削除することをお勧めします。
プレイブックの内容
このチュートリアルで紹介されているLAMPサーバーのセットアップは、 DigitalOcean CommunityPlaybooksリポジトリ内のlamp_ubuntu1804フォルダーにあります。 スクリプトの内容を直接コピーまたはダウンロードするには、各スクリプトの上部にあるRawボタンをクリックします。
プレイブックの全内容とそれに関連するファイルも、便宜上ここに含まれています。
vars / default.yml
default.yml
変数ファイルには、MySQL root アカウントのパスワードや、Apache内で構成するドメイン名など、プレイブックタスク内で使用される値が含まれています。
vars / default.yml
--- mysql_root_password: "mysql_root_password" app_user: "sammy" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true
files / apache.conf.j2
apache.conf.j2
ファイルは、新しいApacheVirtualHostを構成するJinja2テンプレートファイルです。 このテンプレート内で使用される変数は、vars/default.yml
変数ファイルで定義されています。
files / apache.conf.j2
<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
info.php.j2
ファイルは別のJinjaテンプレートであり、新しく構成されたLAMPサーバーのドキュメントルートにテストPHPスクリプトを設定するために使用されます。
files / info.php.j2
<?php phpinfo();
playbook.yml
playbook.yml
ファイルは、このセットアップのすべてのタスクが定義されている場所です。 まず、このセットアップのターゲットとなるサーバーのグループ(all
)を定義し、その後、become: true
を使用して、特権昇格( [ X197X])デフォルトで。 次に、構成オプションをロードするためのvars/default.yml
変数ファイルが含まれています。
playbook.yml
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Install prerequisites apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes loop: [ 'aptitude' ] #Apache Configuration - name: Install LAMP Packages apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] - name: Create document root file: path: "/var/www/{{ http_host }}" state: directory owner: "{{ app_user }}" mode: '0755' - name: Set up Apache virtualhost template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Reload Apache - name: Enable new site shell: /usr/sbin/a2ensite {{ http_conf }} notify: Reload Apache - name: Disable default Apache site shell: /usr/sbin/a2dissite 000-default.conf when: disable_default notify: Reload Apache # MySQL Configuration - name: Sets the root password mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock - name: Removes all anonymous user accounts mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" - name: Removes the MySQL test database mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" # UFW Configuration - name: "UFW - Allow HTTP on port {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp # PHP Info Page - name: Sets Up PHP Info Page template: src: "files/info.php.j2" dest: "/var/www/{{ http_host }}/info.php" handlers: - name: Reload Apache service: name: apache2 state: reloaded - name: Restart Apache service: name: apache2 state: restarted
独自のワークフロー内の個々のニーズに最も合うように、これらのファイルを自由に変更してください。
結論
このガイドでは、Ansibleを使用して、リモートサーバーにLAMP環境をインストールおよびセットアップするプロセスを自動化しました。 通常、MySQLデータベースとユーザーを操作する場合、個人ごとにニーズが異なるため、[X135X] Ansibleモジュールの詳細と使用例については、公式Ansibleドキュメントを確認することをお勧めします。
サーバー設定をさらにカスタマイズするためにこのプレイブックに他のタスクを含めたい場合は、Ansibleの紹介ガイド構成管理101:Ansibleプレイブックの作成を参照してください。