quick production test script
This commit is contained in:
parent
735ca3d8c6
commit
1e44c7db7a
7 changed files with 562 additions and 2 deletions
22
.dockerignore
Normal file
22
.dockerignore
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
node_modules
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
.pnpm-debug.log*
|
||||||
|
.svelte-kit
|
||||||
|
build/
|
||||||
|
.output
|
||||||
|
.vercel
|
||||||
|
.netlify
|
||||||
|
vite.config.js.timestamp-*
|
||||||
|
vite.config.ts.timestamp-*
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
README.md
|
||||||
|
drizzle/
|
||||||
86
Dockerfile
Normal file
86
Dockerfile
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
# syntax = docker/dockerfile:1
|
||||||
|
|
||||||
|
ARG NODE_VERSION=20
|
||||||
|
FROM node:${NODE_VERSION}-slim AS base-node
|
||||||
|
WORKDIR /app
|
||||||
|
ENV NODE_ENV="production"
|
||||||
|
|
||||||
|
# Install system dependencies for building native modules
|
||||||
|
RUN apt-get update -qq && \
|
||||||
|
apt-get install --no-install-recommends -y \
|
||||||
|
build-essential \
|
||||||
|
node-gyp \
|
||||||
|
pkg-config \
|
||||||
|
python-is-python3 \
|
||||||
|
curl \
|
||||||
|
ca-certificates && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
FROM base-node AS build-main
|
||||||
|
|
||||||
|
# Copy package files
|
||||||
|
COPY website/package.json website/package-lock.json* ./
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
RUN npm ci --include=dev
|
||||||
|
|
||||||
|
# Copy source files
|
||||||
|
COPY website/. ./
|
||||||
|
|
||||||
|
# Build the application
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# Remove dev dependencies
|
||||||
|
RUN npm prune --omit=dev
|
||||||
|
|
||||||
|
FROM base-node AS build-websocket
|
||||||
|
WORKDIR /websocket
|
||||||
|
|
||||||
|
# Install Bun
|
||||||
|
RUN curl -fsSL https://bun.sh/install | bash
|
||||||
|
ENV PATH="/root/.bun/bin:${PATH}"
|
||||||
|
|
||||||
|
# Copy websocket package files
|
||||||
|
COPY website/websocket/package.json website/websocket/bun.lock* ./
|
||||||
|
COPY website/websocket/tsconfig.json ./
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
RUN bun install
|
||||||
|
|
||||||
|
# Copy websocket source
|
||||||
|
COPY website/websocket/src ./src/
|
||||||
|
|
||||||
|
# Build websocket
|
||||||
|
RUN bun build src/main.ts --outdir dist --target bun
|
||||||
|
|
||||||
|
FROM base-node AS production-main
|
||||||
|
|
||||||
|
# Copy built application from build stage
|
||||||
|
COPY --from=build-main --chown=node:node /app/build ./build
|
||||||
|
COPY --from=build-main --chown=node:node /app/node_modules ./node_modules
|
||||||
|
COPY --from=build-main --chown=node:node /app/package.json ./package.json
|
||||||
|
|
||||||
|
# Copy cluster server
|
||||||
|
COPY cluster-server.js ./cluster-server.js
|
||||||
|
|
||||||
|
USER node
|
||||||
|
EXPOSE 3000
|
||||||
|
|
||||||
|
# Use cluster server for better performance
|
||||||
|
CMD ["node", "cluster-server.js"]
|
||||||
|
|
||||||
|
FROM base-node AS production-websocket
|
||||||
|
WORKDIR /websocket
|
||||||
|
|
||||||
|
# Install Bun in production stage
|
||||||
|
RUN curl -fsSL https://bun.sh/install | bash
|
||||||
|
ENV PATH="/root/.bun/bin:${PATH}"
|
||||||
|
|
||||||
|
# Copy built websocket from build stage
|
||||||
|
COPY --from=build-websocket /websocket/node_modules ./node_modules
|
||||||
|
COPY --from=build-websocket /websocket/dist ./dist
|
||||||
|
COPY --from=build-websocket /websocket/package.json ./package.json
|
||||||
|
|
||||||
|
USER node
|
||||||
|
EXPOSE 8080
|
||||||
|
CMD ["bun", "run", "dist/main.js"]
|
||||||
318
README.md
Normal file
318
README.md
Normal file
|
|
@ -0,0 +1,318 @@
|
||||||
|
# Rugplay
|
||||||
|
|
||||||
|
A realistic cryptocurrency trading simulation platform built with SvelteKit and Svelte 5, focusing on decentralized exchange mechanics and the inherent risks of "rug pulls."
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Coin Creation**: Create simulated cryptocurrencies with customizable parameters
|
||||||
|
- **Liquidity Pools**: AMM-based trading with realistic price mechanics and slippage
|
||||||
|
- **Trading**: Buy/sell coins against base currency (*BUSS) with supply/demand pricing
|
||||||
|
- **Rug Pull Simulation**: Experience realistic market crashes when large holders sell
|
||||||
|
- **Portfolio Tracking**: Monitor holdings and transaction history
|
||||||
|
- **Real-time Updates**: WebSocket-powered live price feeds and trade notifications
|
||||||
|
- **Prediction Markets**: "Hopium" betting system for market predictions
|
||||||
|
- **Gambling**: Coinflip and slots games
|
||||||
|
- **Leaderboards**: Track top performers
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
- **Frontend**: SvelteKit + Svelte 5 with runes
|
||||||
|
- **Backend**: Node.js API routes
|
||||||
|
- **WebSocket**: Bun-based real-time server
|
||||||
|
- **Database**: PostgreSQL with Drizzle ORM
|
||||||
|
- **Cache**: Redis for real-time messaging
|
||||||
|
- **Storage**: AWS S3/Backblaze B2 compatible
|
||||||
|
- **Auth**: Better Auth with Google OAuth
|
||||||
|
- **UI**: ShadCN UI components + Tailwind CSS
|
||||||
|
|
||||||
|
## Pre-Deployment Checklist
|
||||||
|
|
||||||
|
Before running on your Linux machine, ensure:
|
||||||
|
|
||||||
|
- [ ] **Docker & Docker Compose installed**: `docker --version && docker compose version`
|
||||||
|
- [ ] **Ports available**: 3002, 8081, 5432, 6379 are not in use
|
||||||
|
- [ ] **Git access**: Repository is cloned with all files
|
||||||
|
- [ ] **Environment configured**: `website/.env` file created from `website/.env.example`
|
||||||
|
- [ ] **Permissions set**: `chmod +x build.sh` executed
|
||||||
|
- [ ] **Minimum system requirements**: 2GB RAM, 10GB disk space
|
||||||
|
|
||||||
|
### Essential Environment Variables
|
||||||
|
|
||||||
|
The following must be configured in `website/.env`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Required for database connection
|
||||||
|
DATABASE_URL=postgresql://rugplay_user:your_secure_password@postgres:5432/rugplay
|
||||||
|
POSTGRES_USER=rugplay_user
|
||||||
|
POSTGRES_PASSWORD=your_secure_password
|
||||||
|
POSTGRES_DB=rugplay
|
||||||
|
|
||||||
|
# Required for real-time features
|
||||||
|
REDIS_URL=redis://redis:6379
|
||||||
|
|
||||||
|
# Required for authentication (generate a 32+ character random string)
|
||||||
|
PRIVATE_BETTER_AUTH_SECRET=your_super_secret_auth_key_minimum_32_characters
|
||||||
|
PUBLIC_BETTER_AUTH_URL=http://localhost:3002
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
- Docker & Docker Compose
|
||||||
|
- Git
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
1. **Clone the repository**:
|
||||||
|
```bash
|
||||||
|
git clone <repository-url>
|
||||||
|
cd rugplay
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Configure environment**:
|
||||||
|
```bash
|
||||||
|
cp website/.env.example website/.env
|
||||||
|
# Edit website/.env with your actual values (see Configuration section)
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Deploy**:
|
||||||
|
```bash
|
||||||
|
chmod +x build.sh
|
||||||
|
./build.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
The application will be available at:
|
||||||
|
- **Main App**: http://localhost:3002
|
||||||
|
- **WebSocket**: http://localhost:8081
|
||||||
|
- **Database**: localhost:5432
|
||||||
|
- **Redis**: localhost:6379
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
### Required Environment Variables
|
||||||
|
|
||||||
|
Copy `website/.env.example` to `website/.env` and configure:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Database Configuration
|
||||||
|
DATABASE_URL=postgresql://rugplay_user:your_secure_password@postgres:5432/rugplay
|
||||||
|
POSTGRES_USER=rugplay_user
|
||||||
|
POSTGRES_PASSWORD=your_secure_password
|
||||||
|
POSTGRES_DB=rugplay
|
||||||
|
|
||||||
|
# Redis Configuration
|
||||||
|
REDIS_URL=redis://redis:6379
|
||||||
|
|
||||||
|
# Authentication
|
||||||
|
PRIVATE_BETTER_AUTH_SECRET=your_super_secret_auth_key_minimum_32_chars
|
||||||
|
PUBLIC_BETTER_AUTH_URL=http://localhost:3002
|
||||||
|
```
|
||||||
|
|
||||||
|
### Optional Environment Variables
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Google OAuth (for social login)
|
||||||
|
GOOGLE_CLIENT_ID=your_google_client_id
|
||||||
|
GOOGLE_CLIENT_SECRET=your_google_client_secret
|
||||||
|
|
||||||
|
# AWS S3/Backblaze B2 Storage (for file uploads)
|
||||||
|
PRIVATE_B2_KEY_ID=your_b2_key_id
|
||||||
|
PRIVATE_B2_APP_KEY=your_b2_app_key
|
||||||
|
PUBLIC_B2_BUCKET=your_bucket_name
|
||||||
|
PUBLIC_B2_ENDPOINT=https://s3.us-west-002.backblazeb2.com
|
||||||
|
PUBLIC_B2_REGION=us-west-002
|
||||||
|
|
||||||
|
# OpenAI (for AI features)
|
||||||
|
OPENAI_API_KEY=your_openai_api_key
|
||||||
|
|
||||||
|
# Application Settings
|
||||||
|
NODE_ENV=production
|
||||||
|
PORT=3000
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
### Services
|
||||||
|
|
||||||
|
- **app**: Main SvelteKit application (port 3002)
|
||||||
|
- **websocket**: Bun-based WebSocket server for real-time features (port 8081)
|
||||||
|
- **postgres**: PostgreSQL database with pgvector extension
|
||||||
|
- **redis**: Redis for caching and pub/sub messaging
|
||||||
|
|
||||||
|
### Key Components
|
||||||
|
|
||||||
|
- **AMM Trading**: Automated Market Maker with constant product formula (x*y=k)
|
||||||
|
- **Real-time Price Updates**: WebSocket broadcasting for live price feeds
|
||||||
|
- **Comment System**: Real-time coin discussions
|
||||||
|
- **Prediction Markets**: AI-resolved betting on future events
|
||||||
|
- **Portfolio Management**: Track holdings across multiple coins
|
||||||
|
- **Admin Panel**: Manage promo codes and system settings
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
### Local Development
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Start only database and redis
|
||||||
|
docker compose up -d postgres redis
|
||||||
|
|
||||||
|
# Install dependencies and run main app
|
||||||
|
cd website
|
||||||
|
npm install
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
# Run websocket server (in separate terminal)
|
||||||
|
cd website/websocket
|
||||||
|
bun install
|
||||||
|
bun run src/main.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
### Database Management
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run migrations
|
||||||
|
docker compose exec app npm run db:migrate
|
||||||
|
|
||||||
|
# Open Drizzle Studio
|
||||||
|
docker compose exec app npm run db:studio
|
||||||
|
|
||||||
|
# Push schema changes
|
||||||
|
docker compose exec app npm run db:push
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deployment Commands
|
||||||
|
|
||||||
|
### Manual Deployment
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build and start all services
|
||||||
|
docker compose build --no-cache
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
# Check service status
|
||||||
|
docker compose ps
|
||||||
|
|
||||||
|
# View logs
|
||||||
|
docker compose logs -f
|
||||||
|
|
||||||
|
# View specific service logs
|
||||||
|
docker compose logs -f app
|
||||||
|
docker compose logs -f websocket
|
||||||
|
```
|
||||||
|
|
||||||
|
### Maintenance
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Restart all services
|
||||||
|
docker compose restart
|
||||||
|
|
||||||
|
# Stop services
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
# Clean rebuild (removes volumes - WARNING: deletes data)
|
||||||
|
docker compose down --volumes --remove-orphans
|
||||||
|
docker compose build --no-cache
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
# Update and redeploy
|
||||||
|
git pull
|
||||||
|
./build.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Common Issues
|
||||||
|
|
||||||
|
1. **Port conflicts**: Ensure ports 3002, 8081, 5432, 6379 are available
|
||||||
|
2. **Database connection**: Check DATABASE_URL format and postgres service status
|
||||||
|
3. **WebSocket issues**: Verify REDIS_URL and redis service connectivity
|
||||||
|
4. **File uploads**: Confirm S3/B2 credentials and bucket permissions
|
||||||
|
|
||||||
|
### Health Checks
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check all container status
|
||||||
|
docker compose ps
|
||||||
|
|
||||||
|
# Test main app
|
||||||
|
curl http://localhost:3002
|
||||||
|
|
||||||
|
# Test websocket health
|
||||||
|
curl http://localhost:8081/health
|
||||||
|
|
||||||
|
# Check database connectivity
|
||||||
|
docker compose exec postgres pg_isready -U rugplay_user
|
||||||
|
|
||||||
|
# Check redis connectivity
|
||||||
|
docker compose exec redis redis-cli ping
|
||||||
|
```
|
||||||
|
|
||||||
|
### Log Analysis
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Follow all logs
|
||||||
|
docker compose logs -f
|
||||||
|
|
||||||
|
# Application errors
|
||||||
|
docker compose logs app | grep -i error
|
||||||
|
|
||||||
|
# WebSocket logs
|
||||||
|
docker compose logs websocket
|
||||||
|
|
||||||
|
# Database logs
|
||||||
|
docker compose logs postgres
|
||||||
|
```
|
||||||
|
|
||||||
|
## Production Considerations
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- [ ] Change all default passwords and secrets
|
||||||
|
- [ ] Use strong PRIVATE_BETTER_AUTH_SECRET (minimum 32 characters)
|
||||||
|
- [ ] Configure firewall rules for exposed ports
|
||||||
|
- [ ] Use HTTPS in production (reverse proxy recommended)
|
||||||
|
- [ ] Rotate API keys and database credentials regularly
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
|
||||||
|
- [ ] Configure PostgreSQL for your hardware
|
||||||
|
- [ ] Set up Redis persistence if needed
|
||||||
|
- [ ] Monitor container resource usage
|
||||||
|
- [ ] Configure log rotation
|
||||||
|
- [ ] Set up database connection pooling
|
||||||
|
|
||||||
|
### Monitoring
|
||||||
|
|
||||||
|
- [ ] Set up health check endpoints
|
||||||
|
- [ ] Configure log aggregation
|
||||||
|
- [ ] Monitor database performance
|
||||||
|
- [ ] Track WebSocket connection metrics
|
||||||
|
- [ ] Set up alerts for service failures
|
||||||
|
|
||||||
|
### Backup Strategy
|
||||||
|
|
||||||
|
- [ ] Database backups: `pg_dump` scheduled backups
|
||||||
|
- [ ] Redis persistence: Configure RDB snapshots
|
||||||
|
- [ ] File storage: S3/B2 versioning and backup
|
||||||
|
- [ ] Configuration: Version control for .env files (encrypted)
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
1. Fork the repository
|
||||||
|
2. Create a feature branch
|
||||||
|
3. Make your changes
|
||||||
|
4. Test with Docker locally
|
||||||
|
5. Submit a pull request
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[Add your license here]
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
For issues and questions:
|
||||||
|
- Open GitHub issues for bugs
|
||||||
|
- Check logs first: `docker compose logs -f`
|
||||||
|
- Verify environment configuration
|
||||||
|
- Test with clean rebuild if needed
|
||||||
31
build.sh
Normal file
31
build.sh
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
|
echo "🚀 Starting Rugplay deployment..."
|
||||||
|
|
||||||
|
echo "📥 Pulling latest changes..."
|
||||||
|
git pull
|
||||||
|
|
||||||
|
echo "🔨 Building Docker images..."
|
||||||
|
docker compose build --no-cache
|
||||||
|
|
||||||
|
echo "🛑 Stopping existing containers..."
|
||||||
|
docker compose down --volumes --remove-orphans
|
||||||
|
|
||||||
|
echo "🏗️ Starting containers..."
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
echo "⏳ Waiting for services to start..."
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
echo "🔍 Checking container status..."
|
||||||
|
docker compose ps
|
||||||
|
|
||||||
|
echo "📊 Checking service health..."
|
||||||
|
echo "Main app: http://localhost:3002"
|
||||||
|
echo "WebSocket: http://localhost:8081/health"
|
||||||
|
|
||||||
|
echo "📋 Tailing logs (press Ctrl+C to stop)..."
|
||||||
|
docker compose logs -f
|
||||||
22
cluster-server.js
Normal file
22
cluster-server.js
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
import cluster from 'cluster';
|
||||||
|
import { cpus } from 'os';
|
||||||
|
import { handler } from './build/handler.js';
|
||||||
|
import express from 'express';
|
||||||
|
|
||||||
|
const numCPUs = cpus().length;
|
||||||
|
|
||||||
|
if (cluster.isPrimary) {
|
||||||
|
console.log(`Primary ${process.pid} spawning ${numCPUs} workers…`);
|
||||||
|
for (let i = 0; i < numCPUs; i++) cluster.fork();
|
||||||
|
cluster.on('exit', (w) => {
|
||||||
|
console.warn(`Worker ${w.process.pid} died — restarting…`);
|
||||||
|
cluster.fork();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const app = express();
|
||||||
|
app.use(handler);
|
||||||
|
const port = process.env.PORT || 3000;
|
||||||
|
app.listen(port, () =>
|
||||||
|
console.log(`Worker ${process.pid} listening on ${port}`)
|
||||||
|
);
|
||||||
|
}
|
||||||
54
docker-compose.yml
Normal file
54
docker-compose.yml
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
target: production-main
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
ports:
|
||||||
|
- "3002:3000"
|
||||||
|
env_file:
|
||||||
|
- website/.env
|
||||||
|
depends_on:
|
||||||
|
- websocket
|
||||||
|
- redis
|
||||||
|
- postgres
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
websocket:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
target: production-websocket
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
ports:
|
||||||
|
- "8081:8080"
|
||||||
|
env_file:
|
||||||
|
- website/.env
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: redis:8-alpine
|
||||||
|
volumes:
|
||||||
|
- rugplay_redisdata:/data
|
||||||
|
command: "redis-server --save 60 1"
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
postgres:
|
||||||
|
image: pgvector/pgvector:pg16
|
||||||
|
container_name: rugplay-postgres
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: ${POSTGRES_USER}
|
||||||
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
|
POSTGRES_DB: ${POSTGRES_DB:-rugplay}
|
||||||
|
ports:
|
||||||
|
- "5432:5432"
|
||||||
|
volumes:
|
||||||
|
- rugplay_pgdata:/var/lib/postgresql/data
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
rugplay_pgdata:
|
||||||
|
rugplay_redisdata:
|
||||||
|
|
@ -1,2 +1,29 @@
|
||||||
# Replace with your DB credentials!
|
# Rugplay Environment Configuration
|
||||||
DATABASE_URL="postgres://user:password@host:port/db-name"
|
# Copy this file to .env and fill in your actual values
|
||||||
|
|
||||||
|
# Database Configuration
|
||||||
|
DATABASE_URL=postgresql://username:password@postgres:5432/rugplay
|
||||||
|
POSTGRES_USER=rugplay_user
|
||||||
|
POSTGRES_PASSWORD=your_secure_password_here
|
||||||
|
POSTGRES_DB=rugplay
|
||||||
|
|
||||||
|
# Redis Configuration
|
||||||
|
REDIS_URL=redis://redis:6379
|
||||||
|
|
||||||
|
# Authentication
|
||||||
|
PRIVATE_BETTER_AUTH_SECRET=your_super_secret_auth_key_here
|
||||||
|
PUBLIC_BETTER_AUTH_URL=http://localhost:3002
|
||||||
|
|
||||||
|
# Google OAuth (optional - for social login)
|
||||||
|
GOOGLE_CLIENT_ID=your_google_client_id
|
||||||
|
GOOGLE_CLIENT_SECRET=your_google_client_secret
|
||||||
|
|
||||||
|
# AWS S3/B2 Storage (for file uploads)
|
||||||
|
PRIVATE_B2_KEY_ID=your_b2_key_id
|
||||||
|
PRIVATE_B2_APP_KEY=your_b2_app_key
|
||||||
|
PUBLIC_B2_BUCKET=your_bucket_name
|
||||||
|
PUBLIC_B2_ENDPOINT=https://s3.us-west-002.backblazeb2.com
|
||||||
|
PUBLIC_B2_REGION=us-west-002
|
||||||
|
|
||||||
|
# OpenAI (for AI features)
|
||||||
|
OPENROUTER_API_KEY=your_openrouter_api_key
|
||||||
Reference in a new issue