Self-Hosted Storefront
Official guide · English · Version 9c253d0cf11816df
Use Dashboard > Deploy to place the public storefront on a VPS you control. Products remain in the central catalog for dashboard management and AI search. A published copy of the catalog, services, images, fonts, theme, pages, blog posts, forms and checkout settings is stored on the VPS so the website can keep serving visitors during a platform outage.
The dashboard, billing, AI tools and chatbot remain platform services. Self-hosting moves the website and its website-facing data; it does not move the tenant panel.
What you need
- An Ubuntu 22.04 or 24.04 VPS with root SSH access or an SSH account authorized to use sudo as root
- A domain whose DNS points to the VPS
- Inbound ports 80 and 443 open; keep the storefront's internal port 3000 closed publicly
- At least 2 vCPU, 2 GiB RAM and 20 GiB SSD for a pilot
- For production, start with 2-4 vCPU, at least 4 GiB RAM, 30 GiB SSD and 2 GiB swap
Keep at least 8 GiB free before an on-server build. Actual capacity depends on traffic, catalog size, images and backups.
Install the website
- Open Deploy and enter the website domain without
http://orhttps://. - Enter the numeric VPS IP, SSH username and SSH password.
- Select Set up website.
- Review the server report. Resolve blockers and explicitly accept any capacity warnings before continuing.
- Wait for the result dialog. A successful result confirms the container, HTTPS certificate and initial publication.
- Save the displayed SSH guidance and change the server password after installation.
During installation, Deploy shows milestone percentages and short stage names such as server preparation, container setup, security, memory, website build and HTTPS. It does not show SSH commands or raw server output. If installation stops, give support the displayed code, for example VPS-33-SWAP_SETUP_FAILED for a memory preparation failure. The percentage marks a completed stage; it does not estimate remaining time. The preflight report shows how many managed websites share the VPS without listing their domains or services.
If the progress connection is interrupted, the panel checks the saved installation status instead of reporting installation failure. You can reopen Deploy to follow the same installation, or select Check installation status. Do not start another installation while the result is unknown. If the API service was interrupted during an SSH operation, check the existing website before retrying; setup does not automatically repeat uncertain commands.
At Publishing website content, the website has been installed and its content and images are being transferred. Large catalogs can take several minutes. Temporary network failures retry automatically, and images already transferred are reused. A successful result appears only after the full initial publication is acknowledged.
On a fresh supported VPS, setup installs required Ubuntu packages, Docker, Docker Compose and Fail2ban when missing. It configures a shared HTTPS gateway, obtains and renews SSL automatically, creates swap when required, isolates the website and publishes the first snapshot. SSH credentials are used only for that installation request and are not stored in the panel.
Servers without direct root login
If your provider gives you ubuntu, debian, admin or another SSH account, enter that actual username and its SSH password. Do not enter sudo su as the username. The panel runs required administrative commands through sudo automatically; you do not need to open a terminal and switch users first. The VPS must still run a supported Ubuntu version, regardless of the account's name.
The account must have permission to run a root shell through sudo, either without a sudo password or using the same password entered for SSH. A separate sudo password, interactive one-time code or policy requiring an interactive terminal is not supported by this form. If the readiness check fails, ask the provider for a supported administrative account. DirectSale does not change sudo policy or enable direct root SSH login.
Sudo authentication is sent through the encrypted session input, never included in a shell command, saved script or tenant progress log. Temporary credentials are not stored. Website updates, backup/removal, backup downloads and mail/monitoring upgrades can use the same supported sudo account; files and backups remain protected by root-only permissions.
Restricted installation downloads
If your provider restricts package downloads, select Use SSH for installation downloads before setup. This explicitly approves a temporary connection for approved software repositories. You can also approve this path from a network-failure result and retry. The connection is removed when installation finishes and is not needed for normal website operation or later content sync.
Building Docker image covers downloading native dependencies, installing website packages and compiling the application. Its milestone percentage can remain unchanged for several minutes. A stalled package download has a time limit and returns a network error; retry using the SSH download option. Do not run a second installation while the first is still active. If your session ends, check the website/server state before retrying.
More than one website on a VPS
A managed VPS can host several DirectSale websites. Each website has its own container, data, uploads, sync token, resource limits and signed ownership marker. Ports 80 and 443 are shared through the HTTPS gateway.
The server review identifies existing managed websites. A free domain can be installed as another isolated site. A domain owned by another tenant is rejected and is never claimed or overwritten. The installer also leaves unrelated services and containers unchanged.
Publication and offline operation
Dashboard changes trigger authenticated HTTPS publication. This includes products, variants, stock, categories, descriptions, images, services and their public providers, fonts, theme, homepage, published pages and blog posts, forms, store details, SEO, shipping and supported checkout settings. Draft pages and posts remain private until they are published.
After setup, open Multichannel > Linked Stores > Linked website on VPS to manage synchronization. The card also remains available in Deploy. It compares central and VPS product counts, shows the latest publication and reports pending changes or errors. Sync now queues a full publication; wait until pending changes clear to confirm completion. Test connection in Deploy checks the secured endpoint. Failed deliveries retry automatically.
Ordinary saved changes begin publication automatically; you do not need to press Sync now for each edit. Accepted changes clear the local website cache, including detail pages. Images already present on an updated VPS are reused; changed image bytes get a new address so browsers display the updated image. Draft content still requires Publish. A network failure or rate limit can delay publication and remains visible in the card.
After a successful publication, the public website reads its local copy and does not need the platform to render pages or accept supported local orders and form submissions. Service pages and provider names are local; live slot checks, appointment booking and service work requests use the central service scheduler so availability and monthly limits remain authoritative. Source-code releases and newly shipped template components require a website upgrade or redeploy; ordinary content sync does not replace the application image.
Update an existing website
Ordinary product, price, stock, design and published content changes sync automatically. New application code, technical SEO fixes and new template components require Deploy > Website updates after the platform release has been deployed. Secure upgrade adds monitoring; it does not update the storefront application.
- Open Deploy > Website updates for the connected website. Its domain is filled in automatically.
- Enter the numeric VPS IP, root or supported sudo SSH username and password, then select Check website version.
- Review the verified installation and acknowledge the brief restart and private backup.
- Select Update website. Follow the ownership check, source transfer, backup verification, build, website replacement and health check. Builds commonly take several minutes and can take longer on a small VPS.
- After success, wait for catalog publication to finish in Linked website. If publication could not be queued, select Sync now. Download the verified backup and keep it securely outside the VPS.
The existing website resumes after its backup and stays available while the new application is built. Only this website restarts during replacement. Persistent products, orders, submissions, images, configuration and sync credentials are retained. Other websites, the shared HTTPS gateway and mail services are preserved. SSH credentials are used only for the session and are never stored.
If the new version fails its health check, the operation attempts to restore the previous application automatically. Check website version > Restore previous version also allows a manual return to the previous release. Version rollback keeps current website data; it does not restore an old customer database or undo new orders. The previous image and private backup are retained on the VPS.
Keep the panel open to view progress. A lost progress connection does not cancel the server operation: check the website again before retrying. An interrupted replacement requires Restore previous version before another update. A failed recovery requires support and retains the verified backup. Previously stopped websites remain stopped after a successful update.
Updates require a currently connected managed installation with a valid signed ownership marker, Docker Compose v2, at least 2 GiB total RAM, enough available memory or swap and at least 8 GiB free disk before a build. The backup also needs enough free space for the site's data. Custom Compose configurations, external volumes and unverified legacy installations need support-assisted updates. No additional DNS records are needed when the website domain and VPS stay the same.
VPS monitoring and website controls
Current installations show live VPS CPU, RAM, swap and storage together with this website's CPU, RAM, storage, health and uptime. You can start, stop or restart only the current tenant website. Stopping one website does not stop the shared gateway or another tenant's site.
Older installations can show Secure upgrade. Enter the VPS IP and temporary SSH credentials to add the management agent and secured gateway route without reinstalling the website or removing its data. Wait for the progress result, then refresh the resource card. Change the SSH password after the upgrade.
Security and maintenance
- Keep the sync token private. Rotating it invalidates the old token after the protected transition period.
- Restrict SSH access at the VPS provider where possible and keep Ubuntu security updates enabled.
- Back up the site's persistent data and uploads. Container images alone are not a backup.
- Do not expose container port 3000 or the management agent port to the internet.
- A VPS owner with root access can always change files or databases outside DirectSale controls.
Return to platform hosting
Select Transfer data, disconnect and return to platform to import VPS-only orders, form submissions, newsletter addresses and reviews, then end the connection. This action does not delete, stop or modify the website or any files on the VPS. The remaining VPS website becomes the server owner's responsibility and new activity there no longer reaches the panel.
If the VPS is unreachable, the panel explains that transfer cannot be verified and can offer Disconnect without transfer after a separate confirmation. VPS-only activity is not imported in that path. Update external DNS to the platform hosting target and verify the domain before relying on the managed website.
Back up or remove a VPS website
Open Deploy > Website backup & removal. This tool also works after disconnecting the website from the panel, provided the installation still has a valid ownership marker for this tenant and domain.
- Enter the website domain, numeric VPS IP, root or supported sudo SSH username and password.
- Select Check website. The panel verifies the installation, domain and tenant ownership, then shows the backup size, free disk space and previous backups.
- Select Create backup only to keep the website, or choose Back up & remove website for a clean reinstall. Removal requires acknowledging the downtime and typing the exact domain.
- Follow the progress: verification, pause this website, create backup, verify backup, then either restart this website or remove its domain route and installation. A successful removal also disconnects its panel link.
- Select Download backup and keep a copy outside the VPS. Use Delete backup to remove one archive from the VPS, or Delete all backups to clear the verified backup set for this website. Both actions require typing the exact domain. After successful removal, use Set up website to install again with the same domain and SSH details.
The website pauses briefly while a consistent backup is created. A previously stopped website stays stopped after backup-only. The backup contains this website's persistent data, customer database, uploads and private site configuration. Build caches and installed dependencies are excluded. It is a private archive on the VPS, not a public download link. SSH passwords are used only in the current session and are never stored.
Removal affects only the verified tenant/domain installation. Other websites, the shared HTTPS gateway and email delivery are preserved. Central products stay in your catalog. VPS-only orders and submissions remain in the backup and are not imported automatically by removal; use Transfer data, disconnect and return to platform first if you need them imported into the panel. Website backups do not include email; use the separate email backup tool for mailboxes.
If backup creation or verification fails, removal is blocked. Before removal finishes, the tool attempts to restore this website's previous running state and domain route when a service operation fails. An unverifiable ownership marker, external storage or a custom installation layout blocks automatic removal and requires support. The tool supports managed website data up to 16 GiB and needs enough free disk for the archive; larger installations need a support-assisted backup.
Keep the page open during the operation. If the progress connection ends, select Check website again before retrying. A verified backup retained after a failed operation appears in the backup list. If the website was removed but its panel link could not be disconnected, refresh Deploy and complete the existing disconnect workflow before reinstalling. The latest ten backups are listed, while the summary includes the total count and storage used by all verified backups for this website. Delete all backups also removes verified backups older than the displayed ten. If the backup set changes after inspection, bulk deletion stops safely; select Check website and review it again. Unknown or invalid directories are left untouched. Download access expires after one hour, while deletion approval expires after 15 minutes; Check website renews access after verifying your SSH connection. Chrome and Edge can stream large downloads directly to disk; other browsers support downloads up to 512 MiB.
Troubleshooting
Website update, previous-version restore, backup, removal, download and backup-deletion controls use your selected panel language in all 18 supported languages. Confirmation warnings, progress stages and operation errors are also translated. Changing the panel language does not require reinstalling your VPS website.
Installation and content publication are separate checks. Confirm the result dialog reports success, HTTPS opens publicly, Test connection succeeds and Linked website shows no pending changes.
For a failure, read the named stage and sanitized error. Common causes are DNS pointing elsewhere, blocked ports 80/443, inadequate RAM or disk, an SSH host-key change after the server was reinstalled, a domain already owned by another tenant, or another service using the required ports. Do not disable TLS or overwrite another site to bypass a failed check.
See Self-Hosted Email for mailboxes on the same managed VPS and Domain and Publication for platform hosting.
