{"id":476,"date":"2026-04-14T11:01:43","date_gmt":"2026-04-14T04:01:43","guid":{"rendered":"https:\/\/namns.i234.me\/ns\/deploy-ung-dung-web-len-vps-voi-nginx\/"},"modified":"2026-04-14T11:01:43","modified_gmt":"2026-04-14T04:01:43","slug":"deploy-ung-dung-web-len-vps-voi-nginx","status":"publish","type":"post","link":"https:\/\/namns.i234.me\/ns\/deploy-ung-dung-web-len-vps-voi-nginx\/","title":{"rendered":"H\u01b0\u1edbng D\u1eabn Deploy \u1ee8ng D\u1ee5ng Web L\u00ean VPS V\u1edbi Nginx Chi Ti\u1ebft A-Z"},"content":{"rendered":"<p>Deploy (tri\u1ec3n khai) \u1ee9ng d\u1ee5ng web l\u00ean VPS l\u00e0 m\u1ed9t k\u1ef9 n\u0103ng quan tr\u1ecdng m\u00e0 m\u1ecdi l\u1eadp tr\u00ecnh vi\u00ean \u0111\u1ec1u c\u1ea7n n\u1eafm v\u1eefng. B\u00e0i vi\u1ebft n\u00e0y s\u1ebd h\u01b0\u1edbng d\u1eabn b\u1ea1n <strong>deploy \u1ee9ng d\u1ee5ng web l\u00ean VPS s\u1eed d\u1ee5ng Nginx<\/strong> t\u1eeb A \u0111\u1ebfn Z, ph\u00f9 h\u1ee3p cho c\u1ea3 ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u.<\/p>\n\n<h2 class=\"wp-block-heading\">Chu\u1ea9n b\u1ecb nh\u1eefng g\u00ec b\u1ea1n c\u1ea7n<\/h2>\n\n<ul class=\"wp-block-list\"><li>M\u1ed9t VPS ch\u1ea1y Ubuntu 20.04\/22.04<\/li><li>Quy\u1ec1n truy c\u1eadp SSH v\u00e0o VPS<\/li><li>T\u00ean mi\u1ec1n (domain) \u0111\u00e3 tr\u1ecf DNS v\u1ec1 IP VPS<\/li><li>\u1ee8ng d\u1ee5ng web \u0111\u00e3 s\u1eb5n s\u00e0ng (Node.js, Python, PHP\u2026)<\/li><\/ul>\n\n<h2 class=\"wp-block-heading\">B\u01b0\u1edbc 1: C\u1eadp nh\u1eadt h\u1ec7 th\u1ed1ng<\/h2>\n\n<pre><code>sudo apt update && sudo apt upgrade -y<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\">B\u01b0\u1edbc 2: C\u00e0i \u0111\u1eb7t Nginx<\/h2>\n\n<pre><code>sudo apt install nginx -y<\/code><\/pre>\n\n<p>Sau khi c\u00e0i \u0111\u1eb7t, kh\u1edfi \u0111\u1ed9ng v\u00e0 b\u1eadt Nginx:<\/p>\n\n<pre><code>sudo systemctl start nginx\nsudo systemctl enable nginx<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\">B\u01b0\u1edbc 3: C\u00e0i \u0111\u1eb7t SSL mi\u1ec5n ph\u00ed v\u1edbi Certbot<\/h2>\n\n<p>Certbot gi\u00fap b\u1ea1n c\u00e0i \u0111\u1eb7t ch\u1ee9ng ch\u1ec9 SSL mi\u1ec5n ph\u00ed t\u1eeb Let&#8217;s Encrypt:<\/p>\n\n<pre><code>sudo apt install certbot python3-certbot-nginx -y\nsudo certbot --nginx -d yourdomain.com -d www.yourdomain.com<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\">B\u01b0\u1edbc 4: C\u1ea5u h\u00ecnh Nginx cho \u1ee9ng d\u1ee5ng<\/h2>\n\n<p>T\u1ea1o file c\u1ea5u h\u00ecnh m\u1edbi:<\/p>\n\n<pre><code>sudo nano \/etc\/nginx\/sites-available\/yourapp<\/code><\/pre>\n\n<p>Th\u00eam n\u1ed9i dung c\u1ea5u h\u00ecnh (v\u00ed d\u1ee5 cho Node.js app):<\/p>\n\n<pre><code>server {\n    listen 80;\n    server_name yourdomain.com www.yourdomain.com;\n    \n    location \/ {\n        proxy_pass http:\/\/localhost:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n        proxy_cache_bypass $http_upgrade;\n    }\n}<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\">B\u01b0\u1edbc 5: K\u00edch ho\u1ea1t c\u1ea5u h\u00ecnh<\/h2>\n\n<pre><code>sudo ln -s \/etc\/nginx\/sites-available\/yourapp \/etc\/nginx\/sites-enabled\/\nsudo nginx -t\nsudo systemctl reload nginx<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\">B\u01b0\u1edbc 6: Thi\u1ebft l\u1eadp Firewall<\/h2>\n\n<pre><code>sudo ufw allow OpenSSH\nsudo ufw allow 'Nginx Full'\nsudo ufw enable<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\">B\u01b0\u1edbc 7: Thi\u1ebft l\u1eadp Auto-Renew SSL<\/h2>\n\n<pre><code>sudo certbot renew --dry-run<\/code><\/pre>\n\n<p>Certbot s\u1ebd t\u1ef1 \u0111\u1ed9ng gia h\u1ea1n SSL, nh\u01b0ng h\u00e3y ki\u1ec3m tra cron job \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o:<\/p>\n\n<pre><code>sudo systemctl list-timers | grep certbot<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\">B\u01b0\u1edbc 8: C\u00e0i PM2 \u0111\u1ec3 ch\u1ea1y \u1ee9ng d\u1ee5ng Node.js<\/h2>\n\n<pre><code>npm install -g pm2\npm2 start app.js --name myapp\npm2 save\npm2 startup<\/code><\/pre>\n\n<p>PM2 gi\u00fap \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n ch\u1ea1y li\u00ean t\u1ee5c, t\u1ef1 kh\u1edfi \u0111\u1ed9ng l\u1ea1i khi c\u00f3 l\u1ed7i v\u00e0 qu\u1ea3n l\u00fd process d\u1ec5 d\u00e0ng.<\/p>\n\n<h2 class=\"wp-block-heading\">L\u1eddi k\u1ebft<\/h2>\n\n<p>Vi\u1ec7c deploy \u1ee9ng d\u1ee5ng web l\u00ean VPS kh\u00f4ng qu\u00e1 ph\u1ee9c t\u1ea1p n\u1ebfu b\u1ea1n n\u1eafm v\u1eefng c\u00e1c b\u01b0\u1edbc c\u01a1 b\u1ea3n. H\u00e3y b\u1eaft \u0111\u1ea7u t\u1eeb vi\u1ec7c deploy m\u1ed9t \u1ee9ng d\u1ee5ng \u0111\u01a1n gi\u1ea3n, sau \u0111\u00f3 d\u1ea7n d\u1ea7n n\u00e2ng c\u1ea5p v\u1edbi Docker, CI\/CD v\u00e0 c\u00e1c c\u00f4ng c\u1ee5 t\u1ef1 \u0111\u1ed9ng h\u00f3a kh\u00e1c. Ch\u00fac b\u1ea1n th\u00e0nh c\u00f4ng!<\/p>","protected":false},"excerpt":{"rendered":"<p>Deploy (tri\u1ec3n khai) \u1ee9ng d\u1ee5ng web l\u00ean VPS l\u00e0 m\u1ed9t k\u1ef9 n\u0103ng quan tr\u1ecdng m\u00e0 m\u1ecdi l\u1eadp tr\u00ecnh vi\u00ean \u0111\u1ec1u c\u1ea7n n\u1eafm v\u1eefng. B\u00e0i vi\u1ebft n\u00e0y s\u1ebd h\u01b0\u1edbng d\u1eabn b\u1ea1n deploy \u1ee9ng d\u1ee5ng web l\u00ean VPS s\u1eed d\u1ee5ng Nginx t\u1eeb A \u0111\u1ebfn Z, ph\u00f9 h\u1ee3p cho c\u1ea3 ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u. Chu\u1ea9n b\u1ecb nh\u1eefng g\u00ec&#8230;<\/p>\n","protected":false},"author":1,"featured_media":475,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-476","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web"],"jetpack_featured_media_url":"https:\/\/namns.i234.me\/ns\/wp-content\/uploads\/2026\/04\/web1.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/namns.i234.me\/ns\/wp-json\/wp\/v2\/posts\/476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/namns.i234.me\/ns\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/namns.i234.me\/ns\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/namns.i234.me\/ns\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/namns.i234.me\/ns\/wp-json\/wp\/v2\/comments?post=476"}],"version-history":[{"count":0,"href":"https:\/\/namns.i234.me\/ns\/wp-json\/wp\/v2\/posts\/476\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/namns.i234.me\/ns\/wp-json\/wp\/v2\/media\/475"}],"wp:attachment":[{"href":"https:\/\/namns.i234.me\/ns\/wp-json\/wp\/v2\/media?parent=476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/namns.i234.me\/ns\/wp-json\/wp\/v2\/categories?post=476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/namns.i234.me\/ns\/wp-json\/wp\/v2\/tags?post=476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}