Nginx Proxy Manager auf 2.10.x aktualisieren

Inhaltsverzeichnis

Letzte Aktualisierung am 24.09.2023, 22:09:21 Uhr

In meinem Lab habe ich einen Ubuntu Server, auf dem mit Hilfe von Docker ein Nginx Proxy Manager (NPM) betrieben wird. Die eingesetzte Version von NPM ist zu diesem Zeitpunkt 2.9.19.

Ein blinde Aktualisierung der Container ist beim Wechsel auf Version 2.10.x ist nicht mehr möglich. Denn es wurden seitens der Entwickler ein paar Änderungen bei den Berechtigungen vorgenommen.

Daher beschreibe ich in diesem Artikel mein Vorgehen um eine erfolgreich Aktualisierung auf NPM Version 2.10.3 durchzuführen.

Ausgangslage

Die Konfiguration sowie Daten der NPM Instanz liegen bei mir in dem Verzeichnis „/opt/containers/npm/“.

Die dazugehörige Datei „docker-compose.yml“ für den Betrieb von NPM sieht wie folgt aus:

version: "3.9"
services:
  npm-app:
    image: "jc21/nginx-proxy-manager:latest"
    container_name: npm-app
    restart: unless-stopped
    ports:
      - "80:80" # Public HTTP Port
      - "443:443" # Public HTTPS Port
      - "81:81" # Admin Web Port
    environment:
      DB_MYSQL_HOST: "npm-db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: ${MYSQL_USER}
      DB_MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      DB_MYSQL_NAME: ${MYSQL_DATABASE}
    volumes:
      - "/etc/timezone:/etc/timezone:ro"
      - "/etc/localtime:/etc/localtime:ro"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - npm-db
    networks:
      - npm-nw
      - npm-internal

  npm-db:
    image: "mariadb:latest"
    container_name: npm-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - "/etc/timezone:/etc/timezone:ro"
      - "/etc/localtime:/etc/localtime:ro"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - ./data/mysql:/var/lib/mysql
    networks:
      - npm-internal

networks:
  npm-internal:
    external: false
  npm-nw:
    external: true

Aktualisierung von NPM

In das Verzeichnis von NPM wechseln.

cd /opt/containers/npm/

Zuerst alle aktiven Container beenden.

docker compose -f docker-compose.yml down

Neues Verzeichnis für NPM anlegen.

mkdir /opt/containers/npm/data/app

Die bestehenden Verzeichnisse von NPM in das neue Verzeichnis verschieben.

mv /opt/containers/npm/data/access/ /opt/containers/npm/data/app/
mv /opt/containers/npm/data/custom_ssl/ /opt/containers/npm/data/app/
mv /opt/containers/npm/data/letsencrypt-acme-challenge/ /opt/containers/npm/data/app/
mv /opt/containers/npm/data/logs/ /opt/containers/npm/data/app/
mv /opt/containers/npm/data/nginx/ /opt/containers/npm/data/app/

Einen neuen Benutzer für NPM anlegen. In meinem Fall heißt der Benutzer auch „npm“.

useradd npm -s /usr/sbin/nologin

ID des neuen Benutzers und dazugehörige auslesen.

root@npm01a:~# id -u npm
1001
root@npm01a:~# id -g npm
1001

Die bestehende Konfigurationsdatei „docker-compose.yml“ muss nun noch erweitert werden. Zuerst werden im Bereich „environment:“ zwei Parameter PUID und GUID

environment:
  PUID: 1001
  GUID: 1001

Die Werte (=IDs) entsprechen den Ausgaben der vorherigen Abfragen mit id.

Das Mapping des Datenverzeichnisses muss ebenfalls noch in der Datei in der Zeile 21 angepasst werden:

- ./data/app:/data

Die Änderungen speichern und die Datei schließen.

Aktuellste/Neuste Version der Container herunterladen:

docker image pull mariadb
docker image pull jc21/nginx-proxy-manager

Container wieder starten:

docker compose -f docker-compose.yml up -d --force-recreate

[+] Building 0.0s (0/0)
[+] Running 2/2
✔ Container npm-db Started5.7s
✔ Container npm-app Started

Vom Start bis die Weboberfläche erreichbar ist, kann je nach Leistung des Server 30-60 Sekunden dauern. Zeit für einen Kaffee. 🙂

Logfile der Container prüfen:

docker compose logs

npm-db  | 2023-06-29 18:01:01+02:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:11.0.2+maria~ubu2204 started.
npm-db  | 2023-06-29 18:01:02+02:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
npm-db  | 2023-06-29 18:01:02+02:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:11.0.2+maria~ubu2204 started.
npm-db  | 2023-06-29 18:01:02+02:00 [Note] [Entrypoint]: MariaDB upgrade information missing, assuming required
npm-db  | 2023-06-29 18:01:02+02:00 [Note] [Entrypoint]: MariaDB upgrade (mariadb-upgrade) required, but skipped due to $MARIADB_AUTO_UPGRADE setting
npm-db  | 2023-06-29 18:01:02 0 [Note] Starting MariaDB 11.0.2-MariaDB-1:11.0.2+maria~ubu2204 source revision 0005f2f06c8e1aea4915887decad67885108a929 as process 1
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: Number of transaction pools: 1
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: Using generic crc32 instructions
npm-db  | 2023-06-29 18:01:02 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: Completed initialization of buffer pool
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: File system buffers for log disabled (block size=512 bytes)
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: Upgrading the change buffer
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: Upgraded the change buffer: 0 tablespaces, 0 pages
npm-db  | 2023-06-29 18:01:02 0 [Warning] InnoDB: Cannot change innodb_undo_tablespaces=3 because previous shutdown was not with innodb_fast_shutdown=0
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: 128 rollback segments are active.
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: log sequence number 175049; transaction id 610
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
npm-db  | 2023-06-29 18:01:02 0 [Note] Plugin 'FEEDBACK' is disabled.
npm-db  | 2023-06-29 18:01:02 0 [Note] Plugin 'wsrep-provider' is disabled.
npm-db  | 2023-06-29 18:01:02 0 [Note] Server socket created on IP: '0.0.0.0'.
npm-db  | 2023-06-29 18:01:02 0 [Note] Server socket created on IP: '::'.
npm-db  | 2023-06-29 18:01:02 0 [Note] InnoDB: Buffer pool(s) load completed at 230629 18:01:02
npm-db  | 2023-06-29 18:01:02 0 [Note] mariadbd: ready for connections.
npm-db  | Version: '11.0.2-MariaDB-1:11.0.2+maria~ubu2204'  socket: '/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
npm-app  | ❯ Configuring npm user ...
npm-app  | ❯ Configuring npm group ...
npm-app  | ❯ Checking paths ...
npm-app  | ❯ Setting ownership ...
npm-app  | ❯ Dynamic resolvers ...
npm-app  | ❯ IPv6 ...
npm-app  | Enabling IPV6 in hosts in: /etc/nginx/conf.d
npm-app  | - /etc/nginx/conf.d/include/force-ssl.conf
npm-app  | - /etc/nginx/conf.d/include/ssl-ciphers.conf
npm-app  | - /etc/nginx/conf.d/include/proxy.conf
npm-app  | - /etc/nginx/conf.d/include/assets.conf
npm-app  | - /etc/nginx/conf.d/include/letsencrypt-acme-challenge.conf
npm-app  | - /etc/nginx/conf.d/include/ip_ranges.conf
npm-app  | - /etc/nginx/conf.d/include/block-exploits.conf
npm-app  | - /etc/nginx/conf.d/include/resolvers.conf
npm-app  | - /etc/nginx/conf.d/default.conf
npm-app  | - /etc/nginx/conf.d/production.conf
npm-app  | Enabling IPV6 in hosts in: /data/nginx
npm-app  | - /data/nginx/proxy_host/5.conf
npm-app  | - /data/nginx/proxy_host/3.conf
npm-app  | - /data/nginx/proxy_host/6.conf
npm-app  | - /data/nginx/proxy_host/8.conf
npm-app  | - /data/nginx/proxy_host/4.conf
npm-app  | - /data/nginx/proxy_host/7.conf
npm-app  | - /data/nginx/proxy_host/2.conf
npm-app  | - /data/nginx/proxy_host/1.conf
npm-app  | ❯ Docker secrets ...
npm-app  |
npm-app  | -------------------------------------
npm-app  |  _   _ ____  __  __
npm-app  | | \ | |  _ \|  \/  |
npm-app  | |  \| | |_) | |\/| |
npm-app  | | |\  |  __/| |  | |
npm-app  | |_| \_|_|   |_|  |_|
npm-app  | -------------------------------------
npm-app  | User:  npm PUID:1001 ID:1001 GROUP:1001
npm-app  | Group: npm PGID:1001 ID:1001
npm-app  | -------------------------------------
npm-app  |
npm-app  | ❯ Starting backend ...
npm-app  | ❯ Starting nginx ...
npm-app  | nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:4
npm-app  | [6/29/2023] [4:01:20 PM] [Global   ] › ℹ  info      Using MySQL configuration
npm-app  | [6/29/2023] [4:01:20 PM] [Global   ] › ℹ  info      Creating a new JWT key pair...
npm-app  | [6/29/2023] [4:01:23 PM] [Global   ] › ℹ  info      Wrote JWT key pair to config file: /data/keys.json
npm-app  | [6/29/2023] [4:01:24 PM] [Migrate  ] › ℹ  info      Current database version: 20211108145214
npm-app  |[6/29/2023] [4:01:26 PM] [Setup    ] › ℹ  info      Added Certbot plugins certbot-dns-hetzner~=1.0.4
npm-app  | [6/29/2023] [4:01:26 PM] [Setup    ] › ℹ  info      Logrotate Timer initialized
npm-app  | [6/29/2023] [4:01:26 PM] [Setup    ] › ℹ  info      Logrotate completed.
npm-app  | [6/29/2023] [4:01:26 PM] [IP Ranges] › ℹ  info      Fetching IP Ranges from online services...
npm-app  | [6/29/2023] [4:01:26 PM] [IP Ranges] › ℹ  info      Fetching https://ip-ranges.amazonaws.com/ip-ranges.json
npm-app  | [6/29/2023] [4:01:27 PM] [IP Ranges] › ℹ  info      Fetching https://www.cloudflare.com/ips-v4
npm-app  | [6/29/2023] [4:01:27 PM] [IP Ranges] › ℹ  info      Fetching https://www.cloudflare.com/ips-v6
npm-app  | [6/29/2023] [4:01:27 PM] [SSL      ] › ℹ  info      Let's Encrypt Renewal Timer initialized
npm-app  | [6/29/2023] [4:01:27 PM] [SSL      ] › ℹ  info      Renewing SSL certs close to expiry...
npm-app  | [6/29/2023] [4:01:27 PM] [IP Ranges] › ℹ  info      IP Ranges Renewal Timer initialized
npm-app  | [6/29/2023] [4:01:27 PM] [Global   ] › ℹ  info      Backend PID 167 listening on port 3000 ...

Keine Fehler zu sehen, der Aufruf der Webseite des NPM funktioniert.

So muss das sein! Viel Spaß beim Ausprobieren. 🙂

Abonnieren
Benachrichtige mich bei
1 Comment
neueste
älteste
Inline Feedbacks
View all comments
Wolfgang
21.06.2024 11:44

Hallo,

super Anleitung und hat funktioniert.

Habe das Update sehr lange hinausgeschoben.

Vielen Dank!!

LG
Wolfgang