# NGINX Proxy Manager

### ![NGINX PM.jpeg](https://bookstack.timshome.net/uploads/images/gallery/2023-01/scaled-1680-/FIJrpabdNGtulO9l-nginx-pm.jpeg)

### What is Nginx Proxy Manager?

[**Nginx Proxy Manager**](https://nginxproxymanager.com/) is a Docker application that lets you quickly and easily expose your selfhosted services to the outside world. NPM includes Letsencrypt SSL certificate management, which permits you to obtain free SSL certificates for secure hosting of your sites.

---

#### Installation  


NGINX Proxy Manager (NPM) is installed as a Docker container.

You must have Docker and Docker Compose installed to use NPM. I am currently using Docker CE (community edition).

You also have a choice of databases to use with NPM. The default database installed is SQLite. I chose to utilize MariaDB instead of the default as it is open-source and MySQL compatible but with a richer feature set and better performance than either MySQL or SQLite.

<p class="callout warning">Please note, that DB\_MYSQL\_\* environment variables will take precedent over DB\_SQLITE\_\* variables. So if you keep the MySQL variables, you will not be able to use SQLite. #</p>

This installation guide is for NPM with MariaDB (MySQL).

##### Using MariaDB Database with NPM  


If you opt for the MariaDB configuration you will have to provide the database server yourself. The current minimum supported version is:

- MariaDB v10.2.7+

It's easy to use another docker container for your database also and link it as part of the docker stack, so that's what the following examples are going to use.

Here is my `docker-compose.yml` using a MariaDB container. You can use it as example :

```yaml
version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    environment:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "your MySQL username"
      DB_MYSQL_PASSWORD: "your MySQL password"
      DB_MYSQL_NAME: "nginx"
      TZ: America/New_York
    volumes:
      - /localpathtoyourNPMdata:/data
      - /localpathtoyourNPMletsencryptcertificatedata:/etc/letsencrypt
  db:
    image: 'mariadb'
    environment:
      MYSQL_ROOT_PASSWORD: 'your MySQL root password'
      MYSQL_DATABASE: 'nginx'
      MYSQL_USER: 'your MySQL username'
      MYSQL_PASSWORD: 'your MySQL password'
      TZ: America/New_York
    volumes:
      - /localpathtoyourNPMdatabase:/var/lib/mysql
```

<p class="callout info">Make sure you change DB\_MYSQL\_USER, DB\_MYSQL\_PASSWORD and MYSQL\_ROOT\_PASSWORD to whatever username and passwords you intend to use. </p>

<p class="callout info">Make sure you change the local path of your volumes to the path you intend to use to store NGINX Proxy Manager data, certificates and the database.</p>

<p class="callout info">Also, make sure you change the timezone (TZ) parameter to reflect your timezone as it affects the certificate timestamps you get from Let's Encrypt. You can find your timezone from here: [Wikipedia TZ Database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)  
</p>