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. 🙂
Hallo,
super Anleitung und hat funktioniert.
Habe das Update sehr lange hinausgeschoben.
Vielen Dank!!
LG
Wolfgang