mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-07-01 15:47:23 +00:00
If people copy and paste the sqlite installation without commenting environment docker compose will throw an error because environment will be null.
194 lines
5.2 KiB
Markdown
194 lines
5.2 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:
|
|
# 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:
|
|
# Mysql/Maria connection parameters:
|
|
DB_MYSQL_HOST: "db"
|
|
DB_MYSQL_PORT: 3306
|
|
DB_MYSQL_USER: "npm"
|
|
DB_MYSQL_PASSWORD: "npm"
|
|
DB_MYSQL_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: '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.
|
|
|
|
:::
|
|
|
|
## 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:
|
|
# 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:latest
|
|
environment:
|
|
POSTGRES_USER: 'npm'
|
|
POSTGRES_PASSWORD: 'npmpass'
|
|
POSTGRES_DB: 'npm'
|
|
volumes:
|
|
- ./postgres:/var/lib/postgresql/data
|
|
```
|
|
|
|
::: 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.
|
|
|
|
## Default Administrator User
|
|
|
|
```
|
|
Email: admin@example.com
|
|
Password: changeme
|
|
```
|
|
|
|
Immediately after logging in with this default user you will be asked to modify your details and change your password. You can change defaults with:
|
|
|
|
|
|
```
|
|
environment:
|
|
INITIAL_ADMIN_EMAIL: my@example.com
|
|
INITIAL_ADMIN_PASSWORD: mypassword1
|
|
```
|
|
|
|
|