Hướng dẫn tạo một DB server databasse để Demo hoặc làm môi trường lab dạy SQL trong 2 phút

Mình có dạy cho 1 số bạn học làm ứng dụng Python, và có bài học về SQL. Tuy nhiên học viên của mình có một số bạn khá nhỏ, vẫn còn đang THCS hoặc THPT, nên khá băn khoăn về việc làm sao cho các bạn có môi trường thực hành. Nếu yêu cầu các bạn cài đặt vào máy thì cũng khá khó khăn, chưa kể máy các bạn dùng có thể không đáp ứng cấu hình. Mình muốn có 1 giải pháp để truy cập vào browser là có Workbench để chạy lệnh SQL. Và đây là kết quả như mình mong đợi:

Mình host server trên Vultr, và dĩ nhiên server này không chỉ phục vụ mỗi công việc dạy SQL, mà chạy cả tỉ tác vụ khác của mình ( :D ) nên mình sử dụng Docker compose để:

  • Chạy MySQL server

  • Chạy DBeaver để tạo Workbench

Mình sử dụng nginx để làm proxy cho ứng dụng.

Domain thì mình quản lý trên Cloudflare DNS, đã có sẵn SSL cert miễn phí. Nếu bạn quản lý ở nơi khác, chẳng hạn Amazon Route 53 thì có thể sử dụng ACM để có cert SSL, cũng miễn phí luôn.

Đây là file docker-compose mình đã sử dụng:

 version: '3.8'
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpwd
      MYSQL_DATABASE: dev
      MYSQL_USER: dev_user
      MYSQL_PASSWORD: devpwd
      MYSQL_ALLOW_PUBLIC_KEY_RETRIEVAL: "true"
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - app-network

  dbeaver:
    image: dbeaver/cloudbeaver:latest
    environment:
      CB_ADMIN_NAME: "cbadmin"
      CB_ADMIN_PASSWORD: "cbadminpwd1A"
    expose:
      - 8978
    volumes:
      - dbeaver_workspace:/opt/cloudbeaver/workspace
    networks:
      - app-network

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  mysql_data:
  dbeaver_workspace:

Ở đây mình đang cài đặt MySQL, tuy nhiên nếu bạn thích thì có thể sửa docker compose file để cài thêm MongoDB và PostgreSQL luôn.

file nginx.conf:

server {
    listen 80;
    server_name vultr-server.devopslearning.work;

    location / {
        proxy_pass http://dbeaver:8978;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
        client_max_body_size 100m;
    }

    location /api/ {
        proxy_pass http://dbeaver:8978/api/;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location /ws/ {
        proxy_pass http://dbeaver:8978/ws/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location /static/ {
        proxy_pass http://dbeaver:8978/static/;
    }
}

Lệnh chạy:

docker-compose up -d

Sau đó bạn truy cập vào, thực hiện setup DBeaver, rồi đăng nhập DBeaver, rồi thực hiện tạo connection mới và truy vấn dữ liệu:

Ngoài hỗ trợ tạo môi trường lab cho học viên, thì giải pháp này cũng có thể được sử dụng trong các trường hợp Demo sản phẩm, nếu bạn thấy hữu ích thì có thể tham khảo!

0
Subscribe to my newsletter

Read articles from Hải Yến Trịnh directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Hải Yến Trịnh
Hải Yến Trịnh