24 min read

Install Synaplan and Share It Securely with Localtonet

Install Synaplan with Docker, verify its web UI, secure access, then connect remotely with Localtonet using an HTTP tunnel.

Local Synaplan host and remote laptop connected through a Localtonet HTTP tunnel.
Install and verify Synaplan locally, secure the account, then enable remote access.
Self-Hosting Guides · Synaplan · Localtonet · 2026

Run your own AI workspace locally, verify it, and publish only the web interface you intend to share

Synaplan is an open-source, self-hosted AI platform for chat, document retrieval, assistants, integrations, and model routing. In this guide, we install it with Docker, explain the difference between its development and production-oriented deployment paths, verify the web interface locally, and address the default demonstration credentials before any internet exposure. Once the local instance works, we connect it to an HTTP tunnel with Localtonet so authorized remote users can reach it without inbound router port forwarding, firewall changes, a public IP address, or VPN setup.

🔒 Replace demonstration credentials before sharing 🌐 Publish the local web UI through an HTTP tunnel ⚡ Verify locally before adding remote access

What this Synaplan and Localtonet workflow provides

Synaplan combines a web-based AI chat experience with capabilities such as retrieval-augmented generation over documents, multiple model providers, assistants, tools, approvals, an embeddable website widget, MCP support, and API access. It is distributed under the Apache-2.0 license and can be run on infrastructure under your control.

The installation and remote-access stages should remain separate. First, Docker starts Synaplan and makes its web interface available on the local machine. You then open the interface locally, wait for the stack to become ready, sign in, and confirm that the application works. Only after those checks pass should you create a public HTTP tunnel.

With Localtonet, our client application establishes an outbound connection from the device running, or able to reach, Synaplan to one of our relay servers. The tunnel then provides a public HTTPS address for the local HTTP service. This avoids requiring an inbound router port-forwarding rule, a public IP address, firewall changes, or a separate VPN configuration.

📦 Docker-based installation Synaplan provides a repository quickstart that starts the stack with make up. Docker Compose can also start the same checkout directly.
✅ Local-first verification The repository quickstart exposes a status page and web interface at http://localhost:5173, allowing you to diagnose installation issues before introducing a tunnel.
🔐 Explicit account hardening The quickstart documents a demonstration administrator account. That credential must not remain active when an instance is made reachable from the internet.
🌐 Public HTTPS address An HTTP tunnel with Localtonet points to the local Synaplan IP address and port while presenting the application through a public HTTPS address.
🧭 Controlled tunnel lifecycle Creating a tunnel does not start it automatically. You choose when to start, stop, or delete the tunnel, and it remains available only while the selected client is connected and the tunnel is running.
🧱 Separated deployment choices Synaplan distinguishes its local development-oriented stack from the published-image production contract in the repository’s deploy/ directory.

Why use an HTTP tunnel?

Synaplan’s primary interface is a web application, so an HTTP tunnel is the natural Localtonet tunnel family for this workflow. The tunnel accepts requests at a public HTTPS address and forwards them to the local HTTP endpoint. There is no need to expose Synaplan’s database, cache, vector database, or other internal containers individually.

This is an important boundary. A remote user needs the web application endpoint, not direct access to every service in the Compose network. Publishing only the intended web interface keeps the external surface smaller and makes troubleshooting simpler.

Development quickstart versus production deployment

Installation path Best for Documented local endpoint Important characteristic
Repository with make up Initial evaluation and local development http://localhost:5173 Starts the source-oriented stack and provides a live status screen during startup.
Repository with Docker Compose Starting the same checkout without the Make target http://localhost:5173 The interface can remain quiet while images are still being pulled and services are starting.
Production deploy/ contract Single-node Linux server deployment http://127.0.0.1:8000 by default Uses published images, pinned versions, generated secrets, persistent data, validation, and smoke-test scripts.
Choose the endpoint that matches your installation

Do not assume every Synaplan installation uses the same port. The repository quickstart is documented on port 5173, while the production contract binds its web service to 127.0.0.1:8000 by default. Your Localtonet target must match the endpoint that actually works on your host.

Prerequisites and planning

For the repository quickstart, prepare a machine with Git, Docker, Docker Compose support, and Make. Docker Desktop can provide Docker and Compose on supported desktop systems. Start Docker Desktop before running the Synaplan commands. On a Linux host, ensure Docker Engine and Docker Compose v2 are installed and that your user can run Docker commands according to your local administration policy.

The complete stack pulls multiple container images, so installation time depends on the machine, storage, and network connection. A status page can appear before every service is fully ready. Treat the ability to load the status page as an early startup signal, not proof that every application feature is operational.

The documented production deployment has more explicit resource requirements. Its cloud-AI profile requires at least 4 vCPUs, 8 GB of RAM, and 30 GB of free disk space. The optional local-AI profile requires at least 16 GB of RAM and substantially more disk capacity. Optional components can add further requirements. These figures belong to the production contract, not a promise that every workload will use a fixed amount of resources.

What to decide before installation

  • Evaluation or production: use the repository quickstart for a first local evaluation. Use the documented production contract when you need pinned releases, persistent deployment data, backups, and generated secrets.
  • Cloud or local models: Synaplan can connect to external AI providers, while local models are an optional deployment choice. Provider setup and model availability are separate from publishing the web interface.
  • Who will have access: decide whether the tunnel is for your own temporary access, a small authorized team, or a longer-lived service.
  • Where Localtonet runs: install our client on the Synaplan host when possible, or on another device that can reach the selected local endpoint.
  • Which local port is active: use port 5173 for the documented repository quickstart or port 8000 for the default production binding.
Do not expose the quickstart before changing the demonstration login

The documented quickstart account is admin@synaplan.com with password admin123. These credentials are public knowledge and are suitable only for a controlled local demonstration. Change the administrator password, create the intended user accounts, and review application access before starting a public tunnel.

Install Synaplan with Docker

Option 1: Repository quickstart with Make

This path is the clearest way to evaluate Synaplan locally because it follows the project’s quickstart and exposes the startup status screen. Run the following commands in a terminal:

git clone https://github.com/metadist/synaplan.git
cd synaplan
make up

The clone command downloads the repository into a directory named synaplan. The second command changes into that directory. The make up target starts the Docker-based stack and brings up the status interface.

Open the following address on the same machine:

http://localhost:5173

Synaplan’s status screen reports boot progress and transitions to the application when the stack is ready. Image downloads and initialization can take longer on the first run, so wait for the application rather than repeatedly restarting the containers.

1

Start Docker

Confirm that Docker Engine or Docker Desktop is running before invoking the quickstart. A stopped Docker daemon prevents the stack from being created.

2

Clone the Synaplan repository

Run git clone https://github.com/metadist/synaplan.git to obtain the source tree and its Docker configuration.

3

Enter the project directory

Run cd synaplan. The remaining project commands must be executed from the checked-out repository.

4

Start the stack

Run make up. Leave Docker enough time to pull images, create containers, and initialize the required services.

5

Open the local status page

Visit http://localhost:5173. Follow the status display until it switches to the Synaplan application.

Option 2: Start the repository checkout with Docker Compose

If Make is unavailable but Docker Compose v2 is present, the documented checkout can also be started directly:

git clone https://github.com/metadist/synaplan.git
cd synaplan
docker compose up -d

The -d option starts the containers in detached mode. Open http://localhost:5173 after starting the stack. In this path, the page may remain quiet while images finish pulling, so use Docker Compose status and logs if startup appears stalled.

docker compose ps
docker compose logs

These are standard Docker Compose inspection commands. The first shows container state, while the second displays stack logs. Avoid copying logs into public support channels without reviewing them for email addresses, file names, provider information, or other deployment details.

Option 3: Use the production deployment contract

The repository quickstart launches a development-oriented stack that includes source-build services and development tools. For a production installation on a Linux server, Synaplan provides a separate single-node contract in the repository’s deploy/ directory. It uses published images rather than source bind mounts and requires a pinned release version.

Begin from a cloned Synaplan repository and create the deployment environment file:

cp deploy/selfhost.env.example deploy/.env

Edit deploy/.env and set a published immutable semantic version in SYNAPLAN_VERSION. Also configure the public URL expected by Synaplan and decide how the first administrator will be created. The production documentation supports either setting the bootstrap administrator variables or leaving both administrator variables empty to use the first-run setup wizard.

Never copy example secrets into a real deployment

Do not place passwords, provider keys, Localtonet device tokens, or generated deployment secrets in commands, screenshots, tickets, or shared documents. The exact production values depend on your environment and must be chosen by the administrator. Do not use a mutable latest image tag where the production contract requires a pinned release.

After reviewing the environment file, run the documented production sequence:

deploy/scripts/prepare.sh
docker compose --env-file deploy/.env -f deploy/compose.yaml pull
deploy/scripts/validate-release.sh
docker compose --env-file deploy/.env -f deploy/compose.yaml up -d
deploy/scripts/smoke-test.sh

The preparation script generates deployment secrets on first start and writes them to deploy/data/secrets.env. That file is authoritative for the deployment and is required for restoration. Protect it with the same care as the application database and include it in the deployment’s protected backup process.

By default, only the production web service binds a host port, at 127.0.0.1:8000. Internal services such as MariaDB, Redis, Qdrant, and other components remain on the Compose network. This default is well suited to a Localtonet client running on the same host because the client can target the loopback web endpoint without publishing internal service ports.

Complete first-run configuration and secure the account

For the quickstart, sign in with the documented demonstration account only while the instance remains local:

Email: admin@synaplan.com
Password: admin123

Change the password immediately. Use a unique password that is not shared with any other service. If the instance will serve multiple people, create individual accounts rather than distributing one administrator login. Administrator access should be limited to users who actually need to configure providers, models, integrations, or system-wide settings.

The first-run flow also allows you to connect an AI provider. Provider credentials are independent of Localtonet. Store them only in the Synaplan configuration area intended for provider keys, and never place them in the tunnel target, a public URL, client command, or article example.

Security checklist before remote access

  • Replace the documented demonstration password.
  • Confirm that only intended users have accounts.
  • Keep administrator privileges separate from normal chat usage where practical.
  • Review uploaded documents and knowledge collections before inviting other users.
  • Confirm that model-provider keys are stored in the intended application settings.
  • Do not expose database, cache, vector, mail-testing, or administration utility ports.
  • Back up production data and deploy/data/secrets.env using the project’s documented lifecycle process.
  • Start the public tunnel only when the local application has passed verification.
A tunnel is connectivity, not application authorization

A Localtonet HTTP tunnel makes the selected web endpoint reachable at a public HTTPS address. It does not replace Synaplan’s user accounts, permissions, administrator controls, provider-key handling, or data-governance decisions. Keep application authentication enabled and apply least privilege to every user.

Be careful with application URL assumptions

Some web applications need an externally visible base URL for redirects, cookies, generated links, integrations, or webhook callbacks. The supplied Synaplan quickstart evidence does not establish the exact configuration required for every remote URL scenario. Test sign-in, navigation, uploads, chat, and any integration you plan to use through the assigned public address.

Do not assume that mobile applications, messaging integrations, widgets, webhooks, or third-party callbacks automatically work merely because the main web interface is reachable. Their URL, authentication, and callback requirements must be checked against the current Synaplan documentation for the specific feature.

Verify Synaplan locally before creating a tunnel

Local browser requests pass through the host port to Synaplan in Docker before tunneling.
Check container operation, local page loading, and sign-in before adding a tunnel.

Local verification separates application problems from networking problems. If the interface does not work on the host, adding a public tunnel cannot repair it. Complete the checks below from the machine running Synaplan.

Check the expected URL

For the repository quickstart, open:

http://localhost:5173

For the production contract with its default binding, open:

http://127.0.0.1:8000

A successful check should return the Synaplan status page, setup wizard, sign-in screen, or application interface, depending on installation state. A connection-refused message usually means no process is listening on that address and port. A loading status page usually means the front-end endpoint is responding while other services continue to initialize.

Inspect Docker state

From the directory containing the active Compose configuration, use:

docker compose ps
docker compose logs

Confirm that the expected containers exist and are not continuously restarting. If a service fails, inspect its relevant log output rather than repeatedly running the installation command. Common causes include an unavailable Docker daemon, insufficient memory or disk space, failed image downloads, a port already in use, and incomplete initialization.

Perform an application-level test

Loading a sign-in page proves only that the web endpoint responds. Continue with a basic application test:

  1. Sign in with the intended account.
  2. Confirm that the main application loads without a recurring error.
  3. Open the administration or provider area needed for your deployment.
  4. If an AI provider is configured, submit a harmless test prompt.
  5. Sign out and sign in again using the new password.

If provider-backed chat fails while the interface works, treat that as an application or provider configuration issue. The HTTP tunnel only forwards web traffic and does not supply model credentials or repair provider connectivity.

Do not use the public URL as your first diagnostic test

Verify the exact local target first. Record whether it is 127.0.0.1:5173, localhost:5173, 127.0.0.1:8000, or another deliberately configured address. Only then create the tunnel with the matching IP address and port.

Share Synaplan with a Localtonet HTTP tunnel

Remote requests travel through Localtonet to the local agent and Docker-hosted Synaplan.
The HTTP tunnel forwards requests to Synaplan; application sign-in remains a separate access control.

Once Synaplan works locally and the demonstration credentials have been replaced, install and run the Localtonet client on the device that can reach the web interface. The simplest arrangement is to run our client directly on the Synaplan host. In that case, a service bound to loopback can be targeted through 127.0.0.1.

If our client runs on a different device, 127.0.0.1 refers to that second device, not to the Synaplan server. Synaplan must then listen on an address reachable from the Localtonet client, and the target must use the Synaplan host’s reachable private address. Changing a service binding can affect network exposure, so apply host firewall rules and local access controls deliberately.

Synaplan deployment Typical target when Localtonet is on the same host Tunnel family
Repository quickstart with make up 127.0.0.1:5173 HTTP/s
Repository checkout with Docker Compose 127.0.0.1:5173 HTTP/s
Production deploy/ contract 127.0.0.1:8000 HTTP/s

These targets are based on the documented default endpoints. If you changed the Compose configuration or host binding, use the address that passed your local verification instead.

Configure the HTTP tunnel

1

Install and run the Localtonet client

Install our client for the operating system on the device that can reach Synaplan. Keep the client running because the tunnel is available only while the selected device is connected and the tunnel is running.

2

Select the device with its authentication token

In the Localtonet dashboard, select the device-specific authentication token associated with the client. Treat this token as a secret. Do not paste it into documentation, terminal recordings, screenshots, or support messages.

3

Choose an available relay server

Select a currently available server or region from the dashboard. Available server codes and regions can vary, so use the current values shown in your account rather than copying a hardcoded example.

4

Create an HTTP tunnel to the verified local target

Choose the HTTP tunnel family and enter the local IP address and port that worked during verification. For the quickstart on the same host, that is normally 127.0.0.1 and port 5173. For the default production binding on the same host, use 127.0.0.1 and port 8000.

5

Select the HTTP process type

Choose Random Sub Domain, Custom Sub Domain, or Custom Domain according to the options currently available to your account. Each process type serves the target through a public HTTPS address. Exact custom-domain DNS requirements should be taken from the current dashboard and documentation rather than guessed.

6

Start the tunnel and test the assigned address

Creating the tunnel does not mean it is active. Press Start, copy the assigned public address, and open it in a separate browser session. Confirm that Synaplan loads and requires the expected application sign-in.

For current dashboard details, consult our Localtonet tunnel documentation. Do not copy a token or relay code from someone else’s configuration. Tokens identify specific client devices, and current relay choices must come from your own dashboard.

Test the public path safely

Open the assigned public URL in a private browser window or on a device outside the Synaplan host. This avoids accidentally relying on an existing administrator session. The expected result is the Synaplan sign-in or setup interface, not an automatically authenticated administrator page.

Sign in with a non-administrator account if one is appropriate for the intended users. Test the operations you plan to share, such as opening chat, viewing authorized files, or submitting a test prompt. If you intend to test a widget or integration, validate it separately because the main interface working does not prove that every callback or embedded-client requirement is satisfied.

Public URLs should be treated as discoverable

Do not rely on an unguessable-looking address as the only protection for an AI workspace. Keep Synaplan authentication enabled, remove default credentials, restrict administrator privileges, and stop the tunnel when remote access is no longer required.

Routine operation, backups, updates, and shutdown

Starting and stopping remote access

The Synaplan application and the Localtonet tunnel have independent lifecycles. Synaplan can remain running locally while its tunnel is stopped. Likewise, a configured tunnel cannot serve the application if the Synaplan containers are stopped or our selected client is disconnected.

Stop the tunnel when a temporary review or demonstration ends. Delete it if the configuration is no longer needed. Stopping the tunnel removes public reachability through that tunnel but does not delete Synaplan data or stop its Docker containers.

Stopping the repository stack

If you started the repository checkout with Docker Compose, the standard command to stop and remove its running containers is:

docker compose down

Run it from the same project directory and against the same Compose configuration used to start the stack. Do not add volume-removal options unless you understand exactly which persistent data they delete.

Production data and backups

The production contract keeps database, cache, vector, upload, model, backup, and secret data beneath deploy/data/. Its documented backup lifecycle uses preparation and completion hooks so database and vector snapshots are consistent:

deploy/scripts/pre-backup.sh
# Capture deploy/data with your backup system.
deploy/scripts/post-backup.sh

The pre-backup hook pauses writers and prepares consistent data, while the post-backup hook resumes normal operation. A production backup must include deploy/data/secrets.env. Restoring a database without the corresponding generated secrets can leave the restored data unusable.

Back up before updating

Do not treat container images as the complete application state. Protect the deployment data, generated secrets, uploads, database content, and vector data before changing versions. Use the project’s release-specific update instructions rather than substituting an unreviewed image tag.

Updates

A Git checkout can change significantly over time, while the production contract is designed around pinned immutable release versions. Before updating, read the release notes and the project’s current self-hosting update instructions. Back up the deployment, confirm resource requirements, and avoid the mutable latest tag.

After any update, repeat both verification layers. First test the local endpoint. Then start or retest the Localtonet tunnel and verify the public path in a fresh browser session. This catches application migration problems separately from tunnel connectivity problems.

Troubleshooting Synaplan and Localtonet

The Docker command cannot connect to the daemon

Start Docker Desktop or the Docker Engine service, then retry. Confirm that the current user is permitted to use Docker. This is a host installation issue and should be resolved before investigating Synaplan containers.

Port 5173 or 8000 is already in use

Another process may already be bound to the required host port. Identify the conflicting service using your operating system’s network tools and decide which application should own the port. Do not arbitrarily change the Synaplan port without also updating local verification and the Localtonet tunnel target.

The status page loads but Synaplan never becomes ready

Run docker compose ps and inspect docker compose logs. Look for failed image pulls, repeating container restarts, storage errors, or resource exhaustion. The status endpoint responding means only that part of the stack is reachable.

The local page works but the public URL does not

Check the Localtonet client, selected device token, tunnel status, local target, and port. Confirm that the tunnel was started rather than merely created. If our client runs on another device, do not use 127.0.0.1 unless Synaplan also runs on that same device.

The public page opens, but login or navigation behaves unexpectedly

Retest in a private browser window and inspect whether the application redirects to a local hostname or an unexpected base address. The exact public-base-URL configuration for every Synaplan deployment is not established by the quickstart evidence supplied for this guide. Review the current Synaplan deployment documentation before changing production URL or cookie settings.

Chat fails while the web interface remains available

This usually points to provider credentials, provider connectivity, model selection, or an application service problem rather than the HTTP tunnel. Test the same action through the local URL. If it fails locally too, diagnose Synaplan and its configured AI provider first.

The tunnel disconnects intermittently

A Localtonet tunnel is available only while the selected client device remains connected and the tunnel is running. Check whether the host is sleeping, restarting, losing internet access, or stopping the client process. Also confirm that Synaplan remains healthy at the local target during the same period.

A remote user can see more data than expected

Stop the tunnel immediately, then review Synaplan users, roles, shared files, assistants, and knowledge access. Tunnel connectivity does not determine application-level authorization. Remove unintended access, rotate affected credentials where appropriate, and retest with a non-administrator account before restarting the tunnel.

Frequently asked questions

Which port does Synaplan use?

The documented repository quickstart serves its status page and web interface at http://localhost:5173. The production deploy/ contract binds the web service to 127.0.0.1:8000 by default. Use the port associated with your installation and confirm it locally before configuring the tunnel.

Should I use make up or the production deploy directory?

Use make up for a quick local evaluation or development workflow. Use the production contract for a longer-lived single-node Linux deployment that needs pinned images, generated secrets, persistent deployment data, release validation, smoke testing, and a documented backup lifecycle.

Can I expose Synaplan before changing the default password?

No. The quickstart demonstration credentials are publicly documented. Change the administrator password and review user access while the instance is still local. Then test the public URL in a private browser session to confirm that authentication is required.

Does Localtonet require router port forwarding?

No. Our client establishes an outbound connection to a Localtonet relay server. This allows the selected local service to receive traffic through the assigned public address without inbound router port forwarding, firewall changes, VPN setup, or a public IP address.

Why should I use an HTTP tunnel instead of a TCP tunnel?

Synaplan’s user interface is a web application served over HTTP, so an HTTP tunnel matches the application protocol and provides a public HTTPS address. A raw TCP tunnel is unnecessary for the documented web-interface workflow and should not be used to expose Synaplan’s internal database or supporting services.

Can the Localtonet client run on a different computer?

Yes, if that computer can reach the Synaplan web endpoint. In that arrangement, do not configure the target as 127.0.0.1 unless Synaplan runs on the Localtonet client computer itself. Use a reachable private address and secure the local network path appropriately.

Does a working public URL guarantee that widgets, mobile apps, and integrations will work?

No. It proves that the selected HTTP endpoint is reachable through the tunnel. Widgets, mobile applications, messaging channels, webhooks, and other integrations can have separate callback, authentication, base-URL, or client configuration requirements. Validate each integration against its current Synaplan documentation.

What happens when I stop the tunnel?

The public route through that tunnel becomes unavailable. Synaplan can continue running locally, and its Docker data is not deleted. The tunnel also becomes unavailable if the selected Localtonet client disconnects, even if the tunnel configuration still exists in the dashboard.

Share your verified Synaplan instance with Localtonet

Install Synaplan, replace the demonstration credentials, confirm the correct local endpoint, and then create an HTTP tunnel for controlled remote access without inbound router port forwarding.

Get Started Free →

Localtonet is a secure multi-protocol tunneling and proxy platform designed to expose localhost, devices, private services, and AI agents to the public internet supporting HTTP/HTTPS tunnels, TCP/UDP forwarding, mobile proxy infrastructure, file server publishing, latency-optimized game connectivity, and developer-ready AI agent endpoint exposure from a single unified control plane.

support