111 lines
6.1 KiB
HTML
111 lines
6.1 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||
<title>FAQ · PearDock Docs</title>
|
||
<meta name="description" content="Frequently asked questions about PearDock: install, keys, Docker group, Pear, Gatekeeper, AGPL, upgrades." />
|
||
<meta name="theme-color" content="#2dd4bf" />
|
||
<link rel="icon" href="/assets/favicons/favicon.ico" sizes="any" />
|
||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
||
<link rel="stylesheet" href="/src/styles/global.css" />
|
||
<link rel="stylesheet" href="/src/styles/docs.css" />
|
||
</head>
|
||
<body>
|
||
<div class="bg-mesh" aria-hidden="true"></div>
|
||
<div data-nav data-prefix="../"></div>
|
||
|
||
<div class="docs-layout">
|
||
<aside class="docs-sidebar" data-docs-nav data-prefix="../"></aside>
|
||
<button type="button" class="docs-sidebar-toggle" aria-label="Docs menu">☰</button>
|
||
|
||
<article class="docs-main">
|
||
<h1>FAQ</h1>
|
||
<p class="docs-lead">Short answers to common questions.</p>
|
||
|
||
<h2>Do I need to open ports or set up VPN / remote access?</h2>
|
||
<p>
|
||
<strong>No.</strong> PearDock is peer-to-peer over HyperDHT. You share the server’s public key;
|
||
clients holepunch an encrypted connection. You do not open inbound firewall ports for Docker or the control UI,
|
||
expose <code>dockerd</code> to the internet, or maintain a permanent VPN just to run ops.
|
||
Optional Holesail tunnels reach published services the same way, still without punching host firewall holes.
|
||
</p>
|
||
|
||
<h2>How do I install PearDock?</h2>
|
||
<pre><code>curl -fsSL https://install.peardock.boats | bash</code></pre>
|
||
<p>
|
||
Interactive: choose <strong>server</strong> (Linux systemd) or <strong>client</strong> (desktop).
|
||
Non-interactive: <code>--server --yes</code> / <code>--client --yes</code>.
|
||
Details: <a href="/download">Download & install</a>.
|
||
</p>
|
||
|
||
<h2>What do I share with clients?</h2>
|
||
<p>The server <strong>public key</strong> (64 hex characters). Never share <code>SERVER_SEED</code>.</p>
|
||
|
||
<h2>Where is the public key after install?</h2>
|
||
<pre><code>sudo journalctl -u peardock -n 80 --no-pager | grep -i 'public key'</code></pre>
|
||
<p>Also stored under <code>/opt/peardock/.env</code> as <code>SERVER_PUBLIC_KEY</code> when generated.</p>
|
||
|
||
<h2>Container list empty / “permission denied” on Docker</h2>
|
||
<p>The service user <code>peardock</code> needs the docker group:</p>
|
||
<pre><code>sudo usermod -aG docker peardock
|
||
sudo systemctl restart peardock
|
||
# if the group was just created:
|
||
sudo systemctl restart docker</code></pre>
|
||
<p>The one-line installer does this automatically on server install.</p>
|
||
|
||
<h2>Is there a cloud / SaaS component?</h2>
|
||
<p>No. HyperDHT holepunches between peers. Bootstrap nodes are part of the HyperDHT network; PearDock does not operate a proprietary control plane.</p>
|
||
|
||
<h2>Pear prints “DEPRECATED: pear run is deprecated”</h2>
|
||
<p>Platform-wide message. Prefer the Electron desktop client from the rolling release or <code>install.sh --client</code>. Source: <code>npm run start:client</code>.</p>
|
||
|
||
<h2>macOS says the app is damaged</h2>
|
||
<p>Usually quarantine or signature after download. Installer runs <code>xattr -cr</code>. Manually:</p>
|
||
<pre><code>xattr -cr ~/Applications/peardock.app
|
||
# or right-click → Open
|
||
# re-sign from source build:
|
||
npm run sign:macos -- out/peardock-darwin-arm64/peardock.app</code></pre>
|
||
|
||
<h2>Client lost connection. Does it reconnect?</h2>
|
||
<p>Yes. Unexpected disconnects retry every <strong>5 seconds</strong> until the peer is back or you remove it. Last active peer is restored on launch.</p>
|
||
|
||
<h2>Why is PearDock AGPL?</h2>
|
||
<p>PearDock is <strong>AGPL-3.0</strong>, matching Holesail (also AGPL-3.0). If you modify PearDock and let others use it over a network, review AGPL source-offer obligations. You can set <code>ENABLE_HOLESAIL=0</code> to disable tunnel creation.</p>
|
||
|
||
<h2>Can I run without Holesail?</h2>
|
||
<p>Yes: <code>ENABLE_HOLESAIL=0</code> in the server environment. Control-plane Docker management still works.</p>
|
||
|
||
<h2>Default role is admin. Is that safe?</h2>
|
||
<p>Convenient for a single trusted operator. For multi-operator fleets, set <code>PEARDOCK_DEFAULT_ROLE</code>, <code>PEARDOCK_ADMIN_KEYS</code>, and allowlist. See <a href="/docs/security">threat model</a>.</p>
|
||
|
||
<h2>v1 vs v2</h2>
|
||
<p>v1 used Hyperswarm topics and raw JSON streams. v2 uses HyperDHT keypairs, public keys, and protomux-rpc. Clients and servers are not wire-compatible across major versions.</p>
|
||
|
||
<h2>Where is peer state stored on the client?</h2>
|
||
<p>Typically <code>~/.config/peardock/cache/peers.json</code> (includes last active peer id).</p>
|
||
|
||
<h2>How do I update?</h2>
|
||
<ul>
|
||
<li><strong>Server:</strong> re-run <code>install.sh --server --yes</code> or replace the binary; keep <code>/opt/peardock/.env</code>; <code>systemctl restart peardock</code>.</li>
|
||
<li><strong>Client:</strong> re-run <code>install.sh --client --yes</code> or install a newer rolling tarball.</li>
|
||
<li><strong>Assets:</strong> <a href="https://git.ssh.surf/snxraven/peardock/releases/tag/rolling" target="_blank" rel="noopener">rolling</a> tag on every main CI build.</li>
|
||
</ul>
|
||
|
||
<h2>License</h2>
|
||
<p>PearDock and Holesail: <strong>AGPL-3.0</strong>. See <a href="/legal/license">Open Source Notices</a>.</p>
|
||
|
||
<div class="docs-pager">
|
||
<a href="/docs/release"><span>Previous</span><strong>← Releases</strong></a>
|
||
<a class="next" href="/docs/index"><span>Docs home</span><strong>Overview →</strong></a>
|
||
</div>
|
||
</article>
|
||
</div>
|
||
|
||
<div data-footer data-prefix="../"></div>
|
||
<script type="module" src="/src/js/site.js"></script>
|
||
</body>
|
||
</html>
|