Ansible Playbook for Nginx Php Mysql

Posted By : Apoorv Singh | 30-Nov-2018

Ansible is an open source automation platform. It is, exceptionally easy to set up but amazingly powerful. Ansible can assist you with the configuration management, application deployment, task automation. It can run errands in succession and make a chain of occasions which must occur on multiple different servers or gadgets. For eg, lets say if you have multiple servers behind a load balancer, and you need to deploy a service on all of them. Ansible will deploy that service easily. While deploying, ansible will remove the server from your Load balancer and disable it from your monitoring service, deploy your service and reinstall the server in load balancer. Hence, you can do a hectic task easily with the Ansible.

To setup Nginx-Php-Mysql with Ansible:

Nginx:

---
- name: restart nginx
  service: name=nginx state=restarted enabled=yes
---
- name: Install nginx
  yum: name=nginx state=present

- name: Copy nginx configuration for wordpress
  template: src=default.conf dest=/etc/nginx/conf.d/default.conf
  notify: restart nginx
server {
        listen       80 default_server;
        server_name  {{ server_hostname }};
        root /opt/website ;
 
	client_max_body_size 64M;
 
	location ~* /(?:uploads|files)/.*\.php$ {
                deny all;
        }
 
        location / {
                index index.php index.html index.htm;
                try_files $uri $uri/ /index.php?$args;
        }
 
        location ~* \.(gif|jpg|jpeg|png|css|js)$ {
                expires max;
        }
 
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_index index.php;
                fastcgi_pass  unix:/var/run/php-fpm/wordpress.sock;
                fastcgi_param   SCRIPT_FILENAME
                                $document_root$fastcgi_script_name;
                include       fastcgi_params;
        }
}

 

PHP-fpm: 

---
- name: restart php-fpm
  service: name=php-fpm state=restarted
---
- name: Install php-fpm and deps
  yum: name={{ item }} state=present
  with_items:
    - php
    - php-fpm
    - php-mysql
    - php-PHPMailer
    - php-curl
    - php-common

- name: Disable default pool
  command: mv /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.disabled creates=/etc/php-fpm.d/www.disabled
  notify: restart php-fpm

- name: Copy php-fpm configuration
  template: src=wordpress.conf dest=/etc/php-fpm.d/
  notify: restart php-fpm
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
user = apoorv
group = apoorv
pm = dynamic
pm.max_children = 20
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 2
pm.max_requests = 500
chdir = /opt/website/
php_admin_value[open_basedir] = /opt/website/:/tmp

 

Mysql : 

---
- name: restart mysql
  service: name=mysqld state=restarted
---
- name: Install Mysql package
  yum: name={{ item }} state=present
  with_items:
   - mysql-server
   
- name: Create Mysql configuration file
  template: src=my.cnf.j2 dest=/etc/my.cnf
  notify:
  - restart mysql

- name: Start Mysql Service
  service: name=mysqld state=started enabled=yes
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=apoorv
#symbolic-links=0
port={{ mysql_port }}

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

 

Variables: 

---

# These are the WordPress database settings
wp_db_name: wordpress 
wp_db_user: wordpress
wp_db_password: secret

mysql_port: 3306

server_hostname: apoorvsngh.xyz

 

Website.yml

---
- name: Install MySQL, Nginx, and PHP-FPM
  hosts: all
  remote_user: root
  # remote_user: user
  # become: yes
  # become_method: sudo

  roles:
    - mysql
    - nginx
    - php-fpm

 

 

Ansible is modular and easy to understand.

Executing the Website.yml file will set up Nginx, Mysql, Php-fpm on a server. You can add more variables and configurations as per your requiement. 

 

Ansible Playbooks 

The main strength of Ansible lies in its Playbooks. A playbook resembles a formula or a directions manual which instructs Ansible when it connects with each machine. Playbooks are written in YAML, which simply could be seen as XML yet human readable.

About Author

Author Image
Apoorv Singh

Confident, enthusiast, ready to race and win. 'Not possible' is nothing, especially if you are in DevOps. Keen to learn new things, learning never stops.

Request for Proposal

Name is required

Comment is required

Sending message..