DashCaddy.net all files

This commit is contained in:
Krystie
2026-04-15 20:55:30 -07:00
commit c5d7d99852
36 changed files with 9611 additions and 0 deletions
+389
View File
@@ -0,0 +1,389 @@
'use client';
import Link from 'next/link';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
export default function DocsPage() {
return (
<div className="flex flex-col min-h-screen bg-surface-950 text-surface-50">
<Navbar />
{/* Hero Section */}
<section className="relative py-16 sm:py-20 lg:py-24">
<div className="absolute inset-0 -z-10">
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-brand-500/20 rounded-full blur-3xl opacity-30 animate-pulse" />
</div>
<div className="mx-auto max-w-4xl px-4 sm:px-6 lg:px-8">
<h1 className="text-4xl sm:text-5xl lg:text-6xl font-bold mb-6">
Getting <span className="text-brand-400">Started</span>
</h1>
<p className="text-xl text-surface-300 max-w-2xl">
Get DashCaddy up and running on your server in just a few minutes.
</p>
</div>
</section>
{/* Main Content */}
<section className="relative py-12 sm:py-16 lg:py-20">
<div className="mx-auto max-w-4xl px-4 sm:px-6 lg:px-8">
{/* Table of Contents */}
<div className="mb-16 rounded-lg border border-surface-700/50 bg-surface-800/50 p-8">
<h2 className="text-2xl font-bold text-surface-50 mb-6">Table of Contents</h2>
<ul className="space-y-3">
<li>
<a href="#prerequisites" className="text-brand-400 hover:text-brand-300 transition-colors flex items-center gap-2">
<span></span> Prerequisites
</a>
</li>
<li>
<a href="#installation" className="text-brand-400 hover:text-brand-300 transition-colors flex items-center gap-2">
<span></span> Installation
</a>
</li>
<li>
<a href="#configuration" className="text-brand-400 hover:text-brand-300 transition-colors flex items-center gap-2">
<span></span> Configuration
</a>
</li>
<li>
<a href="#first-run" className="text-brand-400 hover:text-brand-300 transition-colors flex items-center gap-2">
<span></span> First Run
</a>
</li>
<li>
<a href="#troubleshooting" className="text-brand-400 hover:text-brand-300 transition-colors flex items-center gap-2">
<span></span> Troubleshooting
</a>
</li>
</ul>
</div>
{/* Prerequisites Section */}
<section id="prerequisites" className="mb-16">
<h2 className="text-3xl font-bold text-surface-50 mb-6 flex items-center gap-3">
<span className="text-brand-400">📋</span> Prerequisites
</h2>
<p className="text-surface-300 mb-6 leading-relaxed">
Before you begin, ensure you have the following installed on your server:
</p>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-6 space-y-4">
<div className="flex items-start gap-4">
<div className="text-xl flex-shrink-0">🐳</div>
<div>
<h3 className="font-semibold text-surface-50 mb-1">Docker</h3>
<p className="text-sm text-surface-400">Version 20.10+ required. <a href="https://docs.docker.com/get-docker/" className="text-brand-400 hover:text-brand-300">Install Docker</a></p>
</div>
</div>
<div className="flex items-start gap-4">
<div className="text-xl flex-shrink-0"></div>
<div>
<h3 className="font-semibold text-surface-50 mb-1">Caddy</h3>
<p className="text-sm text-surface-400">Version 2.7+ required. <a href="https://caddyserver.com/docs/install" className="text-brand-400 hover:text-brand-300">Install Caddy</a></p>
</div>
</div>
<div className="flex items-start gap-4">
<div className="text-xl flex-shrink-0">🟢</div>
<div>
<h3 className="font-semibold text-surface-50 mb-1">Node.js</h3>
<p className="text-sm text-surface-400">Version 18+ required. <a href="https://nodejs.org/" className="text-brand-400 hover:text-brand-300">Install Node.js</a></p>
</div>
</div>
<div className="flex items-start gap-4">
<div className="text-xl flex-shrink-0">🔧</div>
<div>
<h3 className="font-semibold text-surface-50 mb-1">Git</h3>
<p className="text-sm text-surface-400">For cloning the repository. <a href="https://git-scm.com/" className="text-brand-400 hover:text-brand-300">Install Git</a></p>
</div>
</div>
<div className="border-t border-surface-700/30 pt-4 mt-4">
<h3 className="font-semibold text-surface-50 mb-2">Optional</h3>
<div className="flex items-start gap-4">
<div className="text-xl flex-shrink-0">🌐</div>
<div>
<h3 className="font-semibold text-surface-50 mb-1">Technitium DNS</h3>
<p className="text-sm text-surface-400">For automatic DNS management. If not installed, you can still manage DNS manually.</p>
</div>
</div>
</div>
</div>
</section>
{/* Installation Section */}
<section id="installation" className="mb-16">
<h2 className="text-3xl font-bold text-surface-50 mb-6 flex items-center gap-3">
<span className="text-brand-400">📦</span> Installation
</h2>
<p className="text-surface-300 mb-8 leading-relaxed">
Follow these steps to install DashCaddy on your server:
</p>
{/* Step 1 */}
<div className="mb-10">
<h3 className="text-xl font-semibold text-surface-50 mb-4">Step 1: Clone the Repository</h3>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-4">
<code className="text-sm text-green-400 font-mono block">
git clone https://github.com/dashcaddy/dashcaddy.git
<br />
cd dashcaddy
</code>
</div>
</div>
{/* Step 2 */}
<div className="mb-10">
<h3 className="text-xl font-semibold text-surface-50 mb-4">Step 2: Install Dependencies</h3>
<p className="text-surface-300 mb-4">Install Node.js dependencies:</p>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-4">
<code className="text-sm text-green-400 font-mono block">
npm install
</code>
</div>
</div>
{/* Step 3 */}
<div className="mb-10">
<h3 className="text-xl font-semibold text-surface-50 mb-4">Step 3: Configure Environment Variables</h3>
<p className="text-surface-300 mb-4">Copy the example environment file and customize it:</p>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-4 mb-4">
<code className="text-sm text-green-400 font-mono block">
cp .env.example .env
</code>
</div>
<p className="text-surface-300 mb-4">Then edit <code className="bg-surface-800 px-2 py-1 rounded text-brand-400">.env</code> with your configuration:</p>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-4">
<code className="text-sm text-surface-300 font-mono whitespace-pre-wrap">
{`# Server
PORT=3000
NODE_ENV=production
# Database (optional - defaults to SQLite)
DATABASE_URL=sqlite:./data/dashcaddy.db
# Security
JWT_SECRET=your-secure-random-secret-here
SESSION_SECRET=another-secure-random-secret
# Caddy
CADDY_PORT=80
CADDY_HTTPS_PORT=443
CADDY_ADMIN_LISTEN=localhost:2019
# Technitium DNS (optional)
TECHNITIUM_API_URL=http://localhost:5380/api
TECHNITIUM_API_KEY=your-api-key
# Email (optional - for notifications)
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=your-email@example.com
SMTP_PASSWORD=your-password`}
</code>
</div>
</div>
{/* Step 4 */}
<div className="mb-10">
<h3 className="text-xl font-semibold text-surface-50 mb-4">Step 4: Build and Start</h3>
<p className="text-surface-300 mb-4">Build the application:</p>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-4 mb-6">
<code className="text-sm text-green-400 font-mono block">
npm run build
</code>
</div>
<p className="text-surface-300 mb-4">Start DashCaddy:</p>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-4">
<code className="text-sm text-green-400 font-mono block">
npm start
</code>
</div>
<p className="text-surface-300 mt-4 text-sm">
The application will be available at <code className="bg-surface-800 px-2 py-1 rounded text-brand-400">http://localhost:3000</code>
</p>
</div>
{/* Step 5 */}
<div className="mb-10">
<h3 className="text-xl font-semibold text-surface-50 mb-4">Step 5: Configure Caddy</h3>
<p className="text-surface-300 mb-4">Update your Caddy configuration to proxy requests to DashCaddy:</p>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-4">
<code className="text-sm text-surface-300 font-mono whitespace-pre-wrap">
{`dashcaddy.local {
reverse_proxy localhost:3000
# Enable automatic HTTPS
encode gzip
# Security headers
header Strict-Transport-Security "max-age=31536000"
header X-Content-Type-Options "nosniff"
header X-Frame-Options "DENY"
}`}
</code>
</div>
</div>
</section>
{/* Configuration Section */}
<section id="configuration" className="mb-16">
<h2 className="text-3xl font-bold text-surface-50 mb-6 flex items-center gap-3">
<span className="text-brand-400"></span> Configuration
</h2>
<p className="text-surface-300 mb-8 leading-relaxed">
Key environment variables for DashCaddy configuration:
</p>
<div className="space-y-6">
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-6">
<h3 className="font-semibold text-brand-400 mb-2 font-mono">PORT</h3>
<p className="text-surface-300 text-sm mb-2">The port DashCaddy runs on. Default: <code className="bg-surface-800 px-1 rounded">3000</code></p>
</div>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-6">
<h3 className="font-semibold text-brand-400 mb-2 font-mono">JWT_SECRET</h3>
<p className="text-surface-300 text-sm mb-2">Secret key for JWT tokens. Generate a secure random string:</p>
<code className="bg-surface-800 px-2 py-1 rounded text-brand-400 text-xs">openssl rand -hex 32</code>
</div>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-6">
<h3 className="font-semibold text-brand-400 mb-2 font-mono">DATABASE_URL</h3>
<p className="text-surface-300 text-sm">Connection string for your database. Defaults to SQLite if not provided.</p>
</div>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-6">
<h3 className="font-semibold text-brand-400 mb-2 font-mono">CADDY_ADMIN_LISTEN</h3>
<p className="text-surface-300 text-sm mb-2">Caddy admin API endpoint. Default: <code className="bg-surface-800 px-1 rounded">localhost:2019</code></p>
</div>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-6">
<h3 className="font-semibold text-brand-400 mb-2 font-mono">TECHNITIUM_API_URL</h3>
<p className="text-surface-300 text-sm">URL to your Technitium DNS API. Optional for DNS management features.</p>
</div>
</div>
</section>
{/* First Run Section */}
<section id="first-run" className="mb-16">
<h2 className="text-3xl font-bold text-surface-50 mb-6 flex items-center gap-3">
<span className="text-brand-400">🚀</span> First Run
</h2>
<div className="rounded-lg border border-brand-500/30 bg-brand-950/50 p-8">
<ol className="space-y-4 list-decimal list-inside text-surface-300">
<li>Access the dashboard at <code className="bg-surface-800 px-2 py-1 rounded text-brand-400">http://dashcaddy.local</code></li>
<li>Create your admin account with a strong password</li>
<li>Enable TOTP 2FA for enhanced security</li>
<li>Configure your Technitium DNS API key (optional)</li>
<li>Deploy your first application from the app templates library</li>
<li>Monitor your apps in real-time from the dashboard</li>
</ol>
</div>
</section>
{/* Troubleshooting Section */}
<section id="troubleshooting" className="mb-16">
<h2 className="text-3xl font-bold text-surface-50 mb-6 flex items-center gap-3">
<span className="text-brand-400">🔧</span> Troubleshooting
</h2>
<div className="space-y-6">
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-6">
<h3 className="font-semibold text-surface-50 mb-3 flex items-center gap-2">
<span className="text-red-400"></span> Docker daemon not running
</h3>
<p className="text-surface-300 text-sm mb-3">Make sure the Docker daemon is started:</p>
<code className="bg-surface-800 px-2 py-1 rounded text-green-400 text-xs block">sudo systemctl start docker</code>
</div>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-6">
<h3 className="font-semibold text-surface-50 mb-3 flex items-center gap-2">
<span className="text-red-400"></span> Port 3000 already in use
</h3>
<p className="text-surface-300 text-sm mb-3">Change the PORT in your .env file or stop the process using that port:</p>
<code className="bg-surface-800 px-2 py-1 rounded text-green-400 text-xs block">lsof -i :3000</code>
</div>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-6">
<h3 className="font-semibold text-surface-50 mb-3 flex items-center gap-2">
<span className="text-red-400"></span> Cannot connect to Caddy admin API
</h3>
<p className="text-surface-300 text-sm mb-3">Verify Caddy is running and the admin API is accessible:</p>
<code className="bg-surface-800 px-2 py-1 rounded text-green-400 text-xs block">curl http://localhost:2019/config/</code>
</div>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-6">
<h3 className="font-semibold text-surface-50 mb-3 flex items-center gap-2">
<span className="text-red-400"></span> Database connection errors
</h3>
<p className="text-surface-300 text-sm mb-3">Check that your DATABASE_URL is correct and the database is accessible. For SQLite, ensure the data directory exists:</p>
<code className="bg-surface-800 px-2 py-1 rounded text-green-400 text-xs block">mkdir -p ./data</code>
</div>
<div className="rounded-lg border border-surface-700/50 bg-surface-900/50 p-6">
<h3 className="font-semibold text-surface-50 mb-3 flex items-center gap-2">
<span className="text-red-400"></span> SSL certificate issues
</h3>
<p className="text-surface-300 text-sm mb-3">DashCaddy uses Caddy's internal CA for certificate generation. If you have issues, check the Caddy logs:</p>
<code className="bg-surface-800 px-2 py-1 rounded text-green-400 text-xs block">journalctl -u caddy -f</code>
</div>
</div>
</section>
{/* Next Steps */}
<section className="mb-16">
<div className="rounded-lg border border-surface-700/50 bg-surface-800/50 p-8">
<h2 className="text-2xl font-bold text-surface-50 mb-6">Next Steps</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<Link
href="/features"
className="flex items-start gap-4 p-4 rounded-lg border border-brand-500/20 bg-brand-950/30 hover:bg-brand-950/50 transition-colors"
>
<span className="text-2xl flex-shrink-0"></span>
<div>
<h3 className="font-semibold text-surface-50 mb-1">Explore Features</h3>
<p className="text-sm text-surface-400">Learn about all the powerful features DashCaddy offers.</p>
</div>
</Link>
<a
href="#"
className="flex items-start gap-4 p-4 rounded-lg border border-surface-700/50 bg-surface-800/50 hover:bg-surface-800 transition-colors"
>
<span className="text-2xl flex-shrink-0">📚</span>
<div>
<h3 className="font-semibold text-surface-50 mb-1">API Reference</h3>
<p className="text-sm text-surface-400">Full API documentation for developers.</p>
</div>
</a>
<Link
href="/pricing"
className="flex items-start gap-4 p-4 rounded-lg border border-surface-700/50 bg-surface-800/50 hover:bg-surface-800 transition-colors"
>
<span className="text-2xl flex-shrink-0">💎</span>
<div>
<h3 className="font-semibold text-surface-50 mb-1">View Pricing</h3>
<p className="text-sm text-surface-400">Check out our free and premium plans.</p>
</div>
</Link>
<a
href="mailto:support@dashcaddy.net"
className="flex items-start gap-4 p-4 rounded-lg border border-surface-700/50 bg-surface-800/50 hover:bg-surface-800 transition-colors"
>
<span className="text-2xl flex-shrink-0">💬</span>
<div>
<h3 className="font-semibold text-surface-50 mb-1">Get Support</h3>
<p className="text-sm text-surface-400">Contact our support team for help.</p>
</div>
</a>
</div>
</div>
</section>
</div>
</section>
<Footer />
</div>
);
}