diff --git a/backend/templates/_location.conf b/backend/templates/_location.conf index 5ff7f054b..1ad86b3ac 100644 --- a/backend/templates/_location.conf +++ b/backend/templates/_location.conf @@ -1,17 +1,17 @@ - location {{ path }} { - set $forward_path "{{ forward_path }}"; +location {{ path }} { + {{ advanced_config }} - {% if allow_websocket_upgrade == 1 or allow_websocket_upgrade == true %} - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - {% endif %} - - include conf.d/include/proxy-location.conf; - proxy_set_header X-Forwarded-Host $host{{ path }}; - if ($forward_path = "") { - rewrite ^{{ path }}(/.*)$ $1 break; - } - proxy_pass {{ forward_scheme }}://{{ forward_host }}:{{ forward_port }}{{ forward_path }}; + set $forward_path "{{ forward_path }}"; + + {% if allow_websocket_upgrade == 1 or allow_websocket_upgrade == true %} + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + {% endif %} - {{ advanced_config }} + include conf.d/include/proxy-location.conf; + proxy_set_header X-Forwarded-Host $host{{ path }}; + if ($forward_path = "") { + rewrite ^{{ path }}(/.*)$ $1 break; } + proxy_pass {{ forward_scheme }}://{{ forward_host }}:{{ forward_port }}{{ forward_path }}; +} diff --git a/backend/templates/dead_host.conf b/backend/templates/dead_host.conf index adbf0ec4a..efc5af63e 100644 --- a/backend/templates/dead_host.conf +++ b/backend/templates/dead_host.conf @@ -8,9 +8,11 @@ server { {% include "_forced_tls.conf" %} {% include "_brotli.conf" %} +include conf.d/include/acme-challenge.conf; +include conf.d/include/block-exploits.conf; + {{ advanced_config }} - include conf.d/include/acme-challenge.conf; - include conf.d/include/block-exploits.conf; + {% if use_default_location == 1 or use_default_location == true %} location / { include conf.d/include/acme-challenge.conf; diff --git a/backend/templates/proxy_host.conf b/backend/templates/proxy_host.conf index a87eedbd8..bfa9ead43 100644 --- a/backend/templates/proxy_host.conf +++ b/backend/templates/proxy_host.conf @@ -33,6 +33,9 @@ server { {{ advanced_config }} +# custom locations +{{ locations }} + {% if use_default_location == 1 or use_default_location == true %} location / { include conf.d/include/acme-challenge.conf; @@ -44,14 +47,9 @@ server { # Proxy! include conf.d/include/proxy.conf; - - # custom locations - {{ locations }} } {% endif %} -{{ locations }} - # Custom include /data/nginx/custom/server_proxy.conf; } diff --git a/backend/templates/redirection_host.conf b/backend/templates/redirection_host.conf index ec022134e..70842845e 100644 --- a/backend/templates/redirection_host.conf +++ b/backend/templates/redirection_host.conf @@ -8,9 +8,11 @@ server { {% include "_forced_tls.conf" %} {% include "_brotli.conf" %} +include conf.d/include/acme-challenge.conf; +include conf.d/include/block-exploits.conf; + {{ advanced_config }} - include conf.d/include/acme-challenge.conf; - include conf.d/include/block-exploits.conf; + {% if use_default_location == 1 or use_default_location == true %} location / { include conf.d/include/acme-challenge.conf; diff --git a/backend/templates/stream.conf b/backend/templates/stream.conf index d7740ad10..1e258adb9 100644 --- a/backend/templates/stream.conf +++ b/backend/templates/stream.conf @@ -3,6 +3,7 @@ # ------------------------------------------------------------ {% if enabled == 1 or enabled == true %} + {% if tcp_forwarding == 1 or tcp_forwarding == true -%} server { listen {{ incoming_port }}; @@ -15,6 +16,7 @@ server { include /data/nginx/custom/server_stream_tcp.conf; } {% endif %} + {% if udp_forwarding == 1 or udp_forwarding == true %} server { listen {{ incoming_port }} udp; @@ -26,4 +28,5 @@ server { include /data/nginx/custom/server_stream_udp.conf; } {% endif %} + {% endif %} diff --git a/docker/dev/dnsrouter-config.json b/docker/dev/dnsrouter-config.json deleted file mode 100644 index a4e538d79..000000000 --- a/docker/dev/dnsrouter-config.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "log": { - "format": "nice", - "level": "debug" - }, - "servers": [ - { - "host": "0.0.0.0", - "port": 53, - "upstreams": [ - { - "regex": "website[0-9]+.example\\.com", - "upstream": "127.0.0.11" - }, - { - "regex": ".*\\.example\\.com", - "upstream": "1.1.1.1" - }, - { - "regex": "local", - "nxdomain": true - } - ], - "internal": null, - "default_upstream": "127.0.0.11" - } - ] -} diff --git a/docker/dev/letsencrypt.ini b/docker/dev/letsencrypt.ini deleted file mode 100644 index 93647b648..000000000 --- a/docker/dev/letsencrypt.ini +++ /dev/null @@ -1,7 +0,0 @@ -text = True -non-interactive = True -webroot-path = /data/letsencrypt-acme-challenge -key-type = ecdsa -elliptic-curve = secp384r1 -preferred-chain = ISRG Root X1 -server = diff --git a/docker/dev/pdns-db.sql b/docker/dev/pdns-db.sql deleted file mode 100644 index c182cf785..000000000 --- a/docker/dev/pdns-db.sql +++ /dev/null @@ -1,255 +0,0 @@ -/* - -How this was generated: -1. bring up an empty pdns stack -2. use api to create a zone ... - -curl -X POST \ - 'http://npm.dev:8081/api/v1/servers/localhost/zones' \ - --header 'X-API-Key: npm' \ - --header 'Content-Type: application/json' \ - --data-raw '{ - "name": "example.com.", - "kind": "Native", - "masters": [], - "nameservers": [ - "ns1.pdns.", - "ns2.pdns." - ] -}' - -3. Dump sql: - -docker exec -ti npm.pdns.db mysqldump -u pdns -p pdns - -*/ - ----------------------------------------------------------------------- - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `comments` --- - -DROP TABLE IF EXISTS `comments`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `comments` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `domain_id` int(11) NOT NULL, - `name` varchar(255) NOT NULL, - `type` varchar(10) NOT NULL, - `modified_at` int(11) NOT NULL, - `account` varchar(40) CHARACTER SET utf8mb3 DEFAULT NULL, - `comment` text CHARACTER SET utf8mb3 NOT NULL, - PRIMARY KEY (`id`), - KEY `comments_name_type_idx` (`name`,`type`), - KEY `comments_order_idx` (`domain_id`,`modified_at`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `comments` --- - -LOCK TABLES `comments` WRITE; -/*!40000 ALTER TABLE `comments` DISABLE KEYS */; -/*!40000 ALTER TABLE `comments` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `cryptokeys` --- - -DROP TABLE IF EXISTS `cryptokeys`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `cryptokeys` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `domain_id` int(11) NOT NULL, - `flags` int(11) NOT NULL, - `active` tinyint(1) DEFAULT NULL, - `published` tinyint(1) DEFAULT 1, - `content` text DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `domainidindex` (`domain_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `cryptokeys` --- - -LOCK TABLES `cryptokeys` WRITE; -/*!40000 ALTER TABLE `cryptokeys` DISABLE KEYS */; -/*!40000 ALTER TABLE `cryptokeys` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `domainmetadata` --- - -DROP TABLE IF EXISTS `domainmetadata`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `domainmetadata` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `domain_id` int(11) NOT NULL, - `kind` varchar(32) DEFAULT NULL, - `content` text DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `domainmetadata_idx` (`domain_id`,`kind`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `domainmetadata` --- - -LOCK TABLES `domainmetadata` WRITE; -/*!40000 ALTER TABLE `domainmetadata` DISABLE KEYS */; -INSERT INTO `domainmetadata` VALUES -(1,1,'SOA-EDIT-API','DEFAULT'); -/*!40000 ALTER TABLE `domainmetadata` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `domains` --- - -DROP TABLE IF EXISTS `domains`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `domains` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(255) NOT NULL, - `master` varchar(128) DEFAULT NULL, - `last_check` int(11) DEFAULT NULL, - `type` varchar(8) NOT NULL, - `notified_serial` int(10) unsigned DEFAULT NULL, - `account` varchar(40) CHARACTER SET utf8mb3 DEFAULT NULL, - `options` varchar(64000) DEFAULT NULL, - `catalog` varchar(255) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `name_index` (`name`), - KEY `catalog_idx` (`catalog`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `domains` --- - -LOCK TABLES `domains` WRITE; -/*!40000 ALTER TABLE `domains` DISABLE KEYS */; -INSERT INTO `domains` VALUES -(1,'example.com','',NULL,'NATIVE',NULL,'',NULL,NULL); -/*!40000 ALTER TABLE `domains` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `records` --- - -DROP TABLE IF EXISTS `records`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `records` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `domain_id` int(11) DEFAULT NULL, - `name` varchar(255) DEFAULT NULL, - `type` varchar(10) DEFAULT NULL, - `content` varchar(64000) DEFAULT NULL, - `ttl` int(11) DEFAULT NULL, - `prio` int(11) DEFAULT NULL, - `disabled` tinyint(1) DEFAULT 0, - `ordername` varchar(255) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL, - `auth` tinyint(1) DEFAULT 1, - PRIMARY KEY (`id`), - KEY `nametype_index` (`name`,`type`), - KEY `domain_id` (`domain_id`), - KEY `ordername` (`ordername`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `records` --- - -LOCK TABLES `records` WRITE; -/*!40000 ALTER TABLE `records` DISABLE KEYS */; -INSERT INTO `records` VALUES -(1,1,'example.com','NS','ns1.pdns',1500,0,0,NULL,1), -(2,1,'example.com','NS','ns2.pdns',1500,0,0,NULL,1), -(3,1,'example.com','SOA','a.misconfigured.dns.server.invalid hostmaster.example.com 2023030501 10800 3600 604800 3600',1500,0,0,NULL,1); -/*!40000 ALTER TABLE `records` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `supermasters` --- - -DROP TABLE IF EXISTS `supermasters`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `supermasters` ( - `ip` varchar(64) NOT NULL, - `nameserver` varchar(255) NOT NULL, - `account` varchar(40) CHARACTER SET utf8mb3 NOT NULL, - PRIMARY KEY (`ip`,`nameserver`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `supermasters` --- - -LOCK TABLES `supermasters` WRITE; -/*!40000 ALTER TABLE `supermasters` DISABLE KEYS */; -/*!40000 ALTER TABLE `supermasters` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `tsigkeys` --- - -DROP TABLE IF EXISTS `tsigkeys`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `tsigkeys` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(255) DEFAULT NULL, - `algorithm` varchar(50) DEFAULT NULL, - `secret` varchar(255) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `namealgoindex` (`name`,`algorithm`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `tsigkeys` --- - -LOCK TABLES `tsigkeys` WRITE; -/*!40000 ALTER TABLE `tsigkeys` DISABLE KEYS */; -/*!40000 ALTER TABLE `tsigkeys` ENABLE KEYS */; -UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; diff --git a/docker/dev/pebble-config.json b/docker/dev/pebble-config.json deleted file mode 100644 index ea9379055..000000000 --- a/docker/dev/pebble-config.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "pebble": { - "listenAddress": "0.0.0.0:443", - "managementListenAddress": "0.0.0.0:15000", - "certificate": "test/certs/localhost/cert.pem", - "privateKey": "test/certs/localhost/key.pem", - "httpPort": 80, - "tlsPort": 443, - "ocspResponderURL": "", - "externalAccountBindingRequired": false - } -} diff --git a/docker/docker-compose.ci.mysql.yml b/docker/docker-compose.ci.mysql.yml deleted file mode 100644 index 388cdb382..000000000 --- a/docker/docker-compose.ci.mysql.yml +++ /dev/null @@ -1,27 +0,0 @@ -# WARNING: This is a CI docker-compose file used for building and testing of the entire app, it should not be used for production. -services: - - fullstack: - environment: - DB_MYSQL_HOST: 'db-mysql' - DB_MYSQL_PORT: '3306' - DB_MYSQL_USER: 'npm' - DB_MYSQL_PASSWORD: 'npmpass' - DB_MYSQL_NAME: 'npm' - depends_on: - - db-mysql - - db-mysql: - image: jc21/mariadb-aria - environment: - MYSQL_ROOT_PASSWORD: 'npm' - MYSQL_DATABASE: 'npm' - MYSQL_USER: 'npm' - MYSQL_PASSWORD: 'npmpass' - volumes: - - mysql_vol:/var/lib/mysql - networks: - - fulltest - -volumes: - mysql_vol: diff --git a/docker/docker-compose.ci.sqlite.yml b/docker/docker-compose.ci.sqlite.yml deleted file mode 100644 index 1c5be48e9..000000000 --- a/docker/docker-compose.ci.sqlite.yml +++ /dev/null @@ -1,9 +0,0 @@ -# WARNING: This is a CI docker-compose file used for building and testing of the entire app, it should not be used for production. -services: - - fullstack: - environment: - DB_SQLITE_FILE: '/data/mydb.sqlite' - PUID: 1000 - PGID: 1000 - DISABLE_IPV6: 'true' diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts deleted file mode 100644 index 52586bfc3..000000000 --- a/docs/.vitepress/config.mts +++ /dev/null @@ -1,61 +0,0 @@ -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/' }, - ] - } - ], - 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' - } - } -}); diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css deleted file mode 100644 index cd4852378..000000000 --- a/docs/.vitepress/theme/custom.css +++ /dev/null @@ -1,27 +0,0 @@ -: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; -} diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts deleted file mode 100644 index 42fe9a936..000000000 --- a/docs/.vitepress/theme/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import DefaultTheme from 'vitepress/theme' -import './custom.css' - -export default DefaultTheme diff --git a/docs/src/guide/index.md b/docs/src/guide/index.md deleted file mode 100644 index ad350b3b9..000000000 --- a/docs/src/guide/index.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -outline: deep ---- - -# Guide - -::: raw -
-::: - -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 - -::: - -## 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 -version: '3.8' -services: - app: - image: 'jc21/nginx-proxy-manager:latest' - restart: unless-stopped - ports: - - '80:80' - - '81:81' - - '443:443' - volumes: - - ./data:/data - - ./letsencrypt:/etc/letsencrypt -``` - -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 - -# If using docker-compose-plugin -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. -Sometimes this can take a little bit because of the entropy of keys. - -[http://127.0.0.1:81](http://127.0.0.1:81) - -Default Admin User: -``` -Email: admin@example.com -Password: changeme -``` - -Immediately after logging in with this default user you will be asked to modify your details and change your password. - - -## 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). - - -## 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) diff --git a/docs/src/index.md b/docs/src/index.md deleted file mode 100644 index 74a263bd0..000000000 --- a/docs/src/index.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -# 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. ---- diff --git a/docs/src/screenshots/index.md b/docs/src/screenshots/index.md deleted file mode 100644 index 8bd210285..000000000 --- a/docs/src/screenshots/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -outline: deep ---- - -# Screenshots - -::: raw - -::: diff --git a/scripts/ci/fulltest-cypress b/scripts/ci/fulltest-cypress deleted file mode 100755 index 7e4469fec..000000000 --- a/scripts/ci/fulltest-cypress +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/bash -set -e - -STACK="${1:-sqlite}" - -DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# remember this is running in "ci" folder.. - -# Some defaults for running this script outside of CI -export COMPOSE_PROJECT_NAME="${COMPOSE_PROJECT_NAME:-npm_local_fulltest}" -export IMAGE="${IMAGE:-nginx-proxy-manager}" -export BRANCH_LOWER="${BRANCH_LOWER:-unknown}" -export BUILD_NUMBER="${BUILD_NUMBER:-0000}" - -if [ "${COMPOSE_FILE:-}" = "" ]; then - export COMPOSE_FILE="docker/docker-compose.ci.yml:docker/docker-compose.ci.${STACK}.yml" -fi - -# Colors -BLUE='\E[1;34m' -RED='\E[1;31m' -CYAN='\E[1;36m' -GREEN='\E[1;32m' -RESET='\E[0m' -YELLOW='\E[1;33m' - -export BLUE CYAN GREEN RESET YELLOW - -echo -e "${BLUE}❯ ${CYAN}Starting fullstack cypress testing ...${RESET}" -echo -e "${BLUE}❯ $(docker-compose config)${RESET}" - -# $1: container_name -get_container_ip () { - local container_name=$1 - local container - local ip - container=$(docker-compose ps --all -q "${container_name}" | tail -n1) - ip=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container") - echo "$ip" -} - -# Bring up a stack, in steps so we can inject IPs everywhere -docker-compose up -d pdns pdns-db -PDNS_IP=$(get_container_ip "pdns") -echo -e "${BLUE}❯ ${YELLOW}PDNS IP is ${PDNS_IP}${RESET}" - -# adjust the dnsrouter config -LOCAL_DNSROUTER_CONFIG="$DIR/../../docker/dev/dnsrouter-config.json" -rm -rf "$LOCAL_DNSROUTER_CONFIG.tmp" -# IMPORTANT: changes to dnsrouter-config.json will affect this line: -jq --arg a "$PDNS_IP" '.servers[0].upstreams[1].upstream = $a' "$LOCAL_DNSROUTER_CONFIG" > "$LOCAL_DNSROUTER_CONFIG.tmp" - -docker-compose up -d dnsrouter -DNSROUTER_IP=$(get_container_ip "dnsrouter") -echo -e "${BLUE}❯ ${YELLOW}DNS Router IP is ${DNSROUTER_IP}" - -if [ "${DNSROUTER_IP:-}" = "" ]; then - echo -e "${RED}❯ ERROR: DNS Router IP is not set${RESET}" - exit 1 -fi - -# mount the resolver -LOCAL_RESOLVE="$DIR/../../docker/dev/resolv.conf" -rm -rf "${LOCAL_RESOLVE}" -printf "nameserver %s\noptions ndots:0" "${DNSROUTER_IP}" > "${LOCAL_RESOLVE}" - -# bring up all remaining containers, except cypress! -docker-compose up -d --remove-orphans stepca -docker-compose pull db-mysql || true # ok to fail -docker-compose up -d --remove-orphans --pull=never fullstack - -# wait for main container to be healthy -bash "$DIR/../wait-healthy" "$(docker-compose ps --all -q fullstack)" 120 - -# Run tests -rm -rf "$DIR/../../test/results" -docker-compose up --build cypress - -# Get results -docker cp -L "$(docker-compose ps --all -q cypress):/test/results" "$DIR/../../test/" -docker cp -L "$(docker-compose ps --all -q fullstack):/data/logs" "$DIR/../../test/results/" - -if [ "$2" = "cleanup" ]; then - echo -e "${BLUE}❯ ${CYAN}Cleaning up containers ...${RESET}" - docker-compose down --remove-orphans --volumes -t 30 -fi - -echo -e "${BLUE}❯ ${GREEN}Fullstack cypress testing complete${RESET}" - diff --git a/test/cypress/config/ci.js b/test/cypress/config/ci.js deleted file mode 100644 index 2b50db1e8..000000000 --- a/test/cypress/config/ci.js +++ /dev/null @@ -1,22 +0,0 @@ -const { defineConfig } = require('cypress'); - -module.exports = defineConfig({ - requestTimeout: 30000, - defaultCommandTimeout: 20000, - reporter: 'cypress-multi-reporters', - reporterOptions: { - configFile: 'multi-reporter.json' - }, - video: true, - videosFolder: 'results/videos', - screenshotsFolder: 'results/screenshots', - e2e: { - setupNodeEvents(on, config) { - return require("../plugins/index.js")(on, config); - }, - env: { - swaggerBase: '{{baseUrl}}/api/schema', - }, - baseUrl: 'http://localhost:1234', - } -}); diff --git a/test/cypress/config/dev.js b/test/cypress/config/dev.js deleted file mode 100644 index 90ae943bc..000000000 --- a/test/cypress/config/dev.js +++ /dev/null @@ -1,22 +0,0 @@ -const { defineConfig } = require('cypress'); - -module.exports = defineConfig({ - requestTimeout: 30000, - defaultCommandTimeout: 20000, - reporter: 'cypress-multi-reporters', - reporterOptions: { - configFile: 'multi-reporter.json' - }, - video: false, - videosFolder: 'results/videos', - screenshotsFolder: 'results/screenshots', - e2e: { - setupNodeEvents(on, config) { - return require("../plugins/index.js")(on, config); - }, - env: { - swaggerBase: '{{baseUrl}}/api/schema', - }, - baseUrl: 'http://localhost:1234', - } -});