少し前まで、私はあらゆるDevOps向けのすばらしいツールであるAnsibleに取り組み始めました。 今日、私はあなたの厳しい法廷に、これの使用に関する小さな紹介記事を、多くの点で素晴らしいツールとして提示したいと思います。 それでは始めましょう。
Ansibleとは
Ansibleは、システム管理者のタスクなどを自動化するツールです。 自分の言葉で言うと-これは、サーバーバンドルを自動的に構成できるようにするものです。
誰かがそれは必要ではないと言うでしょう、なぜなら シェフ、パペットなどがいる 私はこれらの人々に絶対に同意します。 これらのツールを使用できる場合、素晴らしい。 この記事は、Ansibleがどのように機能し、Ansibleを使用して多くの自動化を行うことができるかを少し理解したい人のために書いています。
Ansibleにまったく遭遇したことがない場合は、 Selectel社の記事を読むことをお勧めします。 素晴らしい記事。
最大の自動化
UbuntuがインストールされているVPSサーバーでWordpressを実行するために必要なものを決定しましょう。
- Nginx
- Mysql
- PHP5
- MemcachedはW3Total Cacheプラグインを使用します
- ワードプレス
この順序で、サーバーを構成するためのロールを作成します。
タスクのディレクトリ構造は次のとおりです。
Nginx
roles / nginx / tasksディレクトリで、次の内容のmain.ymlを作成します。
- name: Add nginx repository apt_repository: repo='ppa:nginx/stable' - name: Install nginx action: apt pkg=nginx-extras state=installed update_cache=true - name: Disable default site file: path: /etc/nginx/sites-enabled/default state: absent
「-name」として新しい行で始まるものはすべて、Ansibleの個別のタスクです。 次のステップで書かれていることを分析します。
- nginxリポジトリを追加します(ppa:nginx / stable)
- nginx-extrasをインストールします(必要な場合、SPDYモジュールが含まれており、構成で有効にできます)
- デフォルト設定へのシンボリックリンクを削除します
roles / nginx / handlersディレクトリで、次の内容のmain.ymlファイルを作成します。
- name: restart nginx service: name: nginx state: restarted
これは、Nginxを再起動するためのサービスの説明です。 Wordpressの設定をインストールした後に必要になります。
Nginxですべてです。 2つの単純なファイルにより、リポジトリをシステムにインストールし、Webサーバーをインストールし、デフォルト設定を削除して、リブートするサービスを決定できます。
さらに進みます。
MySQL
Percona MySQLサーバーのインストールに慣れています。 良くも悪くも、あなたは長い間議論することができます。 私はそれに慣れて使っています。
原則はまったく同じです。 ファイルロール/ percona-mysql / tasks / main.yml:
- name: Add GPG key for repository command: apt-key adv --keyserver keyserver.ubuntu.com --recv CD2EFD2A - name: Add Percona repository shell: echo "deb http://repo.percona.com/apt {{ ansible_lsb['codename'] }} main" | tee /etc/apt/sources.list.d/percona.list creates=/etc/apt/sources.list.d/percona.list - name: Install Percona MySQL server apt: pkg: "{{ item }}" update_cache: true with_items: - percona-server-server-5.5 - percona-server-client-5.5 - python-mysqldb - name: Change root password (fail is not a problem) mysql_user: name: root password: "{{ mysql_root_password}}" ignore_errors: yes
次の手順:
- リポジトリキーを追加
- ファイル/etc/apt/sources.list.d/percona.listが作成されたことを確認して、リポジトリ自体を追加します
- 3つのパッケージをインストールします。
- percona-server-server-5.5
- percona-server-client-5.5
- python-mysqldb(mysqlサーバーをansibleから制御するために必要)
- ルートパスワードを変数で指定されたものに変更します(以下を参照)
メインのymlファイルで変数を以下に示します。 データベースの名前、パスワードを持つユーザーなども表示されます。
PHP5
Apacheを使用しないため、php-phpとphpを使用します。 これを行うには、roles / php5 / handlers / main.ymlファイルでphp5-fpmサービスを記述します。
- name: restart php5-fpm service: name: php5-fpm state: restarted
デーモンを再起動するようにphp5-fpmを構成した後に呼び出します。
コンテンツの役割/ php5 / tasks / main.yml:
- name: install php5 apt: pkg={{ item }} with_items: - php5 - php5-cgi - php5-fpm - php5-memcache - php5-memcached - php5-mcrypt - php5-mysql - php5-gd - php5-curl - php5-xmlrpc - name: change listen socket lineinfile: dest: '/etc/php5/fpm/pool.d/www.conf' insertafter: 'listen = 127.0.0.1:9000' line: 'listen = /var/run/fpm.socket' notify: restart php5-fpm
最初のステップは、必要なパッケージをインストールすることです。 ここではすべてが簡単です。
しかし、2番目のステップはより興味深いものです。 よく見てみましょう。 Nginxでは、unixソケット経由でphp5-fmpとの通信を使用します。 これを行うには、php5-fpmデーモンのwwwプールの構成で、必要なパスでソケットをリッスンしていることを示す必要があります。 lineinfileモジュールにより、これを行うことができます。
- 「Dest」は編集を行う方法です。
- 「Insertafter」-指定されたファイルで「listen = 127.0.0.1:9000」という行を見つけ、「line」に指定された行を挿入します
- 「通知」-「php5-fpmの再起動」サービスに通知を送信します(これが、php5-fpmサービスの説明が必要な理由です)
Memcached
このサービスでは、すべてが非常に簡単です。 それをインストールする必要があり、それだけです。 コンテンツロール/ memcached /タスク/ main.yml:
- name: install memcached server apt: pkg: memcached
ワードプレス
ここでは、Wordpressを自動的にインストールし、データベースとnginx構成を作成します。 なぜ正確にここに? すべてがシンプルです。 任意の役割を引き受けて、他のansibleプロジェクトで使用できます。 または、別のロールを作成して、wordpressではなく、wordpressの隣にある独自のプロジェクトを展開します。 つまり それは一般的な利便性のために作られています。
役割/ワードプレス/タスク/ main.yml:
- name: creating database mysql_db: name: "{{ db_name }}" state: "present" login_user: "root" login_password: "{{ mysql_root_password }}" - name: creating database user mysql_user: name: "{{ db_user }}" password: "{{ db_password }}" priv: "{{ db_name }}.*:ALL" state: "present" login_user: "root" login_password: "{{ mysql_root_password }}" - name: install nginx configuration template: src: wordpress.conf dest: /etc/nginx/sites-available/wordpress.conf notify: restart nginx - name: activate site configuration file: src: '/etc/nginx/sites-available/wordpress.conf' dest: '/etc/nginx/sites-enabled/wordpress.conf' state: 'link' - name: download WordPress get_url: url: "{{ download_url }}" dest: "/tmp/latest.tar.gz" - name: creating directory for WordPress file: path: "{{ wpdirectory }}" state: "directory" owner: "www-data" group: "www-data" - name: unpack WordPress installation shell: "tar xvfz /tmp/latest.tar.gz -C {{ wpdirectory }} && chown -R www-data:www-data {{ wpdirectory }}"
それでは、各項目を見ていきましょう。
- 接続パラメーター(ルートログインとパスワード)を指定してデータベースを作成します
- パスワードを使用してデータベースユーザーを作成し、新しく作成したデータベースに対する権限を示します
- 事前に準備されたテンプレート(下記を参照)を使用してNginxでサーバー構成を作成し、Nginxサービスを再起動するためのシグナルを送信
- Nginxでサーバーをアクティブ化し、シンボリックリンクを作成します
- 変数で指定されたWordpressバージョンをダウンロードします
- Wordpress用のディレクトリを作成する
- ダウンロードしたアーカイブを解凍し、ファイルとディレクトリに必要な権限を設定します
Nginxサーバー設定テンプレートの役割/ wordpress / templates / wordpress.conf:
server { listen 80 default_server; root {{ wpdirectory }}/wordpress; index index.php index.html index.htm; server_name {{ domain }}; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/www; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } } server { listen 80; server_name www.{{ domain }}; location / { return 301 http://{{ domain }}; } }
Nginx構成の原則を説明することは、別の記事のトピックであり、1つの記事でもありません。 このビジネスを宿題に任せましょう。
まとめてインストールを開始する
Ansibleが何をどのように実行するかを知るには、プレイブックwordpress.ymlを書く必要があります。
- hosts: appservers-php sudo: yes vars: - mysql_root_password: "SuperP@S$w0rd" - domain: "example.com" - download_url: "http://wordpress.org/latest.tar.gz" - wpdirectory: "/var/www" - db_name: "wordpress" - db_user: "wordpress" - db_password: "wordpress" roles: - { role: nginx } - { role: percona-mysql } - { role: memcached } - { role: php5 } - { role: wordpress }
このファイルは、どのサーバーで、どのシーケンスで、どの権限で実行するかをAnsibleに伝えます。
- hostsは、すべてのアクションを実行する必要があるhostsファイル(以下を参照)のホストのリストです。
- sudo-sudoの下からすべてのアクションを実行するかどうか。
- vars-ロールで使用される変数:
- mysql_root_password-MySQLでrootユーザーに設定するパスワード
- domain-サイトのドメイン。nginx設定で指定されます
- wpdirectory-Wordpressをインストールするディレクトリ
- db_ *-MySQLの関連パラメーター
- 役割-実行されたタスク(役割)
そして、hostsファイルにすべてをインストールするためのサーバーのリストのみを記述することは残ります。
[appservers-php] example.com ansible_ssh_host=10.0.0.2 ansible_ssh_user=ubuntu
最初の行のブロックは、wordress.ymlで指定されているホストのリストを示しています。 新しい行から各サーバーをさらに進めます。
サーバードメインは最初のものです。
2番目は、Ansibleがsshを経由するサーバーのIPアドレスを示します。 ドメインが目的のサーバーで既に構成されている場合、このパラメーターはオプションです。
3番目のパラメーターは、Ansibleがssh経由でサーバーにログインするときに使用するユーザー名です。
これでインストールを開始できます。
ansible-playbook -i hosts wordpress.yml -kK
- k-sshパスワードを要求します。
- K-sudoパスワードを要求する
作業が終了したら、HTTP経由でサーバーにアクセスし、Wordpressが機能するように設定できます。
完成したレシピはgithubで取得できます。
これが、職場(および自宅)でのルーチンを少し自動化するのに役立つことを願っています。 読んでくれてありがとう。