237 lines
7.9 KiB
YAML
Executable File
237 lines
7.9 KiB
YAML
Executable File
type: install
|
|
jpsVersion: '1.7.2'
|
|
name: WordPress Performance Cluster
|
|
id: wp-performance-cluster
|
|
categories:
|
|
- apps/clusters
|
|
- apps/content-management
|
|
description:
|
|
#text: WordPress Cluster Kit with highly available Load Balancer and Shared Storage with GlusterFS, database clustering, and scaling mode to create an optimal environment for highly-loaded projects. The package provides integrated autoscaling and high availability for development and production environments. Clustered topology ensures effective handling of heavy workload.
|
|
#short: WordPress Cluster with built-in kit v2 for choosing optimal servers, database clustering type, scaling mode and a set of advanced features for highly-loaded projects
|
|
logo: /images/wp-cluster-kit.svg
|
|
|
|
baseUrl: https://deploy.mightybox.io/kits/wp-performance-cluster/raw/branch/main
|
|
|
|
onBeforeInit: /scripts/beforeInit.js?_r=${fn.random}
|
|
onBeforeInstall: /scripts/beforeInstall.js?_r=${fn.random}
|
|
|
|
skipNodeEmails: true
|
|
nodes: definedInOnBeforeInstall
|
|
|
|
settings:
|
|
fields:
|
|
|
|
- type: displayfield
|
|
hideLabel: true
|
|
hidden: true
|
|
name: bl_count
|
|
value: 1
|
|
markup:
|
|
# - caption: Number of App servers
|
|
# - caption: Scalable app servers limit
|
|
# - caption: App server base vCPU
|
|
# - caption: App server scalable vCPU
|
|
# - caption: PHP Version
|
|
|
|
# - caption: Email credentials
|
|
# type: checkbox
|
|
# name: ls-addon
|
|
# value: true
|
|
# disabled: false
|
|
# tooltip: "If this option is enabled, environment details (including WP admin logins) will be emailed to you upon successful deployment."
|
|
|
|
# - caption: Database type (single or clustered)
|
|
# relay & OCP
|
|
# s3 offloading
|
|
|
|
mixins:
|
|
- /scripts/common.yml
|
|
|
|
globals:
|
|
PATH: ${baseUrl}
|
|
DB_USER: ${settings.DB_USER:user-[fn.random]}
|
|
DB_PASS: ${settings.DB_PASS:[fn.password(10)]}
|
|
DB_HOST: sqldb
|
|
PROTOCOL: https
|
|
WP_ADMIN_PASS: ${settings.WP_ADMIN_PASS:[fn.password(10)]}
|
|
LS_ADMIN_PASS: ${settings.LS_ADMIN_PASS:[fn.password(10)]}
|
|
|
|
onInstall:
|
|
- setupDB
|
|
- addLimits
|
|
#- addMetadata
|
|
- setDomain # why is this necessary?
|
|
- initLEsettings
|
|
#- if (${settings.is_trigger:true}): setTriggers
|
|
- optimization
|
|
- setupCacheSync
|
|
- storageHealthCheck
|
|
- storageMount: NFS4
|
|
- setPassword
|
|
- getRedisPswd
|
|
- installWordpress
|
|
#- if ('${settings.mu-addon:false}' == 'true'): configureMultisite
|
|
|
|
- script: |
|
|
var actions = [];
|
|
actions.push({
|
|
jps: "https://github.com/jelastic-jps/lets-encrypt/blob/master/manifest.jps?_r=${fn.random}",
|
|
nodeGroup: "bl",
|
|
skipEmail: "true",
|
|
settings: {
|
|
customDomains: "${globals.DOMAIN}",
|
|
fallbackToX1: "true",
|
|
withExtIp: "${globals.isExtIP}"
|
|
}
|
|
});
|
|
return { result: 0, onAfterReturn: { install: actions } };
|
|
|
|
- setupLEdomain
|
|
|
|
- install:
|
|
- jps: /scripts/cacheClean.jps?_r=${fn.random}
|
|
- jps: /scripts/addons.jps?_r=${fn.random}
|
|
- jps: /scripts/events.jps?_r=${fn.random}
|
|
|
|
#instant login, root access, and other addons
|
|
|
|
- return:
|
|
type: success
|
|
message: /success/text/success.md?_r=${fn.random}
|
|
email: /success/email/success.md?_r=${fn.random}
|
|
|
|
actions:
|
|
setupDB:
|
|
- cmd[sqldb]: |-
|
|
ADMIN_PASSWORD=`pwgen 10 1`
|
|
jem passwd set -p $ADMIN_PASSWORD #use if need to reset DB password
|
|
USER=${DB_USER}
|
|
PASSWORD=${DB_PASS}
|
|
MYSQL=`which mysql`
|
|
cmd="CREATE USER '$USER'@'localhost' IDENTIFIED BY '$PASSWORD'; CREATE USER '$USER'@'%' IDENTIFIED BY '$PASSWORD'; GRANT ALL PRIVILEGES ON *.* TO '$USER'@'localhost' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON *.* TO '$USER'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;"
|
|
$MYSQL -uroot -p$ADMIN_PASSWORD --execute="$cmd"
|
|
user: root
|
|
|
|
addLimits: #what does this do?
|
|
- env.control.ApplyNodeGroupData [*]:
|
|
data:
|
|
isRequired: true
|
|
|
|
# addMetadata:
|
|
# script: |
|
|
# var metadata = { project: "${settings.project:default}", projectScope: "${settings.projectScope:production}" };
|
|
# return api.env.control.ApplyEnvProperty ?
|
|
# api.env.control.ApplyEnvProperty('${env.name}', session, metadata) :
|
|
# api.env.control.ApplyNodeGroupData('${env.name}', session, 'cp', metadata);
|
|
|
|
setDomain:
|
|
- script: /scripts/idna.js
|
|
domains: ${env.domain}
|
|
- setGlobals:
|
|
DOMAIN: ${response.domains}
|
|
|
|
# setTriggers:
|
|
# - log: Auto Scaling Triggers
|
|
# - script: /scripts/addTriggers.js
|
|
# nodeGroup: cp
|
|
# resourceType: CPU
|
|
# loadGrowth: 'slow'
|
|
# cleanOldTriggers: true
|
|
# scaleDownLimit: ${nodes.cp.length}
|
|
|
|
initLEsettings:
|
|
# I don't think we need to check this. Just set to true.
|
|
# - script: |
|
|
# return {
|
|
# result:0,
|
|
# extIP: Boolean(jelastic.billing.account.GetQuotas('environment.externalip.enabled').array[0].value)
|
|
# }
|
|
# - setGlobals:
|
|
# isExtIP: ${response.extIP}
|
|
|
|
- setGlobals:
|
|
isExtIP: true
|
|
|
|
- cmd[cp, bl]: |-
|
|
[ ! -d /var/lib/jelastic/keys/letsencrypt ] && mkdir -p /var/lib/jelastic/keys/letsencrypt;
|
|
echo "webroot=false" > /var/lib/jelastic/keys/letsencrypt/settings-custom;
|
|
echo "webrootPath=/var/www/webroot/ROOT" >> /var/lib/jelastic/keys/letsencrypt/settings-custom;
|
|
echo "test=false" >> /var/lib/jelastic/keys/letsencrypt/settings-custom;
|
|
echo "withExtIp=${globals.isExtIP}" >> /var/lib/jelastic/keys/letsencrypt/settings-custom;
|
|
user: root
|
|
|
|
setupLEdomain:
|
|
- cmd[${nodes.bl.master.id}]: source /opt/letsencrypt/settings && echo $domain
|
|
- cmd[${nodes.cp.master.id}]: bash ~/bin/setupWP.sh --url https://${response.out};
|
|
|
|
optimization:
|
|
- log: Load Balancers and App servers optimization
|
|
- install:
|
|
- jps: https://raw.githubusercontent.com/jelastic/templates/master/config_v2.jps?_r=${fn.random}
|
|
settings:
|
|
targetGroup: bl
|
|
targetNodes: bl
|
|
optimization: wordpress
|
|
- jps: https://raw.githubusercontent.com/jelastic/templates/master/config_v2.jps?_r=${fn.random}
|
|
settings:
|
|
targetGroup: cp
|
|
targetNodes: cp
|
|
optimization: wordpress
|
|
- cmd[cp, bl]: if test -f /usr/local/sbin/optimization.sh; then bash /usr/local/sbin/optimization.sh &>> /var/log/run.log; fi
|
|
|
|
setPassword:
|
|
- cmd[cp, bl]: jem passwd set -p ${globals.LS_ADMIN_PASS}
|
|
user: root
|
|
|
|
storageMount:
|
|
- log: Mount Storage
|
|
- api:
|
|
- method: jelastic.environment.file.AddMountPointByGroup
|
|
params:
|
|
nodeGroup: cp
|
|
sourceNodeId: ${nodes.storage.master.id}
|
|
sourcePath: /data
|
|
path: /var/www/webroot/ROOT
|
|
sourceAddressType: NODE_GROUP
|
|
protocol: ${this}
|
|
|
|
storageHealthCheck:
|
|
- cmd[cp]: |-
|
|
echo "<?php http_response_code(500); ?>" > /var/www/webroot/ROOT/index.php
|
|
|
|
#configureMultisite:
|
|
# - install: /addons/multisite.jps
|
|
|
|
getRedisPswd:
|
|
- cmd[nosqldb]: cat /etc/redis.conf | tail -1 | awk '{print $2}';
|
|
- setGlobals:
|
|
REDIS_PSWD: ${response.out}
|
|
|
|
installWordpress:
|
|
- install: /scripts/installWP.jps
|
|
settings:
|
|
db_host: ${globals.DB_HOST}
|
|
db_user: ${globals.DB_USER}
|
|
db_pass: ${globals.DB_PASS}
|
|
redis_host: nosqldb
|
|
redis_port: 6379
|
|
redis_user: admin
|
|
redis_pswd: ${globals.REDIS_PSWD}
|
|
wp_admin_pass: ${globals.WP_ADMIN_PASS}
|
|
wp_title: "Hello World"
|
|
wp_url: ${globals.PROTOCOL}://${globals.DOMAIN}/
|
|
version_wordpress: ${globals.version_wordpress}
|
|
|
|
setupCacheSync:
|
|
- if (/litespeed/.test("${nodes.bl.nodeType}")):
|
|
- install: /scripts/setupHA4LB.jps?_r=${fn.random}
|
|
|
|
updateTriggers:
|
|
if (!${event.params.auto:true}):
|
|
- log: update scaling trigger
|
|
- script: /scripts/updateTriggers.js
|
|
count: ${nodes.cp.length}
|
|
|
|
# other stuff - basic BB optimizations should be applied here
|
|
# use WP redis cache plugin instead of litespeed redis cache
|
|
# Use https://plugintests.com/plugins/wporg/litespeed-cache/tips to disable ls cache page? |