mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-11-13 22:05:15 +00:00
195 lines
5.7 KiB
Markdown
195 lines
5.7 KiB
Markdown
---
|
||
outline: deep
|
||
---
|
||
|
||
# Full Setup Instructions
|
||
|
||
## Running the App
|
||
|
||
Create a `docker-compose.yml` file:
|
||
|
||
```yml
|
||
services:
|
||
app:
|
||
image: 'jc21/nginx-proxy-manager:latest'
|
||
restart: unless-stopped
|
||
|
||
ports:
|
||
# These ports are in format <host-port>:<container-port>
|
||
- '80:80' # Public HTTP Port
|
||
- '443:443' # Public HTTPS Port
|
||
- '81:81' # Admin Web Port
|
||
# Add any other Stream port you want to expose
|
||
# - '21:21' # FTP
|
||
|
||
environment:
|
||
TZ: "Australia/Brisbane"
|
||
|
||
# Uncomment this if you want to change the location of
|
||
# the SQLite DB file within the container
|
||
# DB_SQLITE_FILE: "/data/database.sqlite"
|
||
|
||
# Uncomment this if IPv6 is not enabled on your host
|
||
# DISABLE_IPV6: 'true'
|
||
|
||
volumes:
|
||
- ./data:/data
|
||
- ./letsencrypt:/etc/letsencrypt
|
||
```
|
||
|
||
Then:
|
||
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
## Using MySQL / MariaDB Database
|
||
|
||
If you opt for the MySQL configuration you will have to provide the database server yourself. You can also use MariaDB. Here are the minimum supported versions:
|
||
|
||
- MySQL v5.7.8+
|
||
- 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 an example of what your `docker-compose.yml` will look like when using a MariaDB container:
|
||
|
||
```yml
|
||
services:
|
||
app:
|
||
image: 'jc21/nginx-proxy-manager:latest'
|
||
restart: unless-stopped
|
||
ports:
|
||
# These ports are in format <host-port>:<container-port>
|
||
- '80:80' # Public HTTP Port
|
||
- '443:443' # Public HTTPS Port
|
||
- '81:81' # Admin Web Port
|
||
# Add any other Stream port you want to expose
|
||
# - '21:21' # FTP
|
||
environment:
|
||
TZ: "Australia/Brisbane"
|
||
# Mysql/Maria connection parameters:
|
||
DB_MYSQL_HOST: "db"
|
||
DB_MYSQL_PORT: 3306
|
||
DB_MYSQL_USER: "npm"
|
||
DB_MYSQL_PASSWORD: "npm"
|
||
DB_MYSQL_NAME: "npm"
|
||
# Optional SSL (see section below)
|
||
# DB_MYSQL_SSL: 'true'
|
||
# DB_MYSQL_SSL_REJECT_UNAUTHORIZED: 'true'
|
||
# DB_MYSQL_SSL_VERIFY_IDENTITY: 'true'
|
||
# Uncomment this if IPv6 is not enabled on your host
|
||
# DISABLE_IPV6: 'true'
|
||
volumes:
|
||
- ./data:/data
|
||
- ./letsencrypt:/etc/letsencrypt
|
||
depends_on:
|
||
- db
|
||
|
||
db:
|
||
image: 'jc21/mariadb-aria:latest'
|
||
restart: unless-stopped
|
||
environment:
|
||
MYSQL_ROOT_PASSWORD: 'npm'
|
||
MYSQL_DATABASE: 'npm'
|
||
MYSQL_USER: 'npm'
|
||
MYSQL_PASSWORD: 'npm'
|
||
MARIADB_AUTO_UPGRADE: '1'
|
||
volumes:
|
||
- ./mysql:/var/lib/mysql
|
||
```
|
||
|
||
::: 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.
|
||
|
||
:::
|
||
|
||
### Optional: MySQL / MariaDB SSL
|
||
|
||
You can enable TLS for the MySQL/MariaDB connection with these environment variables:
|
||
|
||
- DB_MYSQL_SSL: Enable SSL when set to true. If unset or false, SSL disabled (previous default behaviour).
|
||
- DB_MYSQL_SSL_REJECT_UNAUTHORIZED: (default: true) Validate the server certificate chain. Set to false to allow self‑signed/unknown CA.
|
||
- DB_MYSQL_SSL_VERIFY_IDENTITY: (default: true) Performs host name / identity verification.
|
||
|
||
Enabling SSL using a self-signed cert (not recommended for production).
|
||
|
||
## Using Postgres database
|
||
|
||
Similar to the MySQL server setup:
|
||
|
||
```yml
|
||
services:
|
||
app:
|
||
image: 'jc21/nginx-proxy-manager:latest'
|
||
restart: unless-stopped
|
||
ports:
|
||
# These ports are in format <host-port>:<container-port>
|
||
- '80:80' # Public HTTP Port
|
||
- '443:443' # Public HTTPS Port
|
||
- '81:81' # Admin Web Port
|
||
# Add any other Stream port you want to expose
|
||
# - '21:21' # FTP
|
||
environment:
|
||
TZ: "Australia/Brisbane"
|
||
# Postgres parameters:
|
||
DB_POSTGRES_HOST: 'db'
|
||
DB_POSTGRES_PORT: '5432'
|
||
DB_POSTGRES_USER: 'npm'
|
||
DB_POSTGRES_PASSWORD: 'npmpass'
|
||
DB_POSTGRES_NAME: 'npm'
|
||
# Uncomment this if IPv6 is not enabled on your host
|
||
# DISABLE_IPV6: 'true'
|
||
volumes:
|
||
- ./data:/data
|
||
- ./letsencrypt:/etc/letsencrypt
|
||
depends_on:
|
||
- db
|
||
|
||
db:
|
||
image: postgres:17
|
||
environment:
|
||
POSTGRES_USER: 'npm'
|
||
POSTGRES_PASSWORD: 'npmpass'
|
||
POSTGRES_DB: 'npm'
|
||
volumes:
|
||
- ./postgresql:/var/lib/postgresql
|
||
```
|
||
|
||
::: warning
|
||
|
||
Custom Postgres schema is not supported, as such `public` will be used.
|
||
|
||
:::
|
||
|
||
## Running on Raspberry PI / ARM devices
|
||
|
||
The docker images support the following architectures:
|
||
- amd64
|
||
- arm64
|
||
- armv7
|
||
|
||
The docker images are a manifest of all the architecture docker builds supported, so this means
|
||
you don't have to worry about doing anything special and you can follow the common instructions above.
|
||
|
||
Check out the [dockerhub tags](https://hub.docker.com/r/jc21/nginx-proxy-manager/tags)
|
||
for a list of supported architectures and if you want one that doesn't exist,
|
||
[create a feature request](https://github.com/NginxProxyManager/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=).
|
||
|
||
Also, if you don't know how to already, follow [this guide to install docker and docker-compose](https://manre-universe.net/how-to-run-docker-and-docker-compose-on-raspbian/)
|
||
on Raspbian.
|
||
|
||
Please note that the `jc21/mariadb-aria:latest` image might have some problems on some ARM devices, if you want a separate database container, use the `yobasystems/alpine-mariadb:latest` image.
|
||
|
||
## Initial Run
|
||
|
||
After the app is running for the first time, the following will happen:
|
||
|
||
1. JWT keys will be generated and saved in the data folder
|
||
2. The database will initialize with table structures
|
||
3. A default admin user will be created
|
||
|
||
This process can take a couple of minutes depending on your machine.
|