nginx-proxy-manager-Bash-API/README.md

187 lines
6.4 KiB
Markdown
Raw Normal View History

2024-07-10 14:23:30 +02:00
# Nginx Proxy Manager CLI Script
2024-07-10 21:15:14 +02:00
## Description
2024-07-10 14:23:30 +02:00
_by Erreur32_
2024-07-10 22:33:05 +02:00
🛠️ This BASH script allows you to manage Nginx Proxy Manager via the API.
2024-07-10 14:23:30 +02:00
2024-07-11 19:15:42 +02:00
🔑 Automatically generates and manages the tokens, ensuring their validity, so you don't have to worry about token expiration.
2024-07-10 14:26:46 +02:00
2024-07-12 13:11:23 +02:00
⚙️ Provides functionalities such as creating and deleting proxy hosts, managing users, displaying configurations, BACKUP! and more.
2024-07-10 14:17:48 +02:00
2024-07-12 13:11:23 +02:00
Ce script permet de gérer Nginx Proxy Manager via l'API. Il fournit des fonctionnalités telles que la création de hosts proxy, la gestion des utilisateurs, et l'affichage des configurations avec creation de BACKUP !
2024-07-10 21:15:14 +02:00
2024-07-12 13:30:59 +02:00
## Reference
![https://github.com/NginxProxyManager/nginx-proxy-manager/tree/develop/backend/schema](https://github.com/NginxProxyManager/nginx-proxy-manager/tree/develop/backend/schema)
2024-07-11 18:25:09 +02:00
## Prerequisites
2024-07-10 21:15:14 +02:00
2024-07-13 14:13:47 +02:00
Of course NPM (![Nginx Proxy Manager](https://github.com/NginxProxyManager/nginx-proxy-manager?utm_source=nginx-proxy-manager))
and simple dependencies:
2024-07-10 21:15:14 +02:00
- `curl`
- `jq`
```bash
2024-07-10 22:44:33 +02:00
sudo apt-get install jq curl
2024-07-10 21:15:14 +02:00
```
2024-07-10 14:45:21 +02:00
2024-07-10 22:44:33 +02:00
## Installation
```
2024-07-11 12:39:16 +02:00
wget https://raw.githubusercontent.com/Erreur32/nginx-proxy-manager-API/main/nginx_proxy_manager_cli.sh
chmod +x nginx_proxy_manager_cli.sh
2024-07-10 22:44:33 +02:00
```
2024-07-10 14:45:21 +02:00
2024-07-11 18:27:04 +02:00
## Settings
2024-07-10 22:44:33 +02:00
Only edit these 3 variables:
2024-07-10 14:45:21 +02:00
```
2024-07-11 19:16:35 +02:00
## Nginx proxy IP address (your Nginx IP)
2024-07-10 20:48:13 +02:00
NGINX_IP="127.0.0.1"
2024-07-10 22:44:33 +02:00
## Existing user (user and password) on NPM
2024-07-10 20:48:13 +02:00
API_USER="existingUser@mail.com"
2024-07-10 14:45:21 +02:00
API_PASS="password"
```
2024-07-11 18:27:04 +02:00
## Usage
2024-07-10 14:17:48 +02:00
```bash
./nginx_proxy_manager_cli.sh [OPTIONS]
```
2024-07-11 18:27:04 +02:00
## Options
2024-07-10 14:17:48 +02:00
```tcl
2024-07-12 21:58:22 +02:00
-d DOMAIN_NAMES Domain name (required for creating/updating hosts)
-i FORWARD_HOST IP address or domain name of the target server (required for creating/updating hosts)
-p FORWARD_PORT Port of the target server (required for creating/updating hosts)
-f FORWARD_SCHEME Scheme for forwarding (http/https, default: http)
-c CACHING_ENABLED Enable caching (true/false, default: false)
-b BLOCK_EXPLOITS Block exploits (true/false, default: true)
-w ALLOW_WEBSOCKET_UPGRADE Allow WebSocket upgrade (true/false, default: true)
-a ADVANCED_CONFIG Advanced configuration (block of configuration settings)
--backup Backup all configurations to a file
--check-token Check if the current token is valid
--create-user user pass email Create a user with a username, password and email
--delete-user username Delete a user by username
--delete-host id Delete a proxy host by ID
--show-host id Show full details for a specific host by ID
--show-default Show default settings for creating hosts
--list-hosts List the names of all proxy hosts
--list-hosts-full List all proxy hosts with full details
--list-ssl-certificates List all SSL certificates
--list-users List all users
--search-host hostname Search for a proxy host by domain name
--enable-host id Enable a proxy host by ID
--disable-host id Disable a proxy host by ID
2024-07-13 11:49:00 +02:00
--ssl-host-enable id Enable SSL, HTTP/2, and HSTS for a proxy host (will generate let's encrypt certif auto)
2024-07-12 21:58:22 +02:00
--ssl-host-disable id Disable SSL, HTTP/2, and HSTS for a proxy host
--help Display this help
2024-07-10 14:17:48 +02:00
```
2024-07-10 14:05:48 +02:00
2024-07-11 18:27:04 +02:00
## Examples
2024-07-10 14:17:48 +02:00
```bash
2024-07-12 21:58:22 +02:00
Backup First !
./nginx_proxy_manager_cli.sh --backup
2024-07-12 13:23:51 +02:00
2024-07-12 21:58:22 +02:00
./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080 (check default values below)
./nginx_proxy_manager_cli.sh --show-default
2024-07-12 13:23:51 +02:00
./nginx_proxy_manager_cli.sh --create-user newuser password123 user@example.com
./nginx_proxy_manager_cli.sh --delete-user 'username'
./nginx_proxy_manager_cli.sh --list-hosts
2024-07-12 21:58:22 +02:00
2024-07-13 13:56:02 +02:00
./nginx_proxy_manager_cli.sh --ssl-host-enable 10
./nginx_proxy_manager_cli.sh --generate-cert example.com user@example.com --custom (not finish)
2024-07-12 13:23:51 +02:00
Advanced proxy tab example:
2024-07-12 13:26:49 +02:00
./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080 -a 'proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;'
2024-07-12 21:58:22 +02:00
2024-07-10 14:17:48 +02:00
```
2024-07-12 22:30:04 +02:00
2024-07-13 14:15:56 +02:00
#### Enable SSL for the Host:
2024-07-12 22:30:04 +02:00
2024-07-13 13:56:02 +02:00
Assuming the host ID is *10*, you would enable SSL for the host as follows:
2024-07-12 22:30:04 +02:00
2024-07-13 13:56:02 +02:00
./nginx_proxy_manager_cli.sh --ssl-host-enable 10
2024-07-12 22:30:04 +02:00
2024-07-13 14:15:56 +02:00
#### Verifying the Configuration
2024-07-12 22:30:04 +02:00
After running the above commands, you can verify the SSL configuration by checking the details of the proxy host.
2024-07-13 13:56:02 +02:00
./nginx_proxy_manager_cli.sh --show-host 10
2024-07-12 22:30:04 +02:00
2024-07-13 13:56:02 +02:00
This command will show the full details of the proxy host with ID *10*, including whether SSL is enabled.
2024-07-12 22:30:04 +02:00
By following these steps, you can enable SSL for your proxy host for the first time using Let's Encrypt.
2024-07-13 14:08:53 +02:00
You should now see the parameters activated:
- "ssl_forced": 1,
- "letsencrypt_agree": true,
- "http2_support": 1
2024-07-13 13:57:30 +02:00
2024-07-13 14:08:53 +02:00
```
./nginx_proxy_manager_cli_.sh --show-host 10
✅ Nginx url: http://127.0.0.1:81/api
✅ The token is valid. Expiry: 2025-07-12T08:14:58.521Z
👉 Full details for proxy host ID: 59...
{
"id": 10,
"created_on": "2024-07-11 13:16:34",
"modified_on": "2024-07-13 09:42:40",
"owner_user_id": 1,
"domain_names": [
"test.domain.com"
],
"forward_host": "127.0.0.1",
"forward_port": 80,
"access_list_id": 0,
"certificate_id": 81,
"ssl_forced": 1,
"caching_enabled": 0,
"block_exploits": 1,
"advanced_config": "",
"meta": {
"letsencrypt_agree": true,
"letsencrypt_email": "",
"nginx_online": true,
"nginx_err": null
},
"allow_websocket_upgrade": 1,
"http2_support": 1,
"forward_scheme": "http",
"enabled": 1,
"locations": [],
"hsts_enabled": 1,
"hsts_subdomains": 0
}
```
2024-07-13 13:57:30 +02:00
## Screens:
2024-07-13 11:51:35 +02:00
```
# ./nginx_proxy_manager_cli.sh --backup
✅ Nginx url: http://192.168.1.200:81/api
✅ The token is valid. Expiry: 2025-07-12T08:14:58.521Z
✅ Full backup completed successfully in 📂 './backups'
```
2024-07-10 14:19:15 +02:00
2024-07-13 13:57:30 +02:00
2024-07-12 21:58:22 +02:00
![https://github.com/Erreur32/nginx-proxy-manager-API/blob/main/screen-nginx-proxy-default.png](https://github.com/Erreur32/nginx-proxy-manager-API/blob/main/screen-nginx-proxy-default.png)
2024-07-10 14:23:30 +02:00
2024-07-10 14:19:15 +02:00
## TODO:
2024-07-13 11:55:50 +02:00
- [x] add setting for ADVANCED configuration in npm `location / { ... }`
2024-07-12 13:11:23 +02:00
- [x] Add documentation on certain functions
2024-07-12 13:08:46 +02:00
- [x] ADD: a configuration function for Custom Locations
2024-07-13 11:55:50 +02:00
- [x] Backup all settings from NPM
- [ ] Export all settings from NPM
2024-07-11 18:50:35 +02:00
- [ ] Domain TLS check validity
2024-07-13 11:55:50 +02:00
- [ ] Better Error Messages