An open API service indexing awesome lists of open source software.

https://github.com/regmibijay/nginx-quickdeploy

Quickly deploy websites with just URL name, generate letsencrypt certificates on the go and create placeholder website.
https://github.com/regmibijay/nginx-quickdeploy

deployment nginx webserver website-development

Last synced: 5 months ago
JSON representation

Quickly deploy websites with just URL name, generate letsencrypt certificates on the go and create placeholder website.

Awesome Lists containing this project

README

          

# 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: ` [ssl], [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/;
}
}
```