Skip to main content

Restoring Nginx Proxy Manager from Backup

Restoring Nginx Proxy Manager from Backup (OpenMediaVault/Docker)

This guide walks you through restoring your Nginx Proxy Manager (NPM) Docker container from a backup on an OpenMediaVault system.


🔧 Prerequisites

    OpenMediaVault system with Docker and Docker Compose installed

    Backups of the following folders:

      nginx-proxy-manager-data

      nginx-proxy-manager-letsencrypt

      Directory location to restore into (e.g., /srv/dev-disk-by-uuid-xxx/HELCONFIG/nginx/)


      📁 Folder Structure

      Ensure the target directory structure looks like this:

      HELCONFIG/
      └── nginx/
          ├── nginx-proxy-manager-data/
          └── nginx-proxy-manager-letsencrypt/

      📦 Working Docker Compose File

      Place the following docker-compose.yml in the nginx folder:

      version: '3'
      services:
        nginx-proxy-manager:
          image: jc21/nginx-proxy-manager:latest
          container_name: nginx-proxy-manager
          restart: unless-stopped
          ports:
            - '80:80'
            - '81:81'
            - '443:443'
          volumes:
            - ./nginx-proxy-manager-data:/data
            - ./nginx-proxy-manager-letsencrypt:/etc/letsencrypt

      📂 Restore Backups

      Use the following commands to copy your backup data into the live configuration folder:

      # letsencrypt
      sudo cp -a /path/to/backup/nginx-proxy-manager-letsencrypt/. /srv/dev-disk-by-uuid-xxx/HELCONFIG/nginx/nginx-proxy-manager-letsencrypt/
      
      # data
      sudo cp -a /path/to/backup/nginx-proxy-manager-data/. /srv/dev-disk-by-uuid-xxx/HELCONFIG/nginx/nginx-proxy-manager-data/

      Ensure trailing /. is used to copy contents only.


      🚀 Start Container

      Once restored:

      cd /srv/dev-disk-by-uuid-xxx/HELCONFIG/nginx/
      sudo docker compose up -d

      🧪 Troubleshooting

      ❌ Can't create network

      Error: could not find an available, non-overlapping IPv4 address pool

      Fix:

      sudo docker network prune

      ❌ Container fails with alias error

      Error: network-scoped alias is supported only for user-defined networks

      Fix: Define and use a custom bridge network:

      sudo docker network create nginx_network

      Then add to docker-compose.yml:

      networks:
        default:
          external:
            name: nginx_network

      ❌ Can't access web interface

        Check container logs:

        sudo docker logs nginx-proxy-manager

          Ensure ports are published correctly (80, 81, 443)

          Check firewall / router rules

          ❌ SSL Renewal Errors

          expected .../cert.pem to be a symlink

          These indicate broken or partial LetsEncrypt data. Copy the backup of the letsencrypt folder and ensure correct permissions.


          ✅ Login Defaults

          Once online, access via:

          http://[host-IP]:81

          Default credentials:

          Email:    admin@example.com
          Password: changeme

          📌 Notes

            Always stop the container before copying data

            Use docker compose down if needed before restoring

            Check database.sqlite timestamp to confirm restoration


            🔁 Optional: Full Refresh

            If issues persist, delete the container and volumes, then redeploy and restore the backups fresh:

            sudo docker compose down
            sudo rm -rf nginx-proxy-manager-data nginx-proxy-manager-letsencrypt
            # Then restore backups and re-up

            For any further help, ensure Docker is up-to-date and Portainer (if used) is refreshed to reflect changes.