mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-08-02 15:33:32 +00:00
4
.github/workflows/docker-latest.yml
vendored
4
.github/workflows/docker-latest.yml
vendored
@@ -33,5 +33,5 @@ jobs:
|
|||||||
|
|
||||||
- name: Show Nginx version
|
- name: Show Nginx version
|
||||||
run: |
|
run: |
|
||||||
docker run --rm --entrypoint nginx ${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:latest -V
|
docker run --rm --entrypoint sh ${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:latest -c "nginx -V && php81 -v && php82 -v && php-fpm81 -v && php-fpm82 -v"
|
||||||
docker run --rm --entrypoint nginx ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:latest -V
|
docker run --rm --entrypoint sh ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:latest -c "nginx -V && php81 -v && php82 -v && php-fpm81 -v && php-fpm82 -v"
|
||||||
|
115
.github/workflows/docker.yml
vendored
115
.github/workflows/docker.yml
vendored
@@ -1,32 +1,60 @@
|
|||||||
name: Build Docker Image
|
name: Build Docker Image
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows: ["Build frontend"]
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- develop
|
- develop
|
||||||
paths:
|
paths:
|
||||||
- .github/workflows/docker.yml
|
- .github/workflows/docker.yml
|
||||||
- Dockerfile
|
- Dockerfile
|
||||||
- frontend/**
|
|
||||||
- backend/**
|
- backend/**
|
||||||
- global/**
|
|
||||||
- rootfs/**
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- .github/workflows/docker.yml
|
|
||||||
- Dockerfile
|
|
||||||
- frontend/**
|
|
||||||
- backend/**
|
|
||||||
- global/**
|
|
||||||
- rootfs/**
|
- rootfs/**
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
backend-test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18
|
||||||
|
|
||||||
|
- name: Test Backend
|
||||||
|
run: |
|
||||||
|
sudo npm install --global cross-env
|
||||||
|
sudo pip install certbot
|
||||||
|
sudo mkdir -p /usr/local/nginx/conf/conf.d/include /tmp/letsencrypt-acme-challenge
|
||||||
|
sudo touch /usr/local/nginx/conf/conf.d/include/ip_ranges.conf
|
||||||
|
sudo cp rootfs/usr/local/nginx/conf/letsencrypt.ini /usr/local/nginx/conf/letsencrypt.ini
|
||||||
|
mv global backend
|
||||||
|
cd backend
|
||||||
|
npm install --force
|
||||||
|
sudo nginx
|
||||||
|
cross-env NODE_ENV=production sudo -E timeout 30 node --abort_on_uncaught_exception --max_old_space_size=250 index.js || if [ "$?" == "124" ]; then exit 0; else exit 1; fi
|
||||||
|
|
||||||
|
- name: Kill workflow
|
||||||
|
if: failure()
|
||||||
|
run: |
|
||||||
|
curl -X POST https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/cancel --header "authorization: Bearer ${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Load frontend from cache
|
||||||
|
uses: actions/cache/restore@v3
|
||||||
|
with:
|
||||||
|
path: frontend/dist
|
||||||
|
key: frontend
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v2
|
uses: docker/setup-qemu-action@v2
|
||||||
@@ -40,7 +68,6 @@ jobs:
|
|||||||
driver-opts: env.BUILDKIT_STEP_LOG_MAX_SIZE=-1
|
driver-opts: env.BUILDKIT_STEP_LOG_MAX_SIZE=-1
|
||||||
|
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
if: ${{ github.event_name != 'pull_request' }}
|
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v2
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
@@ -52,44 +79,9 @@ jobs:
|
|||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ github.token }}
|
password: ${{ github.token }}
|
||||||
|
|
||||||
- name: Read .version file
|
|
||||||
id: version
|
|
||||||
run: echo "version=$(cat .version)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Set versions
|
|
||||||
run: |
|
|
||||||
sed -i 's/"0.0.0"/"${{ steps.version.outputs.version }}"/g' frontend/package.json
|
|
||||||
cat frontend/package.json | grep "${{ steps.version.outputs.version }}"
|
|
||||||
sed -i 's/"0.0.0"/"${{ steps.version.outputs.version }}"/g' backend/package.json
|
|
||||||
cat backend/package.json | grep "${{ steps.version.outputs.version }}"
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 18
|
|
||||||
|
|
||||||
- name: Prepair frontend
|
|
||||||
run: |
|
|
||||||
export NODE_OPTIONS=--openssl-legacy-provider
|
|
||||||
npm install --global yarn
|
|
||||||
cd frontend
|
|
||||||
yarn install
|
|
||||||
yarn build
|
|
||||||
|
|
||||||
- name: Test Backend
|
|
||||||
run: |
|
|
||||||
export NODE_OPTIONS=--openssl-legacy-provider
|
|
||||||
export DB_SQLITE_FILE=/home/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }}/backend-test/dev.sqlite
|
|
||||||
export NODE_ENV=dev
|
|
||||||
mv global backend
|
|
||||||
cp -r backend backend-test
|
|
||||||
cd backend-test
|
|
||||||
npm install --force
|
|
||||||
timeout 10 node --abort_on_uncaught_exception --max_old_space_size=250 index.js || if [ "$?" == "124" ]; then exit 0; else exit 1; fi
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v3
|
||||||
if: ${{ github.event_name != 'pull_request' }}
|
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
@@ -100,33 +92,6 @@ jobs:
|
|||||||
${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ github.ref_name }}
|
${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ github.ref_name }}
|
||||||
|
|
||||||
- name: show version
|
- name: show version
|
||||||
if: ${{ github.ref == 'refs/heads/develop' }}
|
|
||||||
run: |
|
run: |
|
||||||
docker run --rm --entrypoint nginx ${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ github.ref_name }} -V
|
docker run --rm --entrypoint sh ${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ github.ref_name }} -c "nginx -V && php81 -v && php82 -v && php-fpm81 -v && php-fpm82 -v"
|
||||||
docker run --rm --entrypoint nginx ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ github.ref_name }} -V
|
docker run --rm --entrypoint sh ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ github.ref_name }} -c "nginx -V && php81 -v && php82 -v && php-fpm81 -v && php-fpm82 -v"
|
||||||
|
|
||||||
- name: Set PR-Number (PR)
|
|
||||||
if: ${{ github.event_name == 'pull_request' }}
|
|
||||||
id: pr
|
|
||||||
run: echo "pr=$(echo pr-${{ github.ref_name }} | sed "s/refs\/pull\/://g" | sed "s/\/merge//g")" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Build (PR)
|
|
||||||
uses: docker/build-push-action@v3
|
|
||||||
if: ${{ github.event_name == 'pull_request' }}
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: ./Dockerfile
|
|
||||||
platforms: linux/amd64,linux/arm64 #,linux/amd64/v2,linux/amd64/v3,linux/amd64/v4 #,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
|
|
||||||
push: ${{ github.event_name == 'pull_request' }}
|
|
||||||
tags: ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ steps.pr.outputs.pr }}
|
|
||||||
|
|
||||||
- name: show version (PR)
|
|
||||||
if: ${{ github.event_name == 'pull_request' }}
|
|
||||||
run: docker run --rm --entrypoint nginx ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ steps.pr.outputs.pr }} -V
|
|
||||||
|
|
||||||
- name: add comment (PR)
|
|
||||||
uses: mshick/add-pr-comment@v2
|
|
||||||
if: ${{ github.event_name == 'pull_request' }}
|
|
||||||
with:
|
|
||||||
message: "The Docker Image can now be found here: `ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ steps.pr.outputs.pr }}`"
|
|
||||||
repo-token: ${{ github.token }}
|
|
||||||
|
38
.github/workflows/frontend.yml
vendored
Normal file
38
.github/workflows/frontend.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
name: Build frontend
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- develop
|
||||||
|
paths:
|
||||||
|
- .github/workflows/frontend.yml
|
||||||
|
- frontend/**
|
||||||
|
- global/**
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18
|
||||||
|
|
||||||
|
- name: Prepair frontend
|
||||||
|
run: |
|
||||||
|
curl https://api.github.com/repos/${{ github.repository }}/actions/caches?key=frontend -X DELETE --header "authorization: Bearer ${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
export NODE_OPTIONS=--openssl-legacy-provider
|
||||||
|
npm install --global yarn
|
||||||
|
cd frontend
|
||||||
|
sed -i "s/0.0.0/$(cat ../global/.version)/g" package.json
|
||||||
|
yarn --no-lockfile install
|
||||||
|
yarn --no-lockfile build
|
||||||
|
|
||||||
|
- name: Cache frontend
|
||||||
|
uses: actions/cache/save@v3
|
||||||
|
with:
|
||||||
|
path: frontend/dist
|
||||||
|
key: frontend
|
99
.github/workflows/pull-request.yaml
vendored
Normal file
99
.github/workflows/pull-request.yaml
vendored
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
name: Build PR
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- .github/workflows/pull-request
|
||||||
|
- Dockerfile
|
||||||
|
- frontend/**
|
||||||
|
- backend/**
|
||||||
|
- global/**
|
||||||
|
- rootfs/**
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
backend-test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18
|
||||||
|
|
||||||
|
- name: Test Backend
|
||||||
|
run: |
|
||||||
|
sudo npm install --global cross-env
|
||||||
|
sudo pip install certbot
|
||||||
|
sudo mkdir -p /usr/local/nginx/conf/conf.d/include /tmp/letsencrypt-acme-challenge
|
||||||
|
sudo touch /usr/local/nginx/conf/conf.d/include/ip_ranges.conf
|
||||||
|
sudo cp rootfs/usr/local/nginx/conf/letsencrypt.ini /usr/local/nginx/conf/letsencrypt.ini
|
||||||
|
mv global backend
|
||||||
|
cd backend
|
||||||
|
npm install --force
|
||||||
|
sudo nginx
|
||||||
|
cross-env NODE_ENV=production sudo -E timeout 30 node --abort_on_uncaught_exception --max_old_space_size=250 index.js || if [ "$?" == "124" ]; then exit 0; else exit 1; fi
|
||||||
|
|
||||||
|
- name: Kill workflow
|
||||||
|
if: failure()
|
||||||
|
run: |
|
||||||
|
curl -X POST https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/cancel --header "authorization: Bearer ${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18
|
||||||
|
|
||||||
|
- name: Prepair frontend
|
||||||
|
run: |
|
||||||
|
export NODE_OPTIONS=--openssl-legacy-provider
|
||||||
|
npm install --global yarn
|
||||||
|
cd frontend
|
||||||
|
sed -i "s/0.0.0/$(cat ../global/.version)/g" package.json
|
||||||
|
yarn --no-lockfile install
|
||||||
|
yarn --no-lockfile build
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
with:
|
||||||
|
platforms: arm64 #all
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
with:
|
||||||
|
driver-opts: env.BUILDKIT_STEP_LOG_MAX_SIZE=-1
|
||||||
|
|
||||||
|
- name: Login to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ github.token }}
|
||||||
|
|
||||||
|
- name: Set PR-Number
|
||||||
|
id: pr
|
||||||
|
run: echo "pr=$(echo pr-${{ github.ref_name }} | sed "s/refs\/pull\/://g" | sed "s/\/merge//g")" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64 #,linux/amd64/v2,linux/amd64/v3,linux/amd64/v4 #,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
|
||||||
|
push: ${{ github.event_name == 'pull_request' }}
|
||||||
|
tags: ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ steps.pr.outputs.pr }}
|
||||||
|
|
||||||
|
- name: show version
|
||||||
|
run: docker run --rm --entrypoint sh ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ steps.pr.outputs.pr }} -c "nginx -V && php81 -v && php82 -v && php-fpm81 -v && php-fpm82 -v"
|
||||||
|
|
||||||
|
- name: add comment
|
||||||
|
uses: mshick/add-pr-comment@v2
|
||||||
|
with:
|
||||||
|
message: "The Docker Image can now be found here: `ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ steps.pr.outputs.pr }}`"
|
||||||
|
repo-token: ${{ github.token }}
|
19
Dockerfile
19
Dockerfile
@@ -1,15 +1,21 @@
|
|||||||
FROM zoeyvid/nginx-quic:20
|
FROM zoeyvid/nginx-quic:29
|
||||||
COPY rootfs /
|
COPY rootfs /
|
||||||
COPY backend /app
|
COPY backend /app
|
||||||
|
COPY global /app/global
|
||||||
COPY frontend/dist /app/frontend
|
COPY frontend/dist /app/frontend
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
RUN apk upgrade --no-cache && \
|
RUN echo https://dl-cdn.alpinelinux.org/alpine/edge/testing | tee -a /etc/apk/repositories && \
|
||||||
apk add --no-cache ca-certificates wget tzdata \
|
apk upgrade --no-cache && \
|
||||||
|
apk add --no-cache ca-certificates wget tzdata bash coreutils \
|
||||||
python3 \
|
python3 \
|
||||||
nodejs-current npm \
|
nodejs-current npm \
|
||||||
openssl apache2-utils jq \
|
openssl apache2-utils jq fcgi \
|
||||||
gcc g++ libffi-dev python3-dev && \
|
gcc g++ libffi-dev python3-dev \
|
||||||
|
php7 php7-fpm php8 php8-fpm php81 php81-fpm php82 php82-fpm && \
|
||||||
|
|
||||||
|
# Install cross-env
|
||||||
|
npm install --global cross-env && \
|
||||||
|
|
||||||
# Install pip
|
# Install pip
|
||||||
wget https://bootstrap.pypa.io/get-pip.py -O - | python3 && \
|
wget https://bootstrap.pypa.io/get-pip.py -O - | python3 && \
|
||||||
@@ -19,6 +25,7 @@ RUN apk upgrade --no-cache && \
|
|||||||
chmod +x /usr/local/bin/check-health && \
|
chmod +x /usr/local/bin/check-health && \
|
||||||
|
|
||||||
# Build Backend
|
# Build Backend
|
||||||
|
sed -i "s/0.0.0/$(cat global/.version)/g" package.json && \
|
||||||
npm install --force && \
|
npm install --force && \
|
||||||
pip install --no-cache-dir certbot && \
|
pip install --no-cache-dir certbot && \
|
||||||
apk del --no-cache gcc g++ libffi-dev python3-dev npm
|
apk del --no-cache gcc g++ libffi-dev python3-dev npm
|
||||||
@@ -26,5 +33,5 @@ RUN apk upgrade --no-cache && \
|
|||||||
ENV NODE_ENV=production \
|
ENV NODE_ENV=production \
|
||||||
DB_SQLITE_FILE=/data/database.sqlite
|
DB_SQLITE_FILE=/data/database.sqlite
|
||||||
|
|
||||||
ENTRYPOINT ["start"]
|
ENTRYPOINT ["bash", "start"]
|
||||||
HEALTHCHECK CMD check-health
|
HEALTHCHECK CMD check-health
|
||||||
|
40
README.md
40
README.md
@@ -53,28 +53,45 @@ so that the barrier for entry here is low.
|
|||||||
- Easy security headers, see [here](https://github.com/GetPageSpeed/ngx_security_headers), enabled by default if you enable hsts
|
- Easy security headers, see [here](https://github.com/GetPageSpeed/ngx_security_headers), enabled by default if you enable hsts
|
||||||
- Access Log disabled
|
- Access Log disabled
|
||||||
- Error Log written to console
|
- Error Log written to console
|
||||||
|
- PHP included, you can add php extensions, see aviable packages here: https://pkgs.alpinelinux.org/packages?name=php*
|
||||||
|
|
||||||
## Soon
|
## Soon
|
||||||
- more
|
- more
|
||||||
- I will try to create a pr to contribute to the original project
|
- I will try to create a pr to contribute to the original project
|
||||||
|
|
||||||
## Hosting your home network
|
# Use as webserver
|
||||||
|
|
||||||
I won't go in to too much detail here but here are the basics for someone new to this self-hosted world.
|
1. Create a new Proxy Host
|
||||||
|
2. Set `Scheme` to `http`, `Forward Hostname / IP` to `0.0.0.0`, `Forward Port` to `1` and enable `Websockets Support` (you can also use other values, since these get fully ignored)
|
||||||
|
3. Maybe set an Access List
|
||||||
|
4. Make your SSL Settings
|
||||||
|
5.
|
||||||
|
a) Custom Nginx Configuration (advanced tab), which looks the following for plain html, the slash at the end of the file path is important:
|
||||||
|
```
|
||||||
|
location / {
|
||||||
|
alias /var/www/<your-html-site-folder-name>/;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
b) Custom Nginx Configuration (advanced tab), which looks the following for plain html & php, the slash at the end of the file path is important:
|
||||||
|
```
|
||||||
|
location / {
|
||||||
|
alias /var/www/<your-php-site-folder-name>/;
|
||||||
|
|
||||||
1. Your home router will have a Port Forwarding section somewhere. Log in and find it
|
location ~ [^/]\.php(/|$) {
|
||||||
2. Add port forwarding for port 80 and 443 to the server hosting this project
|
fastcgi_pass php82;
|
||||||
3. Configure your domain name details to point to your home, either with a static ip or a service like DuckDNS or [Amazon Route53](https://github.com/jc21/route53-ddns)
|
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
||||||
4. Use the Nginx Proxy Manager as your gateway to forward to your other web based services
|
if (!-f $document_root$fastcgi_script_name) {return 404;}
|
||||||
|
}}
|
||||||
|
```
|
||||||
|
|
||||||
## Quick Setup
|
# Quick Setup
|
||||||
|
|
||||||
1. Install Docker and Docker Compose
|
1. Install Docker and Docker Compose (or portainer)
|
||||||
|
|
||||||
- [Docker Install documentation](https://docs.docker.com/engine)
|
- [Docker Install documentation](https://docs.docker.com/engine)
|
||||||
- [Docker Compose Install documentation](https://docs.docker.com/compose/install/linux)
|
- [Docker Compose Install documentation](https://docs.docker.com/compose/install/linux)
|
||||||
|
|
||||||
2. Create a compose.yaml file similar to this:
|
2. Create a compose.yaml file similar to this (or use it as a portainer stack):
|
||||||
|
|
||||||
```yml
|
```yml
|
||||||
version: "3"
|
version: "3"
|
||||||
@@ -92,9 +109,10 @@ services:
|
|||||||
- "TZ=Europe/Berlin"
|
- "TZ=Europe/Berlin"
|
||||||
# - "NGINX_LOG_NOT_FOUND=true" # Allow logging of 404 errors
|
# - "NGINX_LOG_NOT_FOUND=true" # Allow logging of 404 errors
|
||||||
# - "NPM_LISTEN_LOCALHOST=true" # Bind the NPM Dashboard on Port 81 only to localhost
|
# - "NPM_LISTEN_LOCALHOST=true" # Bind the NPM Dashboard on Port 81 only to localhost
|
||||||
|
# - "PHP_APKS=php7-curl php8-curl php81-curl php-82-curl" # Add php extensions, see aviable packages here: https://pkgs.alpinelinux.org/packages?name=php*
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Bring up your stack by running
|
3. Bring up your stack by running (or deploy your portainer stack)
|
||||||
```bash
|
```bash
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
@@ -103,6 +121,8 @@ docker compose up -d
|
|||||||
|
|
||||||
When your docker container is running, connect to it on port `81` for the admin interface.
|
When your docker container is running, connect to it on port `81` for the admin interface.
|
||||||
Sometimes this can take a little bit because of the entropy of keys.
|
Sometimes this can take a little bit because of the entropy of keys.
|
||||||
|
You may need to open port 81 in your firewall.
|
||||||
|
You may need to use another IP-Adress.
|
||||||
|
|
||||||
[https://127.0.0.1:81](https://127.0.0.1:81)
|
[https://127.0.0.1:81](https://127.0.0.1:81)
|
||||||
|
|
||||||
|
2
backend/config/.gitignore
vendored
Normal file
2
backend/config/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
@@ -1,2 +0,0 @@
|
|||||||
These files are use in development and are not deployed as part of the final product.
|
|
||||||
|
|
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"database": {
|
|
||||||
"engine": "mysql",
|
|
||||||
"host": "db",
|
|
||||||
"name": "npm",
|
|
||||||
"user": "npm",
|
|
||||||
"password": "npm",
|
|
||||||
"port": 3306
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"database": {
|
|
||||||
"engine": "knex-native",
|
|
||||||
"knex": {
|
|
||||||
"client": "sqlite3",
|
|
||||||
"connection": {
|
|
||||||
"filename": "/app/config/mydb.sqlite"
|
|
||||||
},
|
|
||||||
"pool": {
|
|
||||||
"min": 0,
|
|
||||||
"max": 1,
|
|
||||||
"createTimeoutMillis": 3000,
|
|
||||||
"acquireTimeoutMillis": 30000,
|
|
||||||
"idleTimeoutMillis": 30000,
|
|
||||||
"reapIntervalMillis": 1000,
|
|
||||||
"createRetryIntervalMillis": 100,
|
|
||||||
"propagateCreateError": false
|
|
||||||
},
|
|
||||||
"migrations": {
|
|
||||||
"tableName": "migrations",
|
|
||||||
"stub": "src/backend/lib/migrate_template.js",
|
|
||||||
"directory": "src/backend/migrations"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -36,7 +36,7 @@ const internalSetting = {
|
|||||||
if (row.id === 'default-site') {
|
if (row.id === 'default-site') {
|
||||||
// write the html if we need to
|
// write the html if we need to
|
||||||
if (row.value === 'html') {
|
if (row.value === 'html') {
|
||||||
fs.writeFileSync('/data/nginx/default_www/index.html', row.meta.html, {encoding: 'utf8'});
|
fs.writeFileSync('/data/nginx/html/index.html', row.meta.html, {encoding: 'utf8'});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure nginx
|
// Configure nginx
|
||||||
|
@@ -95,7 +95,7 @@ class AccessList extends Model {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get passauth() {
|
get passauth() {
|
||||||
return this.pass_auth ? 'proxy_set_header Authorization "";' : '';
|
return this.pass_auth ? '' : 'proxy_set_header Authorization "";';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
"express": "4.18.2",
|
"express": "4.18.2",
|
||||||
"express-fileupload": "1.4.0",
|
"express-fileupload": "1.4.0",
|
||||||
"gravatar": "1.8.2",
|
"gravatar": "1.8.2",
|
||||||
"jsonwebtoken": "8.5.1",
|
"jsonwebtoken": "9.0.0",
|
||||||
"knex": "2.3.0",
|
"knex": "2.3.0",
|
||||||
"liquidjs": "9.43.0",
|
"liquidjs": "9.43.0",
|
||||||
"lodash": "4.17.21",
|
"lodash": "4.17.21",
|
||||||
|
@@ -1,4 +0,0 @@
|
|||||||
{% if block_exploits == 1 or block_exploits == true %}
|
|
||||||
# Block Exploits
|
|
||||||
include conf.d/include/block-exploits.conf;
|
|
||||||
{% endif %}
|
|
@@ -6,27 +6,12 @@
|
|||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_pass {{ forward_scheme }}://{{ forward_host }}:{{ forward_port }}{{ forward_path }};
|
proxy_pass {{ forward_scheme }}://{{ forward_host }}:{{ forward_port }}{{ forward_path }};
|
||||||
|
|
||||||
{% if access_list_id > 0 %}
|
{% if access_list_id > 0 %}
|
||||||
{% if access_list.items.length > 0 %}
|
{% if access_list.items.length > 0 %}
|
||||||
# Authorization
|
|
||||||
auth_basic "Authorization required";
|
|
||||||
auth_basic_user_file /data/access/{{ access_list_id }};
|
|
||||||
|
|
||||||
{{ access_list.passauth }}
|
{{ access_list.passauth }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
# Access Rules
|
|
||||||
{% for client in access_list.clients %}
|
|
||||||
{{- client.rule -}};
|
|
||||||
{% endfor %}deny all;
|
|
||||||
|
|
||||||
# Access checks must...
|
|
||||||
{% if access_list.satisfy %}
|
|
||||||
{{ access_list.satisfy }};
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if allow_websocket_upgrade == 1 or allow_websocket_upgrade == true %}
|
{% if allow_websocket_upgrade == 1 or allow_websocket_upgrade == true %}
|
||||||
|
@@ -9,10 +9,10 @@ server {
|
|||||||
|
|
||||||
{{ advanced_config }}
|
{{ advanced_config }}
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||||
|
include conf.d/include/block-exploits.conf;
|
||||||
{% if use_default_location %}
|
{% if use_default_location %}
|
||||||
location / {
|
location / {
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
alias /html/404/;
|
||||||
return 404;
|
|
||||||
}
|
}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
@@ -1,9 +1,6 @@
|
|||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
# Default Site
|
# Default Site
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
{% if value == "congratulations" %}
|
|
||||||
# Skipping output, congratulations page configration is baked in.
|
|
||||||
{%- else %}
|
|
||||||
server {
|
server {
|
||||||
listen 80 default_server;
|
listen 80 default_server;
|
||||||
listen [::]:80 default_server;
|
listen [::]:80 default_server;
|
||||||
@@ -14,7 +11,7 @@ server {
|
|||||||
listen 443 http3 default_server;
|
listen 443 http3 default_server;
|
||||||
listen [::]:443 http3 default_server;
|
listen [::]:443 http3 default_server;
|
||||||
|
|
||||||
server_name default-host;
|
server_name _;
|
||||||
|
|
||||||
include conf.d/include/force-ssl.conf;
|
include conf.d/include/force-ssl.conf;
|
||||||
include conf.d/include/ssl-ciphers.conf;
|
include conf.d/include/ssl-ciphers.conf;
|
||||||
@@ -27,10 +24,9 @@ server {
|
|||||||
|
|
||||||
{%- if value == "404" %}
|
{%- if value == "404" %}
|
||||||
location / {
|
location / {
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
alias /html/404/;
|
||||||
return 404;
|
|
||||||
}
|
}
|
||||||
{% endif %}
|
{%- endif %}
|
||||||
|
|
||||||
{%- if value == "redirect" %}
|
{%- if value == "redirect" %}
|
||||||
location / {
|
location / {
|
||||||
@@ -39,39 +35,17 @@ server {
|
|||||||
}
|
}
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
{%- if value == "html" %}
|
{%- if value == "congratulations" %}
|
||||||
root /data/nginx/default_www;
|
|
||||||
location / {
|
location / {
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||||
try_files $uri /index.html;
|
alias /html/default/;
|
||||||
|
}
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{%- if value == "html" %}
|
||||||
|
location / {
|
||||||
|
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||||
|
alias /data/nginx/html/;
|
||||||
}
|
}
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
}
|
}
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# prevent processing requests with undefined server names
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
listen [::]:80;
|
|
||||||
|
|
||||||
listen 443 ssl http2;
|
|
||||||
listen [::]:443 ssl http2;
|
|
||||||
|
|
||||||
listen 443 http3;
|
|
||||||
listen [::]:443 http3;
|
|
||||||
|
|
||||||
server_name "";
|
|
||||||
return 444;
|
|
||||||
|
|
||||||
include conf.d/include/force-ssl.conf;
|
|
||||||
include conf.d/include/ssl-ciphers.conf;
|
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
|
||||||
include conf.d/include/block-exploits.conf;
|
|
||||||
add_header alt-svc 'h3=":443"; ma=86400, h3-29=":443"; ma=86400';
|
|
||||||
|
|
||||||
ssl_certificate /data/nginx/dummycert.pem;
|
|
||||||
ssl_certificate_key /data/nginx/dummykey.pem;
|
|
||||||
}
|
|
||||||
|
@@ -7,6 +7,7 @@ server {
|
|||||||
server_name {{ domain_names | join: " " }};
|
server_name {{ domain_names | join: " " }};
|
||||||
|
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||||
|
include conf.d/include/block-exploits.conf;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||||
|
@@ -8,42 +8,22 @@ server {
|
|||||||
|
|
||||||
{% include "_listen.conf" %}
|
{% include "_listen.conf" %}
|
||||||
{% include "_certificates.conf" %}
|
{% include "_certificates.conf" %}
|
||||||
{% include "_exploits.conf" %}
|
|
||||||
{% include "_hsts.conf" %}
|
{% include "_hsts.conf" %}
|
||||||
{% include "_forced_ssl.conf" %}
|
{% include "_forced_ssl.conf" %}
|
||||||
|
|
||||||
{% if allow_websocket_upgrade == 1 or allow_websocket_upgrade == true %}
|
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
include conf.d/include/block-exploits.conf;
|
||||||
proxy_set_header Connection $http_connection;
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{{ advanced_config }}
|
{{ advanced_config }}
|
||||||
|
|
||||||
{{ locations }}
|
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
|
||||||
{% if use_default_location %}
|
{% if use_default_location %}
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||||
|
|
||||||
{% if access_list_id > 0 %}
|
{% if access_list_id > 0 %}
|
||||||
{% if access_list.items.length > 0 %}
|
{% if access_list.items.length > 0 %}
|
||||||
# Authorization
|
|
||||||
auth_basic "Authorization required";
|
|
||||||
auth_basic_user_file /data/access/{{ access_list_id }};
|
|
||||||
|
|
||||||
{{ access_list.passauth }}
|
{{ access_list.passauth }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
# Access Rules
|
|
||||||
{% for client in access_list.clients %}
|
|
||||||
{{- client.rule -}};
|
|
||||||
{% endfor %}deny all;
|
|
||||||
|
|
||||||
# Access checks must...
|
|
||||||
{% if access_list.satisfy %}
|
|
||||||
{{ access_list.satisfy }};
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if allow_websocket_upgrade == 1 or allow_websocket_upgrade == true %}
|
{% if allow_websocket_upgrade == 1 or allow_websocket_upgrade == true %}
|
||||||
@@ -56,6 +36,29 @@ server {
|
|||||||
}
|
}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if access_list_id > 0 %}
|
||||||
|
{% if access_list.items.length > 0 %}
|
||||||
|
# Authorization
|
||||||
|
auth_basic "Authorization required";
|
||||||
|
auth_basic_user_file /data/access/{{ access_list_id }};
|
||||||
|
|
||||||
|
{{ access_list.passauth }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
# Access Rules
|
||||||
|
{% for client in access_list.clients %}
|
||||||
|
{{- client.rule -}};
|
||||||
|
{% endfor %}deny all;
|
||||||
|
|
||||||
|
# Access checks must...
|
||||||
|
{% if access_list.satisfy %}
|
||||||
|
{{ access_list.satisfy }};
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{{ locations }}
|
||||||
|
|
||||||
# Custom
|
# Custom
|
||||||
include /data/nginx/custom/server_proxy.conf;
|
include /data/nginx/custom/server_proxy.conf;
|
||||||
}
|
}
|
||||||
|
@@ -4,12 +4,12 @@
|
|||||||
server {
|
server {
|
||||||
{% include "_listen.conf" %}
|
{% include "_listen.conf" %}
|
||||||
{% include "_certificates.conf" %}
|
{% include "_certificates.conf" %}
|
||||||
{% include "_exploits.conf" %}
|
|
||||||
{% include "_hsts.conf" %}
|
{% include "_hsts.conf" %}
|
||||||
{% include "_forced_ssl.conf" %}
|
{% include "_forced_ssl.conf" %}
|
||||||
|
|
||||||
{{ advanced_config }}
|
{{ advanced_config }}
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||||
|
include conf.d/include/block-exploits.conf;
|
||||||
{% if use_default_location %}
|
{% if use_default_location %}
|
||||||
location / {
|
location / {
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||||
|
@@ -13,3 +13,4 @@ services:
|
|||||||
- "TZ=Europe/Berlin"
|
- "TZ=Europe/Berlin"
|
||||||
# - "NGINX_LOG_NOT_FOUND=true" # Allow logging of 404 errors
|
# - "NGINX_LOG_NOT_FOUND=true" # Allow logging of 404 errors
|
||||||
# - "NPM_LISTEN_LOCALHOST=true" # Bind the NPM Dashboard on Port 81 only to localhost
|
# - "NPM_LISTEN_LOCALHOST=true" # Bind the NPM Dashboard on Port 81 only to localhost
|
||||||
|
# - "PHP_APKS=php7-curl php8-curl php81-curl php-82-curl" # Add php extensions, see aviable packages here: https://pkgs.alpinelinux.org/packages?name=php*
|
||||||
|
@@ -54,6 +54,16 @@
|
|||||||
<input name="forward_port" type="number" class="form-control text-monospace" placeholder="80" value="<%- forward_port %>" required>
|
<input name="forward_port" type="number" class="form-control text-monospace" placeholder="80" value="<%- forward_port %>" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-sm-12 col-md-12">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="custom-switch">
|
||||||
|
<input type="checkbox" class="custom-switch-input" name="allow_websocket_upgrade" value="1"<%- allow_websocket_upgrade ? ' checked' : '' %>>
|
||||||
|
<span class="custom-switch-indicator"></span>
|
||||||
|
<span class="custom-switch-description"><%- i18n('proxy-hosts', 'allow-websocket-upgrade') %></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--
|
||||||
<div class="col-sm-6 col-md-6">
|
<div class="col-sm-6 col-md-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="custom-switch">
|
<label class="custom-switch">
|
||||||
@@ -64,16 +74,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-6 col-md-6">
|
<div class="col-sm-6 col-md-6">
|
||||||
<div class="form-group">
|
|
||||||
<label class="custom-switch">
|
|
||||||
<input type="checkbox" class="custom-switch-input" name="allow_websocket_upgrade" value="1"<%- allow_websocket_upgrade ? ' checked' : '' %>>
|
|
||||||
<span class="custom-switch-indicator"></span>
|
|
||||||
<span class="custom-switch-description"><%- i18n('proxy-hosts', 'allow-websocket-upgrade') %></span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!--
|
|
||||||
<div class="col-sm-12 col-md-12">
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="custom-switch">
|
<label class="custom-switch">
|
||||||
<input type="checkbox" class="custom-switch-input" name="caching_enabled" value="1"<%- caching_enabled ? ' checked' : '' %>>
|
<input type="checkbox" class="custom-switch-input" name="caching_enabled" value="1"<%- caching_enabled ? ' checked' : '' %>>
|
||||||
|
@@ -51,7 +51,7 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-6 col-md-6">
|
<div class="col-sm-12 col-md-12">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="custom-switch">
|
<label class="custom-switch">
|
||||||
<input type="checkbox" class="custom-switch-input" name="preserve_path" value="1"<%- preserve_path ? ' checked' : '' %>>
|
<input type="checkbox" class="custom-switch-input" name="preserve_path" value="1"<%- preserve_path ? ' checked' : '' %>>
|
||||||
@@ -60,7 +60,8 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-6 col-md-6">
|
<!---
|
||||||
|
<div class="col-sm-12 col-md-12">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="custom-switch">
|
<label class="custom-switch">
|
||||||
<input type="checkbox" class="custom-switch-input" name="block_exploits" value="1"<%- block_exploits ? ' checked' : '' %>>
|
<input type="checkbox" class="custom-switch-input" name="block_exploits" value="1"<%- block_exploits ? ' checked' : '' %>>
|
||||||
@@ -69,6 +70,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
--->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@@ -228,7 +228,7 @@
|
|||||||
"access": "Access",
|
"access": "Access",
|
||||||
"satisfy": "Satisfy",
|
"satisfy": "Satisfy",
|
||||||
"satisfy-any": "Allow access if at least one authorization method succseeded",
|
"satisfy-any": "Allow access if at least one authorization method succseeded",
|
||||||
"pass-auth": "Pass credentials to backend of host",
|
"pass-auth": "Don't pass credentials to backend of host",
|
||||||
"access-add": "Add",
|
"access-add": "Add",
|
||||||
"auth-add": "Add",
|
"auth-add": "Add",
|
||||||
"search": "Search Access…"
|
"search": "Search Access…"
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
"description": "A beautiful interface for creating Nginx endpoints",
|
"description": "A beautiful interface for creating Nginx endpoints",
|
||||||
"main": "js/index.js",
|
"main": "js/index.js",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "7.20.5",
|
"@babel/core": "7.20.7",
|
||||||
"babel-core": "6.26.3",
|
"babel-core": "6.26.3",
|
||||||
"babel-loader": "8.3.0",
|
"babel-loader": "8.3.0",
|
||||||
"babel-preset-env": "1.7.0",
|
"babel-preset-env": "1.7.0",
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
"file-loader": "6.2.0",
|
"file-loader": "6.2.0",
|
||||||
"html-webpack-plugin": "4.5.2",
|
"html-webpack-plugin": "4.5.2",
|
||||||
"imports-loader": "0.8.0",
|
"imports-loader": "0.8.0",
|
||||||
"jquery": "3.6.2",
|
"jquery": "3.6.3",
|
||||||
"jquery-mask-plugin": "1.14.16",
|
"jquery-mask-plugin": "1.14.16",
|
||||||
"jquery-serializejson": "3.2.1",
|
"jquery-serializejson": "3.2.1",
|
||||||
"marionette.approuter": "1.0.2",
|
"marionette.approuter": "1.0.2",
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
],
|
],
|
||||||
"baseBranches": [],
|
"baseBranches": [],
|
||||||
"includeForks": true,
|
"includeForks": true,
|
||||||
"automerge": true,
|
"automerge": false,
|
||||||
"branchPrefix": "renovate-deps-update-",
|
"branchPrefix": "renovate-deps-update-",
|
||||||
"rangeStrategy": "pin",
|
"rangeStrategy": "pin",
|
||||||
"digest": {
|
"digest": {
|
||||||
|
6
rootfs/html/404/bootstrap.min.css
vendored
Normal file
6
rootfs/html/404/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
26
rootfs/html/404/index.html
Normal file
26
rootfs/html/404/index.html
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>404 Not Found</title>
|
||||||
|
<link href="/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
.jumbotron {
|
||||||
|
margin-top: 50px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="jumbotron">
|
||||||
|
<h1 class="text-center">404 Not Found</h1>
|
||||||
|
</div>
|
||||||
|
<p class="text-center">
|
||||||
|
<small>Powered by <a href="https://github.com/ZoeyVid/nginx-proxy-manager" target="_blank">Nginx Proxy Manager</a>
|
||||||
|
</small>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
6
rootfs/html/default/bootstrap.min.css
vendored
Normal file
6
rootfs/html/default/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -5,20 +5,25 @@
|
|||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>Default Site</title>
|
<title>Default Site</title>
|
||||||
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
<link href="/bootstrap.min.css" rel="stylesheet">
|
||||||
<style>
|
<style>
|
||||||
.jumbotron { margin-top: 50px; }
|
.jumbotron {
|
||||||
|
margin-top: 50px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="jumbotron">
|
<div class="jumbotron">
|
||||||
<h1>Congratulations!</h1>
|
<h1 class="text-center">Congratulations!</h1>
|
||||||
<p>You've successfully started the Nginx Proxy Manager.</p>
|
<p>You've successfully started the Nginx Proxy Manager.</p>
|
||||||
<p>If you're seeing this site then you're trying to access a host that isn't set up yet.</p>
|
<p>If you're seeing this site then you're trying to access a host that isn't set up yet.</p>
|
||||||
<p>Log in to the Admin panel to get started.</p>
|
<p>Log in to the Admin panel to get started.</p>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-center"><small>Powered by <a href="https://github.com/jc21/nginx-proxy-manager" target="_blank">Nginx Proxy Manager</a></small></p>
|
<p class="text-center">
|
||||||
|
<small>Powered by <a href="https://github.com/ZoeyVid/nginx-proxy-manager" target="_blank">Nginx Proxy Manager</a>
|
||||||
|
</small>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@@ -1,8 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
OK=$(wget -q --no-check-certificate https://127.0.0.1:81/api -O - | jq --raw-output '.status')
|
if (cgi-fcgi -bind -connect /dev/php7.sock > /dev/null && cgi-fcgi -bind -connect /dev/php8.sock > /dev/null && cgi-fcgi -bind -connect /dev/php81.sock > /dev/null && cgi-fcgi -bind -connect /dev/php82.sock > /dev/null && [ "$(wget -q --no-check-certificate https://127.0.0.1:81/api -O - | jq --raw-output '.status')" == "OK" ]); then
|
||||||
|
|
||||||
if [ "$OK" == "OK" ]; then
|
|
||||||
echo "OK"
|
echo "OK"
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
|
@@ -1,18 +1,52 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
if [ -f /data/nginx/default_host/site.conf ]; then
|
# From https://github.com/nextcloud/all-in-one/pull/1377/files
|
||||||
mv /data/nginx/default_host/site.conf /data/nginx/default.conf || exit 1
|
if [ -n "$PHP_APKS" ]; then
|
||||||
|
if ! echo "$PHP_APKS" | grep -q "^[a-z0-9 _-]\+$"; then
|
||||||
|
echo "You've set PHP_APKS but not to an allowed value.
|
||||||
|
It needs to be a string. Allowed are small letters a-z, digits 0-9, spaces, hyphens and underscores.
|
||||||
|
It is set to '$PHP_APKS'." || exit 1
|
||||||
|
sleep inf || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
read -ra APKS_ARRAY <<< "$PHP_APKS"
|
||||||
|
for apk in "${APKS_ARRAY[@]}"; do
|
||||||
|
|
||||||
|
if ! echo "$apk" | grep -q "php*"; then
|
||||||
|
echo "'$apk' is a non allowed value.
|
||||||
|
It needs to start with php.
|
||||||
|
It is set to '$apk'." || exit 1
|
||||||
|
sleep inf || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Installing $apk via apk..."
|
||||||
|
if ! apk add --no-cache "$apk" >/dev/null; then
|
||||||
|
echo "The packet $apk was not installed!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p /tmp/letsencrypt-acme-challenge \
|
mkdir -p /tmp/letsencrypt-acme-challenge \
|
||||||
/data/letsencrypt \
|
/data/letsencrypt \
|
||||||
/data/custom_ssl \
|
/data/custom_ssl \
|
||||||
/data/access \
|
/data/access \
|
||||||
|
/data/php \
|
||||||
/data/nginx/redirection_host \
|
/data/nginx/redirection_host \
|
||||||
/data/nginx/proxy_host \
|
/data/nginx/proxy_host \
|
||||||
/data/nginx/dead_host \
|
/data/nginx/dead_host \
|
||||||
/data/nginx/stream \
|
/data/nginx/stream \
|
||||||
/data/nginx/custom || exit 1
|
/data/nginx/custom \
|
||||||
|
/data/nginx/html || exit 1
|
||||||
|
|
||||||
|
if [ -f /data/nginx/default_host/site.conf ]; then
|
||||||
|
mv /data/nginx/default_host/site.conf /data/nginx/default.conf || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f /data/nginx/default_www/index.html ]; then
|
||||||
|
mv /data/nginx/default_www/index.html /data/nginx/html/index.html || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
rm -rf /data/letsencrypt-acme-challenge \
|
rm -rf /data/letsencrypt-acme-challenge \
|
||||||
/data/nginx/default_host \
|
/data/nginx/default_host \
|
||||||
@@ -36,7 +70,17 @@ find /data/nginx -type f -name '*.conf' -exec sed -i "s/# Asset Caching//g" {} \
|
|||||||
find /data/nginx -type f -name '*.conf' -exec sed -i "s/proxy_http_version.*//g" {} \; || exit 1
|
find /data/nginx -type f -name '*.conf' -exec sed -i "s/proxy_http_version.*//g" {} \; || exit 1
|
||||||
find /data/nginx -type f -name '*.conf' -exec sed -i "s/access_log.*//g" {} \; || exit 1
|
find /data/nginx -type f -name '*.conf' -exec sed -i "s/access_log.*//g" {} \; || exit 1
|
||||||
|
|
||||||
touch /data/nginx/custom/root.conf \
|
if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then
|
||||||
|
openssl req -new -newkey rsa:4096 -days 365000 -nodes -x509 -subj '/CN=*' -sha256 -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f /data/nginx/default.conf ]; then
|
||||||
|
cp /usr/local/nginx/conf/conf.d/include/default.conf /data/nginx/default.conf || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
touch /data/nginx/default.conf \
|
||||||
|
/data/nginx/html/index.html \
|
||||||
|
/data/nginx/custom/root.conf \
|
||||||
/data/nginx/custom/events.conf \
|
/data/nginx/custom/events.conf \
|
||||||
/data/nginx/custom/http.conf \
|
/data/nginx/custom/http.conf \
|
||||||
/data/nginx/custom/http_top.conf \
|
/data/nginx/custom/http_top.conf \
|
||||||
@@ -48,13 +92,15 @@ touch /data/nginx/custom/root.conf \
|
|||||||
/data/nginx/custom/server_stream_udp.conf \
|
/data/nginx/custom/server_stream_udp.conf \
|
||||||
/usr/local/nginx/conf/conf.d/include/ip_ranges.conf || exit 1
|
/usr/local/nginx/conf/conf.d/include/ip_ranges.conf || exit 1
|
||||||
|
|
||||||
if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then
|
for folder in $(find /etc -maxdepth 1 -type d -name php*); do cp -Trn $folder /data/php/$(echo $folder| sed "s|/etc/php||g"); done;
|
||||||
openssl req -new -newkey rsa:4096 -days 365000 -nodes -x509 -subj '/CN=*' -sha256 -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem || exit 1
|
for folder in $(find /etc -maxdepth 1 -type d -name php*); do sed -i "s|user =.*|user = root|" /data/php/$(echo $folder| sed "s|/etc/php||g")/php-fpm.d/www.conf; done;
|
||||||
fi
|
for folder in $(find /etc -maxdepth 1 -type d -name php*); do sed -i "s|group =.*|group = root|" /data/php/$(echo $folder| sed "s|/etc/php||g")/php-fpm.d/www.conf; done;
|
||||||
|
for folder in $(find /etc -maxdepth 1 -type d -name php*); do sed -i "s|listen =.*|listen = /dev/$(echo $folder| sed "s|/etc/||g").sock|" /data/php/$(echo $folder| sed "s|/etc/php||g")/php-fpm.d/www.conf; done;
|
||||||
|
for folder in $(find /etc -maxdepth 1 -type d -name php*); do sed -i "s|include=.*|include=/data/php/$(echo $folder| sed "s|/etc/php||g")/php-fpm.d/*.conf|g" /data/php/$(echo $folder| sed "s|/etc/php||g")/php-fpm.conf; done;
|
||||||
|
|
||||||
if [ "$NPM_LISTEN_LOCALHOST" == "true" ]; then
|
if [ "$NPM_LISTEN_LOCALHOST" == "true" ]; then
|
||||||
sed -i "s/listen 81/listen 127.0.0.1:81/g" /usr/local/nginx/conf/conf.d/production.conf || exit 1
|
sed -i "s/listen 81/listen 127.0.0.1:81/g" /usr/local/nginx/conf/conf.d/npm.conf || exit 1
|
||||||
sed -i "s/listen \[::\]:81/listen \[::1\]:81/g" /usr/local/nginx/conf/conf.d/production.conf || exit 1
|
sed -i "s/listen \[::\]:81/listen \[::1\]:81/g" /usr/local/nginx/conf/conf.d/npm.conf || exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$NGINX_LOG_NOT_FOUND" == "true" ]; then
|
if [ "$NGINX_LOG_NOT_FOUND" == "true" ]; then
|
||||||
@@ -66,8 +112,32 @@ nginx -T || exit 1
|
|||||||
sleep inf || exit 1
|
sleep inf || exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
while nginx -t 2> /dev/null; do
|
if ! cross-env PHP_INI_SCAN_DIR=/data/php/7/conf.d php-fpm7 -c /data/php/7 -y /data/php/7/php-fpm.conf -FORt 2> /dev/null; then
|
||||||
|
cross-env PHP_INI_SCAN_DIR=/data/php/7/conf.d php-fpm7 -c /data/php/7 -y /data/php/7/php-fpm.conf -FORt || exit 1
|
||||||
|
sleep inf || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! cross-env PHP_INI_SCAN_DIR=/data/php/8/conf.d php-fpm8 -c /data/php/8 -y /data/php/8/php-fpm.conf -FORt 2> /dev/null; then
|
||||||
|
cross-env PHP_INI_SCAN_DIR=/data/php/8/conf.d php-fpm8 -c /data/php/8 -y /data/php/8/php-fpm.conf -FORt || exit 1
|
||||||
|
sleep inf || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! cross-env PHP_INI_SCAN_DIR=/data/php/81/conf.d php-fpm81 -c /data/php/81 -y /data/php/81/php-fpm.conf -FORt 2> /dev/null; then
|
||||||
|
cross-env PHP_INI_SCAN_DIR=/data/php/81/conf.d php-fpm81 -c /data/php/81 -y /data/php/81/php-fpm.conf -FORt || exit 1
|
||||||
|
sleep inf || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! cross-env PHP_INI_SCAN_DIR=/data/php/82/conf.d php-fpm82 -c /data/php/82 -y /data/php/82/php-fpm.conf -FORt 2> /dev/null; then
|
||||||
|
cross-env PHP_INI_SCAN_DIR=/data/php/82/conf.d php-fpm82 -c /data/php/82 -y /data/php/82/php-fpm.conf -FORt || exit 1
|
||||||
|
sleep inf || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
while (nginx -t 2> /dev/null && cross-env PHP_INI_SCAN_DIR=/data/php/7/conf.d php-fpm7 -c /data/php/7 -y /data/php/7/php-fpm.conf -FORt 2> /dev/null && cross-env PHP_INI_SCAN_DIR=/data/php/8/conf.d php-fpm8 -c /data/php/8 -y /data/php/8/php-fpm.conf -FORt 2> /dev/null && cross-env PHP_INI_SCAN_DIR=/data/php/81/conf.d php-fpm81 -c /data/php/81 -y /data/php/81/php-fpm.conf -FORt 2> /dev/null && cross-env PHP_INI_SCAN_DIR=/data/php/82/conf.d php-fpm82 -c /data/php/82 -y /data/php/82/php-fpm.conf -FORt 2> /dev/null); do
|
||||||
nginx || exit 1 &
|
nginx || exit 1 &
|
||||||
|
cross-env PHP_INI_SCAN_DIR=/data/php/7/conf.d php-fpm7 -c /data/php/7 -y /data/php/7/php-fpm.conf -FOR || exit 1 &
|
||||||
|
cross-env PHP_INI_SCAN_DIR=/data/php/8/conf.d php-fpm8 -c /data/php/8 -y /data/php/8/php-fpm.conf -FOR || exit 1 &
|
||||||
|
cross-env PHP_INI_SCAN_DIR=/data/php/81/conf.d php-fpm81 -c /data/php/81 -y /data/php/81/php-fpm.conf -FOR || exit 1 &
|
||||||
|
cross-env PHP_INI_SCAN_DIR=/data/php/82/conf.d php-fpm82 -c /data/php/82 -y /data/php/82/php-fpm.conf -FOR || exit 1 &
|
||||||
node --abort_on_uncaught_exception --max_old_space_size=250 index.js || exit 1 &
|
node --abort_on_uncaught_exception --max_old_space_size=250 index.js || exit 1 &
|
||||||
wait
|
wait
|
||||||
done
|
done
|
||||||
@@ -76,3 +146,23 @@ if ! nginx -t 2> /dev/null; then
|
|||||||
nginx -T || exit 1
|
nginx -T || exit 1
|
||||||
sleep inf || exit 1
|
sleep inf || exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! cross-env PHP_INI_SCAN_DIR=/data/php/7/conf.d php-fpm7 -c /data/php/7 -y /data/php/7/php-fpm.conf -FORt 2> /dev/null; then
|
||||||
|
cross-env PHP_INI_SCAN_DIR=/data/php/7/conf.d php-fpm7 -c /data/php/7 -y /data/php/7/php-fpm.conf -FORt || exit 1
|
||||||
|
sleep inf || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! cross-env PHP_INI_SCAN_DIR=/data/php/8/conf.d php-fpm8 -c /data/php/8 -y /data/php/8/php-fpm.conf -FORt 2> /dev/null; then
|
||||||
|
cross-env PHP_INI_SCAN_DIR=/data/php/8/conf.d php-fpm8 -c /data/php/8 -y /data/php/8/php-fpm.conf -FORt || exit 1
|
||||||
|
sleep inf || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! cross-env PHP_INI_SCAN_DIR=/data/php/81/conf.d php-fpm81 -c /data/php/81 -y /data/php/81/php-fpm.conf -FORt 2> /dev/null; then
|
||||||
|
cross-env PHP_INI_SCAN_DIR=/data/php/81/conf.d php-fpm81 -c /data/php/81 -y /data/php/81/php-fpm.conf -FORt || exit 1
|
||||||
|
sleep inf || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! cross-env PHP_INI_SCAN_DIR=/data/php/82/conf.d php-fpm82 -c /data/php/82 -y /data/php/82/php-fpm.conf -FORt 2> /dev/null; then
|
||||||
|
cross-env PHP_INI_SCAN_DIR=/data/php/82/conf.d php-fpm82 -c /data/php/82 -y /data/php/82/php-fpm.conf -FORt || exit 1
|
||||||
|
sleep inf || exit 1
|
||||||
|
fi
|
||||||
|
29
rootfs/usr/local/nginx/conf/conf.d/include/default.conf
Normal file
29
rootfs/usr/local/nginx/conf/conf.d/include/default.conf
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# ------------------------------------------------------------
|
||||||
|
# Default Site
|
||||||
|
# ------------------------------------------------------------
|
||||||
|
server {
|
||||||
|
listen 80 default_server;
|
||||||
|
listen [::]:80 default_server;
|
||||||
|
|
||||||
|
listen 443 ssl http2 default_server;
|
||||||
|
listen [::]:443 ssl http2 default_server;
|
||||||
|
|
||||||
|
listen 443 http3 default_server;
|
||||||
|
listen [::]:443 http3 default_server;
|
||||||
|
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
include conf.d/include/force-ssl.conf;
|
||||||
|
include conf.d/include/ssl-ciphers.conf;
|
||||||
|
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||||
|
include conf.d/include/block-exploits.conf;
|
||||||
|
add_header alt-svc 'h3=":443"; ma=86400, h3-29=":443"; ma=86400';
|
||||||
|
|
||||||
|
ssl_certificate /data/nginx/dummycert.pem;
|
||||||
|
ssl_certificate_key /data/nginx/dummykey.pem;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||||
|
alias /html/default/;
|
||||||
|
}
|
||||||
|
}
|
@@ -4,7 +4,7 @@ proxy_set_header X-Forwarded-Scheme $scheme;
|
|||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header Accept-Encoding "";
|
proxy_set_header Accept-Encoding "";
|
||||||
proxy_set_header Host $host:$server_port;
|
proxy_set_header Host $host;
|
||||||
|
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1 SSLv3 SSLv2;
|
proxy_ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1 SSLv3 SSLv2;
|
||||||
|
@@ -1,34 +1,28 @@
|
|||||||
server {
|
server {
|
||||||
|
listen 81 ssl http2;
|
||||||
|
listen 81 http3;
|
||||||
|
|
||||||
|
listen [::]:81 ssl http2;
|
||||||
|
listen [::]:81 http3;
|
||||||
|
|
||||||
listen 80;
|
listen 80;
|
||||||
listen [::]:80;
|
listen [::]:80;
|
||||||
|
|
||||||
server_name nginxproxymanager-default;
|
|
||||||
|
|
||||||
include conf.d/include/force-ssl.conf;
|
|
||||||
include conf.d/include/block-exploits.conf;
|
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
|
||||||
}
|
|
||||||
|
|
||||||
# First 443 Host, which is the default if another default doesn't exist
|
|
||||||
server {
|
|
||||||
listen 443 ssl http2;
|
listen 443 ssl http2;
|
||||||
listen 443 http3;
|
|
||||||
listen [::]:443 ssl http2;
|
listen [::]:443 ssl http2;
|
||||||
|
|
||||||
|
listen 443 http3;
|
||||||
listen [::]:443 http3;
|
listen [::]:443 http3;
|
||||||
|
|
||||||
|
server_name "";
|
||||||
|
return 444;
|
||||||
|
|
||||||
|
include conf.d/include/force-ssl.conf;
|
||||||
|
include conf.d/include/ssl-ciphers.conf;
|
||||||
|
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||||
|
include conf.d/include/block-exploits.conf;
|
||||||
add_header alt-svc 'h3=":443"; ma=86400, h3-29=":443"; ma=86400';
|
add_header alt-svc 'h3=":443"; ma=86400, h3-29=":443"; ma=86400';
|
||||||
|
|
||||||
server_name nginxproxymanager-default;
|
|
||||||
|
|
||||||
ssl_certificate /data/nginx/dummycert.pem;
|
ssl_certificate /data/nginx/dummycert.pem;
|
||||||
ssl_certificate_key /data/nginx/dummykey.pem;
|
ssl_certificate_key /data/nginx/dummykey.pem;
|
||||||
|
|
||||||
include conf.d/include/ssl-ciphers.conf;
|
|
||||||
include conf.d/include/block-exploits.conf;
|
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
|
||||||
root /var/www/html;
|
|
||||||
}
|
|
||||||
}
|
}
|
@@ -1,11 +1,11 @@
|
|||||||
# Admin Interface
|
|
||||||
server {
|
server {
|
||||||
listen 81 ssl http2 default_server;
|
listen 81 ssl http2 default_server;
|
||||||
listen 81 http3 default_server;
|
listen 81 http3 default_server;
|
||||||
|
|
||||||
listen [::]:81 ssl http2 default_server;
|
listen [::]:81 ssl http2 default_server;
|
||||||
listen [::]:81 http3 default_server;
|
listen [::]:81 http3 default_server;
|
||||||
|
|
||||||
server_name nginxproxymanager;
|
server_name _;
|
||||||
ssl_certificate /data/nginx/dummycert.pem;
|
ssl_certificate /data/nginx/dummycert.pem;
|
||||||
ssl_certificate_key /data/nginx/dummykey.pem;
|
ssl_certificate_key /data/nginx/dummykey.pem;
|
||||||
include conf.d/include/ssl-ciphers.conf;
|
include conf.d/include/ssl-ciphers.conf;
|
||||||
@@ -26,7 +26,7 @@ server {
|
|||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header Accept-Encoding "";
|
proxy_set_header Accept-Encoding "";
|
||||||
proxy_set_header Host $host:$server_port;
|
proxy_set_header Host $host;
|
||||||
|
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
proxy_set_header Upgrade $http_upgrade;
|
@@ -36,11 +36,15 @@ http {
|
|||||||
gzip_comp_level 9;
|
gzip_comp_level 9;
|
||||||
|
|
||||||
resolver localhost;
|
resolver localhost;
|
||||||
index index.html Index.html;
|
fastcgi_index index.php;
|
||||||
|
index index.php index.html;
|
||||||
|
|
||||||
error_page 404 =307 $scheme://$host:$server_port;
|
error_page 404 =307 $scheme://$host:$server_port;
|
||||||
error_page 497 =301 https://$host:$server_port$request_uri;
|
error_page 497 =301 https://$host:$server_port$request_uri;
|
||||||
|
|
||||||
|
proxy_headers_hash_max_size 1024;
|
||||||
|
proxy_headers_hash_bucket_size 128;
|
||||||
|
|
||||||
# Default upstream scheme
|
# Default upstream scheme
|
||||||
map $host $forward_scheme {
|
map $host $forward_scheme {
|
||||||
default http;
|
default http;
|
||||||
@@ -52,6 +56,22 @@ http {
|
|||||||
'' close;
|
'' close;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
upstream php7 {
|
||||||
|
server unix:/dev/php7.sock;
|
||||||
|
}
|
||||||
|
|
||||||
|
upstream php8 {
|
||||||
|
server unix:/dev/php8.sock;
|
||||||
|
}
|
||||||
|
|
||||||
|
upstream php81 {
|
||||||
|
server unix:/dev/php81.sock;
|
||||||
|
}
|
||||||
|
|
||||||
|
upstream php82 {
|
||||||
|
server unix:/dev/php82.sock;
|
||||||
|
}
|
||||||
|
|
||||||
# Fancy Index
|
# Fancy Index
|
||||||
fancyindex on;
|
fancyindex on;
|
||||||
fancyindex_localtime on;
|
fancyindex_localtime on;
|
||||||
@@ -75,7 +95,10 @@ http {
|
|||||||
set_real_ip_from 169.254.0.0/16;
|
set_real_ip_from 169.254.0.0/16;
|
||||||
set_real_ip_from fc00::/7;
|
set_real_ip_from fc00::/7;
|
||||||
set_real_ip_from fec0::/10;
|
set_real_ip_from fec0::/10;
|
||||||
|
|
||||||
|
include fastcgi.conf;
|
||||||
|
fastcgi_param HTTP_PROXY "";
|
||||||
|
|
||||||
include conf.d/include/ip_ranges.conf;
|
include conf.d/include/ip_ranges.conf;
|
||||||
|
|
||||||
include /data/nginx/default.conf;
|
include /data/nginx/default.conf;
|
||||||
|
Reference in New Issue
Block a user