Merge pull request #5 from colanode/server-docker-setup

Add containerization setup with Docker and docker-compose
This commit is contained in:
Hakan Shehu
2024-11-16 17:51:24 +01:00
committed by GitHub
4 changed files with 135 additions and 23 deletions

View File

@@ -1,34 +1,32 @@
# Build stage
FROM node:20-alpine as builder
WORKDIR /app
COPY package*.json ./
COPY tsconfig.json ./
# Install dependencies
RUN npm ci
COPY src/ ./src/
RUN npm run build
# Production stage
FROM node:20-alpine
WORKDIR /app
# Copy package files
COPY package*.json ./
# Copy root workspace files
COPY ../../package.json ../../package-lock.json ./
# Install only production dependencies
RUN npm ci --only=production
# Copy all package.json files first
COPY ../../packages/core/package.json packages/core/package.json
COPY ../../packages/crdt/package.json packages/crdt/package.json
COPY ../../apps/server/package.json apps/server/package.json
# Copy built JavaScript files from builder stage
COPY --from=builder /app/dist ./dist
# Install dependencies
RUN npm ci
# Copy source files
COPY ../../packages/core packages/core
COPY ../../packages/crdt packages/crdt
COPY ../../apps/server apps/server
COPY ../../tsconfig.base.json ./
# Build packages
RUN npm run build -w @colanode/core && \
npm run build -w @colanode/crdt && \
npm run build -w @colanode/server && \
npm prune --production
ENV NODE_ENV=production
EXPOSE 3000
CMD ["node", "dist/index.js"]
CMD ["node", "apps/server/dist/index.js"]

105
docker-compose.yaml Normal file
View File

@@ -0,0 +1,105 @@
version: '3.8'
services:
postgres:
image: postgres:15
container_name: colanode_postgres
restart: always
environment:
POSTGRES_USER: colanode_user
POSTGRES_PASSWORD: strongpassword
POSTGRES_DB: colanode_db
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- colanode_network
redis:
image: redis:7
container_name: colanode_redis
restart: always
command: ["redis-server", "--requirepass", "strongredispassword"]
volumes:
- redis_data:/data
ports:
- "6379:6379"
networks:
- colanode_network
minio:
image: minio/minio
container_name: colanode_minio
restart: always
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadminpassword
volumes:
- minio_data:/data
ports:
- "9000:9000"
command: server /data
networks:
- colanode_network
server:
build:
context: .
dockerfile: apps/server/Dockerfile
image: colanode_server
container_name: colanode_server
restart: always
depends_on:
- postgres
- redis
- minio
environment:
# Server Configuration
NODE_ENV: production
PORT: 3000
# Database Configuration
DATABASE_URL: postgres://colanode_user:strongpassword@postgres:5432/colanode_db
# Redis Configuration
REDIS_URL: redis://:strongredispassword@redis:6379/0
REDIS_HOST: redis
REDIS_PASSWORD: strongredispassword
REDIS_PORT: 6379
REDIS_DB: 0
# Redis Channel Configuration (updated)
REDIS_CHANGES_CHANNEL_NAME: colanode_changes
# MinIO (S3-Compatible Storage) Configuration
AVATARS_STORAGE_ENDPOINT: http://minio:9000
AVATARS_STORAGE_BUCKET_NAME: colanode-avatars
AVATARS_STORAGE_REGION: us-east-1
AVATARS_STORAGE_ACCESS_KEY: minioadmin
AVATARS_STORAGE_SECRET_KEY: minioadminpassword
FILES_STORAGE_ENDPOINT: http://minio:9000
FILES_STORAGE_BUCKET_NAME: colanode-files
FILES_STORAGE_REGION: us-east-1
FILES_STORAGE_ACCESS_KEY: minioadmin
FILES_STORAGE_SECRET_KEY: minioadminpassword
SMTP_HOST: smtp.example.com
SMTP_PORT: 587
SMTP_USER: user@example.com
SMTP_PASS: passsword
EMAIL_FROM: user@example.com
ports:
- "3000:3000"
networks:
- colanode_network
volumes:
postgres_data:
redis_data:
minio_data:
networks:
colanode_network:
driver: bridge

8
package-lock.json generated
View File

@@ -6189,6 +6189,13 @@
"@types/node": "*"
}
},
"node_modules/@types/diff": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@types/diff/-/diff-6.0.0.tgz",
"integrity": "sha512-dhVCYGv3ZSbzmQaBSagrv1WJ6rXCdkyTcDyoNu1MD8JohI7pR7k8wdZEm+mvdxRKXyHVwckFzWU1vJc+Z29MlA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/estree": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
@@ -18279,6 +18286,7 @@
"zod": "^3.23.8"
},
"devDependencies": {
"@types/diff": "^6.0.0",
"eslint": "^8.57.1",
"prettier": "^3.3.3",
"typescript": "^5.6.3",

View File

@@ -18,6 +18,7 @@
},
"author": "Hakan Shehu",
"devDependencies": {
"@types/diff": "^6.0.0",
"eslint": "^8.57.1",
"prettier": "^3.3.3",
"typescript": "^5.6.3",