mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2026-11-15 11:58:26 +00:00
Replace docs vuepress with vitepress
This commit is contained in:
40 files changed
+918
-15507
No files matched your search
+12
-3
@@ -1,5 +1,14 @@
|
||||
.vuepress/dist
|
||||
dist
|
||||
node_modules
|
||||
ts
|
||||
api.md
|
||||
api/
|
||||
.temp
|
||||
.cache
|
||||
.vitepress/cache
|
||||
|
||||
.yarn/*
|
||||
!.yarn/releases
|
||||
!.yarn/plugins
|
||||
!.yarn/sdks
|
||||
!.yarn/versions
|
||||
*.gz
|
||||
*.tgz
|
||||
@@ -0,0 +1,62 @@
|
||||
import { defineConfig, type DefaultTheme } from 'vitepress';
|
||||
|
||||
// https://vitepress.dev/reference/site-config
|
||||
export default defineConfig({
|
||||
title: "Nginx Proxy Manager",
|
||||
description: "Expose your services easily and securely",
|
||||
head: [
|
||||
["link", { rel: "icon", href: "/icon.png" }],
|
||||
["meta", { name: "description", content: "Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt" }],
|
||||
["meta", { property: "og:title", content: "Nginx Proxy Manager" }],
|
||||
["meta", { property: "og:description", content: "Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt"}],
|
||||
["meta", { property: "og:type", content: "website" }],
|
||||
["meta", { property: "og:url", content: "https://nginxproxymanager.com/" }],
|
||||
["meta", { property: "og:image", content: "https://nginxproxymanager.com/icon.png" }],
|
||||
["meta", { name: "twitter:card", content: "summary"}],
|
||||
["meta", { name: "twitter:title", content: "Nginx Proxy Manager"}],
|
||||
["meta", { name: "twitter:description", content: "Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt"}],
|
||||
["meta", { name: "twitter:image", content: "https://nginxproxymanager.com/icon.png"}],
|
||||
["meta", { name: "twitter:alt", content: "Nginx Proxy Manager"}],
|
||||
// GA
|
||||
['script', { async: 'true', src: 'https://www.googletagmanager.com/gtag/js?id=G-TXT8F5WY5B'}],
|
||||
['script', {}, "window.dataLayer = window.dataLayer || [];\nfunction gtag(){dataLayer.push(arguments);}\ngtag('js', new Date());\ngtag('config', 'G-TXT8F5WY5B');"],
|
||||
],
|
||||
sitemap: {
|
||||
hostname: 'https://nginxproxymanager.com'
|
||||
},
|
||||
metaChunk: true,
|
||||
srcDir: './src',
|
||||
outDir: './dist',
|
||||
themeConfig: {
|
||||
// https://vitepress.dev/reference/default-theme-config
|
||||
logo: { src: '/logo.svg', width: 24, height: 24 },
|
||||
nav: [
|
||||
{ text: 'Setup', link: '/setup/' },
|
||||
],
|
||||
sidebar: [
|
||||
{
|
||||
items: [
|
||||
// { text: 'Home', link: '/' },
|
||||
{ text: 'Guide', link: '/guide/' },
|
||||
{ text: 'Screenshots', link: '/screenshots/' },
|
||||
{ text: 'Setup Instructions', link: '/setup/' },
|
||||
{ text: 'Advanced Configuration', link: '/advanced-config/' },
|
||||
{ text: 'Upgrading', link: '/upgrading/' },
|
||||
{ text: 'Frequently Asked Questions', link: '/faq/' },
|
||||
{ text: 'Third Party', link: '/third-party/' },
|
||||
{ text: 'Development', link: '/development/' },
|
||||
]
|
||||
}
|
||||
],
|
||||
socialLinks: [
|
||||
{ icon: 'github', link: 'https://github.com/NginxProxyManager/nginx-proxy-manager' }
|
||||
],
|
||||
search: {
|
||||
provider: 'local'
|
||||
},
|
||||
footer: {
|
||||
message: 'Released under the MIT License.',
|
||||
copyright: 'Copyright © 2016-present jc21.com'
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,27 @@
|
||||
:root {
|
||||
--vp-home-hero-name-color: transparent;
|
||||
--vp-home-hero-name-background: -webkit-linear-gradient(120deg, #f15833 30%, #FAA42F);
|
||||
|
||||
--vp-home-hero-image-background-image: linear-gradient(-45deg, #aaaaaa 50%, #777777 50%);
|
||||
--vp-home-hero-image-filter: blur(44px);
|
||||
|
||||
--vp-c-brand-1: #f15833;
|
||||
--vp-c-brand-2: #FAA42F;
|
||||
--vp-c-brand-3: #f15833;
|
||||
}
|
||||
|
||||
@media (min-width: 640px) {
|
||||
:root {
|
||||
--vp-home-hero-image-filter: blur(56px);
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 960px) {
|
||||
:root {
|
||||
--vp-home-hero-image-filter: blur(68px);
|
||||
}
|
||||
}
|
||||
|
||||
.inline-img img {
|
||||
display: inline;
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
import DefaultTheme from 'vitepress/theme'
|
||||
import './custom.css'
|
||||
|
||||
export default DefaultTheme
|
||||
@@ -1,83 +0,0 @@
|
||||
module.exports = {
|
||||
locales: {
|
||||
"/": {
|
||||
lang: "en-US",
|
||||
title: "Nginx Proxy Manager",
|
||||
description: "Expose your services easily and securely"
|
||||
}
|
||||
},
|
||||
head: [
|
||||
["link", { rel: "icon", href: "/icon.png" }],
|
||||
["meta", { name: "description", content: "Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt" }],
|
||||
["meta", { property: "og:title", content: "Nginx Proxy Manager" }],
|
||||
["meta", { property: "og:description", content: "Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt"}],
|
||||
["meta", { property: "og:type", content: "website" }],
|
||||
["meta", { property: "og:url", content: "https://nginxproxymanager.com/" }],
|
||||
["meta", { property: "og:image", content: "https://nginxproxymanager.com/icon.png" }],
|
||||
["meta", { name: "twitter:card", content: "summary"}],
|
||||
["meta", { name: "twitter:title", content: "Nginx Proxy Manager"}],
|
||||
["meta", { name: "twitter:description", content: "Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt"}],
|
||||
["meta", { name: "twitter:image", content: "https://nginxproxymanager.com/icon.png"}],
|
||||
["meta", { name: "twitter:alt", content: "Nginx Proxy Manager"}],
|
||||
],
|
||||
themeConfig: {
|
||||
logo: "/icon.png",
|
||||
// the GitHub repo path
|
||||
repo: "jc21/nginx-proxy-manager",
|
||||
// the label linking to the repo
|
||||
repoLabel: "GitHub",
|
||||
// if your docs are not at the root of the repo:
|
||||
docsDir: "docs",
|
||||
// defaults to false, set to true to enable
|
||||
editLinks: true,
|
||||
locales: {
|
||||
"/": {
|
||||
// text for the language dropdown
|
||||
selectText: "Languages",
|
||||
// label for this locale in the language dropdown
|
||||
label: "English",
|
||||
// Custom text for edit link. Defaults to "Edit this page"
|
||||
editLinkText: "Edit this page on GitHub",
|
||||
// Custom navbar values
|
||||
nav: [{ text: "Setup", link: "/setup/" }, { text: "API", link: "/api/index.html" }],
|
||||
// Custom sidebar values
|
||||
sidebar: [
|
||||
"/",
|
||||
["/guide/", "Guide"],
|
||||
["/screenshots/", "Screenshots"],
|
||||
["/setup/", "Setup Instructions"],
|
||||
["/advanced-config/", "Advanced Configuration"],
|
||||
["/upgrading/", "Upgrading"],
|
||||
["/faq/", "Frequently Asked Questions"],
|
||||
["/third-party/", "Third Party"],
|
||||
["/dev-notes/", "Development Notes"]
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
[
|
||||
"@vuepress/google-analytics",
|
||||
{
|
||||
ga: "UA-99675467-4"
|
||||
}
|
||||
],
|
||||
[
|
||||
"sitemap",
|
||||
{
|
||||
hostname: "https://nginxproxymanager.com"
|
||||
}
|
||||
],
|
||||
[
|
||||
'vuepress-plugin-zooming',
|
||||
{
|
||||
selector: '.zooming',
|
||||
delay: 1000,
|
||||
options: {
|
||||
bgColor: 'black',
|
||||
zIndex: 10000,
|
||||
},
|
||||
},
|
||||
],
|
||||
]
|
||||
};
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 57 KiB |
Binary file not shown.
@@ -1,23 +0,0 @@
|
||||
.home .hero img
|
||||
max-width: 500px !important
|
||||
min-width: 300px
|
||||
width: 100%
|
||||
|
||||
.center
|
||||
margin 0 auto;
|
||||
width: 80%
|
||||
|
||||
#main-title
|
||||
display: none
|
||||
|
||||
.hero
|
||||
margin: 150px 25px 70px
|
||||
|
||||
@font-face
|
||||
font-family: 'Nerd Font';
|
||||
src: url("/nerd-font.woff2") format("woff2");
|
||||
font-weight: 400;
|
||||
font-style: normal
|
||||
|
||||
code
|
||||
font-family: 'Nerd Font', source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||
@@ -1,4 +0,0 @@
|
||||
$accentColor = #f15833
|
||||
$textColor = #663015
|
||||
$borderColor = #eaecef
|
||||
$codeBgColor = #282c34
|
||||
@@ -1,73 +0,0 @@
|
||||
---
|
||||
home: true
|
||||
heroImage: /logo.png
|
||||
actionText: Get Started →
|
||||
actionLink: /guide/
|
||||
footer: MIT Licensed | Copyright © 2016-2021 jc21.com
|
||||
---
|
||||
|
||||
<div class="features">
|
||||
<div class="feature">
|
||||
<h2>Get Connected</h2>
|
||||
<p>
|
||||
Expose web services on your network ·
|
||||
Free SSL with Let's Encrypt ·
|
||||
Designed with security in mind ·
|
||||
Perfect for home networks
|
||||
</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h2>Proxy Hosts</h2>
|
||||
<p>Expose your private network Web services and get connected anywhere.</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h2>Beautiful UI</h2>
|
||||
<p>Based on Tabler, the interface is a pleasure to use. Configuring a server has never been so fun.</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h2>Free SSL</h2>
|
||||
<p>Built in Let’s Encrypt support allows you to secure your Web services at no cost to you. The certificates even renew themselves!</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h2>Docker FTW</h2>
|
||||
<p>Built as a Docker Image, Nginx Proxy Manager only requires a database.</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h2>Multiple Users</h2>
|
||||
<p>Configure other users to either view or manage their own hosts. Full access permissions are available.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
### Quick Setup
|
||||
|
||||
1. Install Docker and Docker-Compose
|
||||
|
||||
- [Docker Install documentation](https://docs.docker.com/install/)
|
||||
- [Docker-Compose Install documentation](https://docs.docker.com/compose/install/)
|
||||
|
||||
2. Create a docker-compose.yml file similar to this:
|
||||
|
||||
```yml
|
||||
version: '3'
|
||||
services:
|
||||
app:
|
||||
image: 'jc21/nginx-proxy-manager:3'
|
||||
ports:
|
||||
- '80:80'
|
||||
- '81:81'
|
||||
- '443:443'
|
||||
volumes:
|
||||
- ./data:/data
|
||||
```
|
||||
|
||||
3. Bring up your stack
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
4. Log in to the Admin UI
|
||||
|
||||
When your docker container is running, connect to it on port `81` for the admin interface.
|
||||
|
||||
[http://127.0.0.1:81](http://127.0.0.1:81)
|
||||
@@ -1,48 +0,0 @@
|
||||
# Development Notes
|
||||
|
||||
Requesting a SSL Certificate is a complicated process to understand.
|
||||
|
||||
This is an explanation of how the ACME standard of certificates works.
|
||||
|
||||
## Certificate Request via HTTP validation
|
||||
|
||||
1. You define `website.example.com` DNS record to point to `123.45.67.89`
|
||||
2. You ask a Certificate Authority to give you a Certificate and initiate validation from their side
|
||||
3. The CA gives you a token, and you should be running a http-only webserver on `123.45.67.89` that returns this token
|
||||
4. The CA makes a request to your domain `http://website.example.com/.well-known/acme-challenge/` and gets the token
|
||||
5. If the CA thinks the token matches, they issue you the certificates.
|
||||
|
||||
## Certificate Request via DNS validation
|
||||
|
||||
1. You ask a Certificate Authority to give you a Certificate and initiate validation from their side
|
||||
2. The CA gives you a token, and you update the DNS records on your domain with this token
|
||||
3. The CA checks the DNS record, with a timeout waiting for propagation
|
||||
4. If the CA thinks the token matches, they issue you the certificates.
|
||||
|
||||
## ACME DNS in an isolated test environment
|
||||
|
||||
### Local CA
|
||||
|
||||
In order to have a local ACME compatible CA that you can control, you have 2 options:
|
||||
|
||||
- pebble by Letsencrypt
|
||||
- stepca by Step
|
||||
|
||||
stepca is better as it has better DNS Acme validation support.
|
||||
|
||||
### Local DNS Provider
|
||||
|
||||
PowerDNS is a really good, free DNS server and acme.sh has support for it.
|
||||
|
||||
### Getting things to work together
|
||||
|
||||
Since your don't really own `website.example.com` and if you hit it with your system DNS
|
||||
it will fail, you'll need to use a custom DNS responder to return an A record for this
|
||||
that points to your running NPM gateway. My [dnsrouter](https://github.com/jc21/dnsrouter)
|
||||
project accomplishes this nicely. After this is setup, as long as the resolv.conf points
|
||||
to this dns responder, the resolution should work locally.
|
||||
|
||||
1. You ask the stepca CA to give you a Certificate and initiate validation
|
||||
2. The CA returns a token, and you update the PDNS records on your domain with this token
|
||||
3. The CA checks the DNS record, with a timeout waiting for propagation
|
||||
4. If the CA thinks the token matches, they issue you the certificates.
|
||||
@@ -1,23 +0,0 @@
|
||||
# FAQ
|
||||
|
||||
## Do I have to use Docker?
|
||||
|
||||
Yes, that's how this project is packaged.
|
||||
|
||||
This makes it easier to support the project when I have control over the version of Nginx and NodeJS
|
||||
being used. In future this could change if the backend was no longer using NodeJS and it's long list
|
||||
of dependencies.
|
||||
|
||||
|
||||
## Can I run it on a Raspberry Pi?
|
||||
|
||||
Yes! The docker image is multi-arch and is built for a variety of architectures. If yours is
|
||||
[not listed](https://hub.docker.com/r/jc21/nginx-proxy-manager/tags) please open a
|
||||
[GitHub issue](https://github.com/jc21/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=).
|
||||
|
||||
## I can't get my service to proxy properly?
|
||||
|
||||
Your best bet is to ask the [Reddit community for support](https://www.reddit.com/r/nginxproxymanager/). There's safety in numbers.
|
||||
|
||||
Gitter is best left for anyone contributing to the project to ask for help about internals, code reviews etc.
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
../../README.md
|
||||
+7
-773
@@ -1,777 +1,11 @@
|
||||
{
|
||||
"name": "docs",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@vuepress/plugin-google-analytics": "^1.9.10",
|
||||
"abbrev": "^2.0.0",
|
||||
"accepts": "^1.3.8",
|
||||
"acorn": "^8.11.3",
|
||||
"agentkeepalive": "^4.5.0",
|
||||
"ajv": "^8.13.0",
|
||||
"ajv-errors": "^3.0.0",
|
||||
"ajv-keywords": "^5.1.0",
|
||||
"algoliasearch": "^4.23.3",
|
||||
"alphanum-sort": "^1.0.2",
|
||||
"ansi-colors": "^4.1.3",
|
||||
"ansi-escapes": "^7.0.0",
|
||||
"ansi-html": "^0.0.9",
|
||||
"ansi-regex": "^6.0.1",
|
||||
"ansi-styles": "^6.2.1",
|
||||
"anymatch": "^3.1.3",
|
||||
"aproba": "^2.0.0",
|
||||
"argparse": "^2.0.1",
|
||||
"arr-diff": "^4.0.0",
|
||||
"arr-flatten": "^1.1.0",
|
||||
"arr-union": "^3.1.0",
|
||||
"array-flatten": "^3.0.0",
|
||||
"array-union": "^3.0.1",
|
||||
"array-uniq": "^3.0.0",
|
||||
"array-unique": "^0.3.2",
|
||||
"asn1": "^0.2.6",
|
||||
"asn1.js": "^5.4.1",
|
||||
"assert": "^2.1.0",
|
||||
"assert-plus": "^1.0.0",
|
||||
"assign-symbols": "^2.0.2",
|
||||
"async": "^3.2.5",
|
||||
"async-each": "^1.0.6",
|
||||
"async-limiter": "^2.0.0",
|
||||
"asynckit": "^0.4.0",
|
||||
"atob": "^2.1.2",
|
||||
"autocomplete.js": "^0.38.1",
|
||||
"autoprefixer": "^10.4.19",
|
||||
"aws-sign2": "^0.7.0",
|
||||
"aws4": "^1.12.0",
|
||||
"babel-loader": "^9.1.3",
|
||||
"babel-plugin-dynamic-import-node": "^2.3.3",
|
||||
"babel-plugin-module-resolver": "^5.0.2",
|
||||
"balanced-match": "^3.0.1",
|
||||
"base": "^3.0.0",
|
||||
"base64-js": "^1.5.1",
|
||||
"batch": "^0.6.1",
|
||||
"bcrypt-pbkdf": "^1.0.2",
|
||||
"big.js": "^6.2.1",
|
||||
"binary-extensions": "^3.0.0",
|
||||
"bluebird": "^3.7.2",
|
||||
"bn.js": "^5.2.1",
|
||||
"body-parser": "^1.20.2",
|
||||
"bonjour": "^3.5.0",
|
||||
"boolbase": "^1.0.0",
|
||||
"brace-expansion": "^4.0.0",
|
||||
"braces": "^3.0.2",
|
||||
"brorand": "^1.1.0",
|
||||
"browserify-aes": "^1.2.0",
|
||||
"browserify-cipher": "^1.0.1",
|
||||
"browserify-des": "^1.0.2",
|
||||
"browserify-rsa": "^4.1.0",
|
||||
"browserify-sign": "^4.2.3",
|
||||
"browserify-zlib": "^0.2.0",
|
||||
"browserslist": "^4.23.0",
|
||||
"buffer": "^6.0.3",
|
||||
"buffer-from": "^1.1.2",
|
||||
"buffer-indexof": "^1.1.1",
|
||||
"buffer-json": "^2.0.0",
|
||||
"buffer-xor": "^2.0.2",
|
||||
"builtin-status-codes": "^3.0.0",
|
||||
"bytes": "^3.1.2",
|
||||
"cac": "^6.7.14",
|
||||
"cacache": "^18.0.3",
|
||||
"cache-base": "^4.0.2",
|
||||
"cache-loader": "^4.1.0",
|
||||
"call-me-maybe": "^1.0.2",
|
||||
"caller-callsite": "^5.0.0",
|
||||
"caller-path": "^4.0.0",
|
||||
"callsites": "^4.1.0",
|
||||
"camel-case": "^4.1.2",
|
||||
"camelcase": "^8.0.0",
|
||||
"caniuse-api": "^3.0.0",
|
||||
"caniuse-lite": "^1.0.30001616",
|
||||
"caseless": "^0.12.0",
|
||||
"chalk": "^5.3.0",
|
||||
"chokidar": "^3.6.0",
|
||||
"chownr": "^3.0.0",
|
||||
"chrome-trace-event": "^1.0.3",
|
||||
"ci-info": "^4.0.0",
|
||||
"cipher-base": "^1.0.4",
|
||||
"class-utils": "^0.3.6",
|
||||
"clean-css": "^5.3.3",
|
||||
"clipboard": "^2.0.11",
|
||||
"cliui": "^8.0.1",
|
||||
"coa": "^2.0.2",
|
||||
"code-point-at": "^1.1.0",
|
||||
"collection-visit": "^1.0.0",
|
||||
"color": "^4.2.3",
|
||||
"color-convert": "^2.0.1",
|
||||
"color-name": "^2.0.0",
|
||||
"color-string": "^1.9.1",
|
||||
"combined-stream": "^1.0.8",
|
||||
"commander": "^12.0.0",
|
||||
"commondir": "^1.0.1",
|
||||
"component-emitter": "^2.0.0",
|
||||
"compressible": "^2.0.18",
|
||||
"compression": "^1.7.4",
|
||||
"concat-map": "^0.0.2",
|
||||
"concat-stream": "^2.0.0",
|
||||
"connect-history-api-fallback": "^2.0.0",
|
||||
"consola": "^3.2.3",
|
||||
"console-browserify": "^1.2.0",
|
||||
"consolidate": "^1.0.3",
|
||||
"constants-browserify": "^1.0.0",
|
||||
"content-disposition": "^0.5.4",
|
||||
"content-type": "^1.0.5",
|
||||
"convert-source-map": "^2.0.0",
|
||||
"cookie": "^0.6.0",
|
||||
"cookie-signature": "^1.2.1",
|
||||
"copy-concurrently": "^1.0.5",
|
||||
"copy-descriptor": "^0.1.1",
|
||||
"copy-webpack-plugin": "^12.0.2",
|
||||
"core-js": "^3.37.0",
|
||||
"core-util-is": "^1.0.3",
|
||||
"cosmiconfig": "^9.0.0",
|
||||
"create-ecdh": "^4.0.4",
|
||||
"create-hash": "^1.2.0",
|
||||
"create-hmac": "^1.1.7",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"crypto-browserify": "^3.12.0",
|
||||
"css": "^3.0.0",
|
||||
"css-color-names": "^1.0.1",
|
||||
"css-declaration-sorter": "^7.2.0",
|
||||
"css-loader": "^7.1.1",
|
||||
"css-parse": "^2.0.0",
|
||||
"css-select": "^5.1.0",
|
||||
"css-select-base-adapter": "^0.1.1",
|
||||
"css-tree": "^2.3.1",
|
||||
"css-unit-converter": "^1.1.2",
|
||||
"css-what": "^6.1.0",
|
||||
"cssesc": "^3.0.0",
|
||||
"cssnano": "^7.0.1",
|
||||
"cssnano-preset-default": "^7.0.1",
|
||||
"cssnano-util-get-arguments": "^4.0.0",
|
||||
"cssnano-util-get-match": "^4.0.0",
|
||||
"cssnano-util-raw-cache": "^4.0.1",
|
||||
"cssnano-util-same-parent": "^4.0.1",
|
||||
"csso": "^5.0.5",
|
||||
"cyclist": "^1.0.2",
|
||||
"dashdash": "^2.0.0",
|
||||
"de-indent": "^1.0.2",
|
||||
"debug": "^4.3.4",
|
||||
"decamelize": "^6.0.0",
|
||||
"decode-uri-component": "^0.4.1",
|
||||
"deep-equal": "^2.2.3",
|
||||
"deepmerge": "^4.3.1",
|
||||
"default-gateway": "^7.2.2",
|
||||
"define-properties": "^1.2.1",
|
||||
"define-property": "^2.0.2",
|
||||
"del": "^7.1.0",
|
||||
"delayed-stream": "^1.0.0",
|
||||
"delegate": "^3.2.0",
|
||||
"depd": "^2.0.0",
|
||||
"des.js": "^1.1.0",
|
||||
"destroy": "^1.2.0",
|
||||
"detect-node": "^2.1.0",
|
||||
"diacritics": "^1.3.0",
|
||||
"diffie-hellman": "^5.0.3",
|
||||
"dir-glob": "^3.0.1",
|
||||
"dns-equal": "^1.0.0",
|
||||
"dns-packet": "^5.6.1",
|
||||
"dns-txt": "^2.0.2",
|
||||
"docsearch.js": "^2.6.3",
|
||||
"dom-converter": "^0.2.0",
|
||||
"dom-serializer": "^2.0.0",
|
||||
"dom-walk": "^0.1.2",
|
||||
"domain-browser": "^5.7.0",
|
||||
"domelementtype": "^2.3.0",
|
||||
"domhandler": "^5.0.3",
|
||||
"domutils": "^3.1.0",
|
||||
"dot-prop": "^8.0.2",
|
||||
"duplexify": "^4.1.3",
|
||||
"ecc-jsbn": "^0.2.0",
|
||||
"ee-first": "^1.1.1",
|
||||
"electron-to-chromium": "^1.4.758",
|
||||
"elliptic": "^6.5.5",
|
||||
"emoji-regex": "^10.3.0",
|
||||
"emojis-list": "^3.0.0",
|
||||
"encodeurl": "^2.0.0",
|
||||
"end-of-stream": "^1.4.4",
|
||||
"enhanced-resolve": "^5.16.1",
|
||||
"entities": "^4.5.0",
|
||||
"envify": "^4.1.0",
|
||||
"envinfo": "^7.13.0",
|
||||
"errno": "^1.0.0",
|
||||
"error-ex": "^1.3.2",
|
||||
"es-abstract": "^1.23.3",
|
||||
"es-to-primitive": "^1.2.1",
|
||||
"es6-promise": "^4.2.8",
|
||||
"escape-html": "^1.0.3",
|
||||
"escape-string-regexp": "^5.0.0",
|
||||
"eslint-scope": "^8.0.1",
|
||||
"esprima": "^4.0.1",
|
||||
"esrecurse": "^4.3.0",
|
||||
"estraverse": "^5.3.0",
|
||||
"esutils": "^2.0.3",
|
||||
"etag": "^1.8.1",
|
||||
"eventemitter3": "^5.0.1",
|
||||
"events": "^3.3.0",
|
||||
"eventsource": "^2.0.2",
|
||||
"evp_bytestokey": "^1.0.3",
|
||||
"execa": "^8.0.1",
|
||||
"expand-brackets": "^4.0.0",
|
||||
"express": "^4.19.2",
|
||||
"extend": "^3.0.2",
|
||||
"extend-shallow": "^3.0.2",
|
||||
"extglob": "^3.0.0",
|
||||
"extsprintf": "^1.4.1",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"fast-glob": "^3.3.2",
|
||||
"fast-json-stable-stringify": "^2.1.0",
|
||||
"faye-websocket": "^0.11.4",
|
||||
"figgy-pudding": "^3.5.2",
|
||||
"figures": "^6.1.0",
|
||||
"file-loader": "^6.2.0",
|
||||
"fill-range": "^7.0.1",
|
||||
"finalhandler": "^1.2.0",
|
||||
"find-babel-config": "^2.1.1",
|
||||
"find-cache-dir": "^5.0.0",
|
||||
"find-up": "^7.0.0",
|
||||
"flush-write-stream": "^2.0.0",
|
||||
"follow-redirects": "^1.15.6",
|
||||
"for-in": "^1.0.2",
|
||||
"foreach": "^2.0.6",
|
||||
"forever-agent": "^0.6.1",
|
||||
"form-data": "^4.0.0",
|
||||
"forwarded": "^0.2.0",
|
||||
"fragment-cache": "^0.2.1",
|
||||
"fresh": "^0.5.2",
|
||||
"from2": "^2.3.0",
|
||||
"fs-extra": "^11.2.0",
|
||||
"fs-write-stream-atomic": "^1.0.10",
|
||||
"fs.realpath": "^1.0.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"gensync": "^1.0.0-beta.2",
|
||||
"get-caller-file": "^2.0.5",
|
||||
"get-stream": "^9.0.1",
|
||||
"get-value": "^3.0.1",
|
||||
"getpass": "^0.1.7",
|
||||
"glob": "^10.3.12",
|
||||
"glob-parent": "^6.0.2",
|
||||
"glob-to-regexp": "^0.4.1",
|
||||
"global": "^4.4.0",
|
||||
"globals": "^15.1.0",
|
||||
"globby": "^14.0.1",
|
||||
"good-listener": "^1.2.2",
|
||||
"graceful-fs": "^4.2.11",
|
||||
"gray-matter": "^4.0.3",
|
||||
"handle-thing": "^2.0.1",
|
||||
"har-schema": "^2.0.0",
|
||||
"har-validator": "^5.1.5",
|
||||
"has": "^1.0.4",
|
||||
"has-ansi": "^5.0.1",
|
||||
"has-flag": "^5.0.1",
|
||||
"has-symbols": "^1.0.3",
|
||||
"has-value": "^2.0.2",
|
||||
"has-values": "^2.0.1",
|
||||
"hash-base": "^3.1.0",
|
||||
"hash-sum": "^2.0.0",
|
||||
"hash.js": "^1.1.7",
|
||||
"he": "^1.2.0",
|
||||
"hex-color-regex": "^1.1.0",
|
||||
"hmac-drbg": "^1.0.1",
|
||||
"hogan.js": "^3.0.2",
|
||||
"hpack.js": "^2.1.6",
|
||||
"hsl-regex": "^1.0.0",
|
||||
"hsla-regex": "^1.0.0",
|
||||
"html-comment-regex": "^1.1.2",
|
||||
"html-entities": "^2.5.2",
|
||||
"html-minifier": "^4.0.0",
|
||||
"html-tags": "^4.0.0",
|
||||
"htmlparser2": "^9.1.0",
|
||||
"http-deceiver": "^1.2.7",
|
||||
"http-errors": "^2.0.0",
|
||||
"http-parser-js": "^0.5.8",
|
||||
"http-proxy": "^1.18.1",
|
||||
"http-proxy-middleware": "^3.0.0",
|
||||
"http-signature": "^1.4.0",
|
||||
"https-browserify": "^1.0.0",
|
||||
"iconv-lite": "^0.6.3",
|
||||
"icss-replace-symbols": "^1.1.0",
|
||||
"icss-utils": "^5.1.0",
|
||||
"ieee754": "^1.2.1",
|
||||
"iferr": "^1.0.2",
|
||||
"ignore": "^5.3.1",
|
||||
"immediate": "^3.3.0",
|
||||
"import-cwd": "^3.0.0",
|
||||
"import-fresh": "^3.3.0",
|
||||
"import-from": "^4.0.0",
|
||||
"import-local": "^3.1.0",
|
||||
"imurmurhash": "^0.1.4",
|
||||
"indexes-of": "^1.0.1",
|
||||
"infer-owner": "^1.0.4",
|
||||
"inflight": "^1.0.6",
|
||||
"inherits": "^2.0.4",
|
||||
"internal-ip": "^8.0.0",
|
||||
"invariant": "^2.2.4",
|
||||
"invert-kv": "^4.2.0",
|
||||
"ip": "^2.0.1",
|
||||
"ip-regex": "^5.0.0",
|
||||
"ipaddr.js": "^2.2.0",
|
||||
"is-absolute-url": "^4.0.1",
|
||||
"is-accessor-descriptor": "^3.0.5",
|
||||
"is-arguments": "^1.1.1",
|
||||
"is-arrayish": "^0.3.2",
|
||||
"is-binary-path": "^3.0.0",
|
||||
"is-buffer": "^2.0.5",
|
||||
"is-callable": "^1.2.7",
|
||||
"is-color-stop": "^1.1.0",
|
||||
"is-data-descriptor": "^2.1.3",
|
||||
"is-date-object": "^1.0.5",
|
||||
"is-descriptor": "^3.1.1",
|
||||
"is-directory": "^0.3.1",
|
||||
"is-extendable": "^1.0.1",
|
||||
"is-extglob": "^2.1.1",
|
||||
"is-fullwidth-code-point": "^5.0.0",
|
||||
"is-glob": "^4.0.3",
|
||||
"is-number": "^7.0.0",
|
||||
"is-obj": "^3.0.0",
|
||||
"is-path-cwd": "^3.0.0",
|
||||
"is-path-in-cwd": "^4.0.0",
|
||||
"is-path-inside": "^4.0.0",
|
||||
"is-plain-obj": "^4.1.0",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"is-regex": "^1.1.4",
|
||||
"is-resolvable": "^1.1.0",
|
||||
"is-stream": "^4.0.1",
|
||||
"is-svg": "^5.0.0",
|
||||
"is-symbol": "^1.0.4",
|
||||
"is-typedarray": "^1.0.0",
|
||||
"is-windows": "^1.0.2",
|
||||
"is-wsl": "^3.1.0",
|
||||
"isarray": "^2.0.5",
|
||||
"isexe": "^3.1.1",
|
||||
"isobject": "^4.0.0",
|
||||
"isstream": "^0.1.2",
|
||||
"javascript-stringify": "^2.1.0",
|
||||
"js-levenshtein": "^1.1.6",
|
||||
"js-tokens": "^9.0.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"jsbn": "^1.1.0",
|
||||
"jsesc": "^3.0.2",
|
||||
"json-parse-better-errors": "^1.0.2",
|
||||
"json-schema": "^0.4.0",
|
||||
"json-schema-traverse": "^1.0.0",
|
||||
"json-stringify-safe": "^5.0.1",
|
||||
"json3": "^3.3.3",
|
||||
"json5": "^2.2.3",
|
||||
"jsonfile": "^6.1.0",
|
||||
"jsprim": "^2.0.2",
|
||||
"killable": "^1.0.1",
|
||||
"kind-of": "^6.0.3",
|
||||
"last-call-webpack-plugin": "^3.0.0",
|
||||
"lcid": "^5.0.0",
|
||||
"linkify-it": "^5.0.0",
|
||||
"load-script": "^2.0.0",
|
||||
"loader-runner": "^4.3.0",
|
||||
"loader-utils": "^3.2.1",
|
||||
"locate-path": "^7.2.0",
|
||||
"lodash": "^4.17.21",
|
||||
"lodash._reinterpolate": "^3.0.0",
|
||||
"lodash.chunk": "^4.2.0",
|
||||
"lodash.clonedeep": "^4.5.0",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"lodash.kebabcase": "^4.1.1",
|
||||
"lodash.memoize": "^4.1.2",
|
||||
"lodash.padstart": "^4.6.1",
|
||||
"lodash.sortby": "^4.7.0",
|
||||
"lodash.template": "^4.5.0",
|
||||
"lodash.templatesettings": "^4.2.0",
|
||||
"lodash.uniq": "^4.5.0",
|
||||
"loglevel": "^1.9.1",
|
||||
"loose-envify": "^1.4.0",
|
||||
"lower-case": "^2.0.2",
|
||||
"lru-cache": "^10.2.2",
|
||||
"make-dir": "^5.0.0",
|
||||
"mamacro": "^0.0.7",
|
||||
"map-age-cleaner": "^0.2.0",
|
||||
"map-cache": "^0.2.2",
|
||||
"map-visit": "^1.0.0",
|
||||
"markdown-it": "^14.1.0",
|
||||
"markdown-it-anchor": "^8.6.7",
|
||||
"markdown-it-chain": "^1.3.0",
|
||||
"markdown-it-container": "^4.0.0",
|
||||
"markdown-it-emoji": "^3.0.0",
|
||||
"markdown-it-table-of-contents": "^0.6.0",
|
||||
"md5.js": "^1.3.5",
|
||||
"mdn-data": "^2.6.1",
|
||||
"mdurl": "^2.0.0",
|
||||
"media-typer": "^1.1.0",
|
||||
"mem": "^9.0.2",
|
||||
"memory-fs": "^0.5.0",
|
||||
"merge-descriptors": "^2.0.0",
|
||||
"merge-source-map": "^1.1.0",
|
||||
"merge2": "^1.4.1",
|
||||
"methods": "^1.1.2",
|
||||
"micromatch": "^4.0.5",
|
||||
"miller-rabin": "^4.0.1",
|
||||
"mime": "^4.0.3",
|
||||
"mime-db": "^1.52.0",
|
||||
"mime-types": "^2.1.35",
|
||||
"mimic-fn": "^4.0.0",
|
||||
"min-document": "^2.19.0",
|
||||
"mini-css-extract-plugin": "^2.9.0",
|
||||
"minimalistic-assert": "^1.0.1",
|
||||
"minimalistic-crypto-utils": "^1.0.1",
|
||||
"minimatch": "^9.0.4",
|
||||
"minimist": "^1.2.8",
|
||||
"mississippi": "^4.0.0",
|
||||
"mixin-deep": "^2.0.1",
|
||||
"mkdirp": "^3.0.1",
|
||||
"move-concurrently": "^1.0.1",
|
||||
"ms": "^2.1.3",
|
||||
"multicast-dns": "^7.2.5",
|
||||
"multicast-dns-service-types": "^1.1.0",
|
||||
"nanomatch": "^1.2.13",
|
||||
"negotiator": "^0.6.3",
|
||||
"neo-async": "^2.6.2",
|
||||
"nice-try": "^3.0.1",
|
||||
"no-case": "^3.0.4",
|
||||
"node-forge": "^1.3.1",
|
||||
"node-libs-browser": "^2.2.1",
|
||||
"node-releases": "^2.0.14",
|
||||
"nopt": "^7.2.1",
|
||||
"normalize-path": "^3.0.0",
|
||||
"normalize-range": "^0.1.2",
|
||||
"normalize-url": "^8.0.1",
|
||||
"npm-run-path": "^5.3.0",
|
||||
"nprogress": "^0.2.0",
|
||||
"nth-check": "^2.1.1",
|
||||
"num2fraction": "^1.2.2",
|
||||
"number-is-nan": "^2.0.0",
|
||||
"oauth-sign": "^0.9.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"object-copy": "^1.0.0",
|
||||
"object-inspect": "^1.13.1",
|
||||
"object-is": "^1.1.6",
|
||||
"object-keys": "^1.1.1",
|
||||
"object-visit": "^1.0.1",
|
||||
"object.assign": "^4.1.5",
|
||||
"object.getownpropertydescriptors": "^2.1.8",
|
||||
"object.pick": "^1.3.0",
|
||||
"object.values": "^1.2.0",
|
||||
"obuf": "^1.1.2",
|
||||
"on-finished": "^2.4.1",
|
||||
"on-headers": "^1.0.2",
|
||||
"once": "^1.4.0",
|
||||
"opencollective-postinstall": "^2.0.3",
|
||||
"opn": "^6.0.0",
|
||||
"optimize-css-assets-webpack-plugin": "^6.0.1",
|
||||
"original": "^1.0.2",
|
||||
"os-browserify": "^0.3.0",
|
||||
"os-locale": "^6.0.2",
|
||||
"p-defer": "^4.0.1",
|
||||
"p-finally": "^2.0.1",
|
||||
"p-is-promise": "^4.0.0",
|
||||
"p-limit": "^5.0.0",
|
||||
"p-locate": "^6.0.0",
|
||||
"p-map": "^7.0.2",
|
||||
"p-retry": "^6.2.0",
|
||||
"p-try": "^3.0.0",
|
||||
"pako": "^2.1.0",
|
||||
"parallel-transform": "^1.2.0",
|
||||
"param-case": "^3.0.4",
|
||||
"parse-asn1": "^5.1.7",
|
||||
"parse-json": "^8.1.0",
|
||||
"parseurl": "^1.3.3",
|
||||
"pascalcase": "^2.0.0",
|
||||
"path-browserify": "^1.0.1",
|
||||
"path-dirname": "^1.0.2",
|
||||
"path-exists": "^5.0.0",
|
||||
"path-is-absolute": "^2.0.0",
|
||||
"path-is-inside": "^1.0.2",
|
||||
"path-key": "^4.0.0",
|
||||
"path-parse": "^1.0.7",
|
||||
"path-to-regexp": "^6.2.2",
|
||||
"path-type": "^5.0.0",
|
||||
"pbkdf2": "^3.1.2",
|
||||
"performance-now": "^2.1.0",
|
||||
"pify": "^6.1.0",
|
||||
"pinkie": "^2.0.4",
|
||||
"pinkie-promise": "^2.0.1",
|
||||
"pkg-dir": "^8.0.0",
|
||||
"pkg-up": "^4.0.0",
|
||||
"portfinder": "^1.0.32",
|
||||
"posix-character-classes": "^1.0.0",
|
||||
"postcss": "^8.4.38",
|
||||
"postcss-calc": "^10.0.0",
|
||||
"postcss-colormin": "^7.0.0",
|
||||
"postcss-convert-values": "^7.0.0",
|
||||
"postcss-discard-comments": "^7.0.0",
|
||||
"postcss-discard-duplicates": "^7.0.0",
|
||||
"postcss-discard-empty": "^7.0.0",
|
||||
"postcss-discard-overridden": "^7.0.0",
|
||||
"postcss-load-config": "^5.1.0",
|
||||
"postcss-loader": "^8.1.1",
|
||||
"postcss-merge-longhand": "^7.0.0",
|
||||
"postcss-merge-rules": "^7.0.0",
|
||||
"postcss-minify-font-values": "^7.0.0",
|
||||
"postcss-minify-gradients": "^7.0.0",
|
||||
"postcss-minify-params": "^7.0.0",
|
||||
"postcss-minify-selectors": "^7.0.0",
|
||||
"postcss-modules-extract-imports": "^3.1.0",
|
||||
"postcss-modules-local-by-default": "^4.0.5",
|
||||
"postcss-modules-scope": "^3.2.0",
|
||||
"postcss-modules-values": "^4.0.0",
|
||||
"postcss-normalize-charset": "^7.0.0",
|
||||
"postcss-normalize-display-values": "^7.0.0",
|
||||
"postcss-normalize-positions": "^7.0.0",
|
||||
"postcss-normalize-repeat-style": "^7.0.0",
|
||||
"postcss-normalize-string": "^7.0.0",
|
||||
"postcss-normalize-timing-functions": "^7.0.0",
|
||||
"postcss-normalize-unicode": "^7.0.0",
|
||||
"postcss-normalize-url": "^7.0.0",
|
||||
"postcss-normalize-whitespace": "^7.0.0",
|
||||
"postcss-ordered-values": "^7.0.0",
|
||||
"postcss-reduce-initial": "^7.0.0",
|
||||
"postcss-reduce-transforms": "^7.0.0",
|
||||
"postcss-safe-parser": "^7.0.0",
|
||||
"postcss-selector-parser": "^6.0.16",
|
||||
"postcss-svgo": "^7.0.0",
|
||||
"postcss-unique-selectors": "^7.0.0",
|
||||
"postcss-value-parser": "^4.2.0",
|
||||
"prepend-http": "^4.0.0",
|
||||
"prettier": "^3.2.5",
|
||||
"pretty-error": "^4.0.0",
|
||||
"pretty-time": "^1.1.0",
|
||||
"prismjs": "^1.29.0",
|
||||
"private": "^0.1.8",
|
||||
"process": "^0.11.10",
|
||||
"process-nextick-args": "^2.0.1",
|
||||
"promise-inflight": "^1.0.1",
|
||||
"proxy-addr": "^2.0.7",
|
||||
"prr": "^1.0.1",
|
||||
"pseudomap": "^1.0.2",
|
||||
"psl": "^1.9.0",
|
||||
"public-encrypt": "^4.0.3",
|
||||
"pump": "^3.0.0",
|
||||
"pumpify": "^2.0.1",
|
||||
"punycode": "^2.3.1",
|
||||
"q": "^1.5.1",
|
||||
"qs": "^6.12.1",
|
||||
"query-string": "^9.0.0",
|
||||
"querystring": "^0.2.0",
|
||||
"querystring-es3": "^0.2.1",
|
||||
"querystringify": "^2.2.0",
|
||||
"randombytes": "^2.1.0",
|
||||
"randomfill": "^1.0.4",
|
||||
"range-parser": "^1.2.1",
|
||||
"raw-body": "^2.5.2",
|
||||
"readable-stream": "^4.5.2",
|
||||
"readdirp": "^3.6.0",
|
||||
"reduce": "^1.0.2",
|
||||
"regenerate": "^1.4.2",
|
||||
"regenerate-unicode-properties": "^10.1.1",
|
||||
"regenerator-runtime": "^0.14.1",
|
||||
"regenerator-transform": "^0.15.2",
|
||||
"regex-not": "^1.0.2",
|
||||
"regexp.prototype.flags": "^1.5.2",
|
||||
"regexpu-core": "^6.0.0",
|
||||
"regjsgen": "^0.8.0",
|
||||
"regjsparser": "^0.10.0",
|
||||
"relateurl": "^0.2.7",
|
||||
"remove-trailing-separator": "^1.1.0",
|
||||
"renderkid": "^3.0.0",
|
||||
"repeat-element": "^1.1.4",
|
||||
"repeat-string": "^1.6.1",
|
||||
"request": "^2.88.2",
|
||||
"require-directory": "^2.1.1",
|
||||
"require-main-filename": "^2.0.0",
|
||||
"requires-port": "^1.0.0",
|
||||
"reselect": "^5.1.0",
|
||||
"resolve": "^1.22.8",
|
||||
"resolve-cwd": "^3.0.0",
|
||||
"resolve-from": "^5.0.0",
|
||||
"resolve-url": "^0.2.1",
|
||||
"ret": "^0.5.0",
|
||||
"retry": "^0.13.1",
|
||||
"rgb-regex": "^1.0.1",
|
||||
"rgba-regex": "^1.0.0",
|
||||
"rimraf": "^5.0.5",
|
||||
"ripemd160": "^2.0.2",
|
||||
"run-queue": "^2.0.1",
|
||||
"safe-buffer": "^5.2.1",
|
||||
"safe-regex": "^2.1.1",
|
||||
"safer-buffer": "^2.1.2",
|
||||
"sax": "^1.3.0",
|
||||
"schema-utils": "^4.2.0",
|
||||
"section-matter": "^1.0.0",
|
||||
"select": "^1.1.2",
|
||||
"select-hose": "^2.0.0",
|
||||
"selfsigned": "^2.4.1",
|
||||
"semver": "^7.6.1",
|
||||
"send": "^0.18.0",
|
||||
"serialize-javascript": "^6.0.2",
|
||||
"serve-index": "^1.9.1",
|
||||
"serve-static": "^1.15.0",
|
||||
"set-blocking": "^2.0.0",
|
||||
"set-value": "^4.1.0",
|
||||
"setimmediate": "^1.0.5",
|
||||
"setprototypeof": "^1.2.0",
|
||||
"sha.js": "^2.4.11",
|
||||
"shebang-command": "^2.0.0",
|
||||
"shebang-regex": "^4.0.0",
|
||||
"signal-exit": "^4.1.0",
|
||||
"simple-swizzle": "^0.2.2",
|
||||
"sitemap": "^7.1.1",
|
||||
"slash": "^5.1.0",
|
||||
"smoothscroll-polyfill": "^0.4.4",
|
||||
"snapdragon": "^0.12.1",
|
||||
"snapdragon-node": "^3.0.0",
|
||||
"snapdragon-util": "^5.0.1",
|
||||
"sockjs": "^0.3.24",
|
||||
"sockjs-client": "^1.6.1",
|
||||
"sort-keys": "^5.0.0",
|
||||
"source-list-map": "^2.0.1",
|
||||
"source-map": "^0.7.4",
|
||||
"source-map-resolve": "^0.6.0",
|
||||
"source-map-support": "^0.5.21",
|
||||
"source-map-url": "^0.4.0",
|
||||
"spdy": "^4.0.2",
|
||||
"spdy-transport": "^3.0.0",
|
||||
"split-string": "^6.1.0",
|
||||
"sprintf-js": "^1.1.3",
|
||||
"sshpk": "^1.18.0",
|
||||
"ssri": "^10.0.6",
|
||||
"stable": "^0.1.8",
|
||||
"stack-utils": "^2.0.6",
|
||||
"static-extend": "^0.1.2",
|
||||
"statuses": "^2.0.1",
|
||||
"std-env": "^3.7.0",
|
||||
"stream-browserify": "^3.0.0",
|
||||
"stream-each": "^1.2.3",
|
||||
"stream-http": "^3.2.0",
|
||||
"stream-shift": "^1.0.3",
|
||||
"strict-uri-encode": "^2.0.0",
|
||||
"string-width": "^7.1.0",
|
||||
"string.prototype.trimleft": "^2.1.3",
|
||||
"string.prototype.trimright": "^2.1.3",
|
||||
"string_decoder": "^1.3.0",
|
||||
"strip-ansi": "^7.1.0",
|
||||
"strip-bom-string": "^1.0.0",
|
||||
"strip-eof": "^2.0.0",
|
||||
"stylehacks": "^7.0.0",
|
||||
"stylus": "^0.63.0",
|
||||
"stylus-loader": "^8.1.0",
|
||||
"supports-color": "^9.4.0",
|
||||
"svg-tags": "^1.0.0",
|
||||
"svgo": "^3.2.0",
|
||||
"tapable": "^2.2.1",
|
||||
"terser": "^5.31.0",
|
||||
"terser-webpack-plugin": "^5.3.10",
|
||||
"text-table": "^0.2.0",
|
||||
"through": "^2.3.8",
|
||||
"through2": "^4.0.2",
|
||||
"thunky": "^1.1.0",
|
||||
"timers-browserify": "^2.0.12",
|
||||
"timsort": "^0.3.0",
|
||||
"tiny-emitter": "^2.1.0",
|
||||
"to-arraybuffer": "^1.0.1",
|
||||
"to-factory": "^1.0.0",
|
||||
"to-fast-properties": "^4.0.0",
|
||||
"to-object-path": "^0.3.0",
|
||||
"to-regex": "^3.0.2",
|
||||
"to-regex-range": "^5.0.1",
|
||||
"toidentifier": "^1.0.1",
|
||||
"toml": "^3.0.0",
|
||||
"toposort": "^2.0.2",
|
||||
"tough-cookie": "^4.1.4",
|
||||
"tr46": "^5.0.0",
|
||||
"tslib": "^2.6.2",
|
||||
"tty-browserify": "^0.0.1",
|
||||
"tunnel-agent": "^0.6.0",
|
||||
"tweetnacl": "^1.0.3",
|
||||
"type-fest": "^4.18.2",
|
||||
"type-is": "^1.6.18",
|
||||
"typedarray": "^0.0.7",
|
||||
"uc.micro": "^2.1.0",
|
||||
"uglify-js": "^3.17.4",
|
||||
"unicode-canonical-property-names-ecmascript": "^2.0.0",
|
||||
"unicode-match-property-ecmascript": "^2.0.0",
|
||||
"unicode-match-property-value-ecmascript": "^2.1.0",
|
||||
"unicode-property-aliases-ecmascript": "^2.1.0",
|
||||
"union-value": "^2.0.1",
|
||||
"uniq": "^1.0.1",
|
||||
"uniqs": "^2.0.0",
|
||||
"unique-filename": "^3.0.0",
|
||||
"unique-slug": "^4.0.0",
|
||||
"universalify": "^2.0.1",
|
||||
"unpipe": "^1.0.0",
|
||||
"unquote": "^1.1.1",
|
||||
"unset-value": "^2.0.1",
|
||||
"upath": "^2.0.1",
|
||||
"upper-case": "^2.0.2",
|
||||
"uri-js": "^4.4.1",
|
||||
"urix": "^0.1.0",
|
||||
"url": "^0.11.3",
|
||||
"url-loader": "^4.1.1",
|
||||
"url-parse": "^1.5.10",
|
||||
"use": "^3.1.1",
|
||||
"util": "^0.12.5",
|
||||
"util-deprecate": "^1.0.2",
|
||||
"util.promisify": "^1.1.2",
|
||||
"utila": "^0.4.0",
|
||||
"utils-merge": "^1.0.1",
|
||||
"uuid": "^9.0.1",
|
||||
"vary": "^1.1.2",
|
||||
"vendors": "^2.0.1",
|
||||
"verror": "^1.10.1",
|
||||
"vm-browserify": "^1.1.2",
|
||||
"vue": "^3.4.27",
|
||||
"vue-hot-reload-api": "^2.3.4",
|
||||
"vue-loader": "^17.4.2",
|
||||
"vue-router": "^4.3.2",
|
||||
"vue-server-renderer": "^2.7.16",
|
||||
"vue-style-loader": "^4.1.3",
|
||||
"vue-template-compiler": "^2.7.16",
|
||||
"vue-template-es2015-compiler": "^1.9.1",
|
||||
"vuepress": "^1.9.10",
|
||||
"vuepress-html-webpack-plugin": "^3.2.0",
|
||||
"vuepress-plugin-container": "^2.1.5",
|
||||
"vuepress-plugin-sitemap": "^2.3.1",
|
||||
"vuepress-plugin-smooth-scroll": "^0.0.10",
|
||||
"vuepress-plugin-zooming": "^1.1.8",
|
||||
"watchpack": "^2.4.1",
|
||||
"wbuf": "^1.7.3",
|
||||
"webidl-conversions": "^7.0.0",
|
||||
"webpack": "^5.91.0",
|
||||
"webpack-chain": "^6.5.1",
|
||||
"webpack-dev-middleware": "^7.2.1",
|
||||
"webpack-dev-server": "^5.0.4",
|
||||
"webpack-log": "^3.0.2",
|
||||
"webpack-merge": "^5.10.0",
|
||||
"webpack-sources": "^3.2.3",
|
||||
"webpackbar": "^6.0.1",
|
||||
"websocket-driver": "^0.7.4",
|
||||
"websocket-extensions": "^0.1.4",
|
||||
"whatwg-url": "^14.0.0",
|
||||
"when": "^3.7.8",
|
||||
"which": "^4.0.0",
|
||||
"which-module": "^2.0.1",
|
||||
"worker-farm": "^1.7.0",
|
||||
"wrap-ansi": "^9.0.0",
|
||||
"wrappy": "^1.0.2",
|
||||
"ws": "^8.17.0",
|
||||
"xmlbuilder": "^15.1.1",
|
||||
"xtend": "^4.0.2",
|
||||
"y18n": "^5.0.8",
|
||||
"yallist": "^5.0.0",
|
||||
"yargs": "^17.7.2",
|
||||
"yargs-parser": "^21.1.1",
|
||||
"zepto": "^1.2.0"
|
||||
},
|
||||
"devDependencies": {},
|
||||
"scripts": {
|
||||
"dev": "vuepress dev",
|
||||
"build": "vuepress build"
|
||||
"dev": "vitepress dev --host",
|
||||
"build": "vitepress build",
|
||||
"preview": "vitepress preview"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
"devDependencies": {
|
||||
"vitepress": "^1.1.4"
|
||||
},
|
||||
"dependencies": {}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
# Screenshots
|
||||
|
||||
<img class="no-medium-zoom zooming" src="/screenshots/login.png" alt="Login" title="Login" width="200"/>
|
||||
<img class="no-medium-zoom zooming" src="/screenshots/dashboard.png" alt="Dashboard" title="Dashboard" width="200"/>
|
||||
<img class="no-medium-zoom zooming" src="/screenshots/proxy-hosts.png" alt="Proxy Hosts" title="Proxy Hosts" width="200"/>
|
||||
<img class="no-medium-zoom zooming" src="/screenshots/proxy-hosts-add.png" alt="Add Proxy Host" title="Add Proxy Host" width="200"/>
|
||||
<img class="no-medium-zoom zooming" src="/screenshots/redirection-hosts.png" alt="Redirection Hosts" title="Redirection Hosts" width="200"/>
|
||||
<img class="no-medium-zoom zooming" src="/screenshots/dead-hosts.png" alt="404 Hosts" title="404 Hosts" width="200"/>
|
||||
<img class="no-medium-zoom zooming" src="/screenshots/permissions.png" alt="User Permissions" title="User Permissions" width="200"/>
|
||||
<img class="no-medium-zoom zooming" src="/screenshots/certificates.png" alt="Certificates" title="Certificates" width="200"/>
|
||||
<img class="no-medium-zoom zooming" src="/screenshots/audit-log.png" alt="Audit Log" title="Audit Log" width="200"/>
|
||||
<img class="no-medium-zoom zooming" src="/screenshots/custom-settings.png" alt="Custom Settings" title="Custom Settings" width="200"/>
|
||||
@@ -1,31 +1,52 @@
|
||||
---
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# Advanced Configuration
|
||||
|
||||
## Best Practice: Use a docker network
|
||||
## Running processes as a user/group
|
||||
|
||||
For those who have a few of their upstream services running in docker on the same docker
|
||||
host as NPM, here's a trick to secure things a bit better. By creating a custom docker network,
|
||||
you don't need to publish ports for your upstream services to all of the docker host's interfaces.
|
||||
By default, the services (nginx etc) will run as `root` user inside the docker container.
|
||||
You can change this behaviour by setting the following environment variables.
|
||||
Not only will they run the services as this user/group, they will change the ownership
|
||||
on the `data` folder at startup.
|
||||
|
||||
Create a network, ie "scoobydoo":
|
||||
```yml
|
||||
services:
|
||||
npm:
|
||||
image: 'jc21/nginx-proxy-manager:3'
|
||||
environment:
|
||||
PUID: 1000
|
||||
PGID: 1000
|
||||
# ...
|
||||
```
|
||||
|
||||
|
||||
## Best Practice: Use a Docker network
|
||||
|
||||
For those who have a few of their upstream services running in Docker on the same Docker
|
||||
host as NPM, here's a trick to secure things a bit better. By creating a custom Docker network,
|
||||
you don't need to publish ports for your upstream services to all of the Docker host's interfaces.
|
||||
|
||||
Create a network, ie `scoobydoo`:
|
||||
|
||||
```bash
|
||||
docker network create scoobydoo
|
||||
```
|
||||
|
||||
Then add the following to the `docker-compose.yml` file for both NPM and any other
|
||||
services running on this docker host:
|
||||
services running on this Docker host:
|
||||
|
||||
```yml
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: scoobydoo
|
||||
external: true
|
||||
name: scoobydoo
|
||||
```
|
||||
|
||||
Let's look at a Portainer example:
|
||||
|
||||
```yml
|
||||
version: '3'
|
||||
services:
|
||||
|
||||
portainer:
|
||||
@@ -38,25 +59,28 @@ services:
|
||||
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: scoobydoo
|
||||
external: true
|
||||
name: scoobydoo
|
||||
```
|
||||
|
||||
Now in the NPM UI you can create a proxy host with `portainer` as the hostname,
|
||||
and port `9000` as the port. Even though this port isn't listed in the docker-compose
|
||||
file, it's "exposed" by the portainer docker image for you and not available on
|
||||
the docker host outside of this docker network. The service name is used as the
|
||||
file, it's _exposed_ by the Portainer Docker image for you and not available on
|
||||
the Docker host outside of this Docker network. The service name is used as the
|
||||
hostname, so make sure your service names are unique when using the same network.
|
||||
|
||||
## Docker Secrets
|
||||
|
||||
This image supports the use of Docker secrets to import from file and keep sensitive usernames or passwords from being passed or preserved in plaintext.
|
||||
## Docker File Secrets
|
||||
|
||||
::: warning
|
||||
This section needs to be reviewed!
|
||||
:::
|
||||
|
||||
This image supports the use of Docker secrets to import from files and keep sensitive usernames or passwords from being passed or preserved in plaintext.
|
||||
|
||||
You can set any environment variable from a file by appending `__FILE` (double-underscore FILE) to the environmental variable name.
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
secrets:
|
||||
# Secrets are single-line text files where the sole content is the secret
|
||||
# Paths in this example assume that secrets are kept in local folder called ".secrets"
|
||||
@@ -71,11 +95,11 @@ services:
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
# Public HTTP Port:
|
||||
- '80:80'
|
||||
- '80:8080'
|
||||
# Public HTTPS Port:
|
||||
- '443:443'
|
||||
- '443:8443'
|
||||
# Admin Web Port:
|
||||
- '81:81'
|
||||
- '81:8081'
|
||||
environment:
|
||||
# These are the settings to access your db
|
||||
DB_MYSQL_HOST: "db"
|
||||
@@ -84,11 +108,9 @@ services:
|
||||
# DB_MYSQL_PASSWORD: "npm" # use secret instead
|
||||
DB_MYSQL_PASSWORD__FILE: /run/secrets/MYSQL_PWD
|
||||
DB_MYSQL_NAME: "npm"
|
||||
# If you would rather use Sqlite uncomment this
|
||||
# and remove all DB_MYSQL_* lines above
|
||||
# DB_SQLITE_FILE: "/data/database.sqlite"
|
||||
# If you would rather use Sqlite, remove all DB_MYSQL_* lines above
|
||||
# Uncomment this if IPv6 is not enabled on your host
|
||||
# NPM_DISABLE_IPV6: 'true'
|
||||
# DISABLE_IPV6: 'true'
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- ./letsencrypt:/etc/letsencrypt
|
||||
@@ -96,6 +118,7 @@ services:
|
||||
- MYSQL_PWD
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
db:
|
||||
image: jc21/mariadb-aria
|
||||
restart: unless-stopped
|
||||
@@ -106,8 +129,9 @@ services:
|
||||
MYSQL_USER: "npm"
|
||||
# MYSQL_PASSWORD: "npm" # use secret instead
|
||||
MYSQL_PASSWORD__FILE: /run/secrets/MYSQL_PWD
|
||||
MARIADB_AUTO_UPGRADE: '1'
|
||||
volumes:
|
||||
- ./data/mysql:/var/lib/mysql
|
||||
- ./mysql:/var/lib/mysql
|
||||
secrets:
|
||||
- DB_ROOT_PWD
|
||||
- MYSQL_PWD
|
||||
@@ -116,11 +140,13 @@ services:
|
||||
|
||||
## Disabling IPv6
|
||||
|
||||
On some docker hosts IPv6 may not be enabled. In these cases, the following message may be seen in the log:
|
||||
On some Docker hosts IPv6 may not be enabled. In these cases, the
|
||||
following message may be seen in the log:
|
||||
|
||||
> Address family not supported by protocol
|
||||
|
||||
The easy fix is to add a Docker environment variable to the Nginx Proxy Manager stack:
|
||||
The easy fix is to add a Docker environment variable to the
|
||||
Nginx Proxy Manager stack:
|
||||
|
||||
```yml
|
||||
environment:
|
||||
@@ -130,6 +156,10 @@ The easy fix is to add a Docker environment variable to the Nginx Proxy Manager
|
||||
|
||||
## Custom Nginx Configurations
|
||||
|
||||
::: warning
|
||||
This section needs to be reviewed!
|
||||
:::
|
||||
|
||||
If you are a more advanced user, you might be itching for extra Nginx customizability.
|
||||
|
||||
NPM has the ability to include different custom configuration snippets in different places.
|
||||
@@ -139,6 +169,7 @@ You can add your custom configuration snippet files at `/data/nginx/custom` as f
|
||||
- `/data/nginx/custom/root.conf`: Included at the very end of nginx.conf
|
||||
- `/data/nginx/custom/http_top.conf`: Included at the top of the main http block
|
||||
- `/data/nginx/custom/http.conf`: Included at the end of the main http block
|
||||
- `/data/nginx/custom/events.conf`: Included at the end of the events block
|
||||
- `/data/nginx/custom/stream.conf`: Included at the end of the main stream block
|
||||
- `/data/nginx/custom/server_proxy.conf`: Included at the end of every proxy server block
|
||||
- `/data/nginx/custom/server_redirect.conf`: Included at the end of every redirection server block
|
||||
@@ -151,6 +182,10 @@ Every file is optional.
|
||||
|
||||
## X-FRAME-OPTIONS Header
|
||||
|
||||
::: warning
|
||||
This section needs to be reviewed!
|
||||
:::
|
||||
|
||||
You can configure the [`X-FRAME-OPTIONS`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) header
|
||||
value by specifying it as a Docker environment variable. The default if not specified is `deny`.
|
||||
|
||||
@@ -160,3 +195,21 @@ value by specifying it as a Docker environment variable. The default if not spec
|
||||
X_FRAME_OPTIONS: "sameorigin"
|
||||
...
|
||||
```
|
||||
|
||||
## Customising logrotate settings
|
||||
|
||||
::: warning
|
||||
This section needs to be reviewed!
|
||||
:::
|
||||
|
||||
By default, NPM rotates the access- and error logs weekly and keeps 4 and 10 log files respectively.
|
||||
Depending on the usage, this can lead to large log files, especially access logs.
|
||||
You can customise the logrotate configuration through a mount (if your custom config is `logrotate.custom`):
|
||||
|
||||
```yml
|
||||
volumes:
|
||||
...
|
||||
- ./logrotate.custom:/etc/logrotate.d/nginx-proxy-manager
|
||||
```
|
||||
|
||||
For reference, the default configuration can be found [here](https://github.com/NginxProxyManager/nginx-proxy-manager/blob/develop/docker/rootfs/etc/logrotate.d/nginx-proxy-manager).
|
||||
@@ -1,3 +1,7 @@
|
||||
---
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# Development
|
||||
|
||||
```bash
|
||||
@@ -91,3 +95,52 @@ curl --request POST \
|
||||
"max_domains": 2
|
||||
}'
|
||||
```
|
||||
|
||||
## Development Notes
|
||||
|
||||
Requesting a SSL Certificate is a complicated process to understand.
|
||||
|
||||
This is an explanation of how the ACME standard of certificates works.
|
||||
|
||||
### Certificate Request via HTTP validation
|
||||
|
||||
1. You define `website.example.com` DNS record to point to `123.45.67.89`
|
||||
2. You ask a Certificate Authority to give you a Certificate and initiate validation from their side
|
||||
3. The CA gives you a token, and you should be running a http-only webserver on `123.45.67.89` that returns this token
|
||||
4. The CA makes a request to your domain `http://website.example.com/.well-known/acme-challenge/` and gets the token
|
||||
5. If the CA thinks the token matches, they issue you the certificates.
|
||||
|
||||
### Certificate Request via DNS validation
|
||||
|
||||
1. You ask a Certificate Authority to give you a Certificate and initiate validation from their side
|
||||
2. The CA gives you a token, and you update the DNS records on your domain with this token
|
||||
3. The CA checks the DNS record, with a timeout waiting for propagation
|
||||
4. If the CA thinks the token matches, they issue you the certificates.
|
||||
|
||||
### ACME DNS in an isolated test environment
|
||||
|
||||
#### Local CA
|
||||
|
||||
In order to have a local ACME compatible CA that you can control, you have 2 options:
|
||||
|
||||
- pebble by Letsencrypt
|
||||
- stepca by Step
|
||||
|
||||
stepca has better DNS Acme validation support.
|
||||
|
||||
#### Local DNS Provider
|
||||
|
||||
PowerDNS is a really good, free DNS server and acme.sh has support for it.
|
||||
|
||||
#### Getting things to work together
|
||||
|
||||
Since your don't really own `website.example.com` and if you hit it with your system DNS
|
||||
it will fail, you'll need to use a custom DNS responder to return an A record for this
|
||||
that points to your running NPM gateway. My [dnsrouter](https://github.com/jc21/dnsrouter)
|
||||
project accomplishes this nicely. After this is setup, as long as the resolv.conf points
|
||||
to this dns responder, the resolution should work locally.
|
||||
|
||||
1. You ask the stepca CA to give you a Certificate and initiate validation
|
||||
2. The CA returns a token, and you update the PDNS records on your domain with this token
|
||||
3. The CA checks the DNS record, with a timeout waiting for propagation
|
||||
4. If the CA thinks the token matches, they issue you the certificates.
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# FAQ
|
||||
|
||||
## Do I have to use Docker?
|
||||
|
||||
Yes, that's how this project is packaged.
|
||||
|
||||
This makes it easier to support the project when we have control over the version of Nginx other packages
|
||||
use by the project.
|
||||
|
||||
## Can I run it on a Raspberry Pi?
|
||||
|
||||
Yes! The docker image is multi-arch and is built for a variety of architectures. If yours is
|
||||
[not listed](https://hub.docker.com/r/jc21/nginx-proxy-manager/tags) please open a
|
||||
[GitHub issue](https://github.com/NginxProxyManager/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=).
|
||||
|
||||
## I can't get my service to proxy properly?
|
||||
|
||||
Your best bet is to ask the [Reddit community for support](https://www.reddit.com/r/nginxproxymanager/). There's safety in numbers.
|
||||
|
||||
## When adding username and password access control to a proxy host, I can no longer login into the app.
|
||||
|
||||
Having an Access Control List (ACL) with username and password requires the browser to always send this username and password in the `Authorization` header on each request. If your proxied app also requires authentication (like Nginx Proxy Manager itself), most likely the app will also use the `Authorization` header to transmit this information, as this is the standardized header meant for this kind of information. However having multiples of the same headers is not allowed in the [internet standard](https://www.rfc-editor.org/rfc/rfc7230#section-3.2.2) and almost all apps do not support multiple values in the `Authorization` header. Hence one of the two logins will be broken. This can only be fixed by either removing one of the logins or by changing the app to use other non-standard headers for authorization.
|
||||
@@ -0,0 +1,117 @@
|
||||
---
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# Guide
|
||||
|
||||
::: raw
|
||||
<p align="center">
|
||||
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager" style="display:inline;margin-right:5px;">
|
||||
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge" style="display:inline;">
|
||||
</a>
|
||||
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager" style="display:inline;margin-right:5px;">
|
||||
<img src="https://img.shields.io/docker/pulls/jc21/nginx-proxy-manager.svg?style=for-the-badge" style="display:inline;">
|
||||
</a>
|
||||
</p>
|
||||
:::
|
||||
|
||||
This project comes as a pre-built docker image that enables you to easily forward to your websites
|
||||
running at home or otherwise, including free SSL, without having to know too much about Nginx or Letsencrypt.
|
||||
|
||||
- [Quick Setup](#quick-setup)
|
||||
- [Full Setup](/setup/)
|
||||
- [Screenshots](/screenshots/)
|
||||
|
||||
## Project Goal
|
||||
|
||||
I created this project to fill a personal need to provide users with an easy way to accomplish reverse
|
||||
proxying hosts with SSL termination and it had to be so easy that a monkey could do it. This goal hasn't changed.
|
||||
While there might be advanced options they are optional and the project should be as simple as possible
|
||||
so that the barrier for entry here is low.
|
||||
|
||||
::: raw
|
||||
<a href="https://www.buymeacoffee.com/jc21" target="_blank"><img src="http://public.jc21.com/github/by-me-a-coffee.png" alt="Buy Me A Coffee" style="height: 51px !important;width: 217px !important;" ></a>
|
||||
:::
|
||||
|
||||
## Features
|
||||
|
||||
- Beautiful and Secure Admin Interface based on [Tabler](https://tabler.github.io/)
|
||||
- Easily create forwarding domains, redirections, streams and 404 hosts without knowing anything about Nginx
|
||||
- Free SSL using Let's Encrypt or provide your own custom SSL certificates
|
||||
- Access Lists and basic HTTP Authentication for your hosts
|
||||
- Advanced Nginx configuration available for super users
|
||||
- User management, permissions and audit log
|
||||
|
||||
|
||||
## Hosting your home network
|
||||
|
||||
I won't go in to too much detail here but here are the basics for someone new to this self-hosted world.
|
||||
|
||||
1. Your home router will have a Port Forwarding section somewhere. Log in and find it
|
||||
2. Add port forwarding for port 80 and 443 to the server hosting this project
|
||||
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)
|
||||
4. Use the Nginx Proxy Manager as your gateway to forward to your other web based services
|
||||
|
||||
## Quick Setup
|
||||
|
||||
1. Install Docker and Docker-Compose
|
||||
|
||||
- [Docker Install documentation](https://docs.docker.com/get-docker/)
|
||||
- [Docker-Compose Install documentation](https://docs.docker.com/compose/install/)
|
||||
|
||||
2. Create a docker-compose.yml file similar to this:
|
||||
|
||||
```yml
|
||||
services:
|
||||
npm:
|
||||
image: 'jc21/nginx-proxy-manager:3'
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- '80:8080'
|
||||
- '81:8081'
|
||||
- '443:8443'
|
||||
volumes:
|
||||
- ./data:/data
|
||||
```
|
||||
|
||||
This is the bare minimum configuration required. See the [documentation](https://nginxproxymanager.com/setup/) for more.
|
||||
|
||||
3. Bring up your stack by running
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
4. Log in to the Admin UI
|
||||
|
||||
When your docker container is running, connect to it on port 81 for the admin interface.
|
||||
|
||||
[http://127.0.0.1:81](http://127.0.0.1:81)
|
||||
|
||||
|
||||
## Contributing
|
||||
|
||||
All are welcome to create pull requests for this project, against the `develop` branch. Official releases are created from the `master` branch.
|
||||
|
||||
CI is used in this project. All PR's must pass before being considered. After passing,
|
||||
docker builds for PR's are available on dockerhub for manual verifications.
|
||||
|
||||
Documentation within the `develop` branch is available for preview at
|
||||
[https://develop.nginxproxymanager.com](https://develop.nginxproxymanager.com)
|
||||
|
||||
|
||||
### Contributors
|
||||
|
||||
Special thanks to [all of our contributors](https://github.com/NginxProxyManager/nginx-proxy-manager/graphs/contributors).
|
||||
|
||||
|
||||
### Become a Contributor
|
||||
|
||||
A guide to setting up your own development environment
|
||||
[is found here](/development/).
|
||||
|
||||
## Getting Support
|
||||
|
||||
1. [Found a bug?](https://github.com/NginxProxyManager/nginx-proxy-manager/issues)
|
||||
2. [Discussions](https://github.com/NginxProxyManager/nginx-proxy-manager/discussions)
|
||||
3. [Reddit](https://reddit.com/r/nginxproxymanager)
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
# https://vitepress.dev/reference/default-theme-home-page
|
||||
layout: home
|
||||
|
||||
hero:
|
||||
name: "Nginx Proxy Manager"
|
||||
tagline: Expose your services easily and securely
|
||||
image:
|
||||
src: /logo.svg
|
||||
alt: NPM Logo
|
||||
actions:
|
||||
- theme: brand
|
||||
text: Get Started
|
||||
link: /guide/
|
||||
- theme: alt
|
||||
text: GitHub
|
||||
link: https://github.com/NginxProxyManager/nginx-proxy-manager
|
||||
|
||||
features:
|
||||
- title: Get Connected
|
||||
details: Expose web services on your network · Free SSL with Let's Encrypt · Designed with security in mind · Perfect for home networks
|
||||
- title: Proxy Hosts
|
||||
details: Expose your private network Web services and get connected anywhere.
|
||||
- title: Beautiful UI
|
||||
details: Based on Tabler, the interface is a pleasure to use. Configuring a server has never been so fun.
|
||||
- title: Free SSL
|
||||
details: Built in Let’s Encrypt support allows you to secure your Web services at no cost to you. The certificates even renew themselves!
|
||||
- title: Docker FTW
|
||||
details: Built as a Docker Image, Nginx Proxy Manager only requires a database.
|
||||
- title: Multiple Users
|
||||
details: Configure other users to either view or manage their own hosts. Full access permissions are available.
|
||||
---
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,9 @@
|
||||
---
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# Screenshots
|
||||
|
||||
::: info
|
||||
Screenshots for v3 will be added at official release time.
|
||||
:::
|
||||
@@ -1,22 +1,25 @@
|
||||
---
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# Full Setup Instructions
|
||||
|
||||
### Running the App
|
||||
## Running the App
|
||||
|
||||
Via `docker-compose`:
|
||||
Create a `docker-compose.yml` file:
|
||||
|
||||
```yml
|
||||
version: "3"
|
||||
services:
|
||||
app:
|
||||
image: 'jc21/nginx-proxy-manager:v3-develop'
|
||||
restart: always
|
||||
npm:
|
||||
image: 'jc21/nginx-proxy-manager:3'
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
# Public HTTP Port:
|
||||
- '80:80'
|
||||
- '80:8080'
|
||||
# Public HTTPS Port:
|
||||
- '443:443'
|
||||
- '443:8443'
|
||||
# Admin Web Port:
|
||||
- '81:81'
|
||||
- '81:8081'
|
||||
environment:
|
||||
# These run the processes and own the files
|
||||
# for a specific user/group
|
||||
@@ -31,10 +34,10 @@ services:
|
||||
Then:
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### Running on Raspberry PI / ARM devices
|
||||
## Running on Raspberry PI / ARM devices
|
||||
|
||||
The docker images support the following architectures:
|
||||
- amd64
|
||||
@@ -46,10 +49,7 @@ you don't have to worry about doing anything special and you can follow the comm
|
||||
|
||||
Check out the [dockerhub tags](https://hub.docker.com/r/jc21/nginx-proxy-manager/tags)
|
||||
for a list of supported architectures and if you want one that doesn't exist,
|
||||
[create a feature request](https://github.com/jc21/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=).
|
||||
|
||||
Also, if you don't know how to already, follow [this guide to install docker and docker-compose](https://manre-universe.net/how-to-run-docker-and-docker-compose-on-raspbian/)
|
||||
on Raspbian.
|
||||
[create a feature request](https://github.com/NginxProxyManager/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=).
|
||||
|
||||
|
||||
### Initial Run
|
||||
@@ -1,16 +1,19 @@
|
||||
---
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# Third Party
|
||||
|
||||
As this software gains popularity it's common to see it integrated with other platforms. Please be aware that unless specifically mentioned in the documenation of those
|
||||
As this software gains popularity it's common to see it integrated with other platforms. Please be aware that unless specifically mentioned in the documentation of those
|
||||
integrations, they are *not supported* by me.
|
||||
|
||||
Known integrations:
|
||||
|
||||
- [HomeAssistant Hass.io plugin](https://github.com/hassio-addons/addon-nginx-proxy-manager)
|
||||
- [UnRaid / Synology](https://github.com/jlesage/docker-nginx-proxy-manager)
|
||||
- [Proxmox Scripts](https://github.com/ej52/proxmox-scripts/tree/main/lxc/nginx-proxy-manager)
|
||||
- [Proxmox Scripts](https://github.com/ej52/proxmox-scripts/tree/main/apps/nginx-proxy-manager)
|
||||
- [nginxproxymanagerGraf](https://github.com/ma-karai/nginxproxymanagerGraf)
|
||||
|
||||
|
||||
If you would like your integration of NPM listed, please open a
|
||||
[Github issue](https://github.com/jc21/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=)
|
||||
|
||||
[Github issue](https://github.com/NginxProxyManager/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=)
|
||||
@@ -1,11 +1,16 @@
|
||||
---
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# Upgrading
|
||||
|
||||
```bash
|
||||
docker-compose pull
|
||||
docker-compose up -d
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
This project will automatically update any databases or other requirements so you don't have to follow
|
||||
any crazy instructions. These steps above will pull the latest updates and recreate the docker
|
||||
containers.
|
||||
|
||||
See the [list of releases](https://github.com/NginxProxyManager/nginx-proxy-manager/releases) for any upgrade steps specific to each release.
|
||||
+460
-14416
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user