From 79d82d2f5bd01527da0ea19058ccbd934f675177 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=ED=95=9C=EB=8F=99=ED=98=84?= <hando1220@ajou.ac.kr>
Date: Sat, 15 Mar 2025 00:04:55 +0900
Subject: [PATCH] =?UTF-8?q?feat:=20Nginx=20API=20=EC=97=94=EB=93=9C?=
 =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=B6=94=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Dockerfile                         |  4 ++++
 rootfs/docker-entrypoint.sh        |  4 +++-
 rootfs/etc/nginx/nginx.conf        | 19 +++++++++++++++++++
 rootfs/usr/lib/nginx-api/reload.sh | 15 +++++++++++++++
 rootfs/usr/lib/nginx-api/test.sh   | 15 +++++++++++++++
 5 files changed, 56 insertions(+), 1 deletion(-)
 create mode 100644 rootfs/usr/lib/nginx-api/reload.sh
 create mode 100644 rootfs/usr/lib/nginx-api/test.sh

diff --git a/Dockerfile b/Dockerfile
index 33c1519..524d963 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -14,6 +14,8 @@ RUN pnpm run build
 
 FROM nginx:stable-alpine
 
+RUN apk add --no-cache fcgiwrap spawn-fcgi
+
 COPY rootfs/ /
 COPY --from=build /app/dist /app/frontend
 
@@ -25,6 +27,8 @@ ENV PUID=${PUID}
 ENV PGID=${PGID}
 
 RUN chmod +x /docker-entrypoint.sh
+RUN chmod +x /usr/lib/nginx-api/reload.sh
+RUN chmod +x /usr/lib/nginx-api/test.sh
 
 EXPOSE 80 81 443
 
diff --git a/rootfs/docker-entrypoint.sh b/rootfs/docker-entrypoint.sh
index 970305b..ab4680d 100644
--- a/rootfs/docker-entrypoint.sh
+++ b/rootfs/docker-entrypoint.sh
@@ -4,6 +4,7 @@ set -e
 # Create necessary directories
 mkdir -p /data/custom_ssl /data/logs /data/access /data/nginx /data/letsencrypt-acme-challenge /data/nginx/default_host /data/nginx/default_www /data/nginx/proxy_host /data/nginx/redirection_host /data/nginx/stream /data/nginx/dead_host /data/nginx/temp
 mkdir -p /etc/letsencrypt /run/nginx /tmp/nginx/body /var/log/nginx /var/lib/nginx/cache/public /var/lib/nginx/cache/private /var/cache/nginx/proxy_temp
+mkdir -p /var/run
 
 # Set proper permissions
 chown -R ${PUID:-1000}:${PGID:-1000} /data
@@ -13,6 +14,7 @@ chown -R ${PUID:-1000}:${PGID:-1000} /tmp/nginx
 chown -R ${PUID:-1000}:${PGID:-1000} /var/cache/nginx
 chown -R ${PUID:-1000}:${PGID:-1000} /var/lib/nginx
 chown -R ${PUID:-1000}:${PGID:-1000} /var/log/nginx
+chown -R ${PUID:-1000}:${PGID:-1000} /var/run
 
-# Execute the main command
+spawn-fcgi -s /var/run/fcgiwrap.socket -M 766 /usr/bin/fcgiwrap &
 exec "$@"
diff --git a/rootfs/etc/nginx/nginx.conf b/rootfs/etc/nginx/nginx.conf
index bda8d2c..9704ec6 100644
--- a/rootfs/etc/nginx/nginx.conf
+++ b/rootfs/etc/nginx/nginx.conf
@@ -48,6 +48,25 @@ http {
 		default http;
 	}
 
+	# Nginx api endpoints
+	server {
+		listen 8081;
+		listen [::]:8081;
+		server_name nginx-api;
+
+		location /nginx-api/reload {
+			include /etc/nginx/fastcgi_params;
+			fastcgi_pass unix:/var/run/fcgiwrap.socket;
+			fastcgi_param SCRIPT_FILENAME /usr/lib/nginx-api/reload.sh;
+		}
+
+		location /nginx-api/test {
+			include /etc/nginx/fastcgi_params;
+			fastcgi_pass unix:/var/run/fcgiwrap.socket;
+			fastcgi_param SCRIPT_FILENAME /usr/lib/nginx-api/test.sh;
+		}
+	}
+
 	# Files generated by Proxy Manager
 	include /etc/nginx/conf.d/*.conf;
 	include /data/nginx/proxy_host/*.conf;
diff --git a/rootfs/usr/lib/nginx-api/reload.sh b/rootfs/usr/lib/nginx-api/reload.sh
new file mode 100644
index 0000000..ac4dbb7
--- /dev/null
+++ b/rootfs/usr/lib/nginx-api/reload.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+output=$(nginx -s reload 2>&1)
+status=$?
+
+if [ $status -eq 0 ]; then
+  echo "Status: 200 OK"
+  echo "Content-Type: text/plain"
+  echo ""
+  echo "$output"
+else
+  echo "Status: 500 Internal Server Error"
+  echo "Content-Type: text/plain"
+  echo ""
+  echo "$output"
+fi
\ No newline at end of file
diff --git a/rootfs/usr/lib/nginx-api/test.sh b/rootfs/usr/lib/nginx-api/test.sh
new file mode 100644
index 0000000..1628523
--- /dev/null
+++ b/rootfs/usr/lib/nginx-api/test.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+output=$(nginx -t 2>&1)
+status=$?
+
+if [ $status -eq 0 ]; then
+  echo "Status: 200 OK"
+  echo "Content-Type: text/plain"
+  echo ""
+  echo "$output"
+else
+  echo "Status: 500 Internal Server Error"
+  echo "Content-Type: text/plain"
+  echo ""
+  echo "$output"
+fi
\ No newline at end of file
-- 
GitLab