職場でいつも利用しているお名前.com VPSに一発でWordpress展開するためにAnsible playbookを書いてみた。
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
- name: Deploy Wordpress for Onamae VPS CentOS6.5 hosts: all vars: mysql_user: wordpress app_url: 'https://wordpress.org/latest.tar.gz' remote_user: root tasks: - name: Generate PASSWORD shell: head -c 200 /dev/urandom | md5sum | sed -e 's/ .*//g' register: password - name: "Check remi.repo exists" stat: path=/etc/yum.repos.d/remi.repo register: remi - name: "Install EPEL" yum: name={{ item }} state=latest with_items: - epel-release when: remi.stat.exists == 0 - name: "Add remi repos" shell: rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm when: remi.stat.exists == 0 - name: "Install middlewares" yum: name={{ item }} state=latest enablerepo=remi-php56 with_items: - php - php-mysql - php-mbstring - mysql - mysql-server - name: Start mysqld service: name=mysqld state=restarted - name: Create mysql user and database shell: | mysql << " _EOF_" CREATE DATABASE IF NOT EXISTS {{ mysql_user }}; DELETE FROM mysql.user WHERE User=''; GRANT ALL PRIVILEGES ON `{{ mysql_user }}`.* TO `{{ mysql_user }}`@`localhost`; SET PASSWORD FOR `{{ mysql_user }}`@`localhost` = PASSWORD('{{ password.stdout }}'); FLUSH PRIVILEGES; _EOF_ - name: Config php lineinfile: dest=/etc/php.ini state=present backrefs=yes regexp='{{ item.regexp }}' line='{{ item.line }}' with_items: - regexp: '^short_open_tag =' line: 'short_open_tag = On' - regexp: '^memory_limit =' line: 'memory_limit = 128M' - regexp: '^post_max_size =' line: 'post_max_size = 32M' - regexp: '^upload_max_filesize =' line: 'upload_max_filesize = 32M' - regexp: 'date.timezone =' line: 'date.timezone = "Asia/Tokyo"' - name: Download App shell: | wget -O /tmp/wp.tgz {{ app_url }} tar xzf /tmp/wp.tgz -C /var/www/ rm -rf /var/www/html mv /var/www/wordpress/ /var/www/html chown apache:apache /var/www/html -R - name: Generat Keys shell: head -c 200 /dev/urandom | md5sum | sed -e 's/ .*//g' register: k1 - shell: head -c 200 /dev/urandom | md5sum | sed -e 's/ .*//g' register: k2 - shell: head -c 200 /dev/urandom | md5sum | sed -e 's/ .*//g' register: k3 - shell: head -c 200 /dev/urandom | md5sum | sed -e 's/ .*//g' register: k4 - shell: head -c 200 /dev/urandom | md5sum | sed -e 's/ .*//g' register: k5 - shell: head -c 200 /dev/urandom | md5sum | sed -e 's/ .*//g' register: k6 - shell: head -c 200 /dev/urandom | md5sum | sed -e 's/ .*//g' register: k7 - shell: head -c 200 /dev/urandom | md5sum | sed -e 's/ .*//g' register: k8 - name: Config WP lineinfile: dest: /var/www/html/wp-config.php create: yes insertafter: EOF line: | <?php define('DB_NAME', '{{ mysql_user }}'); define('DB_USER', '{{ mysql_user }}'); define('DB_PASSWORD', '{{ password.stdout }}'); define('DB_HOST', 'localhost'); define('DB_CHARSET', 'utf8'); define('DB_COLLATE', ''); $table_prefix = 'wp_'; define('AUTH_KEY', '{{ k1.stdout }}'); define('SECURE_AUTH_KEY', '{{ k2.stdout }}'); define('LOGGED_IN_KEY', '{{ k3.stdout }}'); define('NONCE_KEY', '{{ k4.stdout }}'); define('AUTH_SALT', '{{ k5.stdout }}'); define('SECURE_AUTH_SALT', '{{ k6.stdout }}'); define('LOGGED_IN_SALT', '{{ k7.stdout }}'); define('NONCE_SALT', '{{ k8.stdout }}'); define('WP_DEBUG', false); if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); require_once(ABSPATH . 'wp-settings.php'); - name: Config iptables lineinfile: dest=/etc/sysconfig/iptables state=present insertafter='^:OUTPUT ACCEPT \[0\:0\]' line='-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT' - name: Start iptables service: name=iptables state=restarted - name: Stare httpd service: name=httpd state=restarted - shell: | chkconfig iptables on chkconfig httpd on chkconfig mysqld on |
新規のVPSを立てたら、 wget -O – http://myserver/id_rsa.pub >> .ssh/authorized_keys みたいな感じで、rootに展開ユーザの公開鍵を突っ込んでroot ssh出来るようにしちゃう。
で、あとはこのプレイブックをwordpress.ymlとかに保存して
1 |
ansible-playbook wordpress.yml -i "127.0.0.1, " |
みたいな感じで実行してやれば、remiを入れてPHPとMySQLのインストール、MySQLのユーザ作成、WPダウンロード、WP-Config生成、iptables穴開け等など一通り実行してしまえるんで、終わったらブラウザで開いてWPのサイト名設定とかだけやっちゃえば完了。
これまで利用していなかったAnsibleの機能としては、registerを使っているところ。 registerを使うと、結果を変数に登録して後から使える。 今回は、remiが既にあったらepel/remi導入をスキップする処理、MySQLユーザ用のパスワードを乱数機から自動生成してWP-Configを生成するときに利用している。 /var/www/htmlを消して丸ごとwordpressに差し替えているんで、既存サーバに使うと大惨事になりかねないのには注意。
(452)