Add deployment script

This commit is contained in:
Fred Boniface 2023-02-16 19:57:13 +00:00
parent 239ce81d4c
commit 8c676fd6e6
6 changed files with 89 additions and 26 deletions

View File

View File

View File

@ -1,4 +1,12 @@
FROM fedora:latest AS builder
FROM fedora:latest as compressor
RUN dnf install brotli nodejs npm jq -y
RUN npm i uglifyjs-folder uglifycss html-minifier-terser -g
COPY . /data/in
RUN bash /data/in/deploy/deploy.sh
FROM nginx:mainline-alpine-slim
COPY . /usr/share/nginx/html
FROM fholzer/nginx-brotli:latest
RUN rm /etc/nginx/nginx.conf
RUN apk update
RUN apk add --upgrade libxml2 libxslt
COPY ./deploy/nginx.conf /etc/nginx/nginx.conf
COPY --from=compressor /data/out/ /site-static/

38
deploy/deploy.sh Normal file
View File

@ -0,0 +1,38 @@
#!/bin/bash
ROOTIN="/data/in"
ROOTOUT="/data/out"
echo "Running UglifyJS on /data/in folder"
uglifyjs-folder "$ROOTIN" -x ".js" -eo "$ROOTOUT"
echo "Running UglifyCSS"
CSSIN="/data/in/stylesheets/"
CSSOUT="/data/out/stylesheets"
cd $CSSIN
echo "Changed directory"
for f in *
do
if [ -f "$f" ]; then
uglifycss "$f" --output "$f";
fi
done
echo "Moving 'styles' to 'out'"
cp -r $CSSIN $CSSOUT
echo "Running html-minifier-terser on /folder"
HTMLIN="/data/in/"
HTMLOUT="/data/out"
html-minifier-terser --collapse-whitespace --remove-comments --file-ext html --input-dir /data/in/ --output-dir /data/out/
#echo "Moving JSON Manifest file from root to output"
#cat /data/in/manifest.json | jq -c > /data/out/manifest.json
echo "Moving other files folder from in/ to out/"
cp -r /data/in/assets /data/out/assets
cp -r /data/in/fonts /data/out/fonts
echo "Running GZIP & Brotli on all HTML, JS, CSS, JSON, SVG & TTF files"
find /data/out -type f -name \*.html -or -name \*.js -or -name \*.css -or -name \*.json -or -name \*.svg -or -name \*.ttf | while read file; do gzip -k -9 $file; brotli -k -q 11 $file; done

38
deploy/nginx.conf Normal file
View File

@ -0,0 +1,38 @@
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 64;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
add_header Content-Security-Policy "default-src 'self'";
location / {
root /site-static/;
index index.html;
gzip_static on;
brotli_static on;
expires 3d;
add_header Cache-Control "public, no-transform";
}
}
}

View File

@ -1,30 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<title>FJLA Gateway</title>
<meta charset="UTF-8"/>
<meta name="description" content="FJLA Gateway"/>
<meta name="description" content="The gateway to FJLA services"/>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" type="text/css" href="./stylesheets/fonts.css"/>
<link rel="stylesheet" type="text/css" href="./stylesheets/style.css"/>
<script src="./scripts/iconactions.js"></script>
</head>
<body>
<h1 class="pagetitle">FJLA Gateway</h1>
<a hidden href="./faults.html"><h2 class="pagesubtitle errornote">Active Fault</h2></a>
<form action="https://duckduckgo.com/">
<input class="searchentry" type="text" id="search" name="q" autocomplete="on" placeholder="Search DuckDuckGo" autofocus>
</form>
<br>
<div class="gatecontainer">
<div onclick="gotoNextcloud()" class="gateicon">
<img class="gateimage" src="./assets/gate-logos/nextcloud-normal.webp"/>
<div class="icontext">
@ -32,7 +24,6 @@
<h2 class="gatesubtitle">Personal Cloud</h2>
</div>
</div>
<div onclick="gotoHomeAssistant()" class="gateicon">
<img class="gateimage" src="./assets/gate-logos/home-assistant-normal.webp"/>
<div class="icontext">
@ -40,7 +31,6 @@
<h2 class="gatesubtitle">Smart Home</h2>
</div>
</div>
<div onclick="gotoJellyfin()" class="gateicon">
<img class="gateimage" src="./assets/gate-logos/jellyfin-normal.webp"/>
<div class="icontext">
@ -48,7 +38,6 @@
<h2 class="gatesubtitle">Video Streaming</h2>
</div>
</div>
<div onclick="gotoGallery()" class="gateicon">
<img class="gateimage" src="./assets/gate-logos/gallery-normal.webp"/>
<div class="icontext">
@ -56,12 +45,8 @@
<h2 class="gatesubtitle">Family Photos</h2>
</div>
</div>
</div>
<div class="gatecontainer">
<div onclick="gotoMail()" class="gateicon">
<img class="gateimage" src="./assets/gate-logos/mail-normal.webp">
<div class="icontext">
@ -69,7 +54,6 @@
<h2 class="gatesubtitle">Your email</h2>
</div>
</div>
<div onclick="gotoVoicemail()" class="gateicon">
<img class="gateimage" src="./assets/gate-logos/voicemail-normal.webp">
<div class="icontext">
@ -77,7 +61,6 @@
<h2 class="gatesubtitle">FreePBX UCP</h2>
</div>
</div>
<div onclick="gotoAll()" class="gateicon">
<img class="gateimage" src="./assets/gate-logos/question-normal.webp">
<div class="icontext">
@ -85,7 +68,6 @@
<h2 class="gatesubtitle">Full list of services</h2>
</div>
</div>
<div onclick="gotoAccount()" class="gateicon">
<img class="gateimage" src="./assets/gate-logos/account-normal.webp">
<div class="icontext">
@ -93,7 +75,6 @@
<h2 class="gatesubtitle">Your Settings</h2>
</div>
</div>
<div onclick="gotoHelp()" class="gateicon">
<img class="gateimage" src="./assets/gate-logos/lifebuoy-normal.webp">
<div class="icontext">
@ -101,8 +82,6 @@
<h2 class="gatesubtitle">Tell me more</h2>
</div>
</div>
</div>
</body>
</html>
</html>