Chapter 14: Deployment and CI/CD
Chapter 14 of 15
Chapter 14: Deployment and CI/CD
14.1 Deployment Process
CI/CD automates testing and deployment, ensuring reliable releases.
# GitHub Actions CI/CD
# .github/workflows/deploy.yml
name: Deploy to Production
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- run: npm ci
- run: npm test
- run: npm run build
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy to server
run: |
ssh user@server "cd /app && git pull && npm install && pm2 restart app"
14.2 Docker Deployment
# docker-compose.yml
version: '3.8'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
environment:
- REACT_APP_API_URL=http://backend:5000
backend:
build: ./backend
ports:
- "5000:5000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
depends_on:
- db
db:
image: postgres:14
environment:
- POSTGRES_DB=mydb
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
14.3 Environment Management
// .env files
// .env.development
REACT_APP_API_URL=http://localhost:5000
// .env.production
REACT_APP_API_URL=https://api.production.com
// Load based on NODE_ENV
require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` });