QM
Đang mở cơ hội Backend .NET / DevOps

Lê Nguyễn Quang Minh

Software Engineer · Backend .NET & DevOps

Xây dựng backend .NET và tự tay đưa nó lên production.

Tôi làm Backend .NET cho các hệ thống e-commerce, POS và multi-tenant. Công việc thường xoay quanh thiết kế database, API và business logic, tích hợp với hệ thống bên ngoài, rồi tự đưa lên server bằng Docker, GitLab CI/CD và Nginx. Khi production có vấn đề, tôi cũng là người đọc log và xử lý.

Lê Nguyễn Quang Minh
0+
Dự án E-commerce, B2B, Affiliate & Sales-POS
0→0
Góp phần rút thời gian khởi tạo dự án mới từ ~3 tháng xuống ~1 tháng, nhờ base platform dùng lại được
0
Khách hàng chạy thật trên hệ thống multi-tenant MeU Omni
0+
Dịch vụ bên thứ ba đã tích hợp qua webhook & event

Về bản thân

Tôi bắt đầu từ Backend .NET, nhưng công việc thực tế dần kéo tôi xuống tầng deployment: đóng gói Docker image, dựng GitLab CI/CD, cấu hình Nginx reverse proxy và SSL, rồi đọc log mỗi khi production có sự cố. Nhờ vậy tôi có thói quen nhìn một vấn đề xuyên suốt từ ứng dụng, database tới container và network, thay vì dừng lại ở phần code mình viết.

Cách tôi làm việc gọn trong một câu: hiểu vấn đề trước khi gõ phím, và không coi task là xong cho tới khi nó chạy ổn trên production. Tôi quen với việc phối hợp cùng PM/BA/FE/QA, review code cùng team.

Cách tôi làm việc

Đọc log trước, đoán sau

Phần lớn sự cố tôi gặp đều đã tự khai báo trong log. Thói quen đi tuần tự từ tầng ngoài vào trong giúp tôi tiết kiệm rất nhiều thời gian so với việc sửa theo linh cảm.

Ownership tới production

Tôi không xem một task là xong khi code đã merge. Tôi thường theo tới bước deploy, kiểm tra lại trên môi trường thật và xử lý nếu có vấn đề phát sinh sau release.

Học bằng cách dựng lại

Cách tôi học công nghệ mới là dựng lại nó ở quy mô nhỏ và tự đưa lên chạy thật. Trang này là một ví dụ: source trên GitLab, build và deploy tự động qua Cloudflare Pages, domain và HTTPS cũng quản lý ở đó.

Kinh nghiệm làm việc

MeU Solutions

  • Thực tập sinh Backend03/2025 – 04/2025
  • Software Engineer · Backend .NET05/2025 – Hiện tại

Công ty công nghệ cung cấp dịch vụ phát triển, kiểm thử phần mềm và giải pháp Web/Mobile theo yêu cầu cho doanh nghiệp.

  • Phân tích solution, thiết kế database và xây dựng REST API/business logic bằng .NET/ASP.NET Core và Node.js; phối hợp chặt với PM/BA/FE/QA suốt vòng đời sản phẩm.
  • Thực hiện migration, indexing, transaction và query optimization; backup/restore, phân quyền và ownership trên PostgreSQL/SQL Server.
  • Đóng gói Docker image, build/maintain GitLab CI/CD và Docker Registry, cấu hình Nginx reverse proxy và SSL cho các môi trường Dev/Staging/Production.
  • Viết Bash script hỗ trợ vận hành và database; thực hiện root cause analysis xuyên suốt Application → Database → Container → Network/Reverse Proxy khi có incident.
  • Review code, estimate và hướng dẫn nhóm intern nhỏ.

Dự án tiêu biểu

Bốn dự án nói được nhiều nhất về cách tôi làm việc.

PowerShop

06/2026 – Hiện tại

Nền tảng e-commerce multi-service, .NET + Node.js/Medusa

powershop.vn

Trực tiếp tích hợp Viettel Post và GHN cho vận chuyển, liên kết luồng Payment/Affiliate, đồng thời làm việc với OnePay, MISA, Auth, S3 và Email. Áp dụng Webhook, Event-driven, Retry và Idempotency để hạn chế xử lý trùng và giữ trạng thái nhất quán giữa các service.

Kết quảLoại bỏ duplicate processing khi đối tác gửi lại webhook

Backend & Integration · song song với MeU Omni.NETNode.jsMedusaPostgreSQLWebhookGHNViettel PostOnePayMISA

MeU Omni

04/2026 – 08/2026

Hệ thống quản lý bán hàng multi-tenant

kiot.anawork.com

Phát triển các module Product, Inventory/Warehouse, POS/Order, Customer/Debt, Employee/Payroll, Cashbook, Report và RBAC. Xử lý transaction, tồn kho và công nợ; cô lập dữ liệu theo tenantId; phụ trách cả migration, deployment và troubleshooting sau khi lên production.

Kết quảTriển khai thực tế cho 3 khách hàng trên cùng một codebase

Backend chính.NETASP.NET CorePostgreSQLMulti-tenancyRBACDocker

E-commerce Base Platform

01/2026 – 03/2026

Nền tảng tái sử dụng cho 4 dự án

Cùng PM đề xuất kiến trúc và chuẩn hóa phần Database/Backend dùng lại được cho Auth, Product/Inventory, Customer, Cart/Checkout, Order/Payment, Shipping, Promotion, Affiliate và CMS. Tự setup environment, database, Docker, reverse proxy/SSL và deployment trên server được cung cấp. Nền tảng sau đó được dùng lại cho 4 dự án tới tháng 7/2026.

Kết quảGiảm thời gian delivery từ ~3 tháng xuống ~1 tháng

Database & Backend .NET.NETASP.NET CorePostgreSQLDocker ComposeNginxGitLab CI/CD

SAMCO · Merphaco · FirstGreen

2025

Ba dự án khách hàng, từ solo module tới team 15+

vinfast-samcobinhtan.com.vn (SAMCO)

SAMCO: tự làm trọn module News từ database → API → lưu trữ S3/Long Vân → deploy. Merphaco: phát triển plugin Product/Order/Email. FirstGreen: module Article/User/Customer/Action và Media Upload, phối hợp integration/testing trong team lớn.

Backend .NET.NETSQL ServerS3REST API

Kiến trúc hệ thống

Cách tôi tổ chức một hệ thống multi-tenant và đưa nó lên server.

Khách hàng A/B/CHTTPSNginxreverse proxy · SSLDocker Compose · VPS.NET APIASP.NET CoreTầng dữ liệutenantId filterSignalRrealtime POSHàng đợi sự kiệnretry · idempotentPostgreSQL3 tenantBên thứ baGHN · OnePayCô lập dữ liệuMỗi request mang tenantId → filter áp ở tầng dữ liệu → truy vấn không bao giờchạm được dữ liệu của tenant khác.

Vuốt ngang để xem đầy đủ

Một Nginx đứng trước, nhận SSL và định tuyến vào các service .NET chạy trong Docker. Mỗi request mang tenantId, và tầng dữ liệu áp filter theo tenant trước khi chạm database — cùng một codebase phục vụ 3 khách hàng mà dữ liệu không lẫn vào nhau.

Từ production

Hai sự cố thật, và điều tôi rút ra sau đó.

Webhook đối tác gửi lại — đơn hàng bị xử lý trùng

Triệu chứng

Sau khi tích hợp đơn vị vận chuyển, một số đơn hàng ghi nhận trạng thái hai lần, kéo theo sai lệch tồn kho và công nợ.

Chẩn đoán

Đọc log ứng dụng và đối chiếu với request từ phía đối tác cho thấy họ retry webhook khi không nhận được phản hồi đủ nhanh — cùng một sự kiện được gửi nhiều lần, trong khi endpoint của chúng tôi xử lý mỗi lần gọi như một sự kiện mới.

Xử lý

Bổ sung idempotency key dựa trên mã sự kiện của đối tác, lưu lại các sự kiện đã xử lý và trả về sớm cho request lặp; đồng thời tách phần xử lý nặng ra khỏi luồng phản hồi để trả 200 nhanh hơn.

Bài học

Trước đó tôi mặc định mỗi sự kiện chỉ đến một lần. Sau lần này, khi nhận webhook từ hệ thống ngoài, việc đầu tiên tôi hỏi là điều gì xảy ra nếu request này đến lần thứ hai — và thiết kế endpoint idempotent ngay từ đầu thay vì đợi thấy dữ liệu trùng mới sửa.

Ứng dụng chạy tốt ở Staging nhưng lỗi ngay sau khi lên Production

Triệu chứng

Bản release chạy ổn định ở Staging nhưng vừa lên Production thì API trả lỗi, trong khi container vẫn ở trạng thái running.

Chẩn đoán

Kiểm tra lần lượt từ Nginx → container → ứng dụng → database. Container sống, nhưng log ứng dụng cho thấy lỗi kết nối; nguyên nhân nằm ở biến môi trường và quyền truy cập database khác biệt giữa hai môi trường, không phải ở code.

Xử lý

Chuẩn hóa lại file cấu hình môi trường theo từng environment, rà soát permission/ownership trên database, và bổ sung bước kiểm tra cấu hình vào quy trình trước khi release.

Bài học

Lần đó tôi mất khá nhiều thời gian vì tin rằng container còn 'running' thì ứng dụng vẫn ổn. Từ đó tôi bỏ thói quen đoán chỗ hỏng, thay bằng đi tuần tự Nginx → container → ứng dụng → database, và thêm bước đối chiếu cấu hình giữa các môi trường trước mỗi lần release.

Kỹ năng

Backend & Ngôn ngữ

  • C# / .NET / ASP.NET Core

    Ngôn ngữ chính qua 9+ dự án production

  • Entity Framework

    Migration, quan hệ phức tạp, tối ưu truy vấn

  • Node.js

    Service phụ và tích hợp Medusa tại PowerShop

  • SignalR

    Cập nhật realtime cho màn hình POS

Kiến trúc & Tích hợp

  • Multi-tenancy

    Cô lập dữ liệu theo tenantId cho 3 khách hàng thật

  • Webhook & Event-driven

    Retry + Idempotency chống xử lý trùng

  • REST API / JWT

    Chuẩn hóa API và xác thực cho toàn base platform

  • 9+ third-party services

    GHN, Viettel Post, OnePay, MISA, Firebase, Google/Facebook Auth, S3, SMTP

DevOps & Hạ tầng

  • Docker / Docker Compose

    Đóng gói và vận hành nhiều service trên cùng host

  • GitLab CI/CD + Registry

    Pipeline build → push image → deploy tự động

  • Nginx / SSL

    Reverse proxy, chứng chỉ Let's Encrypt, cấu hình theo môi trường

  • Ubuntu / Linux

    Vận hành server thật: log, service, port, quyền truy cập

  • Bash scripting

    Mức cơ bản — script clone/migrate database, hỗ trợ deploy

  • Git · GitLab · Claude Code · ChatGPT

    Công cụ hằng ngày; output từ AI luôn được đọc lại trước khi dùng

Database

  • PostgreSQL

    Database chính; migration, index, transaction, backup/restore

  • SQL Server

    Dự án khách hàng doanh nghiệp

  • MongoDB

    Dữ liệu phi cấu trúc và log

Liên hệ

Nếu bạn đang tìm một backend engineer có thể tự đưa sản phẩm lên production, tôi rất sẵn lòng trò chuyện.

Điện thoại
0582879834
Khu vực
TP. Hồ Chí Minh, Việt Nam