From 73ae694ef1dd4ddb0ff8f94548bff6b52d505a5c Mon Sep 17 00:00:00 2001 From: HF Date: Mon, 13 Mar 2023 09:55:47 +0100 Subject: [PATCH] add rebuild script --- deployment/README.md | 3 ++ deployment/rebuild.sh | 86 +++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 90 insertions(+) create mode 100755 deployment/rebuild.sh diff --git a/deployment/README.md b/deployment/README.md index 01aefa2c..3146b303 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -13,6 +13,9 @@ Basic nodejs script to print a message and a youtube video, used as a message wh ## githook.sh Pixelplanet has its own git repository for deployment on the live system, if an commit get pushed to it, it will automatically build the canvas and deploy it. This hook is managing that on the server. +## rebuild.sh +script to manually trigger rebuilding and restarting pixelplanet on the server + ## Some notes: Cloudflare Caching Setting `Broser Cache Expiration` should be set to `Respect Existing Headers` or it would default to 4h, which is unreasonable for chunks. Additinally make sure that cachebreakers get blocked by setting Cloudflare Firewall rules to block empty query strings at least for chunks diff --git a/deployment/rebuild.sh b/deployment/rebuild.sh new file mode 100755 index 00000000..2478e8b6 --- /dev/null +++ b/deployment/rebuild.sh @@ -0,0 +1,86 @@ +#!/bin/bash +# Rebuild from master branch and restart pixelplanet + +#folder for building the canvas (the git repository will get checkout there and the canvas will get buil thtere) +BUILDDIR="/home/pixelpla/pixelplanet-build" +#folder for dev canvas +DEVFOLDER="/home/pixelpla/pixelplanet-dev" +#folder for shards +SCBFOLDER="/home/pixelpla/pixelplanet-scb" +SCCFOLDER="/home/pixelpla/pixelplanet-scc" +SCDFOLDER="/home/pixelpla/pixelplanet-scd" +SCEFOLDER="/home/pixelpla/pixelplanet-sce" +SCFFOLDER="/home/pixelpla/pixelplanet-scf" +SCGFOLDER="/home/pixelpla/pixelplanet-scg" +SCHFOLDER="/home/pixelpla/pixelplanet-sch" +#folder for production canvas +PFOLDER="/home/pixelpla/pixelplanet" +#which branch to use +BRANCH="master" + +should_reinstall () { + local TMPFILE="${BUILDDIR}/package.json.${1}.tmp" + local NODEDIR="${BUILDDIR}/node_modules" + local ORFILE="${BUILDDIR}/package.json" + [ -f "${TMPFILE}" ] && [ -d "${NODEDIR}" ] && diff -q "${TMPFILE}" "${ORFILE}" && { + echo "package.json stil the same, no need to rerun npm install." + return 1 + } + cp "${ORFILE}" "${TMPFILE}" + echo "package.json changed, need to run npm install." + return 0 +} + +npm_reinstall () { + rm -rf node_modules + rm package-lock.json + npm install +} + +copy () { + local TARGETDIR="${1}" + local REINSTALL="${2}" + cp -r dist/*.js "${TARGETDIR}/" + cp -r dist/workers "${TARGETDIR}/" + rm -rf "${TARGETDIR}/public/assets" + cp -r dist/public "${TARGETDIR}/" + cp -r dist/captchaFonts "${TARGETDIR}/" + cp -r dist/package.json "${TARGETDIR}/" + cp -r dist/assets.json "${TARGETDIR}/" + cp -r dist/styleassets.json "${TARGETDIR}/" + mkdir -p "${TARGETDIR}/log" + cd "${TARGETDIR}" + [ $REINSTALL -eq 0 ] && npm_reinstall + pm2 start ecosystem.yml + cd - +} + +GIT_WORK_TREE="$BUILDDIR" GIT_DIR="${BUILDDIR}/.git" git fetch --all +cd "$BUILDDIR" +echo "---UPDATING REPO ON PRODUCTION SERVER---" +GIT_WORK_TREE="$BUILDDIR" GIT_DIR="${BUILDDIR}/.git" git reset --hard "origin/${BRANCH}" +echo "---BUILDING pixelplanet---" +should_reinstall master +DO_REINSTALL=$? +[ $DO_REINSTALL -eq 0 ] && npm_reinstall +npm run build +echo "---RESTARTING CANVAS---" +pm2 stop ppfun-server +pm2 stop ppfun-backups +pm2 stop ppfun-scb +pm2 stop ppfun-scc +pm2 stop ppfun-scd +pm2 stop ppfun-sce +pm2 stop ppfun-scf +pm2 stop ppfun-scg +pm2 stop ppfun-sch +copy "${PFOLDER}" "${DO_REINSTALL}" +copy "${SCBFOLDER}" 1 +copy "${SCCFOLDER}" 1 +copy "${SCDFOLDER}" 1 +copy "${SCEFOLDER}" 1 +copy "${SCFFOLDER}" 1 +copy "${SCGFOLDER}" 1 +copy "${SCHFOLDER}" 1 +cd "$PFOLDER" +pm2 start ecosystem-backup.yml diff --git a/package.json b/package.json index 24909831..dc8819f0 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "scripts": { "build": "node scripts/build.js && npm run minify-css", "build:dev": "webpack --env extract --config ./webpack.config.server.js && webpack --env extract --env development --config ./webpack.config.client.js && npm run minify-css", + "deploy": "ssh pixelplanet /home/pixelpla/rebuild.sh", "minify-css": "node scripts/minifyCss.js", "babel-node": "babel-node", "lint": "cd $INIT_CWD && eslint --ext .jsx --ext .js",