Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
node_modules/
.env
.env.local
npm-debug.log*
*.log
.DS_Store
coverage/
package-lock.json
.github/
tests/
src/emails/templates/
50 changes: 35 additions & 15 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,27 +1,47 @@
# ALL CREDIT open by sayed046571@gmail.com except brevo.
NODE_ENV=production
PORT=10000
MONGODB_URI=mongodb+srv://user:pass@cluster.mongodb.net/hoterstellar

NODE_ENV=development
PORT=5000
MONGODB_URI=mongodb://localhost:27017/hoterstellar
JWT_SECRET=please-change-me-to-a-long-random-string-32+chars
JWT_ACCESS_EXPIRES_IN=15m
# Admin JWT secrets
ADMIN_JWT_SECRET=your-admin-secret-at-least-32-chars
ADMIN_ACCESS_TOKEN_EXPIRES_IN=15m

# User JWT secrets
USER_JWT_SECRET=your-user-secret-at-least-32-chars
USER_ACCESS_TOKEN_EXPIRES_IN=15m

# Refresh token cookie names
ADMIN_REFRESH_COOKIE_NAME=admin_refresh_token
USER_REFRESH_COOKIE_NAME=user_refresh_token
CORS_ORIGINS=http://localhost:3000,http://localhost:5173

UPSTASH_REDIS_REST_URL=https://your-upstash-rest-url.upstash.io
UPSTASH_REDIS_REST_TOKEN=your-upstash-rest-token
UPSTASH_REDIS_NATIVE_URL=redis://default:your-password@your-upstash-redis-host:6379
# CORS
CORS_ORIGINS=https://hoterstellar.com,https://admin.hoterstellar.com
CLIENT_PUBLIC_URL=https://hoterstellar.com
CLIENT_DASHBOARD_URL=https://admin.hoterstellar.com

# Upstash Redis
UPSTASH_REDIS_REST_URL=https://your-db.upstash.io
UPSTASH_REDIS_REST_TOKEN=your-rest-token
UPSTASH_REDIS_NATIVE_URL=rediss://default:pass@your-db.upstash.io:6379

# Brevo Email
BREVO_API_KEY=your-brevo-api-key
BREVO_SENDER_EMAIL=no-reply@hoterstellar.com
BREVO_SENDER_NAME=Hoterstellar
ADMIN_NOTIFICATION_EMAILS=admin@hoterstellar.com

IMAGEKIT_PUBLIC_KEY=your-imagekit-public-key
IMAGEKIT_PRIVATE_KEY=your-imagekit-private-key
# ImageKit
IMAGEKIT_PUBLIC_KEY=your-public-key
IMAGEKIT_PRIVATE_KEY=your-private-key
IMAGEKIT_URL_ENDPOINT=https://ik.imagekit.io/your-id

RECAPTCHA_SECRET_KEY=your-recaptcha-secret
RECAPTCHA_SITE_KEY=your-recaptcha-site-key
# Google reCAPTCHA
RECAPTCHA_SECRET_KEY=your-secret-key
RECAPTCHA_SITE_KEY=your-site-key

# Business
BUSINESS_TIMEZONE=Asia/Dhaka

BUSINESS_TIMEZONE=Asia/Dhaka
# Admin Seed
SUPER_ADMIN_EMAIL=superadmin@hoterstellar.com
SUPER_ADMIN_PASSWORD=your-strong-password
25 changes: 25 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
FROM node:22-alpine

WORKDIR /app

# Copy package files
COPY package.json ./

# Install dependencies
RUN npm install --omit=dev

# Copy source code
COPY . .

# Create non-root user
RUN addgroup -g 1001 -S nodejs && \
adduser -S nodejs -u 1001

# Change ownership
RUN chown -R nodejs:nodejs /app

USER nodejs

EXPOSE 10000

CMD ["node", "server.js"]
18 changes: 18 additions & 0 deletions Dockerfile.worker
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
FROM node:22-alpine

WORKDIR /app

COPY package.json ./

RUN npm install --omit=dev

COPY . .

RUN addgroup -g 1001 -S nodejs && \
adduser -S nodejs -u 1001

RUN chown -R nodejs:nodejs /app

USER nodejs

CMD ["node", "worker.js"]
85 changes: 85 additions & 0 deletions render.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
services:
- type: web
name: hoterstellar-api
env: node
plan: starter
buildCommand: npm install
startCommand: node server.js
healthCheckPath: /health
autoDeploy: true
envVars:
- key: NODE_ENV
value: production
- key: PORT
value: 10000
- key: MONGODB_URI
sync: false
- key: ADMIN_JWT_SECRET
sync: false
- key: USER_JWT_SECRET
sync: false
- key: CORS_ORIGINS
sync: false
- key: UPSTASH_REDIS_REST_URL
sync: false
- key: UPSTASH_REDIS_REST_TOKEN
sync: false
- key: UPSTASH_REDIS_NATIVE_URL
sync: false
- key: BREVO_API_KEY
sync: false
- key: BREVO_SENDER_EMAIL
sync: false
- key: BREVO_SENDER_NAME
sync: false
- key: IMAGEKIT_PUBLIC_KEY
sync: false
- key: IMAGEKIT_PRIVATE_KEY
sync: false
- key: IMAGEKIT_URL_ENDPOINT
sync: false
- key: RECAPTCHA_SECRET_KEY
sync: false
- key: RECAPTCHA_SITE_KEY
sync: false
- key: BUSINESS_TIMEZONE
value: Asia/Dhaka
- key: CLIENT_PUBLIC_URL
sync: false
- key: CLIENT_DASHBOARD_URL
sync: false
- key: ADMIN_NOTIFICATION_EMAILS
sync: false

- type: worker
name: hoterstellar-worker
env: node
plan: starter
buildCommand: npm install
startCommand: node worker.js
autoDeploy: true
envVars:
- key: NODE_ENV
value: production
- key: MONGODB_URI
sync: false
- key: UPSTASH_REDIS_REST_URL
sync: false
- key: UPSTASH_REDIS_REST_TOKEN
sync: false
- key: UPSTASH_REDIS_NATIVE_URL
sync: false
- key: BREVO_API_KEY
sync: false
- key: BREVO_SENDER_EMAIL
sync: false
- key: BREVO_SENDER_NAME
sync: false
- key: IMAGEKIT_PUBLIC_KEY
sync: false
- key: IMAGEKIT_PRIVATE_KEY
sync: false
- key: IMAGEKIT_URL_ENDPOINT
sync: false
- key: ADMIN_NOTIFICATION_EMAILS
sync: false
Loading