Openship: tự dựng “Vercel riêng” trên máy chủ của bạn


Bạn làm xong một dự án phụ, đẩy lên Vercel chạy ngon lành. Rồi dự án bắt đầu có khách, hoặc bạn định nhận tiền từ nó, và bạn mới nhớ gói Hobby chỉ dành cho dự án cá nhân, phi thương mại. Muốn làm ăn đàng hoàng thì phải lên gói Pro, tính tiền theo từng người trong nhóm. Nếu bạn từng thấy hơi chột dạ ở khoảnh khắc đó, thì Openship là thứ đáng để bạn dành ít phút làm quen.

Đây là một nền tảng mã nguồn mở để triển khai ứng dụng: bạn trỏ nó vào một repo, nó tự dựng, chạy, gắn tên miền và cấp chứng chỉ HTTPS. Điểm khác là toàn bộ chạy trên máy chủ của bạn, và dùng miễn phí. Bài này giới thiệu cách Openship hoạt động, cách cài, cách dùng, rồi so với Vercel một cách thẳng thắn, kể cả những chỗ Vercel vẫn hơn.

Openship là gì, và vì sao nó đang được chú ý

Openship là nền tảng triển khai tự vận hành (self-hosted) có sẵn CI/CD, do công ty Oblien phát hành theo giấy phép Apache-2.0. Tính đến ngày 12/10/2026, repo có khoảng 14,5 nghìn sao và 1,3 nghìn fork trên GitHub. Con số này tăng rất nhanh: một bài hướng dẫn viết cách đây không lâu còn ghi chưa tới 9 nghìn sao.

Cái hay của nó nằm ở chỗ gom nhiều thứ vào một chỗ. Thông thường, để có trải nghiệm kiểu Vercel trên máy chủ riêng, bạn phải tự ghép Docker, một máy chủ proxy, Let’s Encrypt, cơ sở dữ liệu, sao lưu, rồi viết thêm script triển khai. Openship làm sẵn các việc đó và đặt dưới một giao diện chung.

Openship chạy như thế nào

Trước khi cài, bạn nên hiểu đường đi của một lần triển khai, vì khi có lỗi, biết lỗi nằm ở bước nào sẽ tiết kiệm rất nhiều thời gian. Openship nhận nguồn từ một repo GitHub, một thư mục trên máy, hoặc một bản build có sẵn, rồi chạy qua năm bước.

Đầu tiên là nhận diện: nó đọc package.json, file cấu hình framework, file khóa phiên bản và cả docker-compose.yml hay openship.json nếu có, để đoán ra bạn dùng stack nào, lệnh build và lệnh chạy là gì, cổng nào. Bạn không phải viết file cấu hình nào, nhưng nếu muốn tự quyết thì openship.json sẽ ghi đè các phỏng đoán đó.

Tiếp theo là dựng (build) thành một Docker image hoặc bản phát hành thuần. Cấu hình lúc đó được đóng băng thành một bản chụp, nên khi bạn quay lui về bản cũ, hệ thống chạy lại đúng thứ đã từng chạy chứ không dựng lại theo cấu hình mới. Bước chạy đặt ứng dụng trong container, chỉ mở trên địa chỉ nội bộ chứ không lộ cổng ra ngoài. Cuối cùng, máy chủ OpenResty đóng vai cửa ngõ, ghi cấu hình trỏ tên miền và xin chứng chỉ Let’s Encrypt.

Có một chi tiết đáng khen: việc gắn tên miền và HTTPS diễn ra sau khi ứng dụng đã chạy. Nếu DNS chưa trỏ đúng hoặc cấp chứng chỉ trục trặc, bạn chỉ thấy cảnh báo “cần xử lý” chứ ứng dụng không bị hỏng hay gỡ xuống. Bước thứ năm là tự triển khai khi đẩy code: webhook của GitHub chạy lại quy trình mỗi khi có commit mới lên nhánh đang theo dõi, và với monorepo thì chỉ dựng lại những dịch vụ thực sự bị đụng tới.

Những tính năng đáng chú ý của Openship

Theo README, Openship hỗ trợ khá nhiều ngôn ngữ: Node, Python, Go, Rust, PHP, Ruby, Java, .NET, cùng Docker và monorepo. Nếu bạn đã có sẵn file Docker Compose, nó triển khai nguyên xi.

Phần “hậu cần” là chỗ nền tảng này khác một công cụ chỉ lo triển khai giao diện. Bạn có sẵn cơ sở dữ liệu (Postgres, MySQL, MongoDB, Redis), tên miền và chứng chỉ tự gia hạn, bộ nhớ đệm CDN ở rìa, máy chủ thư SMTP có sẵn DKIM/SPF/DMARC, sao lưu theo lịch kèm khôi phục một cú bấm, và theo dõi theo thời gian thực gồm nhật ký build, số liệu container, vị trí khách truy cập. Có cả bản xem trước theo từng nhánh, môi trường staging/production và quay lui bản cũ.

Với người thích tự động hóa, có thêm CLI, SDK cho JavaScript/TypeScript (cài bằng npm install openship, cần Node.js 22 trở lên), một cổng REST API và một điểm kết nối MCP cho tác tử AI. Theo README, chỉ những tuyến API nào chủ động bật mới lộ ra thành công cụ MCP, mỗi lệnh gọi đều kiểm tra lại quyền, và các tuyến liên quan tới khóa hay token không bao giờ thành công cụ.

Openship: tự dựng "Vercel riêng" trên máy chủ của bạn - 1
openship

Chọn cách chạy Openship: quyết định quan trọng nhất

Trước khi gõ lệnh nào, bạn cần quyết định một việc: chạy phần điều khiển (control plane) của Openship ở đâu. Chọn xong, mọi thứ phía sau gần như giống nhau.

Bạn là…Nên chạy Openship dưới dạngỨng dụng của bạn chạy ở đâu
Dùng một mình, một máy, không muốn lo vận hànhỨng dụng máy tínhMáy chủ bạn nối qua SSH, hoặc Openship Cloud
Làm nhóm, hoặc muốn tự triển khai khi đẩy code, hoặc muốn chạy app ngay trên máy chủ đóMáy chủ tự host (openship up)Ngay trên máy chủ đó, hoặc đẩy sang máy chủ khác
Không muốn chạy gì cảOpenship CloudMôi trường được quản lý sẵn

Mẹo: nếu dùng một mình, hãy bắt đầu bằng ứng dụng máy tính. Nó chỉ chạy phần điều khiển trên máy bạn khi đang mở app, không để lại dịch vụ nào chạy ngầm và không mở ra ngoài mạng. Chỉ khi cần tự triển khai khi đẩy code, cho nhiều người dùng chung, hoặc chạy app ngay trên máy chủ, bạn mới cần bản cài trên máy chủ chạy liên tục. Lý do đơn giản: webhook của GitHub cần một địa chỉ công khai luôn bật để gọi tới.

Hướng dẫn cài đặt Openship

Cách 1: ứng dụng máy tính (dành cho người dùng một mình)

Vào trang Releases của repo và tải bản phù hợp: file .dmg cho macOS (có hai bản, Apple Silicon và Intel), file .zip cho Windows, hoặc Openship.AppImage cho Linux. Trên Linux, bạn cấp quyền chạy rồi mở:

chmod +x Openship.AppImage && ./Openship.AppImage

Mở app lên, nối vào một máy chủ qua SSH (hoặc Openship Cloud) rồi triển khai. Lưu ý là ứng dụng không tự chạy các app công khai ngay trên laptop của bạn, nó chỉ điều khiển máy chủ ở xa.

Cách 2: máy chủ tự host bằng CLI (dành cho nhóm hoặc dùng lâu dài)

Bạn cần một máy chủ Linux, tốt nhất có sẵn Docker. Cài CLI bằng một dòng lệnh:

curl -fsSL https://get.openship.io | sh

Hoặc nếu máy đã có Node 22 trở lên, dùng npm i -g openship. Sau đó gõ:

openship

Trình hướng dẫn sẽ tạo tài khoản quản trị đầu tiên, gắn tên miền và cài Openship thành dịch vụ khởi động cùng máy. Nếu bạn làm trên máy chủ không có giao diện hoặc trong CI, bỏ qua trình hướng dẫn và dùng thẳng:

openship up --public-url https://openship.example.com

Lệnh này cài, chạy nền, và phục vụ bảng điều khiển trên tên miền của bạn, phần cấp HTTPS do nó lo.

Tại sao lệnh openship up lại tự chọn chế độ? Vì môi trường khác nhau thì cách chạy khác nhau. Trên Linux có Docker, nó dùng chế độ Compose: dựng cả bộ gồm Postgres, Redis, API, bảng điều khiển và cửa ngõ OpenResty ở cổng 80/443, và đây là chế độ cho phép chạy luôn các ứng dụng của bạn trên cùng máy. Ở nơi khác (macOS, Windows, Linux không có Docker), nó dùng chế độ bare: một tiến trình nhẹ có sẵn cơ sở dữ liệu nhúng, chuyên đẩy ứng dụng ra máy chủ khác qua SSH hoặc lên Cloud. Bạn có thể ép chế độ bằng --compose hoặc --bare.

Các lệnh quản lý thường dùng: openship open mở bảng điều khiển, openship stop dừng, openship update nâng cấp.

Cách 3: Docker Compose thuần (không dùng CLI)

Nếu bạn thích kiểm soát từng thứ:

git clone https://github.com/oblien/openship.git && cd openship
cp .env.example .env
docker compose --env-file .env -f docker/docker-compose.yml up -d

Nhớ sửa file .env trước khi chạy. Bộ này kéo image dựng sẵn từ GitHub Container Registry, nên không cần dựng từ mã nguồn.

Lưu ý quan trọng về an toàn: container API gắn vào Docker socket của máy chủ để có thể dựng và chạy ứng dụng của bạn, nghĩa là nó có quyền rất cao trên máy đó. README khuyên chỉ chạy trên máy chủ bạn tin cậy. Cách này cũng chỉ chạy trên Linux, và nếu đi đường này thì các thao tác cần điều khiển máy chủ từ bên trong container (như chiếm cổng 80/443) phải tự thiết lập thêm vài bước thủ công, có ghi trong .env.example.

Triển khai dự án đầu tiên

Vào thư mục dự án và chạy hai lệnh:

openship init
openship deploy

Lệnh đầu liên kết thư mục với một dự án trên Openship, lệnh sau chạy quy trình triển khai. Muốn tự triển khai mỗi khi đẩy code, bạn kết nối repo GitHub trong bảng điều khiển (cần bản cài trên máy chủ chạy liên tục, như đã nói ở trên).

Mẹo: trỏ bản ghi DNS của tên miền về địa chỉ IP máy chủ trước khi triển khai. Dù DNS chậm cũng không làm hỏng ứng dụng, nhưng bạn sẽ thấy cảnh báo “cần xử lý” và phải chờ cấp lại chứng chỉ.

So sánh với Vercel: ai hơn ai ở đâu

Trước hết, cần công bằng: hai bên không hẳn cùng loại sản phẩm. Vercel là dịch vụ được quản lý hoàn toàn, còn Openship là công cụ để bạn tự vận hành. So sánh chi phí mà quên chi phí công sức vận hành là so sánh lệch.

Tiêu chíOpenship (tự host)Vercel
GiáMiễn phí khi tự host, bạn chỉ trả tiền máy chủHobby miễn phí; Pro 20 USD/người/tháng, kèm 20 USD tín dụng dùng
Dùng thương mạiKhông bị chặn theo góiHobby không cho dùng thương mại, phải lên Pro
Tính tiềnTheo máy chủ bạn thuêTheo ghế người dùng cộng lượng dùng vượt mức
Tự vận hànhCó, đó là mục đích chínhKhông có
Công sức vận hànhBạn lo máy chủ, cập nhật, sao lưuGần như không
Cơ sở dữ liệu, thư, sao lưuGói chung trong nền tảngCơ sở dữ liệu qua Marketplace, tính tiền riêng
Mạng phân phối toàn cầuTùy bạn thuê máy chủ ở đâuCó sẵn, rất mạnh
Độ tối ưu cho Next.jsChạy được như app Node bình thườngLà sân nhà của họ

Gói Hobby của Vercel, theo các trang tổng hợp giá đã kiểm tra trong năm 2026, cho khoảng 100 GB băng thông, khoảng 1 triệu lượt gọi hàm và khoảng 4 giờ CPU hoạt động mỗi tháng. Gói Pro kèm 1 TB băng thông. Các giới hạn này đổi theo thời gian, nên trước khi quyết định bạn hãy xem lại trên trang giá của Vercel.

Vậy khi nào chọn bên nào? Nếu bạn làm một trang Next.js, cần chạy nhanh toàn cầu, không muốn đụng tới máy chủ, và ngân sách cho phép, Vercel vẫn là lựa chọn ít đau đầu nhất. Mạng phân phối toàn cầu và độ tối ưu sâu cho framework của họ là thứ một máy chủ đơn lẻ khó sánh bằng.

Openship hợp hơn khi bạn có nhiều dự án nhỏ, chạy backend, cơ sở dữ liệu, tác vụ nền cùng nhau mà không muốn trả theo ghế, hoặc khi dữ liệu cần nằm trên máy chủ của riêng bạn. Với nhóm vài người, bỏ tiền ghế Pro để thuê một máy chủ chạy được nhiều dự án thường kinh tế hơn, miễn là có người đủ rảnh và đủ kiến thức để trông máy chủ đó. Đây là nhận định của mình dựa trên mô hình giá, chứ không phải số liệu đo đạc.

Những điều cần cân nhắc trước khi dùng

Dự án còn khá mới và phát triển rất nhanh, nên có vài điểm bạn nên biết. Phần tài liệu vẫn đang được bổ sung, chính README cũng nói vậy. Các tính năng như cụm nhiều nút, giao diện cân bằng tải, mạng riêng và quy trình CI/CD trực quan nằm trong mục “sắp có”, tức là chưa dùng được. Về giấy phép, mã do Openship viết là Apache-2.0, nhưng engine thư iRedMail đi kèm theo giấy phép GPL, và bạn nên xem tài liệu về giấy phép nếu định đóng gói lại sản phẩm. Cuối cùng, bản cài “dev” từ mã nguồn chỉ để thử nghiệm, README nói rõ không phải đường dùng cho production.

Bạn cũng nên tự hỏi thật lòng: ai sẽ cập nhật máy chủ, theo dõi sao lưu và xử lý lúc 2 giờ sáng khi mọi thứ sập? Tự host không mất tiền bản quyền, nhưng nó đổi tiền lấy thời gian của bạn.

Kết bài

Openship không phải “giết Vercel”, mà là một lựa chọn cho nhóm người muốn cùng trải nghiệm đẩy code là lên mạng nhưng giữ quyền kiểm soát và không bị tính tiền theo ghế. Cách thử rẻ nhất là tải ứng dụng máy tính, nối vào một máy chủ thuê rẻ và triển khai một dự án phụ, mất chừng nửa buổi tối là biết nó có hợp với bạn không.

Bạn đang để dự án ở đâu, Vercel, Netlify hay máy chủ riêng? Và điều gì khiến bạn ngại tự host nhất? Chia sẻ ở phần bình luận nhé!


Previous

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *