Compare commits
	
		
			No commits in common. "762b97d19d1dc47695df9872bc38db0674274d48" and "7ce57383998114df320b2ae0efd598b30583a14f" have entirely different histories.
		
	
	
		
			762b97d19d
			...
			7ce5738399
		
	
		
							
								
								
									
										11
									
								
								.env
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								.env
									
									
									
									
									
								
							| @ -74,19 +74,18 @@ TLS13_ONLY=TRUE | |||||||
| #LR_PORT=35729 | #LR_PORT=35729 | ||||||
| 
 | 
 | ||||||
| # LR_EXTS: | # LR_EXTS: | ||||||
| # Comma-delimited list of extensions to watch for changes and trigger a browser reload. | # Comma-delimited list of extensions to watch for changes and trigger a browser reload. This list *must* be quoted. | ||||||
| # REQUIRED: NO | # REQUIRED: NO | ||||||
| # DEFAULT: "html,xml,css,js,jsx,ts,tsx,php,py" | # DEFAULT: "html,xml,css,js,jsx,ts,tsx,php,py" | ||||||
| # VALID OPTIONS: Any valid file extension(s) | # VALID OPTIONS: Any valid file extension(s) | ||||||
| LR_EXTS="html,xml,css,js,jsx,ts,tsx,php,py" | LR_EXTS="html,xml,css,js,jsx,ts,tsx,php,py" | ||||||
| 
 | 
 | ||||||
| # LR_EXCLUDE: | # LR_EXCLUDE: | ||||||
| # Comma-delimited set of /regular-expressions/ defining what to exclude from monitoring in addition to the defaults. | # Comma-delimited list of files/directories to exclude from monitoring. This list *must* be quoted. | ||||||
| # Upstream node-livereload lists the following as defaults: "/\.git\//,/\.svn\//,/\.hg\//" |  | ||||||
| # REQUIRED: NO | # REQUIRED: NO | ||||||
| # DEFAULT: "/\.vscode\//,/\.idea\//,/\.tmp/,/\.swp/" | # DEFAULT: ".git/,.svn/,.vscode/,.idea/" | ||||||
| # VALID OPTIONS: Any valid RegEx that matches files or directories | # VALID OPTIONS: Any valid files or directories/ | ||||||
| LR_EXCLUDE="/\.vscode\//,/\.idea\//,/\.tmp/,/\.swp/" | LR_EXCLUDE=".git/,.svn/,.vscode/,.idea/" | ||||||
| 
 | 
 | ||||||
| # LR_DELAY: | # LR_DELAY: | ||||||
| # Amount of time in milliseconds before detecting a change and sending a trigger for a browser reload. Useful if you need to allow time for background recompilation, etc. | # Amount of time in milliseconds before detecting a change and sending a trigger for a browser reload. Useful if you need to allow time for background recompilation, etc. | ||||||
|  | |||||||
| @ -45,13 +45,13 @@ ENV LR_DEBUG=true | |||||||
| ENV LR_HTTPS=true | ENV LR_HTTPS=true | ||||||
| ENV CERT_HOSTNAME="" | ENV CERT_HOSTNAME="" | ||||||
| 
 | 
 | ||||||
| # install node-livereload and express as node user then switch back to root user | # install node-livereload as node user then switch back to root user | ||||||
| USER node | USER node | ||||||
| WORKDIR /home/node | WORKDIR /home/node | ||||||
| RUN mkdir -p .npm-global/bin .npm-global/lib \ | RUN mkdir -p .npm-global/bin .npm-global/lib \ | ||||||
|     && npm config set fund false \ |     && npm config set fund false \ | ||||||
|     && npm config set update-notifier false \ |     && npm config set update-notifier false \ | ||||||
|     && npm install livereload express --save |     && npm install livereload --save | ||||||
| 
 | 
 | ||||||
| # copy scripts and fix-up all permissions | # copy scripts and fix-up all permissions | ||||||
| USER root | USER root | ||||||
| @ -63,13 +63,6 @@ RUN chown node:node /home/node/livereload.js \ | |||||||
|     && chmod 755 /usr/local/bin/entrypoint.sh \ |     && chmod 755 /usr/local/bin/entrypoint.sh \ | ||||||
|     && chmod 644 /etc/selfsigned.cnf |     && chmod 644 /etc/selfsigned.cnf | ||||||
| 
 | 
 | ||||||
| HEALTHCHECK \ |  | ||||||
|     --interval=10s \ |  | ||||||
|     --timeout=5s \ |  | ||||||
|     --start-period=60s \ |  | ||||||
|     --retries=3 \ |  | ||||||
|     CMD wget --spider -T 3 -q localhost:3000/api/v1/health || exit 1 |  | ||||||
| 
 |  | ||||||
| # switch to node user, run entrypoint script by default | # switch to node user, run entrypoint script by default | ||||||
| USER node | USER node | ||||||
| WORKDIR /home/node | WORKDIR /home/node | ||||||
|  | |||||||
| @ -22,20 +22,10 @@ certificateGenerateNew() { | |||||||
|     printf "\nGenerating new self-signed certificate:\n" |     printf "\nGenerating new self-signed certificate:\n" | ||||||
|     # shellcheck disable=SC3028 |     # shellcheck disable=SC3028 | ||||||
|     if [ -z "$CERT_HOSTNAME" ]; then export CERT_HOSTNAME="$HOSTNAME"; fi |     if [ -z "$CERT_HOSTNAME" ]; then export CERT_HOSTNAME="$HOSTNAME"; fi | ||||||
|     # create placeholder files to set permissions |  | ||||||
|     touch /certs/fullchain.pem && chmod 644 /certs/fullchain.pem |  | ||||||
|     touch /certs/privkey.pem && chmod 640 /certs/privkey.pem |  | ||||||
|     # generate certificate |  | ||||||
|     if ! openssl req -new -x509 -days 365 -nodes -out /certs/fullchain.pem -keyout /certs/privkey.pem -config /etc/selfsigned.cnf; then |     if ! openssl req -new -x509 -days 365 -nodes -out /certs/fullchain.pem -keyout /certs/privkey.pem -config /etc/selfsigned.cnf; then | ||||||
|         printf "\nUnable to generate certificate. Is your 'certs' directory writable by this container?\n\n" |         printf "\nUnable to generate certificate. Is your 'certs' directory writable by this container?\n\n" | ||||||
|         exit 55 |         exit 55 | ||||||
|     fi |     fi | ||||||
|     cp /certs/fullchain.pem /certs/chain.pem |  | ||||||
|     # generate dh-params for TLS1.2 |  | ||||||
|     if ! openssl dhparam -dsaparam -out /certs/dhparam.pem 4096; then |  | ||||||
|         printf "\nUnable to generate dh-params. Is you 'certs' directory writable by this container?\n\n" |  | ||||||
|         exit 56 |  | ||||||
|     fi |  | ||||||
| 
 | 
 | ||||||
|     # print message to user |     # print message to user | ||||||
|     printf "\n\nA self-signed certificate has been generated and saved in the location mounted to '/certs' in this container.\n" |     printf "\n\nA self-signed certificate has been generated and saved in the location mounted to '/certs' in this container.\n" | ||||||
| @ -109,6 +99,7 @@ if [ "$doServer" -eq 1 ]; then | |||||||
| 
 | 
 | ||||||
|     # https pre-flight check |     # https pre-flight check | ||||||
|     if [ "$enableHTTPS" = "true" ]; then |     if [ "$enableHTTPS" = "true" ]; then | ||||||
|  |         printf "[SSL/TLS mode enabled]\n" | ||||||
|         certStatus="$(certificateCheckExist)" |         certStatus="$(certificateCheckExist)" | ||||||
|         case "$certStatus" in |         case "$certStatus" in | ||||||
|             noexist) |             noexist) | ||||||
| @ -129,6 +120,8 @@ if [ "$doServer" -eq 1 ]; then | |||||||
|                 printf "[Certificate OK]\n" |                 printf "[Certificate OK]\n" | ||||||
|                 ;; |                 ;; | ||||||
|         esac |         esac | ||||||
|  |     else | ||||||
|  |         printf "[HTTP mode enabled]\n" | ||||||
|     fi |     fi | ||||||
|     exec node livereload.js |     exec node livereload.js | ||||||
|     exit "$?" |     exit "$?" | ||||||
| @ -171,7 +164,6 @@ exit 99 | |||||||
| # 52:    unable to read certificate/chain | # 52:    unable to read certificate/chain | ||||||
| # 53:    unable to read private key | # 53:    unable to read private key | ||||||
| # 55:    unable to generate new certificate | # 55:    unable to generate new certificate | ||||||
| # 56:    unable to generate dh-params |  | ||||||
| # 99:  code error | # 99:  code error | ||||||
| 
 | 
 | ||||||
| #EOF | #EOF | ||||||
|  | |||||||
| @ -1,30 +1,7 @@ | |||||||
| // implement node-livereload over an HTTPS connection
 | // implement node-livereload over an HTTPS connection
 | ||||||
| 
 | 
 | ||||||
| // healthcheck function
 |  | ||||||
| function healthcheck() { |  | ||||||
|     const express = require('express'); |  | ||||||
|     const http = require('http'); |  | ||||||
| 
 |  | ||||||
|     const app = express(); |  | ||||||
|     const router = express.Router(); |  | ||||||
| 
 |  | ||||||
|     router.use((req, res, next) =>{ |  | ||||||
|         res.header('Access-Control-Allow-Methods', 'GET'); |  | ||||||
|         next(); |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     router.get('/health', (req, res) =>{ |  | ||||||
|         res.status(200).send('Ok'); |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     app.use('/api/v1', router); |  | ||||||
| 
 |  | ||||||
|     const hServer = http.createServer(app); |  | ||||||
|     hServer.listen(3000); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // load livereload module
 | // load livereload module
 | ||||||
| const livereload = require('livereload'); | let livereload = require('livereload'); | ||||||
| 
 | 
 | ||||||
| // set createServer options
 | // set createServer options
 | ||||||
| const fs = require('fs'); | const fs = require('fs'); | ||||||
| @ -34,28 +11,19 @@ const options = { | |||||||
|     exclusions: process.env.LR_EXCLUDE, |     exclusions: process.env.LR_EXCLUDE, | ||||||
|     usePolling: true, |     usePolling: true, | ||||||
|     delay: process.env.LR_DELAY, |     delay: process.env.LR_DELAY, | ||||||
|  |     debug: process.env.LR_DEBUG | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // set debugging output as per LR_DEBUG
 | if (process.env.LR_HTTPS) { | ||||||
| if (process.env.LR_DEBUG === "true") { |  | ||||||
|     options.debug = true |  | ||||||
|     console.log("[Debug output ENABLED]"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // set HTTPS as per LR_HTTPS
 |  | ||||||
| if (process.env.LR_HTTPS === "true") { |  | ||||||
|     options.https = { |     options.https = { | ||||||
|         cert: fs.readFileSync('/certs/fullchain.pem'), |         cert: fs.readFileSync('/certs/fullchain.pem'), | ||||||
|         key: fs.readFileSync('/certs/privkey.pem') |         key: fs.readFileSync('/certs/privkey.pem') | ||||||
|  | 
 | ||||||
|     }; |     }; | ||||||
|     console.log("[HTTPS mode]"); |  | ||||||
| } |  | ||||||
| else { |  | ||||||
|     console.log("[HTTP mode]"); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // start server
 | // start server
 | ||||||
| const lrServer = livereload.createServer(options, healthcheck); | let server = livereload.createServer(options); | ||||||
| lrServer.watch('/watch') | server.watch('/watch') | ||||||
| 
 | 
 | ||||||
| //#EOF
 | //#EOF
 | ||||||
|  | |||||||
| @ -5,16 +5,29 @@ | |||||||
| version: '2.4' | version: '2.4' | ||||||
| 
 | 
 | ||||||
| services: | services: | ||||||
|  |   ab-nginx: | ||||||
|  |     image: docker.asifbacchus.dev/nginx/ab-nginx:latest | ||||||
|  |     container_name: ab-nginx | ||||||
|  |     volumes: | ||||||
|  |     - ./certs/certs:ro | ||||||
|  |     - ${WATCHDIR}:/usr/share/nginx/html:ro | ||||||
|  |     - ./nginx/config:/etc/nginx/config:ro | ||||||
|  |     ports: | ||||||
|  |     - "${NGINX_HTTP:-80}:80" | ||||||
|  |     - "${NGINX_HTTPS:-443}:443" | ||||||
|  |     environment: | ||||||
|  |       - TZ=${TZ} | ||||||
|  |       - SERVER_NAMES=${SERVER_NAMES} | ||||||
|  |       - TLS13_ONLY=${TLS13_ONLY} | ||||||
|  |     user: "8080:${GID:-8080}" | ||||||
|   livereload: |   livereload: | ||||||
|     image: docker.asifbacchus.dev/livereload/livereload:latest |     image: docker.asifbacchus.dev/livereload/livereload:latest | ||||||
|     container_name: livereload |     container_name: livereload | ||||||
|     volumes: |     volumes: | ||||||
|       - ./certs:certs |     - ./certs:certs | ||||||
|       - ${WATCHDIR}:/watch:ro |     - ${WATCHDIR}:/watch:ro | ||||||
|     networks: |  | ||||||
|       - network |  | ||||||
|     ports: |     ports: | ||||||
|       - "${LR_PORT:-35729}:${LR_PORT:-35729}" |     - "${LR_PORT:-35729}:${LR_PORT:-35729}" | ||||||
|     environment: |     environment: | ||||||
|       - TZ=${TZ} |       - TZ=${TZ} | ||||||
|       - LR_PORT=${LR_PORT} |       - LR_PORT=${LR_PORT} | ||||||
| @ -26,29 +39,5 @@ services: | |||||||
|       - CERT_HOSTNAME=${CERT_HOSTNAME} |       - CERT_HOSTNAME=${CERT_HOSTNAME} | ||||||
|     user: "9999:${GID:-9999}" |     user: "9999:${GID:-9999}" | ||||||
|     command: listen |     command: listen | ||||||
|   ab-nginx: |  | ||||||
|     image: docker.asifbacchus.dev/nginx/ab-nginx:latest |  | ||||||
|     container_name: ab-nginx |  | ||||||
|     depends_on: |  | ||||||
|       livereload: |  | ||||||
|         condition: service_healthy |  | ||||||
|     volumes: |  | ||||||
|       - ./certs/certs:ro |  | ||||||
|       - ${WATCHDIR}:/usr/share/nginx/html:ro |  | ||||||
|       - ./nginx/config:/etc/nginx/config:ro |  | ||||||
|     networks: |  | ||||||
|       - network |  | ||||||
|     ports: |  | ||||||
|       - "${NGINX_HTTP:-80}:80" |  | ||||||
|       - "${NGINX_HTTPS:-443}:443" |  | ||||||
|     environment: |  | ||||||
|       - TZ=${TZ} |  | ||||||
|       - SERVER_NAMES=${SERVER_NAMES} |  | ||||||
|       - TLS13_ONLY=${TLS13_ONLY} |  | ||||||
|     user: "8080:${GID:-8080}" |  | ||||||
| 
 |  | ||||||
| networks: |  | ||||||
|   network: |  | ||||||
|     external: false |  | ||||||
| 
 | 
 | ||||||
| #EOF | #EOF | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user