Hướng dẫn deploy Express.js lên Vercel

Hướng dẫn deploy Express.js lên Vercel
938 4 tháng trước

Tại sao lại cần deploy Express.js?

  1. Bạn là một developer backend (Node.js)? Bạn không biết làm thế nào để show dự án?
  2. Bạn muốn tìm một nơi tạm thời để lưu trữ dự án, thử nghiệm một src code?
  3. Bạn đang làm một dự án để đi xin việc, nhưng bạn chưa biết cách deploy?

Vercel! Một giải pháp khá là… Tạm được. Nó cung cấp cho chúng ta một môi trường, có thể deploy hầu hết các app nodejs lên đó và tặng bạn một database hoàn chỉnh! Tuy nhiên cần phải lưu ý:

  • Nó chỉ cho bạn tạo một database duy nhất dùng cho toàn bộ các dự án của bạn.
  • Nó chỉ limit cho bạn 5gb db free.
  • Nó chậmmmm cực kỳ.

Vì vậy đừng suy nghĩ tới việc dùng nó mãi mãi để duy trì một app. Hãy suy nghĩ tới việc sử dụng vps riêng thì tốt hơn.

Hướng dẫn deploy với Express

Bước 1: Tạo file vercel.json

Đầu tiên, hãy tạo một file vercel.json như sau:

{
	"version": 2,
	"builds": [
		{
			"src": "./app.js",
			"use": "@vercel/node"
		},
		{
			"src": "public/**",
			"use": "@vercel/static"
		}
	],
	"routes": [
		{
			"src": "/((?!.*\\.\\w+$).*)",
			"dest": "/app.js"
		},
		{
			"src": "/(.+\\.[a-z]+)$",
			"dest": "/public/$1"
		}
	]
}

Bước 2.1: config Express với Sequelize ORM

Trước tiên, hãy chuyển file config/config.json thành config.js và sửa lại đường dẫn file config trong .sequelizerc:

// .sequelizerc
const path = require('path');

module.exports = {
	config: path.resolve('config', 'config.js'),
};

Sau đó file config.js sẽ như sau:

// config/config.js
require('dotenv').config();
const pg = require('pg');
module.exports = {
	development: {
		username: process.env.POSTGRES_USER,
		password: process.env.POSTGRES_PASSWORD,
		database: process.env.POSTGRES_DATABASE,
		host: process.env.POSTGRES_HOST,
		dialect: process.env.DB_DIALECT || 'postgres',
		port: process.env.DB_PORT || 5432,
		dialectOptions: {
			ssl: {
				require: true,
			},
		},
		dialectModule: pg,
	},
	test: {
		username: process.env.POSTGRES_USER,
		password: process.env.POSTGRES_PASSWORD,
		database: process.env.POSTGRES_DATABASE,
		host: process.env.POSTGRES_HOST,
		dialect: process.env.DB_DIALECT || 'postgres',
		port: process.env.DB_PORT || 5432,
		dialectOptions: {
			ssl: {
				require: true,
			},
		},
		dialectModule: pg,
	},
	production: {
		username: process.env.POSTGRES_USER,
		password: process.env.POSTGRES_PASSWORD,
		database: process.env.POSTGRES_DATABASE,
		host: process.env.POSTGRES_HOST,
		dialect: process.env.DB_DIALECT || 'postgres',
		port: process.env.DB_PORT || 5432,
		dialectOptions: {
			ssl: {
				require: true,
			},
		},
		dialectModule: pg,
	},
};

Sửa một chút phần scripts trong package.json như sau:

{
	"scripts": {
		"dev": "nodemon ./bin/www",
		"start": "node ./bin/www",
		"postinstall": "npx sequelize-cli db:migrate",
		"build": "npm run postinstall && npm run vercel-build"
	}
}

Bước 2.2: config Express với Prisma ORM

Vô cùng đơn giản, đơn giản hơn sequelize rất nhiều!

Chúng ta hãy sửa file package.json như sau:

{
	"scripts": {
		"postinstall": "npx prisma generate",
		"build": "npm run postinstall && npm run vercel-build"
	}
}

Postinstall là gì? tại sao phải thêm nó?

Rất đơn giản, postinstall trong npm là một script chạy sau khi npm install hoàn tất. Trong trường hợp này, nó đang dùng để migrate database.

Vercel có một cơ chế build mặc định, mình ghi đè nó bằng cách sử dụng thêm script build.

Bước 3: Khởi tạo database trong Vercel

Truy cập vào đường dẫn này: https://vercel.com/[username]/~/stores

Trong đó: usernameusername Vercel của bạn!

Sau khi đã khởi tạp database thành công,

Bước 4: Đăng nhập và push code lên Vercel

  1. Đầu tiên, hãy cài đặt vercel vào máy(Nếu bạn đã làm bước này, hãy bỏ qua):

npm i -g vercel@latest

  1. Login vào vercel(Nếu bạn đã làm bước này, hãy bỏ qua):
vercel login
  1. Push code lên vercel(Nếu bạn đã làm bước này, hãy bỏ qua):
vercel --prod

Liên kết database với dự án

Truy cập vào đường dẫn này: https://vercel.com/[username]/[project_name]/stores

Trong đó:

  • usernameusername Vercel của bạn!
  • project_nameproject_name Vercel của bạn!

Bấm nút liên kết là được thôi.

Các lưu ý khi sử dụng

  • Để ý tên ENV sinh ra khi link database với dự án, nên để trong dự án giống trên vercel để đỡ lỗi.

  • Mỗi tài khoản chỉ có 1 database, không tạo thêm được

  • Nên kết nối database vercel vào pgadmin để dùng cho tiện kiểm soát

  • Vercel postgres là hàng free, rất chậm!!!