nginx-quickdeploy 0.4.2
Nginx Quickdeploy
License: MIT
Requires Python: >=3.6

# NGINX QUICKDEPLOY

[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
![Build Workflow](https://github.com/regmibijay/nginx-quickdeploy/actions/workflows/main.yml/badge.svg)
![PyPi Latest Release](https://img.shields.io/pypi/v/nginx-quickdeploy.svg)

## About

Helps you create and deploy websites on nginx quickly.

## Installation

`pip3 install nginx-quickdeploy`

## Usage

### Variables:

- 'FQDN' : Fully Qualified Domain Name, name of your website
- Nginx config path: Path where your generated config file is stored.
- Ports: Ports to listen to, in format: `<port1> [ssl], <port2> [ssl]`
- Root path: Path where your html files are located
- Proxy: If your actual application is running on some other port, you can proxy pass and use nginx as webserver. For that just use this function, if not leave it empty
- Hook : Post deployment shell script you want to be run

### CLI

```
  -h, --help                          Show this help message and exit
  -i [INPUT], --input [INPUT]         Input json file for easy installation
  -d [DOMAIN], --domain [DOMAIN]      Domain you want to set up.
  -p [PATH], --path [PATH]            Config file path
  --ports [PORTS]                     Ports to listen to separated by comma(,)
  -w [WEBROOT], --webroot [WEBROOT]   Webroot folder containing index.html
  -f [FORWARD], --forward [FORWARD]   Proxy pass URL
  --ssl_cert_path [SSL_CERT_PATH]     SSL certificate path
  --ssl_key_path [SSL_KEY_PATH]       SSL key path
  --hook                              Post install hook, a shell script you want to launch after
                                      deployment is complete.
```

### JSON input:

Json input is also supported for easier deployment. Following keys are supported:

- url : mandatory : provide FQDN
- path : optional : provide path to be written config, default /etc/nginx/sites-available/{URL}
- ports : optional, list : provide ports to listen and with ssl or not, default 80 on both interfaces
- root : optional : path to webroot folder, default /var/www/html/{url}
- proxy : optional : path to http proxy if you have an app running behind nginx
- ssl_cert_path : optional : SSL cert path if you have ssl enabled
- ssl_key_path : optional : SSL key path if you have ssl enabled

#### Json example

```
{
  "url": "www.example.org",
  "path": "/usr/shared/www.example.org",
  "ports": ["80", "[::]:80", "443 ssl", "[::]:443 ssl"],
  "root": "/var/www/html",
  "proxy": "https://app.example.org:8080",
  "ssl_cert_path": "/etc/ssl/myexample.org/cert.crt",
  "ssl_key_path": "/etc/ssl/myexample.org/key.pem"
}
```

yields:

```
server {
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name www.example.org;
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/ssl/myexample.org/cert.crt;
ssl_certificate_key /etc/ssl/myexample.org/key.pem;
location / {
  proxy_pass https://app.example.org:8080;
  }
}
```

## Tips and Examples

Invoke the script with sudo rights if you want to write to `/etc/ngnix/sites-available` as it is write protected for non sudo users.

`# sudo quickdeploy`

```
FQDN of your domain, e.g. example.com or subdomain.example.com without http or https:  www.example.org
Where should the new config file be saved?, default is /etc/nginx/sites-available/www.example.org :
Ports separated by commas(,) in nginx fashion, like 80, [::]:80 etc
For ssl, just add ssl after the port, e.g. 80, 443 ssl, [::]:80, [::]:443 ssl
Enter ports here:
Enter the www root path(default /var/www/html):
Should this server need to proxy_pass, enter the address here:

Your new website was deployed successfully
Restart nginx to serve it via nginx.
```

would yield a config file that looks like this:

```
server {
  root /var/www/html;
  server_name www.example.org;
  listen 80;
   location / {
       try_files $uri $uri/;
   }
}
```