name: InstallWordPressWithDb description: This document installs WordPress with a Database on Amazon Linux 2 schemaVersion: 1.0 phases: - name: build steps: - name: InstallWordPressPrerequisites action: ExecuteBash inputs: commands: - sudo yum install php-cli php-gd php-imagick php-intl php-pdo php-mbstring php-fpm php-json php-xml php-mysqlnd -y - sudo yum install httpd mariadb-server -y - echo "Adding ec2-user to apache group" - sudo usermod -a -G apache ec2-user - echo "enabling httpd and mariadb to start on boot" - sudo systemctl enable httpd - sudo systemctl enable mariadb - name: InstallWordPress action: ExecuteBash inputs: commands: - echo "Downloading & installing wordpress" - sudo wget http://wordpress.org/latest.tar.gz - sudo tar -xzf latest.tar.gz - sudo mv wordpress/* /var/www/html - sudo rm -f wordpress - echo "Setting permissions as per https://wordpress.org/support/article/hardening-wordpress/" - sudo chown -R apache:apache /var/www/html - sudo chmod 2755 /var/www/html && find /var/www/html -type d -exec chmod 2755 {} \; - sudo find /var/www -type f -exec chmod 0644 {} \; - sudo rm -f latest.tar.gz - WP_ADMIN_USER_PASS=`sudo openssl rand -base64 5` - sudo htpasswd -cdb /var/www/.htpasswd wp_admin $WP_ADMIN_USER_PASS - sudo chown ec2-user:ec2-user /var/www/.htpasswd - | sudo echo "User: wp_admin Password: ${WP_ADMIN_USER_PASS}" > /home/ec2-user/wp-admin-basic-auth-creds - sudo chown ec2-user:ec2-user /home/ec2-user/wp-admin-basic-auth-creds - sudo chmod 400 /home/ec2-user/wp-admin-basic-auth-creds - | sudo echo "AuthType Basic AuthName \"Restricted Access\" AuthUserFile /var/www/.htpasswd Require user wp_admin" > /var/www/html/wp-admin/.htaccess - | sudo echo " AllowOverride AuthConfig AllowOverride AuthConfig " > /etc/httpd/conf.d/wordpress.conf - name: ConfiguringDatabaseAndWpConfig action: ExecuteBash inputs: commands: - echo "Creating secrets" - MYSQL_ROOT_PASS=`sudo openssl rand -base64 18` - WORDPRESS_USER_PASS=`sudo openssl rand -base64 14` - KEYS_AND_SALTS=`curl https://api.wordpress.org/secret-key/1.1/salt/` - echo "Configuring mysql" - | sudo mysql -u root << EOFMYSQLSECURE UPDATE mysql.user SET PASSWORD=PASSWORD("${MYSQL_ROOT_PASS}") WHERE USER='root'; DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.db WHERE Db='test' OR Db='test_%'; CREATE DATABASE wordpress; CREATE USER 'wordpress'@localhost IDENTIFIED BY "${WORDPRESS_USER_PASS}"; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON wordpress.* TO 'wordpress'@localhost; FLUSH PRIVILEGES; EOFMYSQLSECURE - echo "Writing master password to file in ec2-user home dir" - sudo echo ${MYSQL_ROOT_PASS} > /home/ec2-user/mrp - sudo chown ec2-user:ec2-user /home/ec2-user/mrp - sudo chmod 400 /home/ec2-user/mrp - echo "Writing wp-config.php and cleaning up" - | sudo echo " /var/www/html/wp-config.php - sudo rm -f /var/www/html/wp-config-sample.php - sudo chmod 440 /var/www/html/wp-config.php - sudo chown ec2-user:apache /var/www/html/wp-config.php