Installation
Every way to install DS-CS — Docker one-command, manual compose, from source, VPS — plus all environment variables.
All installation methods for DS-CS. Pick one: A (recommended), B (manual Docker), or C (from source). Vercel has its own page: Deploy on Vercel.
Prerequisites
- Docker + Docker Compose (methods A and B):
docker --version/docker compose version—https://docs.docker.com/get-docker/ - curl
- Bun (method C + local DB tooling):
curl -fsSL https://bun.sh/install | bash - openssl for secrets (preinstalled on macOS/Linux)
- Node.js 20+ only for
npx web-push generate-vapid-keysand the Vercel CLI - Production: a domain with HTTPS (required for push) and open ports
8729(app),9000/9001(S3 console)
Generate secrets with:
openssl rand -base64 32 # BETTER_AUTH_SECRET
openssl rand -hex 32 # API_KEY
npx web-push generate-vapid-keys # VAPID push keysOption A — one-command install (recommended)
curl -fsSL https://raw.githubusercontent.com/dastyare-social/DS-CS/main/scripts/install.sh | bashThe script prompts for admin Email/Password, creates .env with defaults and generated secrets, then runs docker compose pull + docker compose up -d under the pinned project name ds-cs (resources prefixed ds-cs-*). Open http://localhost:8729.
Review the generated
.envbefore production use.
Option B — manual Docker Compose
1. Download the compose file:
curl -fsSL https://raw.githubusercontent.com/dastyare-social/DS-CS/main/docker-compose.yml -o docker-compose.yml2. Create env:
curl -fsSL https://raw.githubusercontent.com/dastyare-social/DS-CS/main/.env.example -o .env.example
cp .env.example .envEdit .env — at minimum ADMIN_EMAIL, ADMIN_PASSWORD, BETTER_AUTH_SECRET, API_KEY, BETTER_AUTH_URL, NEXT_PUBLIC_APP_URL (see Environment variables).
3. Start:
docker compose up -d
docker compose ps
docker compose logs -f appThe app container runs migrations, bootstraps the admin, seeds the avatar, uploads emojis, generates icons and starts Next.js automatically. Open http://localhost:8729.
Option C — from source with Bun
Needs Bun, Node 20+ and PostgreSQL (local or managed).
git clone https://github.com/dastyare-social/DS-CS.git
cd DS-CS
cp .env.example .env # fill in DATABASE_URL + the rest below
bun install
bun run db:migrate
bun run bootstrap:admin
bun run devOpen http://localhost:8729.
| Command | What it does |
|---|---|
bun run dev | Config + icons, dev server on :8729 |
bun run build | Config → icons → emojis → migrate → bootstrap → next build (needs DATABASE_URL, ADMIN_*) |
bun run start | Production server on :8729 |
bun run db:generate / db:migrate / db:studio | Create / apply migrations / DB GUI |
bun run generate:config | Regenerate app config from config/app.config.yml |
bun run bootstrap:admin | Create/update admin from env |
bun run openapi:generate | Regenerate public/openapi.json |
Environment variables
Copy .env.example to .env. Never commit .env. Every variable — what it does, whether it is Essential or Optional, and how to get its value — is documented on the Environment variables page. At minimum set ADMIN_EMAIL, ADMIN_PASSWORD, BETTER_AUTH_SECRET, API_KEY, BETTER_AUTH_URL and NEXT_PUBLIC_APP_URL.
Brand files (no rebuild)
config/app.config.yml (channel name/description), config/about.config.yml (enabled first key controls /about), public/profile-image.png (avatar) — bind-mounted, edits apply on reload.
VPS + reverse proxy
Point DNS at your server, forward HTTPS to 8729. Caddy:
your-domain.com {
reverse_proxy localhost:8729
}Nginx:
server {
listen 443 ssl;
server_name your-domain.com;
location / {
proxy_pass http://localhost:8729;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Set BETTER_AUTH_URL and NEXT_PUBLIC_APP_URL to https://your-domain.com. Keep 9000/9001 private.
Verify
-
/loads, header avatar shows -
/oslogin with admin credentials works - Text post + image post publish (media uploads to S3)
- Story publishes and plays
-
/docsand/openapi.jsonrender -
/sitemap.xml,/robots.txt,/llms.txtreachable
Troubleshooting
| Symptom | Fix |
|---|---|
| Ports taken / Docker down | Start Docker, free 8729/9000 |
| Bootstrap fails | Set ADMIN_EMAIL / ADMIN_PASSWORD |
| 403 on writes | DEMO_MODE=true or wrong Authorization: Bearer <API_KEY> |
| Upload 400 | Exceeds MEDIA_MAX_* or MIME not allowed |
| Upload fails silently | S3 CORS — origin must match NEXT_PUBLIC_APP_URL |
| Push “Setup required” | VAPID keys missing or not a matching pair |
| SEO not indexed | NEXT_PUBLIC_ALLOW_INDEXING is not true |
Support: hey@dastyare.social.
Loading repository…