- vừa được xem lúc

Xây dựng Nodejs-ExpressJS với mysql sử dụng docker và docker-compose

0 0 11

Người đăng: zzZZzzZZzzZZzzZZzzZZzzZZzzZZzzZZzzZZzzZZzzZZzzZZzz

Theo Viblo Asia

Hí anh em. Bài viết này là kết quả của việc học tập sử dụng Docker sau bao ngày nghịch ngợm của mình.

Nếu anh em chưa biết docker là gì có thể xem qua một số bài viết để hiểu thêm docker nhé.

Tìm hiểu về Docker

Link Docs

Hiểu sơ sơ thì nó là cái giúp chúng ta rút ngắn thời gian để cài đặt và cấu hình dự án

Cài đặt

Cài đặt docker và docker-compose

Trang chủ của docker có nhiều sự lựa chọn cho chúng ta sử dụng và vì mình sử dụng ubuntu lên mình chỉ cài đặt câu lệnh thôi nhé. Cùng chạy câu lệnh dưới đây hoặc có thể vào trang chủ cài đặt trực tiếp để lấy bản mới nhất nhé !

sudo apt-get remove docker docker-engine docker.io containerd runc // xóa docker phiên bản cũ

Cài đặt kho lưu trữ cho docker

sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release

Cài đặt docker và docker-compose

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

=> Đấy lấy từ docs đấy. anh em vào docs đọc cho tăng khả năng dịch ing lịch nhé 😄.

Cài đặt và setup ExpressJS và mysql package

Đây là kết quả sau khi chúng ta cài đặt nhé. image.png

  • Dockerfile là dùng để tạo ra image nhé
  • docker-compose.yml là file giúp chúng ta định nghĩa và chạy chương trình
  • Ngoài ra mình có cài một số package như : Sequelize, sequelize-cli, dotenv, nodemon, mysql2.

Cài đặt ExpressJS

tạo thư mục myapp và truy cập vào file đó chạy câu lệnh.

npm init
npm install express
npx express-generator

sau khi chạy thành công thì chúng ta sẽ được thư mục có dạng như thế này nè . image.png

Cài đặt package liên quan

Tiếp tục cài đặt các package nhé.

npm install --save sequelize
npm install --save mysql2
npm install --save-dev sequelize-cli
npx sequelize-cli init
npm install --save nodemon
npm install --save dotenv

Sequelize là package giúp chúng ta thao tác với cơ sở dữ liệu một cách nhanh chóng thuận tiện và dễ sử dụng, ngoài ra chúng còn có hỗ trợ kết nối với rất nhiều cơ sở dữ liệu nếu bạn thích có thể đọc qua docs nhé.

Mysql là package hỗ trợ kết nối tới mysql nhé.

Sequelize-cli giúp chúng ta tạo model, migrate, seed , giống như Laravel ý.

dotenv: Giúp chúng ta tạo ra biến môi trường và sử dụng nó ở mọi nơi. tạo file .env để sử dụng thôi nhé

nodemon: package này sẽ lắng nghe sự thay đổi của file và cập nhập chúng thay vì phải chạy lại ứng dụng bằng cơm .

chạy bằng cơm nghĩa là nếu bạn thay đổi file nào đó thì sẽ phải chạy server thì mới có sửa đổi mới nhất.

thêm đoạn dưới đây vào package.json nhé

 "scripts": { "start": "nodemon --inspect ./bin/www" },

Mở file routes/index.js:

var express = require('express');
var router = express.Router(); /* GET home page. */
router.get('/', function(req, res, next) { res.send('le dac khoan 3');
}); module.exports = router; 

và kết quả cuối tùng sẽ là như thế này nè:

image.png

Cài đặt và cấu hình với docker nhé.

Ở phần này chúng ta cùng tìm hiểu qua dockerfiledocker-compose.yml.

  • dockerfile giúp chúng ta tạo image sau đó chạy
  • docker-compose.yml được dùng để các service chạy cùng một môi trường đó (cụ thể là web và mysql)

Tạo dockerfile

tạo file docker ở trong thư mục myapp nhé.

FROM node:14
WORKDIR /app
COPY package.json .
COPY . .
RUN npm install CMD npm start
  • FROM là mình sẽ pull image của node có sẵn trên hub (cái này tuỳ thuộc bạn dùng phiên bản node nào nhé), bạn có thể tham khoả node ở đây.
  • WORKDIR là tạo thư mục để chúng ta thiết lập các câu lệnh.
  • COPY là chúng ta copy những thư mục vào thư mục ảo trong docker
  • RUN câu lệnh này sẽ chạy trong lúc build image
  • CMD là câu lệnh chạy sau khi build image thành công

Bạn có thể loại bỏ một số file không mong muốn khi chạy tiến trình copy thư mục bằng cách tạo file .dockerignore

Tạo docker-compose.yml

version: '3.7' services: mysql: platform: linux/x86_64 image: mysql:5.7 container_name: mysql-nodejs restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: nodejs ports: - "3308:3306" volumes: # Mysql - db:/var/lib/mysql networks: - nodejss web: depends_on: - mysql build: ./myapp ports: - "3000:3000" volumes: - ./myapp/:/app restart: unless-stopped container_name: nodejs stdin_open: true tty: true networks: - nodejss volumes: db: networks: nodejss:
  • services được hiểu là các container mà bạn muốn cài đặt và ở đây mình khai báo mysql và web
  • image chỉ ra image bạn muốn cài đặt
  • container_name: tên con tainer
  • platform: do dùng chip ARM nên bắt buộc phải dùng thì mới pull được image mysql
  • volumes: giúp chúng ta lắng nghe sự thay đổi local để thay đổi docker.
  • ports: mapping port docker và local
  • depends_on : thiết lập sự phụ thuộc giữa các container với nhau
  • build: chỉ ra chúng sẽ đi tìm file dockerfile để thực thi Các bạn có thể tham khảo docs của docker-compose để tham khảo nhiều option nhé :v

Giờ chạy terminal để xem nào anh em

docker-compose up

image.png Cùng xem kết quả nào. image.png

Tạo model migrate

để kiểm tra mysql đã hoạt động được chưa bằng cách tạo model và migrate nhé.

  1. Mở file config/config.json
{ "development": { "username": "root", "password": "123456", "database": "nodejs", "host": "mysql", "dialect": "mysql", "port": "3306" }, "test": { "username": "root", "password": null, "database": "database_test", "host": "127.0.0.1", "dialect": "mysql", "port": "3307" }, "production": { "username": "root", "password": null, "database": "database_production", "host": "127.0.0.1", "dialect": "mysql", "port": "3307" }
}

Ở đây có 3 môi trường và môi trường mình sử dụng là development, chúng ta chỉ cần điền những gì chúng ta khai báo mysql ở docker-compose.yml. 2. Tạo model và migrate

docker-exec -it nodejs sh
npx sequelize-cli model:generate --name Student --attributes firstName:string,lastName:string,email:string
npx sequelize-cli db:migrate
  • docker-exec: Đây là câu lệnh chạy command trong container
  • npx sequelize-cli model:genarate dùng để tạo model migrate
  • npx sequelize-cli db:migrate dùng để chạy các file ở trên. Và kết quả là : image.png

Lời kết

  • Bài viết này là quá trình mình tìm hiểu docker và cũng là sản phẩm đầu tay do mình tự nghịch có thể còn nhiều sai sót
  • Cảm ơn mọi người đã xem hết bài viết này của mình, mình luôn đón nhận những comment từ các bạn :3
  • link github.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Được rồi, đi thôi!!! VPS free nè (^.^) [P1]

Bạn là sinh viên, bạn là lập trình viên khó khăn về mặt tài chính, bạn không có xiền thuê VPS, được rồi hãy đến đây!!!. Hôm nay mình sẽ hướng dẫn cho các bạn cách tạo VPS free bằng Github Workflow & N

0 0 45

- vừa được xem lúc

[Linux] Iptables trong hệ thống Linux

IPtables là ứng dụng tường lửa miễn phí trong Linux, cho phép thiết lập các quy tắc riêng để kiểm soát truy cập, tăng tính bảo mật. Khi sử dụng máy chủ, tường lửa là một trong những công cụ quan trọng

0 0 34

- vừa được xem lúc

Từ bug format sai chuỗi số khi nhập bằng bàn phím tiếng Nhật, tới IME và các sự kiện composition trong JS

"Tự nhiên tui thấy hiện tượng lạ”. Khi nhập liệu một chuỗi các kí tự vào thẻ input, thông thường chúng ta nhập thế nào thì hiển thị thế ấy, không làm phép biến đổi gì cả.

0 0 36

- vừa được xem lúc

Tạo Rijndael S-box sử dụng trong AES

I. Rijndael S-box là gì .

0 0 25

- vừa được xem lúc

Giới thiệu về lỗ hổng tràn bộ đệm (Buffer Overflow) và cách khai thác

Khái niệm. Lỗ hổng tràn bộ đệm (Buffer Overflow) là lỗ hổng trong lập trình, cho phép dữ liệu được ghi vào một buffer có thể tràn ra ngoài buffer đó, ghi đè lên dữ liệu khác và dẫn tới hoạt động bất t

0 0 32

- vừa được xem lúc

Share Libraries Hijacking trên Linux

1. Cách thức hoạt động của Share Libraries.

0 0 17