diff --git a/Dockerfile b/Dockerfile index 33c15197850d80fabed2f19bbe6f119c02ef04ad..524d9635f9642d31955461fc29b8b78d4d637caa 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 970305b14ddae7bb3304313522a93b163267acac..ab4680d8b543093fb272a1dab2d32d51622bcda7 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 bda8d2c0393ac0f60939d9821aec9e458bb92101..9704ec68aef7f4345b0c4d40ac04d8d9ae7d8f75 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 0000000000000000000000000000000000000000..ac4dbb72ba67e95e40954b077bade92cf3a0a9ad --- /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 0000000000000000000000000000000000000000..1628523ff3c6c54defa13429b04aed89a83bf3e5 --- /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