282 lines
6.2 KiB
Markdown
282 lines
6.2 KiB
Markdown
|
|
# NPMplus Update Guide - 2026-01-20-r2
|
||
|
|
|
||
|
|
**Date**: 2026-01-21
|
||
|
|
**Target Version**: `zoeyvid/npmplus:2026-01-20-r2`
|
||
|
|
**Current Version**: `zoeyvid/npmplus:latest`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Release Notes
|
||
|
|
|
||
|
|
According to the [GitHub release](https://github.com/ZoeyVid/NPMplus/releases/tag/2026-01-20-r2):
|
||
|
|
|
||
|
|
### Key Changes
|
||
|
|
- ✅ Fix: zstd module CPU usage when proxy buffering is disabled
|
||
|
|
- ✅ Add unzstd module (always enabled)
|
||
|
|
- ✅ Replace broken PowerDNS DNS plugin (certs need to be recreated, not renewed)
|
||
|
|
- ✅ Streams: Add TLS to upstream button
|
||
|
|
- ✅ Streams: Temporarily disable cert creation in streams form
|
||
|
|
- ✅ Redirect to OIDC if password login is disabled
|
||
|
|
- ✅ Fix: Login as other user
|
||
|
|
- ✅ Proxy hosts: Add button to block AI/crawler/search bots
|
||
|
|
- ✅ Certbot now checks for renewals every 6 hours
|
||
|
|
- ✅ Dependency updates
|
||
|
|
- ✅ Language updates
|
||
|
|
|
||
|
|
### ⚠️ Important Notes
|
||
|
|
- **Create backup before upgrading** (as always recommended)
|
||
|
|
- **PowerDNS DNS plugin replaced** - certificates need to be **recreated** (not renewed) if using PowerDNS
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Update Methods
|
||
|
|
|
||
|
|
### Method 1: Manual Update (Recommended)
|
||
|
|
|
||
|
|
**Run directly on Proxmox host (r630-01):**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# SSH to Proxmox host
|
||
|
|
ssh root@192.168.11.10
|
||
|
|
ssh root@r630-01
|
||
|
|
|
||
|
|
# 1. Create backup
|
||
|
|
mkdir -p /data/npmplus-backups
|
||
|
|
docker exec npmplus tar -czf /tmp/npmplus-backup-$(date +%Y%m%d_%H%M%S).tar.gz -C /data .
|
||
|
|
docker cp npmplus:/tmp/npmplus-backup-$(date +%Y%m%d_%H%M%S).tar.gz /data/npmplus-backups/
|
||
|
|
docker exec npmplus rm -f /tmp/npmplus-backup-*.tar.gz
|
||
|
|
|
||
|
|
# 2. Pull new image
|
||
|
|
docker pull zoeyvid/npmplus:2026-01-20-r2
|
||
|
|
|
||
|
|
# 3. Stop container
|
||
|
|
docker stop npmplus
|
||
|
|
|
||
|
|
# 4. Get volume mounts
|
||
|
|
docker inspect npmplus --format '{{range .Mounts}}-v {{.Source}}:{{.Destination}} {{end}}'
|
||
|
|
|
||
|
|
# 5. Remove old container
|
||
|
|
docker rm npmplus
|
||
|
|
|
||
|
|
# 6. Create new container with updated image
|
||
|
|
docker run -d \
|
||
|
|
--name npmplus \
|
||
|
|
--restart unless-stopped \
|
||
|
|
--network bridge \
|
||
|
|
-p 80:80 \
|
||
|
|
-p 443:443 \
|
||
|
|
-p 81:81 \
|
||
|
|
-v /data/npmplus:/data \
|
||
|
|
-v /data/letsencrypt:/etc/letsencrypt \
|
||
|
|
zoeyvid/npmplus:2026-01-20-r2
|
||
|
|
|
||
|
|
# 7. Verify
|
||
|
|
docker ps --filter name=npmplus
|
||
|
|
curl -I http://192.168.11.167:80
|
||
|
|
```
|
||
|
|
|
||
|
|
### Method 2: Automated Script
|
||
|
|
|
||
|
|
**Run from your local machine:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd /home/intlc/projects/proxmox/explorer-monorepo
|
||
|
|
bash scripts/update-npmplus.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
**Note**: Script may timeout on Docker pull if network is slow. In that case, use Method 1.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Update Steps (Detailed)
|
||
|
|
|
||
|
|
### Step 1: Backup (Critical!)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# On Proxmox host (r630-01)
|
||
|
|
ssh root@r630-01
|
||
|
|
|
||
|
|
# Create backup directory
|
||
|
|
mkdir -p /data/npmplus-backups
|
||
|
|
|
||
|
|
# Backup from container
|
||
|
|
docker exec npmplus tar -czf /tmp/npmplus-backup-$(date +%Y%m%d_%H%M%S).tar.gz -C /data .
|
||
|
|
docker cp npmplus:/tmp/npmplus-backup-*.tar.gz /data/npmplus-backups/
|
||
|
|
docker exec npmplus rm -f /tmp/npmplus-backup-*.tar.gz
|
||
|
|
|
||
|
|
# Verify backup
|
||
|
|
ls -lh /data/npmplus-backups/
|
||
|
|
```
|
||
|
|
|
||
|
|
### Step 2: Pull New Image
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Pull new image (may take 2-5 minutes)
|
||
|
|
docker pull zoeyvid/npmplus:2026-01-20-r2
|
||
|
|
|
||
|
|
# Verify image
|
||
|
|
docker images | grep npmplus
|
||
|
|
```
|
||
|
|
|
||
|
|
### Step 3: Stop and Remove Old Container
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Stop container
|
||
|
|
docker stop npmplus
|
||
|
|
|
||
|
|
# Remove container (volumes are preserved)
|
||
|
|
docker rm npmplus
|
||
|
|
```
|
||
|
|
|
||
|
|
### Step 4: Create New Container
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Create new container with updated image
|
||
|
|
docker run -d \
|
||
|
|
--name npmplus \
|
||
|
|
--restart unless-stopped \
|
||
|
|
--network bridge \
|
||
|
|
-p 80:80 \
|
||
|
|
-p 443:443 \
|
||
|
|
-p 81:81 \
|
||
|
|
-v /data/npmplus:/data \
|
||
|
|
-v /data/letsencrypt:/etc/letsencrypt \
|
||
|
|
zoeyvid/npmplus:2026-01-20-r2
|
||
|
|
```
|
||
|
|
|
||
|
|
### Step 5: Verify Update
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check container status
|
||
|
|
docker ps --filter name=npmplus
|
||
|
|
|
||
|
|
# Check version
|
||
|
|
docker inspect npmplus --format '{{.Config.Image}}'
|
||
|
|
|
||
|
|
# Test accessibility
|
||
|
|
curl -I http://192.168.11.167:80
|
||
|
|
curl -I https://192.168.11.167:81 -k
|
||
|
|
|
||
|
|
# Test proxy functionality
|
||
|
|
curl -H "Host: explorer.d-bis.org" http://192.168.11.167:80
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Post-Update Tasks
|
||
|
|
|
||
|
|
### 1. Verify NPMplus Dashboard
|
||
|
|
|
||
|
|
- Access: `https://192.168.11.167:81`
|
||
|
|
- Login with credentials
|
||
|
|
- Check that all proxy hosts are still configured
|
||
|
|
|
||
|
|
### 2. Recreate Certificates (If Using PowerDNS)
|
||
|
|
|
||
|
|
**⚠️ Important**: If you were using PowerDNS DNS plugin, certificates need to be **recreated** (not renewed):
|
||
|
|
|
||
|
|
1. Go to SSL Certificates
|
||
|
|
2. Delete old certificates that used PowerDNS
|
||
|
|
3. Create new Let's Encrypt certificates
|
||
|
|
4. Reassign to proxy hosts
|
||
|
|
|
||
|
|
### 3. Test External Access
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# From external network
|
||
|
|
curl -I https://explorer.d-bis.org
|
||
|
|
|
||
|
|
# Should work without SSL errors (if certificate is configured)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### If Container Fails to Start
|
||
|
|
|
||
|
|
1. **Check logs**:
|
||
|
|
```bash
|
||
|
|
docker logs npmplus --tail 50
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Check volumes**:
|
||
|
|
```bash
|
||
|
|
docker inspect npmplus --format '{{range .Mounts}}{{.Source}}:{{.Destination}} {{end}}'
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Restore from backup** (if needed):
|
||
|
|
```bash
|
||
|
|
docker stop npmplus
|
||
|
|
docker rm npmplus
|
||
|
|
# Restore backup
|
||
|
|
docker run -d --name npmplus --restart unless-stopped \
|
||
|
|
--network bridge -p 80:80 -p 443:443 -p 81:81 \
|
||
|
|
-v /data/npmplus:/data -v /data/letsencrypt:/etc/letsencrypt \
|
||
|
|
zoeyvid/npmplus:latest
|
||
|
|
```
|
||
|
|
|
||
|
|
### If Network Timeout During Pull
|
||
|
|
|
||
|
|
1. **Pull from Proxmox host** (better network):
|
||
|
|
```bash
|
||
|
|
ssh root@r630-01
|
||
|
|
docker pull zoeyvid/npmplus:2026-01-20-r2
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Import to container's Docker**:
|
||
|
|
```bash
|
||
|
|
docker save zoeyvid/npmplus:2026-01-20-r2 | \
|
||
|
|
pct exec 10233 -- docker load
|
||
|
|
```
|
||
|
|
|
||
|
|
### If Proxy Hosts Missing
|
||
|
|
|
||
|
|
Proxy hosts are stored in the database, so they should persist. If missing:
|
||
|
|
|
||
|
|
1. Check NPMplus dashboard
|
||
|
|
2. Verify database is mounted correctly
|
||
|
|
3. Restore from backup if needed
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Rollback (If Needed)
|
||
|
|
|
||
|
|
If the update causes issues:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Stop new container
|
||
|
|
docker stop npmplus
|
||
|
|
docker rm npmplus
|
||
|
|
|
||
|
|
# Restore old image
|
||
|
|
docker run -d \
|
||
|
|
--name npmplus \
|
||
|
|
--restart unless-stopped \
|
||
|
|
--network bridge \
|
||
|
|
-p 80:80 \
|
||
|
|
-p 443:443 \
|
||
|
|
-p 81:81 \
|
||
|
|
-v /data/npmplus:/data \
|
||
|
|
-v /data/letsencrypt:/etc/letsencrypt \
|
||
|
|
zoeyvid/npmplus:latest
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Summary
|
||
|
|
|
||
|
|
**Status**: ⚠️ **READY TO UPDATE**
|
||
|
|
|
||
|
|
**Recommended Method**: Manual update on Proxmox host (Method 1)
|
||
|
|
|
||
|
|
**Time Required**: 5-10 minutes
|
||
|
|
|
||
|
|
**Risk Level**: Low (backup created, volumes preserved)
|
||
|
|
|
||
|
|
**Next Step**: Run update commands on Proxmox host (r630-01)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Action**: SSH to r630-01 and run update commands manually
|