Ansibleを使用したVPSへのWordPressの自動インストール

こんにちは、Habr。



少し前まで、私はあらゆるDevOps向けのすばらしいツールであるAnsibleに取り組み始めました。 今日、私はあなたの厳しい法廷に、これの使用に関する小さな紹介記事を、多くの点で素晴​​らしいツールとして提示したいと思います。 それでは始めましょう。



Ansibleとは



Ansibleは、システム管理者のタスクなどを自動化するツールです。 自分の言葉で言うと-これは、サーバーバンドルを自動的に構成できるようにするものです。



誰かがそれは必要ではないと言うでしょう、なぜなら シェフ、パペットなどがいる 私はこれらの人々に絶対に同意します。 これらのツールを使用できる場合、素晴らしい。 この記事は、Ansibleがどのように機能し、Ansibleを使用して多くの自動化を行うことができるかを少し理解したい人のために書いています。



Ansibleにまったく遭遇したことがない場合は、 Selectel社の記事を読むことをお勧めします。 素晴らしい記事。



最大の自動化



UbuntuがインストールされているVPSサーバーでWordpressを実行するために必要なものを決定しましょう。



この順序で、サーバーを構成するためのロールを作成します。



タスクのディレクトリ構造は次のとおりです。

画像



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の個別のタスクです。 次のステップで書かれていることを分析します。

  1. nginxリポジトリを追加します(ppa:nginx / stable)
  2. nginx-extrasをインストールします(必要な場合、SPDYモジュールが含まれており、構成で有効にできます)
  3. デフォルト設定へのシンボリックリンクを削除します


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
      
      







次の手順:

  1. リポジトリキーを追加
  2. ファイル/etc/apt/sources.list.d/percona.listが作成されたことを確認して、リポジトリ自体を追加します
  3. 3つのパッケージをインストールします。

    • percona-server-server-5.5
    • percona-server-client-5.5
    • python-mysqldb(mysqlサーバーをansibleから制御するために必要)
  4. ルートパスワードを変数で指定されたものに変更します(以下を参照)


メインの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モジュールにより、これを行うことができます。





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 }}"
      
      





それでは、各項目を見ていきましょう。

  1. 接続パラメーター(ルートログインとパスワード)を指定してデータベースを作成します
  2. パスワードを使用してデータベースユーザーを作成し、新しく作成したデータベースに対する権限を示します
  3. 事前に準備されたテンプレート(下記を参照)を使用してNginxでサーバー構成を作成し、Nginxサービスを再起動するためのシグナルを送信
  4. Nginxでサーバーをアクティブ化し、シンボリックリンクを作成します
  5. 変数で指定されたWordpressバージョンをダウンロードします
  6. Wordpress用のディレクトリを作成する
  7. ダウンロードしたアーカイブを解凍し、ファイルとディレクトリに必要な権限を設定します


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ファイルにすべてをインストールするためのサーバーのリストのみを記述することは残ります。



 [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
      
      









作業が終了したら、HTTP経由でサーバーにアクセスし、Wordpressが機能するように設定できます。



完成したレシピはgithubで取得できます。



これが、職場(および自宅)でのルーチンを少し自動化するのに役立つことを願っています。 読んでくれてありがとう。



All Articles