Compare commits

..
Author SHA1 Message Date
Mauricio SiuandClaude Fable 5 3ddbdde081 feat: add SpacetimeDB template
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:30:17 -06:00
7 changed files with 122 additions and 17 deletions
+19 -15
View File
@@ -1,35 +1,39 @@
version: "3.8"
services:
kener:
image: rajnandan1/kener:latest
environment:
- TZ=${TZ}
- KENER_SECRET_KEY=${KENER_SECRET_KEY} # 🔐 API key / secret
- ORIGIN=${ORIGIN}
- REDIS_URL=${REDIS_URL}
- DATABASE_URL=${DATABASE_URL}
- KENER_BASE_PATH=${KENER_BASE_PATH}
- ORIGIN=${ORIGIN}
- RESEND_API_KEY=${RESEND_API_KEY} # 🔐 API key
- RESEND_SENDER_EMAIL=${RESEND_SENDER_EMAIL}
ports:
- 3000
volumes:
- kener_db:/app/database
depends_on:
redis:
condition: service_healthy
- ../files/uploads:/app/uploads
restart: unless-stopped
redis:
image: redis:7-alpine
volumes:
- kener_redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
postgres:
image: postgres:alpine
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # 🔐 DB password
- POSTGRES_DB=${POSTGRES_DB}
restart: unless-stopped
mysql:
image: mariadb:11
environment:
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD} # 🔐 DB password
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_RANDOM_ROOT_PASSWORD=true
restart: unless-stopped
volumes:
kener_db: {}
kener_redis: {}
+20 -2
View File
@@ -1,6 +1,8 @@
[variables]
main_domain = "${domain}"
KENER_SECRET_KEY = "${password:64}"
POSTGRES_PASSWORD = "${password:32}"
MYSQL_PASSWORD = "${password:32}"
[config]
[[config.domains]]
@@ -11,9 +13,25 @@ host = "${main_domain}"
[config.env]
TZ = "Etc/UTC"
KENER_SECRET_KEY = "${KENER_SECRET_KEY}" # 🔐 API key / secret
ORIGIN = "https://${main_domain}"
REDIS_URL = "redis://redis:6379"
DATABASE_URL = "sqlite://./database/kener.sqlite.db"
KENER_BASE_PATH = ""
ORIGIN = "http://localhost:3000"
RESEND_API_KEY = ""
RESEND_SENDER_EMAIL = "Accounts <accounts@resend.dev>"
POSTGRES_USER = "user"
POSTGRES_DB = "kener_db"
MYSQL_USER = "user"
MYSQL_DATABASE = "kener_db"
MYSQL_RANDOM_ROOT_PASSWORD = "true"
MYSQL_PASSWORD = "${MYSQL_PASSWORD}" # 🔐 DB password
POSTGRES_PASSWORD = "${POSTGRES_PASSWORD}" # 🔐 DB password
[[config.mounts]]
type = "volume"
source = "kener_db"
target = "/app/database"
[[config.mounts]]
type = "bind"
source = "../files/uploads"
target = "/app/uploads"
+13
View File
@@ -0,0 +1,13 @@
version: "3.8"
services:
spacetimedb:
image: clockworklabs/spacetime:v2.6.1
restart: unless-stopped
command: start
ports:
- 3000
volumes:
- spacetimedb-data:/home/spacetime
volumes:
spacetimedb-data: {}
+45
View File
@@ -0,0 +1,45 @@
# SpacetimeDB
SpacetimeDB is a database and server runtime in one: your clients connect directly to the database and your application logic runs inside it as WebAssembly modules. There is no web UI — the domain assigned to this service exposes the SpacetimeDB HTTP/WebSocket API (so opening `/` in a browser returns a plain 404; that is expected).
## Verify the server is running
```bash
curl -i https://your-domain.com/v1/ping
```
A `200 OK` response means the server is up.
## Connect with the SpacetimeDB CLI
1. Install the CLI on your local machine:
```bash
curl -sSf https://install.spacetimedb.com | sh
```
2. Register your Dokploy instance as a server and make it the default:
```bash
spacetime server add --url https://your-domain.com dokploy --default
```
3. Log in (or create an anonymous local identity) and publish a module:
```bash
spacetime login
spacetime publish --server dokploy my-database
```
4. Check connectivity at any time:
```bash
spacetime server ping dokploy
```
From your game or app, connect with any SpacetimeDB client SDK (Rust, C#, TypeScript) using `https://your-domain.com` as the host URI. See the [getting started guide](https://spacetimedb.com/docs/getting-started) for a full walkthrough.
## Notes
- All server state (databases, logs and the JWT signing keys used for identities) is persisted in the `spacetimedb-data` volume, so identities survive restarts and upgrades.
- Client connections use WebSockets over the same domain; no extra configuration is needed.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

+17
View File
@@ -0,0 +1,17 @@
{
"id": "spacetimedb",
"name": "SpacetimeDB",
"version": "v2.6.1",
"description": "SpacetimeDB is a relational database with a built-in server runtime. Clients connect directly to the database and run server-side logic (modules) inside it, making it ideal for real-time multiplayer games, chat and collaborative applications without a separate backend.",
"logo": "logo.png",
"links": {
"github": "https://github.com/clockworklabs/SpacetimeDB",
"website": "https://spacetimedb.com/",
"docs": "https://spacetimedb.com/docs"
},
"tags": [
"database",
"realtime",
"backend"
]
}
+8
View File
@@ -0,0 +1,8 @@
[variables]
main_domain = "${domain}"
[config]
[[config.domains]]
serviceName = "spacetimedb"
port = 3000
host = "${main_domain}"