From dc49829d19c8dded34f9389cd031b04b4ef5e840 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 4 Mar 2025 14:59:43 +0100 Subject: [PATCH 1/8] initial commit --- .gitignore | 1 + dockerized/nextcloud-aio/compose.yaml | 34 ++++++ dockerized/nextcloud-aio/docker_run.sh | 16 +++ dockerized/simple_site/Dockerfile | 14 +++ dockerized/simple_site/README.md | 4 + dockerized/simple_site/docker-compose.yaml | 25 +++++ dockerized/simple_site/index.html | 114 +++++++++++++++++++++ dockerized/simple_site/package.json | 16 +++ dockerized/simple_site/server.js | 18 ++++ 9 files changed, 242 insertions(+) create mode 100644 .gitignore create mode 100644 dockerized/nextcloud-aio/compose.yaml create mode 100644 dockerized/nextcloud-aio/docker_run.sh create mode 100644 dockerized/simple_site/Dockerfile create mode 100644 dockerized/simple_site/README.md create mode 100644 dockerized/simple_site/docker-compose.yaml create mode 100644 dockerized/simple_site/index.html create mode 100644 dockerized/simple_site/package.json create mode 100644 dockerized/simple_site/server.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..496ee2c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file diff --git a/dockerized/nextcloud-aio/compose.yaml b/dockerized/nextcloud-aio/compose.yaml new file mode 100644 index 0000000..a6b1454 --- /dev/null +++ b/dockerized/nextcloud-aio/compose.yaml @@ -0,0 +1,34 @@ +version: "3.8" + +#Imported from https://github.com/nextcloud/all-in-one/discussions/575#discussion-4055615 + +services: + caddy: + image: caddy:alpine + restart: unless-stopped + container_name: caddy + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile + - ./certs:/certs + - ./config:/config + - ./data:/data + - ./sites:/srv + network_mode: "host" + + nextcloud: + image: nextcloud/all-in-one:latest + restart: unless-stopped + container_name: nextcloud-aio-mastercontainer + ports: + - "8080:8080" + environment: + - APACHE_PORT=11000 + volumes: + - nextcloud_aio_mastercontainer:/mnt/docker-aio-config + - /var/run/docker.sock:/var/run/docker.sock:ro + depends_on: + - caddy + +volumes: + nextcloud_aio_mastercontainer: + name: nextcloud_aio_mastercontainer \ No newline at end of file diff --git a/dockerized/nextcloud-aio/docker_run.sh b/dockerized/nextcloud-aio/docker_run.sh new file mode 100644 index 0000000..4f3e352 --- /dev/null +++ b/dockerized/nextcloud-aio/docker_run.sh @@ -0,0 +1,16 @@ +#! /usr/bin/bash +echo "Installing denpendency packages..." + +docker run \ +--init \ +--sig-proxy=false \ +--name nextcloud-aio-mastercontainer \ +--restart always \ +--publish 8080:8080 \ +--env APACHE_PORT=11000 \ +--env APACHE_IP_BINDING=0.0.0.0 \ +--env APACHE_ADDITIONAL_NETWORK="" \ +--env SKIP_DOMAIN_VALIDATION=false \ +--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \ +--volume /var/run/docker.sock:/var/run/docker.sock:ro \ +nextcloud/all-in-one:latest \ No newline at end of file diff --git a/dockerized/simple_site/Dockerfile b/dockerized/simple_site/Dockerfile new file mode 100644 index 0000000..5c5d2e3 --- /dev/null +++ b/dockerized/simple_site/Dockerfile @@ -0,0 +1,14 @@ +FROM node:14 + +WORKDIR /app + +COPY server.js . +COPY index.html . +#COPY images ./images +COPY package.json . + +RUN npm install + +EXPOSE 3000 + +CMD ["node","server.js"] \ No newline at end of file diff --git a/dockerized/simple_site/README.md b/dockerized/simple_site/README.md new file mode 100644 index 0000000..d7ff83c --- /dev/null +++ b/dockerized/simple_site/README.md @@ -0,0 +1,4 @@ +Simple Site +=========== + +Simple dockerized application using Node.js behind NGINX in order to securely serve a static webapp \ No newline at end of file diff --git a/dockerized/simple_site/docker-compose.yaml b/dockerized/simple_site/docker-compose.yaml new file mode 100644 index 0000000..d6faef0 --- /dev/null +++ b/dockerized/simple_site/docker-compose.yaml @@ -0,0 +1,25 @@ +version: '3' +services: + +# 3 versions of the same app responding to host's 3001-3 + app1: + build: . + environment: + - APP_NAME=App1 + ports: + - "3001:3000" + + app2: + build: . + environment: + - APP_NAME=App2 + ports: + - "3002:3000" + + app3: + build: . + environment: + - APP_NAME=App3 + ports: + - "3003:3000" + diff --git a/dockerized/simple_site/index.html b/dockerized/simple_site/index.html new file mode 100644 index 0000000..73e9c52 --- /dev/null +++ b/dockerized/simple_site/index.html @@ -0,0 +1,114 @@ + + + + + + + Beautiful Landing Page + + + + +
+
+ +
+

TechWorld with Nana Programs

+
+
+ Service 1 +

DevOps Bootcamp

+

Finally learn with structured guided course, all DevOps tools together

+
+
+ Service 2 +

Software Development LifeCycle Course

+

Learn the entire software Development lifecycle, from developing, to testing, to provisioning server and deploying

+
+
+ Service 3 +

DevSecOps Bootcamp

+

If you wanna become a DevOps engineer on steroids, you can face this advanced bootcamp

+
+
+
+ + + + diff --git a/dockerized/simple_site/package.json b/dockerized/simple_site/package.json new file mode 100644 index 0000000..b3f2d9c --- /dev/null +++ b/dockerized/simple_site/package.json @@ -0,0 +1,16 @@ +{ + "name": "simple_site", + "version": "1.0.0", + "description": "A Node.js application serving a static HTML file, used for load balancing with NGINX.", + "main": "server.js", + "scripts": { + "start": "node server.js" + }, + "author": "Fabio Sinibaldi", + "license": "MIT", + "dependencies": { + "express": "^4.17.1", + "path": "^0.12.7" + } + } + \ No newline at end of file diff --git a/dockerized/simple_site/server.js b/dockerized/simple_site/server.js new file mode 100644 index 0000000..57780e7 --- /dev/null +++ b/dockerized/simple_site/server.js @@ -0,0 +1,18 @@ +const express = require('express'); +const path = require('path'); +const app = express(); +const port = 3000; + +// Defined in compose file +const appName = process.env.APP_NAME + +app.use('/images', express.static(path.join(__dirname, 'images'))); + +app.use('/', (req, res) => { + res.sendFile(path.join(__dirname, 'index.html')); + console.log(`Request served by ${appName}`); +}); + +app.listen(port, () => { + console.log(`${appName} is listening on port ${port}`); +}); From 8f614c61f7a96b1f11326d30f8d3fb3201bf9667 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 4 Mar 2025 15:58:16 +0100 Subject: [PATCH 2/8] Added Nginx proxy --- dockerized/simple_site/docker-compose.yaml | 36 +++++++++++++ dockerized/simple_site/nginx/config.conf | 59 ++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 dockerized/simple_site/nginx/config.conf diff --git a/dockerized/simple_site/docker-compose.yaml b/dockerized/simple_site/docker-compose.yaml index d6faef0..f2587e8 100644 --- a/dockerized/simple_site/docker-compose.yaml +++ b/dockerized/simple_site/docker-compose.yaml @@ -1,4 +1,9 @@ version: '3' + +networks: + cluster: + external: false + services: # 3 versions of the same app responding to host's 3001-3 @@ -8,6 +13,8 @@ services: - APP_NAME=App1 ports: - "3001:3000" + networks: + - cluster app2: build: . @@ -15,6 +22,8 @@ services: - APP_NAME=App2 ports: - "3002:3000" + networks: + - cluster app3: build: . @@ -22,4 +31,31 @@ services: - APP_NAME=App3 ports: - "3003:3000" + networks: + - cluster + + # --- NGINX --- + nginx: + image: nginx:latest + ports: + - '8088:80' + deploy: + replicas: 4 + update_config: + parallelism: 2 + order: start-first + failure_action: rollback + delay: 10s + rollback_config: + parallelism: 0 + order: stop-first + restart_policy: + condition: any + delay: 5s + max_attempts: 3 + window: 120s + healthcheck: + test: ["CMD", "service", "nginx", "status"] + networks: + - cluster diff --git a/dockerized/simple_site/nginx/config.conf b/dockerized/simple_site/nginx/config.conf new file mode 100644 index 0000000..54650a3 --- /dev/null +++ b/dockerized/simple_site/nginx/config.conf @@ -0,0 +1,59 @@ +# Main context (this is the global configuration) +worker_processes 4; + +events { + worker_connections 1024; +} + +http { + include mime.types; + + # Upstream block to define the Node.js backend servers + # Servers name come from compose definition + + upstream nodejs_cluster { + server app1:3001; + server app2:3002; + server app3:3003; + } + + + #TODO manage certs + # server { + # listen 443 ssl; # Listen on port 443 for HTTPS + # server_name localhost; + + # # SSL certificate settings + # ssl_certificate /Users/nana/nginx-certs/nginx-selfsigned.crt; + # ssl_certificate_key /Users/nana/nginx-certs/nginx-selfsigned.key; + + # # Proxying requests to Node.js cluster + # location / { + # proxy_pass http://nodejs_cluster; + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # } + # } + + # Optional server block for HTTP to HTTPS redirection + server { + listen 80; # Listen on port 80 for HTTP + server_name localhost; + + + location / { + # Redirect all HTTP traffic to HTTPS + # TODO requires https + # return 301 https://$host$request_uri; + + proxy_pass http://nodejs_cluster; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + } +} From ddbc6a11f28547feb4eab8d8c1759eca5647f628 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 4 Mar 2025 16:03:23 +0100 Subject: [PATCH 3/8] Linked configuration --- dockerized/simple_site/docker-compose.yaml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dockerized/simple_site/docker-compose.yaml b/dockerized/simple_site/docker-compose.yaml index f2587e8..dd4401a 100644 --- a/dockerized/simple_site/docker-compose.yaml +++ b/dockerized/simple_site/docker-compose.yaml @@ -2,7 +2,7 @@ version: '3' networks: cluster: - external: false + driver: bridge services: @@ -39,7 +39,9 @@ services: nginx: image: nginx:latest ports: - - '8088:80' + - '80:80' + volumes: + - ./nginx/config.con:/etc/nginx/nginx.con:ro deploy: replicas: 4 update_config: @@ -57,5 +59,8 @@ services: window: 120s healthcheck: test: ["CMD", "service", "nginx", "status"] + + + networks: - cluster From 79c51f2228b7c6b5b134cc9110995289b74496b4 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 4 Mar 2025 17:17:46 +0100 Subject: [PATCH 4/8] Simplified nginx service config for single node --- dockerized/simple_site/docker-compose.yaml | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/dockerized/simple_site/docker-compose.yaml b/dockerized/simple_site/docker-compose.yaml index dd4401a..15fffcd 100644 --- a/dockerized/simple_site/docker-compose.yaml +++ b/dockerized/simple_site/docker-compose.yaml @@ -39,28 +39,10 @@ services: nginx: image: nginx:latest ports: - - '80:80' + - '8081:80' volumes: - - ./nginx/config.con:/etc/nginx/nginx.con:ro - deploy: - replicas: 4 - update_config: - parallelism: 2 - order: start-first - failure_action: rollback - delay: 10s - rollback_config: - parallelism: 0 - order: stop-first - restart_policy: - condition: any - delay: 5s - max_attempts: 3 - window: 120s + - ./nginx/config.conf:/etc/nginx/nginx.conf:ro healthcheck: test: ["CMD", "service", "nginx", "status"] - - - networks: - cluster From 29b937c094da4ea55f857302ce78853c2cc7fb98 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 4 Mar 2025 17:55:56 +0100 Subject: [PATCH 5/8] server_name --- dockerized/simple_site/nginx/config.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dockerized/simple_site/nginx/config.conf b/dockerized/simple_site/nginx/config.conf index 54650a3..92ccce2 100644 --- a/dockerized/simple_site/nginx/config.conf +++ b/dockerized/simple_site/nginx/config.conf @@ -12,9 +12,9 @@ http { # Servers name come from compose definition upstream nodejs_cluster { - server app1:3001; - server app2:3002; - server app3:3003; + server app1:3000; + server app2:3000; + server app3:3000; } @@ -38,7 +38,7 @@ http { # Optional server block for HTTP to HTTPS redirection server { listen 80; # Listen on port 80 for HTTP - server_name localhost; + server_name *.sselab.ddns.net; location / { From 3835ef0cbcc1ff2a1c99c09a3c7639080ca189ac Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 4 Mar 2025 17:56:43 +0100 Subject: [PATCH 6/8] Removed published port for internal apps --- dockerized/simple_site/docker-compose.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dockerized/simple_site/docker-compose.yaml b/dockerized/simple_site/docker-compose.yaml index 15fffcd..8b0c43d 100644 --- a/dockerized/simple_site/docker-compose.yaml +++ b/dockerized/simple_site/docker-compose.yaml @@ -12,7 +12,7 @@ services: environment: - APP_NAME=App1 ports: - - "3001:3000" + - ":3000" networks: - cluster @@ -21,7 +21,7 @@ services: environment: - APP_NAME=App2 ports: - - "3002:3000" + - ":3000" networks: - cluster @@ -30,7 +30,7 @@ services: environment: - APP_NAME=App3 ports: - - "3003:3000" + - ":3000" networks: - cluster From 2d33675b7afde45123e4d19e928595f5faa6dd3d Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 4 Mar 2025 18:21:53 +0100 Subject: [PATCH 7/8] Fixed port declarations --- dockerized/simple_site/docker-compose.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dockerized/simple_site/docker-compose.yaml b/dockerized/simple_site/docker-compose.yaml index 8b0c43d..d674ab3 100644 --- a/dockerized/simple_site/docker-compose.yaml +++ b/dockerized/simple_site/docker-compose.yaml @@ -12,7 +12,7 @@ services: environment: - APP_NAME=App1 ports: - - ":3000" + - "3000" networks: - cluster @@ -21,7 +21,7 @@ services: environment: - APP_NAME=App2 ports: - - ":3000" + - "3000" networks: - cluster @@ -30,7 +30,7 @@ services: environment: - APP_NAME=App3 ports: - - ":3000" + - "3000" networks: - cluster From 1487f7620168f01d0b839c71bd4176cbebb091d7 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 4 Mar 2025 18:28:37 +0100 Subject: [PATCH 8/8] Updated info --- dockerized/simple_site/README.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/dockerized/simple_site/README.md b/dockerized/simple_site/README.md index d7ff83c..8e74383 100644 --- a/dockerized/simple_site/README.md +++ b/dockerized/simple_site/README.md @@ -1,4 +1,16 @@ -Simple Site -=========== +### Simple Site +Simple dockerized application using Node.js behind NGINX in order to securely serve a static webapp -Simple dockerized application using Node.js behind NGINX in order to securely serve a static webapp \ No newline at end of file +**NB: compose uses build, thus is not suitable for swarm** + +#### Details + +Dockerized app : + Node.js + application server.js (listens to 3000) + serves index.html + depending from packages + +Compose : + Defined 3 services from Dockerized app + Configured NGINX (listens to 8081) to proxy