- Allow absolute bind mount host paths on import
- Create imported networks in Docker and only reuse a network on the target server
- Register imported enabled backups, volume backups and schedules
- Write file mounts before restoring dumps; remove import files when the job ends
- Claim the import before validating so it cannot start twice
- Rewrite app names in project, environment and build variables; keep source project variables when importing into an existing project
- Only reuse the raw Traefik config when the imported domains are unchanged
- Validate conflict renames and detect database external port conflicts
- Skip rotation when a root password is unsafe
- Detect uploaded certificates by the hosts they cover
- Export shared resources by value in organization exports
- Fix Back after unlock and the missing "Create from bundle" option in the import wizard
Export a project (or a scoped subset of its environments and services) into an
encrypted .dokploy.tar.gz bundle, and import it as a new project or into an
existing one, on the same or another instance.
- Capture -> serialize -> plan -> apply pipeline with requirement detection
and resolution for external dependencies (git providers, registries,
destinations, vaults, SSH keys, networks, certificates, servers).
- The whole payload is encrypted with AES-256-GCM using a scrypt key derived
from the passphrase; secrets are never written to disk in plaintext.
- appName/domain/port conflict detection with per-conflict resolutions,
cross-org guards on every reused resource, one active transfer per user and
a cleanup sweep for abandoned jobs.
- Optional database dumps (postgres, mysql, mariadb, mongo, libsql) embedded
in the bundle or streamed through a destination, with opt-in credential
rotation on import.
- Bundles can be downloaded or uploaded to a destination; whole-organization
export to a destination; Settings -> Exports page to manage remote bundles.
- SSH keepalive on remote commands so a dead server fails the job instead of
hanging it forever.
Template cards have a fixed height, and the header rendered every tag.
Portabase has 27, which pushed the description and footer (Create
button) out of the card. Show the first 6 tags plus a "+N" badge whose
title lists the rest.
Closes#5660
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GitLab invalidates a refresh token when it is used. Two deployments that found the token expired at the same time sent the same refresh token, and the second one failed with "Failed to refresh token: Bad Request".