mirror of
https://github.com/colanode/colanode.git
synced 2025-12-29 00:25:03 +01:00
Merge pull request #5 from colanode/server-docker-setup
Add containerization setup with Docker and docker-compose
This commit is contained in:
@@ -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
105
docker-compose.yaml
Normal 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
8
package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user