Logo
Published on

[MacBook - Development Server] Deploy MongoDB Service (3/4)

Authors

Đi sâu hơn nào!!

Hi anh em dev 👋, tiếp nối phần 2, hôm nay mình sẽ hướng dẫn cách deploy MongoDB service trên MacBook server.

Sau bài viết này, chúng ta sẽ:

  • ✅ Setup MongoDB với Docker
  • ✅ Cấu hình bảo mật cơ bản
  • ✅ Triển khai backup strategy

Docker Compose Setup

Tạo file docker-compose.yml trong thư mục ~/infra:

name: infra

services:
  mongodb:
    image: mongo:latest
    container_name: local-macos-mongodb
    ports:
      - "27017:27017"
    volumes:
      - /private/docker/mongodb/data:/data/db
      - /private/docker/mongodb/config:/data/configdb
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=secretpassword
    deploy:
      resources:
        limits:
          cpus: "1"
          memory: 1G
        reservations:
          cpus: "0.25"
          memory: 512M
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "'db.runCommand(\"ping\").ok'"]
      interval: 30s
      timeout: 10s
      retries: 3
    restart: unless-stopped
    networks:
      - infra-network

networks:
  infra-network:
    driver: bridge

Tạo thư mục cho volumes:

mkdir -p /private/docker/mongodb/{data,config,backups}

Deploy với GitHub Actions

Update file .github/workflows/deploy.yml:

name: Deploy MongoDB
on:
  push:
    branches:
      - deploy

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Cloudflared
        run: |
          curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared
          chmod +x cloudflared
          sudo mv cloudflared /usr/local/bin

      - name: Setup SSH key
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
          chmod 600 ~/.ssh/id_ed25519

      - name: Deploy MongoDB
        run: |
          ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no \
            -o ProxyCommand='cloudflared access ssh --hostname %h' \
            [email protected] "cd ~/infra && docker-compose up -d"

  notify:
    needs: deploy
    runs-on: ubuntu-latest
    steps:
      - name: Send Telegram Notification
        uses: appleboy/telegram-action@master
        with:
          to: ${{ secrets.TELEGRAM_CHAT_ID }}
          token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
          format: html
          message: |
            ${{ job.status == 'success' && '✅' || '❌' }} <b>Deploy MongoDB ${{ job.status == 'success' && 'thành công' || 'thất bại' }}!</b>
            
            Status: ${{ job.status }}
            Branch: ${{ github.ref_name }}
            Commit: ${{ github.sha }}

Bảo mật MongoDB

1. Tạo User và Database

Kết nối vào MongoDB và tạo user:

use admin
db.createUser({
  user: "appuser",
  pwd: "apppassword",
  roles: [
    { role: "readWrite", db: "yourdb" }
  ]
})

2. Cấu hình Cloudflare Tunnel

Update file ~/.cloudflared/config.yml:

tunnel: <TUNNEL_ID>
credentials-file: ~/.cloudflared/<TUNNEL_ID>.json
ingress:
  - hostname: mongo.your-domain.com
    service: http://localhost:27017
    originRequest:
      noTLSVerify: true
  - service: http_status:404

3. Network Security

Tạo file mongodb.conf:

net:
  bindIp: 127.0.0.1
  port: 27017

security:
  authorization: enabled

operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100

Phần tiếp theo, chúng ta sẽ tìm hiểu cách deploy Node.js application và kết nối với Database MongoDB này 🚀