Project:
Installing WordPress a 2-tier application through Ansible
WordPress is a 2-tier application where we need to install a DB.
Here we will Take the same approach as we took in the last blog i.e. by using roles we will install the DB and WordPress application.
Create the directory as follows
Now, under main.yaml. Write the YAML for creating a DB
--- - name: Installing mariadb yum: name: "{{ item }}" state: latest with_items: ["MySQL-python","mariadb-server"] - name: enable mariadb service systemd: name: mariadb enabled: true - name: Start mariadb service systemd: name: mariadb state: started - name: Create a New Database with Name given by user mysql_db: name: "{{ DBNAME }}" state: present - name: Create Database user with name fiven by user and password given by user with all db privileges mysql_user: name: "{{ DBUSER }}" password: "{{ DBPASS }}" priv: '*.*:ALL' state: present host: '%'
Now, create a directory app1 and app1.yaml file in it
--- - name: Installing Database hosts: Node-1 vars: DBNAME: "devopswala" DBUSER: "admin" DBPASS: "admin123" roles: - db
Now run the playbook for app1.
Now, Go to Node-1 and verify that we can see the Maria DB installed along with DB name and username-password
Now under roles create a new directory named WordPress and under that create subdirectories named handlers, tasks and templates.
Now, under the templates directory create a file named wp-config.php and copy the following content
Copy Below Template
//Copy this Template
<?php
/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the installation.
* You don't have to use the web site, you can copy this file to "wp-config.php"
* and fill in the values.
*
* This file contains the following configurations:
*
* * Database settings
* * Secret keys
* * Database table prefix
* * ABSPATH
*
* @link https://wordpress.org/documentation/article/editing-wp-config-php/
*
* @package WordPress
*/
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'database_name_here' );
/** Database username */
define( 'DB_USER', 'username_here' );
/** Database password */
define( 'DB_PASSWORD', 'password_here' );
/** Database hostname */
define( 'DB_HOST', 'localhost' );
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
/**#@+
* Authentication unique keys and salts.
*
* Change these to different unique phrases! You can generate these using
* the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
*
* You can change these at any point in time to invalidate all existing cookies.
* This will force all users to have to log in again.
*
* @since 2.6.0
*/
define( 'AUTH_KEY', 'put your unique phrase here' );
define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );
define( 'LOGGED_IN_KEY', 'put your unique phrase here' );
define( 'NONCE_KEY', 'put your unique phrase here' );
define( 'AUTH_SALT', 'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT', 'put your unique phrase here' );
define( 'NONCE_SALT', 'put your unique phrase here' );
/**#@-*/
/**
* WordPress database table prefix.
*
* You can have multiple installations in one database if you give each
* a unique prefix. Only numbers, letters, and underscores please!
*/
$table_prefix = 'wp_';
/**
* For developers: WordPress debugging mode.
*
* Change this to true to enable the display of notices during development.
* It is strongly recommended that plugin and theme developers use WP_DEBUG
* in their development environments.
*
* For information on other constants that can be used for debugging,
* visit the documentation.
*
* @link https://wordpress.org/documentation/article/debugging-in-wordpress/
*/
define( 'WP_DEBUG', false );
/* Add any custom values between this line and the "stop editing" line. */
/* That's all, stop editing! Happy publishing. */
/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';
Under the wp-config.php change the following values
Now, navigate to tasks create a file main.yaml and write the code as follows
--- - name: Installing PHP command: amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2 - name: Install Apache yum: name: httpd state: latest - name: enable httpd systemd: name: httpd enabled: true - name: download and untar wordpress unarchive: src: https://wordpress.org/latest.tar.gz dest: /var/www/html/ remote_src: yes owner: apache group: apache - name: placing wp-config.php file template: src: wp-config.php dest: /var/www/html/wp-config.php owner: apache group: apache notify: restart apache
Now, under Handlers create another main.yaml as follows
--- - name: restart apache systemd: name: httpd state: restarted
Let's see how the WordPress app files look like
Now, Let's come to our app1.yaml and call all these roles from there
--- - name: Installing Database hosts: Node-1 vars: DBNAME: "devopswala" DBUSER: "admin" DBPASS: "admin123" roles: - db - name: Installing Wordpress hosts: Node-2 vars: DBNAME: "devopswala" DBUSER: "admin" DBPASS: "admin123" DBSERVER: "3.95.226.114" roles: - wordpress
Let's execute the playbook.
Hence, We saw we could deploy a 2-tier application with the help of the Above YAML roles.