From f5443b1516acc841af1803c42a35508778a1e830 Mon Sep 17 00:00:00 2001 From: Nathan Sculli Date: Fri, 24 May 2024 16:41:19 -0700 Subject: [PATCH 1/5] WIP: Dockerfile and makefile for nginx container The docker file should be complete, I'm working on the NGINX configuration. So far I've got the UI up and running, but it's not connecting to the API yet. I've figure out that I can use environment variables to configure the API URL, but I'm not sure how to get the location blocks correct in the NGINX configuration. I've copied the proxy configuration from the `vue.config.js` file, but something's still not quite right. --- Dockerfile | 44 ++++++ makefile | 10 ++ nginx/templates/default.conf.template | 206 ++++++++++++++++++++++++++ 3 files changed, 260 insertions(+) create mode 100644 Dockerfile create mode 100644 makefile create mode 100644 nginx/templates/default.conf.template diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000000..177f829808a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,44 @@ +# syntax=docker/dockerfile:1 + +# Stage 1: Build the Rancher UI +FROM node:17-alpine as build-stage + +# Create the app directory +RUN mkdir -p /rancher-ui + +# Set the working directory +WORKDIR /rancher-ui + +# Copy the package.json and yarn.lock files +COPY package.json ./ +COPY yarn.lock ./ + +# Copy the source code +COPY pkg ./pkg +COPY shell ./shell + +# Copy the configuration files +COPY .eslint* ./ +COPY babel.config.js ./ +COPY svgTransform.js ./ +COPY tsconfig.json tsconfig.paths.json ./ +COPY vue-shim.d.ts vue.config.js ./ + +# Install the dependencies +RUN yarn install + +# Build the Rancher UI +# Make sure we use the proper SSL provider +RUN NODE_OPTIONS="--openssl-legacy-provider --max_old_space_size=4096" \ + ./node_modules/.bin/vue-cli-service build --mode production + +# Copy the Nginx configuration +# We do this last to avoid invalidating the cache +COPY nginx ./nginx + +# Stage 2: Serve the Rancher UI +FROM nginx:alpine + +# Copy the Rancher UI build +COPY --from=build-stage /rancher-ui/nginx/templates/* /etc/nginx/templates/ +COPY --from=build-stage /rancher-ui/dist /usr/share/nginx/html diff --git a/makefile b/makefile new file mode 100644 index 00000000000..05425182ccc --- /dev/null +++ b/makefile @@ -0,0 +1,10 @@ + +build: + docker buildx build -t rancher-nginx . + +run: build + docker run --name=rancher_nginx -e RANCHER_API=$(API) -d -p 8080:80 rancher-nginx + +stop: + docker stop rancher_nginx + docker rm rancher_nginx diff --git a/nginx/templates/default.conf.template b/nginx/templates/default.conf.template new file mode 100644 index 00000000000..a28049382be --- /dev/null +++ b/nginx/templates/default.conf.template @@ -0,0 +1,206 @@ +upstream api { + server ${RANCHER_API}; +} + +upstream ember { + server ${RANCHER_API}; + # server http://127.0.0.1:8000; +} + +server { + listen 80; + listen [::]:80; + server_name localhost; + + #access_log /var/log/nginx/host.access.log main; + + location /k8s/ { + proxy_pass https://api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /pp/ { + proxy_pass https://api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /api/ { + proxy_pass https://api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /apis/ { + proxy_pass https://api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /v1/ { + proxy_pass https://api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /v3/ { + proxy_pass https://api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /v3-public/ { + proxy_pass https://api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /api-ui/ { + proxy_pass https://api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /meta/ { + proxy_pass https://api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location ~* ^/v1- { + proxy_pass https://api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /rancherversion { + proxy_pass https://api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /c/.*/edit { + proxy_pass https://ember; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /k/ { + proxy_pass https://ember; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /g/ { + proxy_pass https://ember; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /n/ { + proxy_pass https://ember; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /p/ { + proxy_pass https://ember; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /assets { + proxy_pass https://ember; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /translations { + proxy_pass https://ember; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /engines-dist { + proxy_pass https://ember; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location / { + root /usr/share/nginx/html; + index index.html; + try_files $uri $uri/ /index.html; + } + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 + # + #location ~ \.php$ { + # proxy_pass http://127.0.0.1; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + #location ~ \.php$ { + # root html; + # fastcgi_pass 127.0.0.1:9000; + # fastcgi_index index.php; + # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; + # include fastcgi_params; + #} + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} +} From 00e2dfeefc1116f50a4c05f8d1808ec8d5cfb8aa Mon Sep 17 00:00:00 2001 From: Nathan Sculli Date: Sun, 26 May 2024 14:14:23 -0700 Subject: [PATCH 2/5] FIX: Combine multiple location blcocks into one --- nginx/templates/default.conf.template | 126 +------------------------- 1 file changed, 3 insertions(+), 123 deletions(-) diff --git a/nginx/templates/default.conf.template b/nginx/templates/default.conf.template index a28049382be..ab90152c377 100644 --- a/nginx/templates/default.conf.template +++ b/nginx/templates/default.conf.template @@ -12,73 +12,9 @@ server { listen [::]:80; server_name localhost; - #access_log /var/log/nginx/host.access.log main; + access_log /var/log/nginx/host.access.log main; - location /k8s/ { - proxy_pass https://api; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /pp/ { - proxy_pass https://api; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /api/ { - proxy_pass https://api; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /apis/ { - proxy_pass https://api; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /v1/ { - proxy_pass https://api; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /v3/ { - proxy_pass https://api; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /v3-public/ { - proxy_pass https://api; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /api-ui/ { - proxy_pass https://api; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /meta/ { + location ~ ^/k8s/|/pp/|/api/|/apis/|/v1/|/v3/|/v3-public/|/api-ui|/meta/|/rancherversion { proxy_pass https://api; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; @@ -94,14 +30,6 @@ server { proxy_set_header X-Forwarded-Proto $scheme; } - location /rancherversion { - proxy_pass https://api; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - location /c/.*/edit { proxy_pass https://ember; proxy_set_header Host $host; @@ -110,55 +38,7 @@ server { proxy_set_header X-Forwarded-Proto $scheme; } - location /k/ { - proxy_pass https://ember; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /g/ { - proxy_pass https://ember; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /n/ { - proxy_pass https://ember; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /p/ { - proxy_pass https://ember; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /assets { - proxy_pass https://ember; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /translations { - proxy_pass https://ember; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /engines-dist { + location ~ ^/k/|/g/|/n/|/p/|/assets|/translations|/engines-dist { proxy_pass https://ember; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; From 315eab9a681656539d116c8e7a7c753a374fe35f Mon Sep 17 00:00:00 2001 From: Nathan Sculli Date: Sun, 26 May 2024 15:36:50 -0700 Subject: [PATCH 3/5] FIX: Add some testing commands --- makefile | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/makefile b/makefile index 05425182ccc..b905c0830fb 100644 --- a/makefile +++ b/makefile @@ -1,3 +1,4 @@ +TEST_RANCHER_INSTANCE=rancher.18.236.138.233.sslip.io build: docker buildx build -t rancher-nginx . @@ -5,6 +6,14 @@ build: run: build docker run --name=rancher_nginx -e RANCHER_API=$(API) -d -p 8080:80 rancher-nginx +local-test: stop + docker run --name=rancher_nginx -e RANCHER_API=$(TEST_RANCHER_INSTANCE) -d -p 8080:80 rancher-nginx + sleep 2 + docker ps + +show-nginx-config: + docker exec -it rancher_nginx nginx -T + stop: docker stop rancher_nginx docker rm rancher_nginx From 5dbf1bae2edb770a4724d0ebf388fb58ddc1669b Mon Sep 17 00:00:00 2001 From: Nathan Sculli Date: Sun, 26 May 2024 15:37:01 -0700 Subject: [PATCH 4/5] FIX: Add some testing things to the nginx config file --- nginx/templates/default.conf.template | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/nginx/templates/default.conf.template b/nginx/templates/default.conf.template index ab90152c377..c0fd0c138c3 100644 --- a/nginx/templates/default.conf.template +++ b/nginx/templates/default.conf.template @@ -14,12 +14,15 @@ server { access_log /var/log/nginx/host.access.log main; - location ~ ^/k8s/|/pp/|/api/|/apis/|/v1/|/v3/|/v3-public/|/api-ui|/meta/|/rancherversion { - proxy_pass https://api; + location ~ ^/k8s/|/pp/|/api/|/apis/|/v1/|/v3/|/v3-public/|/api-ui|/meta/|/rancherversion|/healthz { + proxy_pass https://api/$request_uri; + # proxy_pass https://rancher.18.236.138.233.sslip.io/$request_uri; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; + + add_header x-response-header 'this-is-a-test'; } location ~* ^/v1- { From 0d4ff4a91d4be88da05b29cad20d063d4c2650d8 Mon Sep 17 00:00:00 2001 From: Nathan Sculli Date: Tue, 28 May 2024 11:24:23 -0700 Subject: [PATCH 5/5] Add custom logging format to get additional debugging information --- nginx/templates/default.conf.template | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nginx/templates/default.conf.template b/nginx/templates/default.conf.template index c0fd0c138c3..318aaded594 100644 --- a/nginx/templates/default.conf.template +++ b/nginx/templates/default.conf.template @@ -7,12 +7,17 @@ upstream ember { # server http://127.0.0.1:8000; } +log_format custom '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$request_uri"'; + server { listen 80; listen [::]:80; server_name localhost; - access_log /var/log/nginx/host.access.log main; + # access_log /var/log/nginx/host.access.log main; + access_log /var/log/nginx/host.access.log custom; location ~ ^/k8s/|/pp/|/api/|/apis/|/v1/|/v3/|/v3-public/|/api-ui|/meta/|/rancherversion|/healthz { proxy_pass https://api/$request_uri;