mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-07-04 17:06:49 +00:00
Compare commits
1 Commits
2a9e573c61
...
v2.12.0
Author | SHA1 | Date | |
---|---|---|---|
e677bfa2e8 |
10
Jenkinsfile
vendored
10
Jenkinsfile
vendored
@ -43,7 +43,7 @@ pipeline {
|
|||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
// Defaults to the Branch name, which is applies to all branches AND pr's
|
// Defaults to the Branch name, which is applies to all branches AND pr's
|
||||||
buildxPushTags = "-t docker.io/nginxproxymanager/${IMAGE}-dev:${BRANCH_LOWER}"
|
buildxPushTags = "-t docker.io/jc21/${IMAGE}:github-${BRANCH_LOWER}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -203,13 +203,7 @@ pipeline {
|
|||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
npmGithubPrComment("""Docker Image for build ${BUILD_NUMBER} is available on
|
npmGithubPrComment("Docker Image for build ${BUILD_NUMBER} is available on [DockerHub](https://cloud.docker.com/repository/docker/jc21/${IMAGE}) as `jc21/${IMAGE}:github-${BRANCH_LOWER}`\n\n**Note:** ensure you backup your NPM instance before testing this PR image! Especially if this PR contains database changes.", true)
|
||||||
[DockerHub](https://cloud.docker.com/repository/docker/nginxproxymanager/${IMAGE}-dev)
|
|
||||||
as `nginxproxymanager/${IMAGE}-dev:${BRANCH_LOWER}`
|
|
||||||
|
|
||||||
**Note:** ensure you backup your NPM instance before testing this image! Especially if there are database changes
|
|
||||||
**Note:** this is a different docker image namespace than the official image
|
|
||||||
""", true)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://nginxproxymanager.com/github.png">
|
<img src="https://nginxproxymanager.com/github.png">
|
||||||
<br><br>
|
<br><br>
|
||||||
<img src="https://img.shields.io/badge/version-2.12.1-green.svg?style=for-the-badge">
|
<img src="https://img.shields.io/badge/version-2.12.0-green.svg?style=for-the-badge">
|
||||||
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
|
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
|
||||||
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
|
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
|
||||||
</a>
|
</a>
|
||||||
|
@ -5,20 +5,6 @@ const config = require('../lib/config');
|
|||||||
const utils = require('../lib/utils');
|
const utils = require('../lib/utils');
|
||||||
const error = require('../lib/error');
|
const error = require('../lib/error');
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param {int} user_port
|
|
||||||
* @param {int} default_port
|
|
||||||
* @returns {int} port
|
|
||||||
*/
|
|
||||||
const validatePort = (user_port, default_port) => {
|
|
||||||
if (isNaN(user_port) || user_port < 1 || user_port > 65535) {
|
|
||||||
console.error(`Environment variable HTTP_PORT must be an integer between 1 and 65535 (got: ${user_port}). Using default port ${default_port}`);
|
|
||||||
return default_port;
|
|
||||||
}
|
|
||||||
return user_port;
|
|
||||||
};
|
|
||||||
|
|
||||||
const internalNginx = {
|
const internalNginx = {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -195,9 +181,7 @@ const internalNginx = {
|
|||||||
* @param {Object} host
|
* @param {Object} host
|
||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
*/
|
*/
|
||||||
generateConfig: (host_type, host_row) => {
|
generateConfig: (host_type, host) => {
|
||||||
// Prevent modifying the original object:
|
|
||||||
let host = JSON.parse(JSON.stringify(host_row));
|
|
||||||
const nice_host_type = internalNginx.getFileFriendlyHostType(host_type);
|
const nice_host_type = internalNginx.getFileFriendlyHostType(host_type);
|
||||||
|
|
||||||
if (config.debug()) {
|
if (config.debug()) {
|
||||||
@ -246,10 +230,8 @@ const internalNginx = {
|
|||||||
locationsPromise = Promise.resolve();
|
locationsPromise = Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the IPv6 and port setting for the host
|
// Set the IPv6 setting for the host
|
||||||
host.ipv6 = internalNginx.ipv6Enabled();
|
host.ipv6 = internalNginx.ipv6Enabled();
|
||||||
host.http_port = internalNginx.httpPort();
|
|
||||||
host.https_port = internalNginx.httpsPort();
|
|
||||||
|
|
||||||
locationsPromise.then(() => {
|
locationsPromise.then(() => {
|
||||||
renderEngine
|
renderEngine
|
||||||
@ -303,9 +285,7 @@ const internalNginx = {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
certificate.ipv6 = internalNginx.ipv6Enabled();
|
certificate.ipv6 = internalNginx.ipv6Enabled();
|
||||||
certificate.http_port = internalNginx.httpPort();
|
|
||||||
certificate.https_port = internalNginx.httpsPort();
|
|
||||||
|
|
||||||
renderEngine
|
renderEngine
|
||||||
.parseAndRender(template, certificate)
|
.parseAndRender(template, certificate)
|
||||||
@ -450,30 +430,7 @@ const internalNginx = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {integer}
|
|
||||||
*/
|
|
||||||
httpPort: function () {
|
|
||||||
if (typeof process.env.HTTP_PORT !== 'undefined') {
|
|
||||||
let httpPort = parseInt(process.env.HTTP_PORT);
|
|
||||||
return validatePort(httpPort, 443);
|
|
||||||
}
|
|
||||||
return 80;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {integer}
|
|
||||||
*/
|
|
||||||
httpsPort: function () {
|
|
||||||
if (typeof process.env.HTTPS_PORT !== 'undefined') {
|
|
||||||
let httpPort = parseInt(process.env.HTTPS_PORT);
|
|
||||||
return validatePort(httpPort, 443);
|
|
||||||
}
|
|
||||||
return 80;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = internalNginx;
|
module.exports = internalNginx;
|
||||||
|
@ -23,7 +23,9 @@
|
|||||||
"locations",
|
"locations",
|
||||||
"hsts_enabled",
|
"hsts_enabled",
|
||||||
"hsts_subdomains",
|
"hsts_subdomains",
|
||||||
"certificate"
|
"certificate",
|
||||||
|
"use_default_location",
|
||||||
|
"ipv6"
|
||||||
],
|
],
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -149,6 +151,12 @@
|
|||||||
"$ref": "./access-list-object.json"
|
"$ref": "./access-list-object.json"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"use_default_location": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"ipv6": {
|
||||||
|
"type": "boolean"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
},
|
},
|
||||||
"forward_scheme": {
|
"forward_scheme": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": ["auto", "http", "https"]
|
"enum": ["http", "https"]
|
||||||
},
|
},
|
||||||
"forward_domain_name": {
|
"forward_domain_name": {
|
||||||
"description": "Domain Name",
|
"description": "Domain Name",
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
"value": {
|
"value": {
|
||||||
"description": "Value in almost any form",
|
"description": "Value in almost any form",
|
||||||
"example": "congratulations",
|
"example": "congratulations",
|
||||||
"anyOf": [
|
"oneOf": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"minLength": 1
|
"minLength": 1
|
||||||
@ -46,10 +46,7 @@
|
|||||||
},
|
},
|
||||||
"meta": {
|
"meta": {
|
||||||
"description": "Extra metadata",
|
"description": "Extra metadata",
|
||||||
"example": {
|
"example": {},
|
||||||
"redirect": "http://example.com",
|
|
||||||
"html": "<h1>404</h1>"
|
|
||||||
},
|
|
||||||
"type": "object"
|
"type": "object"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,8 @@
|
|||||||
"minLength": 1
|
"minLength": 1
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,9 @@
|
|||||||
"avatar": "",
|
"avatar": "",
|
||||||
"roles": ["admin"]
|
"roles": ["admin"]
|
||||||
},
|
},
|
||||||
"certificate": null
|
"certificate": null,
|
||||||
|
"use_default_location": true,
|
||||||
|
"ipv6": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -79,7 +79,9 @@
|
|||||||
"nickname": "Admin",
|
"nickname": "Admin",
|
||||||
"avatar": "",
|
"avatar": "",
|
||||||
"roles": ["admin"]
|
"roles": ["admin"]
|
||||||
}
|
},
|
||||||
|
"use_default_location": true,
|
||||||
|
"ipv6": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -129,7 +129,9 @@
|
|||||||
"roles": ["admin"]
|
"roles": ["admin"]
|
||||||
},
|
},
|
||||||
"certificate": null,
|
"certificate": null,
|
||||||
"access_list": null
|
"access_list": null,
|
||||||
|
"use_default_location": true,
|
||||||
|
"ipv6": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -114,7 +114,9 @@
|
|||||||
"avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm",
|
"avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm",
|
||||||
"roles": ["admin"]
|
"roles": ["admin"]
|
||||||
},
|
},
|
||||||
"access_list": null
|
"access_list": null,
|
||||||
|
"use_default_location": true,
|
||||||
|
"ipv6": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -114,7 +114,9 @@
|
|||||||
"avatar": "",
|
"avatar": "",
|
||||||
"roles": ["admin"]
|
"roles": ["admin"]
|
||||||
},
|
},
|
||||||
"certificate": null
|
"certificate": null,
|
||||||
|
"use_default_location": true,
|
||||||
|
"ipv6": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -99,7 +99,9 @@
|
|||||||
"nickname": "Admin",
|
"nickname": "Admin",
|
||||||
"avatar": "",
|
"avatar": "",
|
||||||
"roles": ["admin"]
|
"roles": ["admin"]
|
||||||
}
|
},
|
||||||
|
"use_default_location": true,
|
||||||
|
"ipv6": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -129,7 +129,9 @@
|
|||||||
"roles": ["admin"]
|
"roles": ["admin"]
|
||||||
},
|
},
|
||||||
"certificate": null,
|
"certificate": null,
|
||||||
"access_list": null
|
"access_list": null,
|
||||||
|
"use_default_location": true,
|
||||||
|
"ipv6": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -13,8 +13,7 @@
|
|||||||
"name": "settingID",
|
"name": "settingID",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"minLength": 1,
|
"minLength": 1
|
||||||
"enum": ["default-site"]
|
|
||||||
},
|
},
|
||||||
"required": true,
|
"required": true,
|
||||||
"description": "Setting ID",
|
"description": "Setting ID",
|
||||||
@ -32,21 +31,10 @@
|
|||||||
"minProperties": 1,
|
"minProperties": 1,
|
||||||
"properties": {
|
"properties": {
|
||||||
"value": {
|
"value": {
|
||||||
"type": "string",
|
"$ref": "../../../components/setting-object.json#/properties/value"
|
||||||
"minLength": 1,
|
|
||||||
"enum": ["congratulations", "404", "444", "redirect", "html"]
|
|
||||||
},
|
},
|
||||||
"meta": {
|
"meta": {
|
||||||
"type": "object",
|
"$ref": "../../../components/setting-object.json#/properties/meta"
|
||||||
"additionalProperties": false,
|
|
||||||
"properties": {
|
|
||||||
"redirect": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"html": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
auth_basic "Authorization required";
|
auth_basic "Authorization required";
|
||||||
auth_basic_user_file /data/access/{{ access_list_id }};
|
auth_basic_user_file /data/access/{{ access_list_id }};
|
||||||
|
|
||||||
{% if access_list.pass_auth == 0 or access_list.pass_auth == true %}
|
{% if access_list.pass_auth == 0 %}
|
||||||
proxy_set_header Authorization "";
|
proxy_set_header Authorization "";
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@ -17,7 +17,7 @@
|
|||||||
deny all;
|
deny all;
|
||||||
|
|
||||||
# Access checks must...
|
# Access checks must...
|
||||||
{% if access_list.satisfy_any == 1 or access_list.satisfy_any == true %}
|
{% if access_list.satisfy_any == 1 %}
|
||||||
satisfy any;
|
satisfy any;
|
||||||
{% else %}
|
{% else %}
|
||||||
satisfy all;
|
satisfy all;
|
||||||
|
@ -1,20 +1,15 @@
|
|||||||
listen {{ http_port }};
|
listen 80;
|
||||||
{% if ipv6 -%}
|
{% if ipv6 -%}
|
||||||
listen [::]:{{ http_port }};
|
listen [::]:80;
|
||||||
{% else -%}
|
{% else -%}
|
||||||
#listen [::]:{{ http_port }};
|
#listen [::]:80;
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if certificate -%}
|
{% if certificate -%}
|
||||||
listen {{ https_port }} ssl;
|
listen 443 ssl{% if http2_support == 1 or http2_support == true %} http2{% endif %};
|
||||||
{% if ipv6 -%}
|
{% if ipv6 -%}
|
||||||
listen [::]:{{ https_port }} ssl;
|
listen [::]:443 ssl{% if http2_support == 1 or http2_support == true %} http2{% endif %};
|
||||||
{% else -%}
|
{% else -%}
|
||||||
#listen [::]:{{ https_port }};
|
#listen [::]:443;
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
server_name {{ domain_names | join: " " }};
|
server_name {{ domain_names | join: " " }};
|
||||||
{% if http2_support == 1 or http2_support == true %}
|
|
||||||
http2 on;
|
|
||||||
{% else -%}
|
|
||||||
http2 off;
|
|
||||||
{% endif %}
|
|
@ -7,7 +7,11 @@
|
|||||||
proxy_set_header X-Forwarded-For $remote_addr;
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
|
||||||
proxy_pass {{ forward_scheme }}://{{ forward_host }}:{{ forward_port }}{{ forward_path }};
|
set $proxy_forward_scheme {{ forward_scheme }};
|
||||||
|
set $proxy_server "{{ forward_host }}";
|
||||||
|
set $proxy_port {{ forward_port }};
|
||||||
|
|
||||||
|
proxy_pass $proxy_forward_scheme://$proxy_server:$proxy_port{{ forward_path }};
|
||||||
|
|
||||||
{% include "_access.conf" %}
|
{% include "_access.conf" %}
|
||||||
{% include "_assets.conf" %}
|
{% include "_assets.conf" %}
|
||||||
|
@ -33,8 +33,6 @@ services:
|
|||||||
DB_MYSQL_NAME: 'npm'
|
DB_MYSQL_NAME: 'npm'
|
||||||
# DB_SQLITE_FILE: "/data/database.sqlite"
|
# DB_SQLITE_FILE: "/data/database.sqlite"
|
||||||
# DISABLE_IPV6: "true"
|
# DISABLE_IPV6: "true"
|
||||||
# HTTP_PORT: "1234"
|
|
||||||
# HTTPS_PORT: "5678"
|
|
||||||
# Required for DNS Certificate provisioning testing:
|
# Required for DNS Certificate provisioning testing:
|
||||||
LE_SERVER: 'https://ca.internal/acme/acme/directory'
|
LE_SERVER: 'https://ca.internal/acme/acme/directory'
|
||||||
REQUESTS_CA_BUNDLE: '/etc/ssl/certs/NginxProxyManager.crt'
|
REQUESTS_CA_BUNDLE: '/etc/ssl/certs/NginxProxyManager.crt'
|
||||||
|
@ -18,6 +18,5 @@ fi
|
|||||||
. /etc/s6-overlay/s6-rc.d/prepare/30-ownership.sh
|
. /etc/s6-overlay/s6-rc.d/prepare/30-ownership.sh
|
||||||
. /etc/s6-overlay/s6-rc.d/prepare/40-dynamic.sh
|
. /etc/s6-overlay/s6-rc.d/prepare/40-dynamic.sh
|
||||||
. /etc/s6-overlay/s6-rc.d/prepare/50-ipv6.sh
|
. /etc/s6-overlay/s6-rc.d/prepare/50-ipv6.sh
|
||||||
. /etc/s6-overlay/s6-rc.d/prepare/55-http-https-port.sh
|
|
||||||
. /etc/s6-overlay/s6-rc.d/prepare/60-secrets.sh
|
. /etc/s6-overlay/s6-rc.d/prepare/60-secrets.sh
|
||||||
. /etc/s6-overlay/s6-rc.d/prepare/90-banner.sh
|
. /etc/s6-overlay/s6-rc.d/prepare/90-banner.sh
|
||||||
|
@ -1,62 +0,0 @@
|
|||||||
#!/command/with-contenv bash
|
|
||||||
# shellcheck shell=bash
|
|
||||||
|
|
||||||
# This command reads the `HTTP_PORT` and `HTTPS_PORT` env vars and will rerender
|
|
||||||
# the nginx files to the port defined in these variables
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
log_info 'HTTP_PORT ...'
|
|
||||||
|
|
||||||
DEFAULT_HTTP_PORT="80"
|
|
||||||
DEFAULT_HTTPS_PORT="443"
|
|
||||||
|
|
||||||
# Make sure HTTP_PORT and HTTPS_PORT are set correctly
|
|
||||||
case "$HTTP_PORT" in
|
|
||||||
''|*[!0-9]*)
|
|
||||||
echo "Could not parse HTTP_PORT as integer (got \"$HTTP_PORT\")."
|
|
||||||
echo "Using default http port \"$DEFAULT_HTTP_PORT\""
|
|
||||||
HTTP_PORT="$DEFAULT_HTTP_PORT"
|
|
||||||
;;
|
|
||||||
*) true ;;
|
|
||||||
esac
|
|
||||||
if [ "$HTTP_PORT" -lt "1" ] || [ "$HTTP_PORT" -gt "65535" ]; then
|
|
||||||
echo "HTTP_PORT must be between 1 and 65535 (got \"$HTTP_PORT\")."
|
|
||||||
echo "Using default http port \"$DEFAULT_HTTP_PORT\""
|
|
||||||
HTTP_PORT="$DEFAULT_HTTP_PORT"
|
|
||||||
fi
|
|
||||||
case "$HTTPS_PORT" in
|
|
||||||
''|*[!0-9]*)
|
|
||||||
echo "Could not parse HTTPS_PORT as integer (got \"$HTTPS_PORT\")."
|
|
||||||
echo "Using default https port \"$DEFAULT_HTTPS_PORT\""
|
|
||||||
HTTPS_PORT="$DEFAULT_HTTPS_PORT"
|
|
||||||
;;
|
|
||||||
*) true ;;
|
|
||||||
esac
|
|
||||||
if [ "$HTTPS_PORT" -lt "1" ] || [ "$HTTPS_PORT" -gt "65535" ]; then
|
|
||||||
echo "HTTPS_PORT must be between 1 and 65535 (got \"$HTTPS_PORT\")."
|
|
||||||
echo "Using default https port \"$DEFAULT_HTTPS_PORT\""
|
|
||||||
HTTPS_PORT="$DEFAULT_HTTPS_PORT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
process_folder () {
|
|
||||||
FILES=$(find "$1" -type f -name "*.conf")
|
|
||||||
|
|
||||||
HTTP_SED_REGEX='/ssl/! s/listen (\[::\]:)?[0-9]+/listen \1'$HTTP_PORT'/g'
|
|
||||||
HTTPS_SED_REGEX='/ssl/ s/listen (\[::\]:)?[0-9]+/listen \1'$HTTPS_PORT'/g'
|
|
||||||
|
|
||||||
echo "Setting HTTP listen port to $HTTP_PORT and HTTPS listen port to $HTTPS_PORT in: $1"
|
|
||||||
|
|
||||||
for FILE in $FILES
|
|
||||||
do
|
|
||||||
echo "- ${FILE}"
|
|
||||||
echo "$(sed -E "$HTTP_SED_REGEX" "$FILE")" > $FILE
|
|
||||||
echo "$(sed -E "$HTTPS_SED_REGEX" "$FILE")" > $FILE
|
|
||||||
done
|
|
||||||
|
|
||||||
# ensure the files are still owned by the npm user
|
|
||||||
chown -R "$PUID:$PGID" "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
process_folder /etc/nginx/conf.d
|
|
||||||
process_folder /data/nginx
|
|
@ -164,18 +164,6 @@ The easy fix is to add a Docker environment variable to the Nginx Proxy Manager
|
|||||||
DISABLE_IPV6: 'true'
|
DISABLE_IPV6: 'true'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Chaning the HTTP and HTTPS Listen Port
|
|
||||||
|
|
||||||
If you are unable to configure the port mapping within Docker (eg. when using
|
|
||||||
`hostNetwork: true`) you can change the port that proxy-hosts and
|
|
||||||
redirection-hosts listen on by setting the environment variables `HTTP_PORT` and
|
|
||||||
`HTTPS_PORT`:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
environment:
|
|
||||||
HTTP_PORT: "1234"
|
|
||||||
HTTPS_PORT: "5678"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Custom Nginx Configurations
|
## Custom Nginx Configurations
|
||||||
|
|
||||||
|
@ -137,13 +137,5 @@ Email: admin@example.com
|
|||||||
Password: changeme
|
Password: changeme
|
||||||
```
|
```
|
||||||
|
|
||||||
Immediately after logging in with this default user you will be asked to modify your details and change your password. You can change defaults with:
|
Immediately after logging in with this default user you will be asked to modify your details and change your password.
|
||||||
|
|
||||||
|
|
||||||
```
|
|
||||||
environment:
|
|
||||||
INITIAL_ADMIN_EMAIL: my@example.com
|
|
||||||
INITIAL_ADMIN_PASSWORD: mypassword1
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
"credentials": "dns_acmedns_api_url = http://acmedns-server/\ndns_acmedns_registration_file = /data/acme-registration.json",
|
"credentials": "dns_acmedns_api_url = http://acmedns-server/\ndns_acmedns_registration_file = /data/acme-registration.json",
|
||||||
"full_plugin_name": "dns-acmedns"
|
"full_plugin_name": "dns-acmedns"
|
||||||
},
|
},
|
||||||
"active24":{
|
"active24":{
|
||||||
"name": "Active24",
|
"name": "Active24",
|
||||||
"package_name": "certbot-dns-active24",
|
"package_name": "certbot-dns-active24",
|
||||||
"version": "~=1.5.1",
|
"version": "~=1.5.1",
|
||||||
@ -303,14 +303,6 @@
|
|||||||
"credentials": "dns_joker_username = <Dynamic DNS Authentication Username>\ndns_joker_password = <Dynamic DNS Authentication Password>\ndns_joker_domain = <Dynamic DNS Domain>",
|
"credentials": "dns_joker_username = <Dynamic DNS Authentication Username>\ndns_joker_password = <Dynamic DNS Authentication Password>\ndns_joker_domain = <Dynamic DNS Domain>",
|
||||||
"full_plugin_name": "dns-joker"
|
"full_plugin_name": "dns-joker"
|
||||||
},
|
},
|
||||||
"leaseweb": {
|
|
||||||
"name": "LeaseWeb",
|
|
||||||
"package_name": "certbot-dns-leaseweb",
|
|
||||||
"version": "~=1.0.1",
|
|
||||||
"dependencies": "",
|
|
||||||
"credentials": "dns_leaseweb_api_token = 01234556789",
|
|
||||||
"full_plugin_name": "dns-leaseweb"
|
|
||||||
},
|
|
||||||
"linode": {
|
"linode": {
|
||||||
"name": "Linode",
|
"name": "Linode",
|
||||||
"package_name": "certbot-dns-linode",
|
"package_name": "certbot-dns-linode",
|
||||||
@ -432,13 +424,13 @@
|
|||||||
"full_plugin_name": "dns-rfc2136"
|
"full_plugin_name": "dns-rfc2136"
|
||||||
},
|
},
|
||||||
"rockenstein": {
|
"rockenstein": {
|
||||||
"name": "rockenstein AG",
|
"name": "rockenstein AG",
|
||||||
"package_name": "certbot-dns-rockenstein",
|
"package_name": "certbot-dns-rockenstein",
|
||||||
"version": "~=1.0.0",
|
"version": "~=1.0.0",
|
||||||
"dependencies": "",
|
"dependencies": "",
|
||||||
"credentials": "dns_rockenstein_token=<token>",
|
"credentials": "dns_rockenstein_token=<token>",
|
||||||
"full_plugin_name": "dns-rockenstein"
|
"full_plugin_name": "dns-rockenstein"
|
||||||
},
|
},
|
||||||
"route53": {
|
"route53": {
|
||||||
"name": "Route 53 (Amazon)",
|
"name": "Route 53 (Amazon)",
|
||||||
"package_name": "certbot-dns-route53",
|
"package_name": "certbot-dns-route53",
|
||||||
|
@ -9,7 +9,7 @@ describe('Full Certificate Provisions', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Should be able to create new http certificate', function() {
|
it.only('Should be able to create new http certificate', function() {
|
||||||
cy.task('backendApiPost', {
|
cy.task('backendApiPost', {
|
||||||
token: token,
|
token: token,
|
||||||
path: '/api/nginx/certificates',
|
path: '/api/nginx/certificates',
|
||||||
@ -35,7 +35,7 @@ describe('Full Certificate Provisions', () => {
|
|||||||
it('Should be able to create new DNS certificate with Powerdns', function() {
|
it('Should be able to create new DNS certificate with Powerdns', function() {
|
||||||
cy.task('backendApiPost', {
|
cy.task('backendApiPost', {
|
||||||
token: token,
|
token: token,
|
||||||
path: '/api/nginx/certificates',
|
path: '/api/certificates',
|
||||||
data: {
|
data: {
|
||||||
domain_names: [
|
domain_names: [
|
||||||
'website2.example.com'
|
'website2.example.com'
|
||||||
@ -45,8 +45,7 @@ describe('Full Certificate Provisions', () => {
|
|||||||
dns_challenge: true,
|
dns_challenge: true,
|
||||||
dns_provider: 'powerdns',
|
dns_provider: 'powerdns',
|
||||||
dns_provider_credentials: 'dns_powerdns_api_url = http://ns1.pdns:8081\r\ndns_powerdns_api_key = npm',
|
dns_provider_credentials: 'dns_powerdns_api_url = http://ns1.pdns:8081\r\ndns_powerdns_api_key = npm',
|
||||||
letsencrypt_agree: true,
|
letsencrypt_agree: true
|
||||||
propagation_seconds: 5,
|
|
||||||
},
|
},
|
||||||
provider: 'letsencrypt'
|
provider: 'letsencrypt'
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/// <reference types="cypress" />
|
/// <reference types="cypress" />
|
||||||
|
|
||||||
describe('Proxy Hosts endpoints', () => {
|
describe('Hosts endpoints', () => {
|
||||||
let token;
|
let token;
|
||||||
|
|
||||||
before(() => {
|
before(() => {
|
@ -1,124 +0,0 @@
|
|||||||
/// <reference types="cypress" />
|
|
||||||
|
|
||||||
describe('Settings endpoints', () => {
|
|
||||||
let token;
|
|
||||||
|
|
||||||
before(() => {
|
|
||||||
cy.getToken().then((tok) => {
|
|
||||||
token = tok;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Get all settings', function() {
|
|
||||||
cy.task('backendApiGet', {
|
|
||||||
token: token,
|
|
||||||
path: '/api/settings',
|
|
||||||
}).then((data) => {
|
|
||||||
cy.validateSwaggerSchema('get', 200, '/settings', data);
|
|
||||||
expect(data.length).to.be.greaterThan(0);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Get default-site setting', function() {
|
|
||||||
cy.task('backendApiGet', {
|
|
||||||
token: token,
|
|
||||||
path: '/api/settings/default-site',
|
|
||||||
}).then((data) => {
|
|
||||||
cy.validateSwaggerSchema('get', 200, '/settings/{settingID}', data);
|
|
||||||
expect(data).to.have.property('id');
|
|
||||||
expect(data.id).to.be.equal('default-site');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Default Site congratulations', function() {
|
|
||||||
cy.task('backendApiPut', {
|
|
||||||
token: token,
|
|
||||||
path: '/api/settings/default-site',
|
|
||||||
data: {
|
|
||||||
value: 'congratulations',
|
|
||||||
},
|
|
||||||
}).then((data) => {
|
|
||||||
cy.validateSwaggerSchema('put', 200, '/settings/{settingID}', data);
|
|
||||||
expect(data).to.have.property('id');
|
|
||||||
expect(data.id).to.be.equal('default-site');
|
|
||||||
expect(data).to.have.property('value');
|
|
||||||
expect(data.value).to.be.equal('congratulations');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Default Site 404', function() {
|
|
||||||
cy.task('backendApiPut', {
|
|
||||||
token: token,
|
|
||||||
path: '/api/settings/default-site',
|
|
||||||
data: {
|
|
||||||
value: '404',
|
|
||||||
},
|
|
||||||
}).then((data) => {
|
|
||||||
cy.validateSwaggerSchema('put', 200, '/settings/{settingID}', data);
|
|
||||||
expect(data).to.have.property('id');
|
|
||||||
expect(data.id).to.be.equal('default-site');
|
|
||||||
expect(data).to.have.property('value');
|
|
||||||
expect(data.value).to.be.equal('404');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Default Site 444', function() {
|
|
||||||
cy.task('backendApiPut', {
|
|
||||||
token: token,
|
|
||||||
path: '/api/settings/default-site',
|
|
||||||
data: {
|
|
||||||
value: '444',
|
|
||||||
},
|
|
||||||
}).then((data) => {
|
|
||||||
cy.validateSwaggerSchema('put', 200, '/settings/{settingID}', data);
|
|
||||||
expect(data).to.have.property('id');
|
|
||||||
expect(data.id).to.be.equal('default-site');
|
|
||||||
expect(data).to.have.property('value');
|
|
||||||
expect(data.value).to.be.equal('444');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Default Site redirect', function() {
|
|
||||||
cy.task('backendApiPut', {
|
|
||||||
token: token,
|
|
||||||
path: '/api/settings/default-site',
|
|
||||||
data: {
|
|
||||||
value: 'redirect',
|
|
||||||
meta: {
|
|
||||||
redirect: 'https://www.google.com',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}).then((data) => {
|
|
||||||
cy.validateSwaggerSchema('put', 200, '/settings/{settingID}', data);
|
|
||||||
expect(data).to.have.property('id');
|
|
||||||
expect(data.id).to.be.equal('default-site');
|
|
||||||
expect(data).to.have.property('value');
|
|
||||||
expect(data.value).to.be.equal('redirect');
|
|
||||||
expect(data).to.have.property('meta');
|
|
||||||
expect(data.meta).to.have.property('redirect');
|
|
||||||
expect(data.meta.redirect).to.be.equal('https://www.google.com');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Default Site html', function() {
|
|
||||||
cy.task('backendApiPut', {
|
|
||||||
token: token,
|
|
||||||
path: '/api/settings/default-site',
|
|
||||||
data: {
|
|
||||||
value: 'html',
|
|
||||||
meta: {
|
|
||||||
html: '<p>hello world</p>'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}).then((data) => {
|
|
||||||
cy.validateSwaggerSchema('put', 200, '/settings/{settingID}', data);
|
|
||||||
expect(data).to.have.property('id');
|
|
||||||
expect(data.id).to.be.equal('default-site');
|
|
||||||
expect(data).to.have.property('value');
|
|
||||||
expect(data.value).to.be.equal('html');
|
|
||||||
expect(data).to.have.property('meta');
|
|
||||||
expect(data.meta).to.have.property('html');
|
|
||||||
expect(data.meta.html).to.be.equal('<p>hello world</p>');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@ -7,7 +7,7 @@ const BackendApi = function(config, token) {
|
|||||||
|
|
||||||
this.axios = axios.create({
|
this.axios = axios.create({
|
||||||
baseURL: config.baseUrl,
|
baseURL: config.baseUrl,
|
||||||
timeout: 90000,
|
timeout: 60000,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user