[{"data":1,"prerenderedAt":1207},["ShallowReactive",2],{"search-posts-dataset":3,"post-detail-/posts/ubuntu-server-initial-setup":159,"all-published-articles-list":1146,"series-posts-/posts/ubuntu-server-initial-setup":1206},[4,20,35,48,62,75,87,99,111,122,135,149],{"path":5,"title":6,"description":7,"categories":8,"tags":11,"date":16,"image":17},"/posts/incident-checklist","Checklist xử lí sự cố máy chủ Linux: Phục hồi sau thảm họa","Qui trình phản ứng và xử lí sự cố máy chủ Linux khi hệ thống bị sập, tràn RAM/HDD hoặc nghi ngờ bị xâm nhập: Các bước chuẩn đoán, cô lập, phân tích log và khôi phục.",[9,10],"linux","devops",[12,13,14,15],"incident","troubleshooting","security","sysadmin","2026-08-15T00:00:00.000Z",{"src":18,"alt":19},"/img/incident-response.webp","Xử lí sự cố máy chủ Linux",{"path":21,"title":22,"description":23,"categories":24,"tags":27,"date":31,"image":32},"/posts/backup-postgres-docker","Sao lưu tự động PostgreSQL trong Docker với cron job và gzip","Hướng dẫn xây dựng script tự động backup database PostgreSQL chạy trong Docker container: gzip, cron hàng ngày, tự động xóa bản sao lưu cũ và kiểm thử phục hồi.",[25,26],"docker","database",[28,29,30,10],"postgresql","backup","automation","2025-10-20T00:00:00.000Z",{"src":33,"alt":34},"/img/postgres-backup.webp","Sao lưu tự động PostgreSQL Docker",{"path":36,"title":37,"description":38,"categories":39,"tags":40,"date":44,"image":45},"/posts/docker-compose-production","Thiết kế Docker compose chuẩn Production","Hướng dẫn thực chiến xây dựng docker-compose.yml hoàn chỉnh cho Production: healthchecks, restart policies, resource limits, quản lí .env và Persistent Volumes",[25,10],[41,42,43],"production","compose","backend","2025-10-15T00:00:00.000Z",{"src":46,"alt":47},"/img/docker-compose.webp","Docker Compose Production Best Practices",{"path":49,"title":50,"description":51,"categories":52,"tags":53,"date":58,"image":59},"/posts/monitoring-server-basics","Giám sát server Linux từ cơ bản đến nâng cao: htop, ncdu, prometheus và Uptime Kuma","Cẩm nang toàn diện về giám sát hiệu năng máy chủ Linux: Khai thác công cụ CLI thời gian thực (Htop, Btop, Ncdu), thiết lập hệ thống cảnh báo sự cố Uptime Kuma qua Telegram và thu thập chỉ số với Prometheus & Grafana.",[9,10],[54,55,56,57],"monitoring","grafana","prometheus","uptime","2024-10-18T00:00:00.000Z",{"src":60,"alt":61},"/img/monitoring.webp","Giám sát máy chủ Linux",{"path":63,"title":64,"description":65,"categories":66,"tags":68,"date":71,"image":72},"/posts/nginx-reverse-proxy","Hướng dẫn cấu hình Nginx Reverse Proxy với SSL Certbot và Docker chuẩn Production","Cẩm nang toàn diện cấu hình Nginx Reverse Proxy trên Ubuntu: Tích hợp chứng chỉ SSL Let's Encrypt miễn phí qua Certbot, hỗ trợ WebSockets, HTTP/2, nén Brotli/Gzip và Rate Limiting chống DDoS.",[9,67],"nginx",[10,69,70],"ssl","webserver","2024-10-10T00:00:00.000Z",{"src":73,"alt":74},"/img/nginx.webp","Nginx Reverse Proxy với SSL",{"path":76,"title":77,"description":78,"categories":79,"tags":80,"date":83,"image":84},"/posts/how-to-secure-a-vps","Bảo mật máy chủ Linux VPS: Cẩm nang toàn diện 8 bước chống tấn công","Hướng dẫn thực chiến từng bước thiết lập bảo mật máy chủ Linux VPS mới: Vô hiệu hóa mật khẩu SSH, thiết lập SSH Key Ed25519, cấu hình Fail2ban, tường lửa UFW và cập nhật tự động Unattended-Upgrades.",[9,14],[81,82,10],"vps","hardening","2024-10-05T00:00:00.000Z",{"src":85,"alt":86},"/img/linux-security.webp","Bảo mật máy chủ Linux VPS",{"path":88,"title":89,"description":90,"categories":91,"tags":92,"date":95,"image":96},"/posts/systemd-node-service","Quản lí ứng dụng Node.js trong Production với Systemd Service và Journalctl","Hướng dẫn triển khai ứng dụng Node.js, Go hoặc Python dưới dạng Systemd Service trên Linux: Tự động khởi động lại khi crash, quản lý biến môi trường, giới hạn bộ nhớ RAM và theo dõi log thời gian thực với Journalctl.",[9,10],[93,94,43,41],"systemd","nodejs","2024-10-01T00:00:00.000Z",{"src":97,"alt":98},"/img/systemd.webp","Quản lý ứng dụng với Systemd Service",{"path":100,"title":101,"description":102,"categories":103,"tags":104,"date":107,"image":108},"/posts/how-to-install-docker-on-ubuntu-server","Hướng dẫn cài đặt Docker & Docker compose trên Ubuntu server","Hướng dẫn toàn diện cách cài đặt Docker Engine và Docker Compose V2 trên Ubuntu Server, cấu hình bảo mật non-root user, tối ưu daemon và xử lí xung đột tường lửa UFW",[9,25],[105,10,106],"beginner","ubuntu","2024-09-30T00:00:00.000Z",{"src":109,"alt":110},"/img/docker.webp","Cài đặt Docker trên Ubuntu Server",{"path":112,"title":113,"description":114,"categories":115,"tags":116,"date":118,"image":119},"/posts/ssh-key-authentication","Xác thực SSH Key từ cơ bản đến nâng cao: Ed25519, SSH Config và Bảo mật đa tầng","Cẩm nang toàn diện về xác thực SSH Key trên máy chủ Linux: So sánh Ed25519 vs RSA, cấu hình SSH Config quản lí hàng chục VPS, chuyển tiếp Agent Forwarding, và các qui tắc bảo mật chống lộ khóa.",[9,14],[117,10,15],"ssh","2024-09-25T00:00:00.000Z",{"src":120,"alt":121},"/img/ssh-keys.webp","Xác thực SSH Key Linux",{"path":123,"title":124,"description":125,"categories":126,"tags":127,"date":131,"image":132},"/posts/ufw-firewall-basics","Làm chủ tường lửa UFW trên Linux: Qui tắc, giới hạn kết nối và xử lí xung đột Docker","Hướng dẫn toàn diện làm chủ tường lửa UFW (Uncomplicated Firewall) trên Ubuntu: Thiết lập chính sách mặc định, mở cổng theo IP, giới hạn brute-force (Rate Limiting) và khắc phục lỗi Docker bypass tường lửa.",[9,14],[128,129,130,15],"ufw","firewall","networking","2024-09-20T00:00:00.000Z",{"src":133,"alt":134},"/img/ufw-firewall.webp","Cấu hình Tường lửa UFW Linux",{"path":136,"title":137,"description":138,"categories":139,"tags":141,"date":145,"image":146},"/posts/git-deploy-key","Tự động hóa triển khai với Git deploy keys: Thiết lập an toàn cho GitHub và GitLab","Hướng dẫn thiết lập Git Deploy Key chuẩn bảo mật để kéo mã nguồn tự động từ GitHub hoặc GitLab về máy chủ Production: Phân quyền Read-Only, cấu hình SSH Config và tích hợp Webhook tự động cập nhật.",[140,10],"git",[142,143,144,30],"github","gitlab","cicd","2024-09-18T00:00:00.000Z",{"src":147,"alt":148},"/img/git-deploy.webp","Git Deploy Keys cho máy chủ",{"path":150,"title":151,"description":152,"categories":153,"tags":154,"date":155,"image":156},"/posts/ubuntu-server-initial-setup","Qui trình thiết lập ban đầu cho Ubuntu Server: Swap, Timezone, User và Firewall","Hướng dẫn các bước thiết lập chuẩn mực ban đầu cho máy chủ Ubuntu Server mới: Cấu hình múi giờ Việt Nam (Asia/Ho_Chi_Minh), tạo phân vùng RAM ảo (Swap File), phân quyền Sudoer và kích hoạt tường lửa UFW.",[9],[106,105,15],"2024-09-15T00:00:00.000Z",{"src":157,"alt":158},"/img/ubuntu.webp","Thiết lập ban đầu Ubuntu Server",{"id":160,"title":151,"author":161,"body":162,"categories":1134,"date":155,"description":152,"draft":1135,"extension":1136,"image":1137,"meta":1138,"navigation":503,"path":150,"seo":1139,"series":1140,"series_order":1140,"slug":1141,"stem":1142,"tags":1143,"updated":1144,"__hash__":1145},"post/posts/ubuntu-server-initial-setup.md","Dương Thụ",{"type":163,"value":164,"toc":1118},"minimal",[165,170,174,195,203,206,210,213,248,251,281,284,328,330,334,345,363,366,375,381,384,401,403,407,414,435,440,464,467,471,565,569,575,589,592,600,604,615,693,696,707,709,713,723,767,770,797,799,803,806,832,835,854,856,860,863,973,976,990,992,996,1101,1103,1107,1114],[166,167,169],"h2",{"id":168},"giới-thiệu-tại-sao-cần-qui-trình-chuẩn-hóa-khi-vừa-tạo-vps-mới","Giới thiệu: Tại sao cần qui trình chuẩn hóa khi vừa tạo VPS mới?",[171,172,173],"p",{},"Khi bạn vừa mua một máy chủ VPS mới từ các nhà cung cấp như DigitalOcean, Linode, Hetzner, Vultr hay AWS EC2, hệ điều hành Ubuntu Server thường trong trạng thái cấu hình tối thiểu thô sơ:",[175,176,177,181,184,192],"ul",{},[178,179,180],"li",{},"Múi giờ mặc định là UTC (gây khó khăn khi xem log hệ thống).",[178,182,183],{},"Không có bộ nhớ RAM ảo (Swap File), dễ dẫn đến tình trạng máy chủ bị đơ (freeze) hoặc sập dịch vụ (Out Of Memory - OOM) khi ứng dụng đột ngột tiêu tốn nhiều RAM.",[178,185,186,187,191],{},"Tài khoản quản trị mặc định là ",[188,189,190],"code",{},"root",".",[178,193,194],{},"Chưa bật tường lửa bảo vệ các cổng mạng.",[171,196,197,198,202],{},"Bài viết này cung cấp một ",[199,200,201],"strong",{},"Qui trình chuẩn hóa từng bước (Initial Setup Checklist)"," giúp bạn thiết lập máy chủ Ubuntu server trở nên sẵn sàng, ổn định và an toàn trước khi cài đặt bất kì phần mềm nào khác.",[204,205],"hr",{},[166,207,209],{"id":208},"bước-1-đăng-nhập-máy-chủ-và-cập-nhật-toàn-diện","Bước 1: Đăng nhập máy chủ và cập nhật toàn diện",[171,211,212],{},"Sử dụng Terminal hoặc PowerShell để đăng nhập vào VPS của bạn qua SSH:",[214,215,220],"pre",{"className":216,"code":217,"language":218,"meta":219,"style":219},"language-bash shiki shiki-themes github-dark github-dark github-dark","ssh root@\u003CIP_MÁY_CHỦ>\n","bash","",[188,221,222],{"__ignoreMap":219},[223,224,227,230,234,238,241,245],"span",{"class":225,"line":226},"line",1,[223,228,117],{"class":229},"sb7EE",[223,231,233],{"class":232},"skqr8"," root@",[223,235,237],{"class":236},"sWuGj","\u003C",[223,239,240],{"class":232},"IP_MÁY_CH",[223,242,244],{"class":243},"sFJ4l","Ủ",[223,246,247],{"class":236},">\n",[171,249,250],{},"Tiến hành cập nhật danh sách gói phần mềm và nâng cấp các thư viện hiện có:",[214,252,254],{"className":216,"code":253,"language":218,"meta":219,"style":219},"sudo apt update && sudo apt upgrade -y\n",[188,255,256],{"__ignoreMap":219},[223,257,258,261,264,267,270,272,274,277],{"class":225,"line":226},[223,259,260],{"class":229},"sudo",[223,262,263],{"class":232}," apt",[223,265,266],{"class":232}," update",[223,268,269],{"class":243}," && ",[223,271,260],{"class":229},[223,273,263],{"class":232},[223,275,276],{"class":232}," upgrade",[223,278,280],{"class":279},"sKJT9"," -y\n",[171,282,283],{},"Cài đặt các gói công cụ thiết yếu thường dùng trong quản trị Linux:",[214,285,287],{"className":216,"code":286,"language":218,"meta":219,"style":219},"sudo apt install -y curl wget git nano htop net-tools software-properties-common ufw fail2ban\n",[188,288,289],{"__ignoreMap":219},[223,290,291,293,295,298,301,304,307,310,313,316,319,322,325],{"class":225,"line":226},[223,292,260],{"class":229},[223,294,263],{"class":232},[223,296,297],{"class":232}," install",[223,299,300],{"class":279}," -y",[223,302,303],{"class":232}," curl",[223,305,306],{"class":232}," wget",[223,308,309],{"class":232}," git",[223,311,312],{"class":232}," nano",[223,314,315],{"class":232}," htop",[223,317,318],{"class":232}," net-tools",[223,320,321],{"class":232}," software-properties-common",[223,323,324],{"class":232}," ufw",[223,326,327],{"class":232}," fail2ban\n",[204,329],{},[166,331,333],{"id":332},"bước-2-thiết-lập-múi-giờ-hệ-thống-timezone","Bước 2: Thiết lập Múi giờ hệ thống (Timezone)",[171,335,336,337,340,341,344],{},"Để các file log (",[188,338,339],{},"/var/log/syslog",", Nginx log, Docker log) ghi lại chính xác thời gian theo giờ Việt Nam (GMT+7), hãy chuyển đổi múi giờ sang ",[188,342,343],{},"Asia/Ho_Chi_Minh",":",[214,346,348],{"className":216,"code":347,"language":218,"meta":219,"style":219},"sudo timedatectl set-timezone Asia/Ho_Chi_Minh\n",[188,349,350],{"__ignoreMap":219},[223,351,352,354,357,360],{"class":225,"line":226},[223,353,260],{"class":229},[223,355,356],{"class":232}," timedatectl",[223,358,359],{"class":232}," set-timezone",[223,361,362],{"class":232}," Asia/Ho_Chi_Minh\n",[171,364,365],{},"Kiểm tra lại cấu hình thời gian:",[214,367,369],{"className":216,"code":368,"language":218,"meta":219,"style":219},"timedatectl\n",[188,370,371],{"__ignoreMap":219},[223,372,373],{"class":225,"line":226},[223,374,368],{"class":229},[171,376,377,378,191],{},"Màn hình sẽ hiển thị ",[188,379,380],{},"Time zone: Asia/Ho_Chi_Minh (+07, +0700)",[171,382,383],{},"Đảm bảo dịch vụ đồng bộ thời gian mạng (NTP Synchronization) đang hoạt động:",[214,385,387],{"className":216,"code":386,"language":218,"meta":219,"style":219},"sudo timedatectl set-ntp on\n",[188,388,389],{"__ignoreMap":219},[223,390,391,393,395,398],{"class":225,"line":226},[223,392,260],{"class":229},[223,394,356],{"class":232},[223,396,397],{"class":232}," set-ntp",[223,399,400],{"class":232}," on\n",[204,402],{},[166,404,406],{"id":405},"bước-3-tạo-và-cấu-hình-bộ-nhớ-ram-ảo-swap-file","Bước 3: Tạo và Cấu hình Bộ nhớ RAM ảo (Swap File)",[171,408,409,410,413],{},"Trên các máy chủ VPS dung lượng RAM khiêm tốn (1GB - 2GB RAM), tạo thêm ",[199,411,412],{},"Swap File"," (sử dụng một phần ổ cứng SSD làm bộ nhớ tạm khi RAM vật lí bị đầy) là bắt buộc để ngăn ngừa hệ thống bị treo đột ngột.",[415,416,418,421],"info-box",{"type":417},"info",[171,419,420],{},"Qui tắc chọn dung lượng Swap phổ biến:",[175,422,423,429],{},[178,424,425,426,191],{},"VPS RAM 1GB - 2GB: Tạo Swap dung lượng ",[199,427,428],{},"2GB - 4GB",[178,430,431,432,191],{},"VPS RAM 4GB - 8GB: Tạo Swap dung lượng ",[199,433,434],{},"4GB",[436,437,439],"h3",{"id":438},"bước-31-kiểm-tra-swap-hiện-tại","Bước 3.1: Kiểm tra Swap hiện tại",[214,441,443],{"className":216,"code":442,"language":218,"meta":219,"style":219},"sudo swapon --show\nfree -h\n",[188,444,445,455],{"__ignoreMap":219},[223,446,447,449,452],{"class":225,"line":226},[223,448,260],{"class":229},[223,450,451],{"class":232}," swapon",[223,453,454],{"class":279}," --show\n",[223,456,458,461],{"class":225,"line":457},2,[223,459,460],{"class":229},"free",[223,462,463],{"class":279}," -h\n",[171,465,466],{},"Nếu không có kết quả nào trả về, máy chủ của bạn chưa có Swap.",[436,468,470],{"id":469},"bước-32-khởi-tạo-file-swap-dung-lượng-2gb-hoặc-4gb","Bước 3.2: Khởi tạo file Swap dung lượng 2GB (hoặc 4GB)",[214,472,474],{"className":216,"code":473,"language":218,"meta":219,"style":219},"# Cấp phát 2GB dung lượng cho file /swapfile\nsudo fallocate -l 2G /swapfile\n\n# Phân quyền nghiêm ngặt chỉ cho root đọc/ghi\nsudo chmod 600 /swapfile\n\n# Định dạng file thành vùng nhớ Swap\nsudo mkswap /swapfile\n\n# Kích hoạt Swap\nsudo swapon /swapfile\n",[188,475,476,482,498,505,511,524,529,535,545,550,556],{"__ignoreMap":219},[223,477,478],{"class":225,"line":226},[223,479,481],{"class":480},"sGGCZ","# Cấp phát 2GB dung lượng cho file /swapfile\n",[223,483,484,486,489,492,495],{"class":225,"line":457},[223,485,260],{"class":229},[223,487,488],{"class":232}," fallocate",[223,490,491],{"class":279}," -l",[223,493,494],{"class":232}," 2G",[223,496,497],{"class":232}," /swapfile\n",[223,499,501],{"class":225,"line":500},3,[223,502,504],{"emptyLinePlaceholder":503},true,"\n",[223,506,508],{"class":225,"line":507},4,[223,509,510],{"class":480},"# Phân quyền nghiêm ngặt chỉ cho root đọc/ghi\n",[223,512,514,516,519,522],{"class":225,"line":513},5,[223,515,260],{"class":229},[223,517,518],{"class":232}," chmod",[223,520,521],{"class":279}," 600",[223,523,497],{"class":232},[223,525,527],{"class":225,"line":526},6,[223,528,504],{"emptyLinePlaceholder":503},[223,530,532],{"class":225,"line":531},7,[223,533,534],{"class":480},"# Định dạng file thành vùng nhớ Swap\n",[223,536,538,540,543],{"class":225,"line":537},8,[223,539,260],{"class":229},[223,541,542],{"class":232}," mkswap",[223,544,497],{"class":232},[223,546,548],{"class":225,"line":547},9,[223,549,504],{"emptyLinePlaceholder":503},[223,551,553],{"class":225,"line":552},10,[223,554,555],{"class":480},"# Kích hoạt Swap\n",[223,557,559,561,563],{"class":225,"line":558},11,[223,560,260],{"class":229},[223,562,451],{"class":232},[223,564,497],{"class":232},[436,566,568],{"id":567},"bước-33-tự-động-kích-hoạt-swap-khi-máy-chủ-reboot","Bước 3.3: Tự động kích hoạt Swap khi máy chủ reboot",[171,570,571,572,344],{},"Mở file ",[188,573,574],{},"/etc/fstab",[214,576,578],{"className":216,"code":577,"language":218,"meta":219,"style":219},"sudo nano /etc/fstab\n",[188,579,580],{"__ignoreMap":219},[223,581,582,584,586],{"class":225,"line":226},[223,583,260],{"class":229},[223,585,312],{"class":232},[223,587,588],{"class":232}," /etc/fstab\n",[171,590,591],{},"Thêm dòng sau vào cuối file:",[214,593,598],{"className":594,"code":596,"language":597,"meta":219},[595],"language-text","/swapfile none swap sw 0 0\n","text",[188,599,596],{"__ignoreMap":219},[436,601,603],{"id":602},"bước-34-tối-ưu-thông-số-swappiness","Bước 3.4: Tối ưu thông số Swappiness",[171,605,606,607,610,611,614],{},"Mặc định Linux có thông số ",[188,608,609],{},"vm.swappiness = 60"," (sử dụng swap khá sớm). Đối với máy chủ VPS chạy database hoặc web server, bạn nên giảm giá trị này xuống ",[188,612,613],{},"10"," để hệ thống ưu tiên dùng tối đa RAM vật lí tốc độ cao và chỉ dùng Swap khi thực sự khẩn cấp:",[214,616,618],{"className":216,"code":617,"language":218,"meta":219,"style":219},"# Tạm thời áp dụng\nsudo sysctl vm.swappiness=10\nsudo sysctl vm.vfs_cache_pressure=50\n\n# Lưu vĩnh viễn vào file cấu hình\nsudo tee -a /etc/sysctl.d/99-swap.conf \u003C\u003C 'EOF'\nvm.swappiness=10\nvm.vfs_cache_pressure=50\nEOF\n",[188,619,620,625,638,650,654,659,678,683,688],{"__ignoreMap":219},[223,621,622],{"class":225,"line":226},[223,623,624],{"class":480},"# Tạm thời áp dụng\n",[223,626,627,629,632,635],{"class":225,"line":457},[223,628,260],{"class":229},[223,630,631],{"class":232}," sysctl",[223,633,634],{"class":232}," vm.swappiness=",[223,636,637],{"class":279},"10\n",[223,639,640,642,644,647],{"class":225,"line":500},[223,641,260],{"class":229},[223,643,631],{"class":232},[223,645,646],{"class":232}," vm.vfs_cache_pressure=",[223,648,649],{"class":279},"50\n",[223,651,652],{"class":225,"line":507},[223,653,504],{"emptyLinePlaceholder":503},[223,655,656],{"class":225,"line":513},[223,657,658],{"class":480},"# Lưu vĩnh viễn vào file cấu hình\n",[223,660,661,663,666,669,672,675],{"class":225,"line":526},[223,662,260],{"class":229},[223,664,665],{"class":232}," tee",[223,667,668],{"class":279}," -a",[223,670,671],{"class":232}," /etc/sysctl.d/99-swap.conf",[223,673,674],{"class":236}," \u003C\u003C",[223,676,677],{"class":232}," 'EOF'\n",[223,679,680],{"class":225,"line":531},[223,681,682],{"class":232},"vm.swappiness=10\n",[223,684,685],{"class":225,"line":537},[223,686,687],{"class":232},"vm.vfs_cache_pressure=50\n",[223,689,690],{"class":225,"line":547},[223,691,692],{"class":232},"EOF\n",[171,694,695],{},"Kiểm tra lại dung lượng RAM & Swap sau khi hoàn tất:",[214,697,699],{"className":216,"code":698,"language":218,"meta":219,"style":219},"free -h\n",[188,700,701],{"__ignoreMap":219},[223,702,703,705],{"class":225,"line":226},[223,704,460],{"class":229},[223,706,463],{"class":279},[204,708],{},[166,710,712],{"id":711},"bước-4-tạo-tài-khoản-quản-trị-viên-sudo-user","Bước 4: Tạo tài khoản Quản trị viên (Sudo User)",[171,714,715,716,718,719,722],{},"Tránh sử dụng tài khoản ",[188,717,190],{}," cho các công việc thường nhật. Tạo một user mới (ví dụ: ",[188,720,721],{},"adminuser","):",[214,724,726],{"className":216,"code":725,"language":218,"meta":219,"style":219},"# Tạo user mới\nsudo adduser adminuser\n\n# Cấp quyền quản trị viên Sudo\nsudo usermod -aG sudo adminuser\n",[188,727,728,733,743,747,752],{"__ignoreMap":219},[223,729,730],{"class":225,"line":226},[223,731,732],{"class":480},"# Tạo user mới\n",[223,734,735,737,740],{"class":225,"line":457},[223,736,260],{"class":229},[223,738,739],{"class":232}," adduser",[223,741,742],{"class":232}," adminuser\n",[223,744,745],{"class":225,"line":500},[223,746,504],{"emptyLinePlaceholder":503},[223,748,749],{"class":225,"line":507},[223,750,751],{"class":480},"# Cấp quyền quản trị viên Sudo\n",[223,753,754,756,759,762,765],{"class":225,"line":513},[223,755,260],{"class":229},[223,757,758],{"class":232}," usermod",[223,760,761],{"class":279}," -aG",[223,763,764],{"class":232}," sudo",[223,766,742],{"class":232},[171,768,769],{},"Chuyển sang user mới và kiểm tra quyền:",[214,771,773],{"className":216,"code":772,"language":218,"meta":219,"style":219},"su - adminuser\nsudo whoami\n# Kết quả hiển thị 'root' nghĩa là thành công\n",[188,774,775,785,792],{"__ignoreMap":219},[223,776,777,780,783],{"class":225,"line":226},[223,778,779],{"class":229},"su",[223,781,782],{"class":232}," -",[223,784,742],{"class":232},[223,786,787,789],{"class":225,"line":457},[223,788,260],{"class":229},[223,790,791],{"class":232}," whoami\n",[223,793,794],{"class":225,"line":500},[223,795,796],{"class":480},"# Kết quả hiển thị 'root' nghĩa là thành công\n",[204,798],{},[166,800,802],{"id":801},"bước-5-cấu-hình-khóa-xác-thực-ssh-key","Bước 5: Cấu hình Khóa xác thực SSH Key",[171,804,805],{},"Từ máy tính cá nhân của bạn, hãy tạo cặp khóa SSH (nếu chưa có) và gửi khóa công khai (Public Key) lên VPS:",[214,807,809],{"className":216,"code":808,"language":218,"meta":219,"style":219},"# Chạy trên máy tính của bạn (Local)\nssh-copy-id adminuser@\u003CIP_MÁY_CHỦ>\n",[188,810,811,816],{"__ignoreMap":219},[223,812,813],{"class":225,"line":226},[223,814,815],{"class":480},"# Chạy trên máy tính của bạn (Local)\n",[223,817,818,821,824,826,828,830],{"class":225,"line":457},[223,819,820],{"class":229},"ssh-copy-id",[223,822,823],{"class":232}," adminuser@",[223,825,237],{"class":236},[223,827,240],{"class":232},[223,829,244],{"class":243},[223,831,247],{"class":236},[171,833,834],{},"Sau đó thử đăng nhập bằng SSH Key:",[214,836,838],{"className":216,"code":837,"language":218,"meta":219,"style":219},"ssh adminuser@\u003CIP_MÁY_CHỦ>\n",[188,839,840],{"__ignoreMap":219},[223,841,842,844,846,848,850,852],{"class":225,"line":226},[223,843,117],{"class":229},[223,845,823],{"class":232},[223,847,237],{"class":236},[223,849,240],{"class":232},[223,851,244],{"class":243},[223,853,247],{"class":236},[204,855],{},[166,857,859],{"id":858},"bước-6-khởi-động-tường-lửa-ufw","Bước 6: Khởi động Tường lửa UFW",[171,861,862],{},"Trước khi đăng xuất, hãy mở tường lửa và cho phép cổng SSH hoạt động:",[214,864,866],{"className":216,"code":865,"language":218,"meta":219,"style":219},"# Mặc định chặn vào, cho phép ra\nsudo ufw default deny incoming\nsudo ufw default allow outgoing\n\n# Mở cổng SSH\nsudo ufw allow ssh\n\n# Mở cổng Web nếu cần\nsudo ufw allow http\nsudo ufw allow https\n\n# Kích hoạt tường lửa\nsudo ufw enable\n",[188,867,868,873,888,902,906,911,922,926,931,942,953,957,963],{"__ignoreMap":219},[223,869,870],{"class":225,"line":226},[223,871,872],{"class":480},"# Mặc định chặn vào, cho phép ra\n",[223,874,875,877,879,882,885],{"class":225,"line":457},[223,876,260],{"class":229},[223,878,324],{"class":232},[223,880,881],{"class":232}," default",[223,883,884],{"class":232}," deny",[223,886,887],{"class":232}," incoming\n",[223,889,890,892,894,896,899],{"class":225,"line":500},[223,891,260],{"class":229},[223,893,324],{"class":232},[223,895,881],{"class":232},[223,897,898],{"class":232}," allow",[223,900,901],{"class":232}," outgoing\n",[223,903,904],{"class":225,"line":507},[223,905,504],{"emptyLinePlaceholder":503},[223,907,908],{"class":225,"line":513},[223,909,910],{"class":480},"# Mở cổng SSH\n",[223,912,913,915,917,919],{"class":225,"line":526},[223,914,260],{"class":229},[223,916,324],{"class":232},[223,918,898],{"class":232},[223,920,921],{"class":232}," ssh\n",[223,923,924],{"class":225,"line":531},[223,925,504],{"emptyLinePlaceholder":503},[223,927,928],{"class":225,"line":537},[223,929,930],{"class":480},"# Mở cổng Web nếu cần\n",[223,932,933,935,937,939],{"class":225,"line":547},[223,934,260],{"class":229},[223,936,324],{"class":232},[223,938,898],{"class":232},[223,940,941],{"class":232}," http\n",[223,943,944,946,948,950],{"class":225,"line":552},[223,945,260],{"class":229},[223,947,324],{"class":232},[223,949,898],{"class":232},[223,951,952],{"class":232}," https\n",[223,954,955],{"class":225,"line":558},[223,956,504],{"emptyLinePlaceholder":503},[223,958,960],{"class":225,"line":959},12,[223,961,962],{"class":480},"# Kích hoạt tường lửa\n",[223,964,966,968,970],{"class":225,"line":965},13,[223,967,260],{"class":229},[223,969,324],{"class":232},[223,971,972],{"class":232}," enable\n",[171,974,975],{},"Xem danh sách qui tắc tường lửa đang chạy:",[214,977,979],{"className":216,"code":978,"language":218,"meta":219,"style":219},"sudo ufw status\n",[188,980,981],{"__ignoreMap":219},[223,982,983,985,987],{"class":225,"line":226},[223,984,260],{"class":229},[223,986,324],{"class":232},[223,988,989],{"class":232}," status\n",[204,991],{},[166,993,995],{"id":994},"bảng-tổng-kết-các-thông-số-thiết-lập","Bảng tổng kết các thông số thiết lập",[997,998,999,1016],"table",{},[1000,1001,1002],"thead",{},[1003,1004,1005,1010,1013],"tr",{},[1006,1007,1009],"th",{"align":1008},"left","Thành phần",[1006,1011,1012],{"align":1008},"Cấu hình khuyến nghị",[1006,1014,1015],{"align":1008},"Lợi ích",[1017,1018,1019,1034,1052,1070,1085],"tbody",{},[1003,1020,1021,1027,1031],{},[1022,1023,1024],"td",{"align":1008},[199,1025,1026],{},"Múi giờ",[1022,1028,1029],{"align":1008},[188,1030,343],{},[1022,1032,1033],{"align":1008},"Log hệ thống đồng bộ theo giờ địa phương",[1003,1035,1036,1040,1049],{},[1022,1037,1038],{"align":1008},[199,1039,412],{},[1022,1041,1042,1045,1046,1048],{"align":1008},[188,1043,1044],{},"2GB"," hoặc ",[188,1047,434],{}," (swappiness=10)",[1022,1050,1051],{"align":1008},"Chống tràn RAM sập máy chủ",[1003,1053,1054,1059,1067],{},[1022,1055,1056],{"align":1008},[199,1057,1058],{},"User",[1022,1060,1061,1064,1065],{"align":1008},[188,1062,1063],{},"Non-root"," có quyền ",[188,1066,260],{},[1022,1068,1069],{"align":1008},"Giảm thiểu rủi ro thao tác nhầm",[1003,1071,1072,1077,1082],{},[1022,1073,1074],{"align":1008},[199,1075,1076],{},"Xác thực",[1022,1078,1079],{"align":1008},[188,1080,1081],{},"SSH Key Ed25519",[1022,1083,1084],{"align":1008},"Chống vét cạn mật khẩu",[1003,1086,1087,1092,1098],{},[1022,1088,1089],{"align":1008},[199,1090,1091],{},"Tường lửa",[1022,1093,1094,1097],{"align":1008},[188,1095,1096],{},"UFW"," (Deny Incoming / Allow Outgoing)",[1022,1099,1100],{"align":1008},"Đóng các cổng nhạy cảm không dùng đến",[204,1102],{},[166,1104,1106],{"id":1105},"tổng-kết","Tổng kết",[171,1108,1109,1110,1113],{},"Chỉ với 10 phút hoàn thiện ",[199,1111,1112],{},"Qui trình thiết lập ban đầu"," trên, máy chủ Ubuntu Server của bạn đã sở hữu một nền móng vững chắc, ổn định về bộ nhớ và an toàn về mặt bảo mật để sẵn sàng cho các bước cài đặt Docker, Nginx hoặc Database tiếp theo.",[1115,1116,1117],"style",{},"html pre.shiki code .sb7EE, html code.shiki .sb7EE{--shiki-default:#B392F0;--shiki-dark:#B392F0;--shiki-light:#B392F0}html pre.shiki code .skqr8, html code.shiki .skqr8{--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-light:#9ECBFF}html pre.shiki code .sWuGj, html code.shiki .sWuGj{--shiki-default:#F97583;--shiki-dark:#F97583;--shiki-light:#F97583}html pre.shiki code .sFJ4l, html code.shiki .sFJ4l{--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8;--shiki-light:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html pre.shiki code .sKJT9, html code.shiki .sKJT9{--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-light:#79B8FF}html pre.shiki code .sGGCZ, html code.shiki .sGGCZ{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-light:#6A737D}",{"title":219,"searchDepth":457,"depth":457,"links":1119},[1120,1121,1122,1123,1129,1130,1131,1132,1133],{"id":168,"depth":457,"text":169},{"id":208,"depth":457,"text":209},{"id":332,"depth":457,"text":333},{"id":405,"depth":457,"text":406,"children":1124},[1125,1126,1127,1128],{"id":438,"depth":500,"text":439},{"id":469,"depth":500,"text":470},{"id":567,"depth":500,"text":568},{"id":602,"depth":500,"text":603},{"id":711,"depth":457,"text":712},{"id":801,"depth":457,"text":802},{"id":858,"depth":457,"text":859},{"id":994,"depth":457,"text":995},{"id":1105,"depth":457,"text":1106},[9],false,"md",{"src":157,"alt":158},{},{"title":151,"description":152},null,"ubuntu-server-initial-setup","posts/ubuntu-server-initial-setup",[106,105,15],"2026-08-22","3YOtPtLXez",[1147,1152,1157,1162,1167,1172,1177,1182,1187,1192,1197,1202],{"path":5,"title":6,"categories":1148,"tags":1149,"date":16,"draft":1135,"slug":1150,"description":7,"image":1151},[9,10],[12,13,14,15],"incident-checklist",{"src":18,"alt":19},{"path":21,"title":22,"categories":1153,"tags":1154,"date":31,"draft":1135,"slug":1155,"description":23,"image":1156},[25,26],[28,29,30,10],"backup-postgres-docker",{"src":33,"alt":34},{"path":36,"title":37,"categories":1158,"tags":1159,"date":44,"draft":1135,"slug":1160,"description":38,"image":1161},[25,10],[41,42,43],"docker-compose-production",{"src":46,"alt":47},{"path":49,"title":50,"categories":1163,"tags":1164,"date":58,"draft":1135,"slug":1165,"description":51,"image":1166},[9,10],[54,55,56,57],"monitoring-server-basics",{"src":60,"alt":61},{"path":63,"title":64,"categories":1168,"tags":1169,"date":71,"draft":1135,"slug":1170,"description":65,"image":1171},[9,67],[10,69,70],"nginx-reverse-proxy",{"src":73,"alt":74},{"path":76,"title":77,"categories":1173,"tags":1174,"date":83,"draft":1135,"slug":1175,"description":78,"image":1176},[9,14],[81,82,10],"how-to-secure-a-vps",{"src":85,"alt":86},{"path":88,"title":89,"categories":1178,"tags":1179,"date":95,"draft":1135,"slug":1180,"description":90,"image":1181},[9,10],[93,94,43,41],"systemd-node-service",{"src":97,"alt":98},{"path":100,"title":101,"categories":1183,"tags":1184,"date":107,"draft":1135,"slug":1185,"description":102,"image":1186},[9,25],[105,10,106],"how-to-install-docker-on-ubuntu-server",{"src":109,"alt":110},{"path":112,"title":113,"categories":1188,"tags":1189,"date":118,"draft":1135,"slug":1190,"description":114,"image":1191},[9,14],[117,10,15],"ssh-key-authentication",{"src":120,"alt":121},{"path":123,"title":124,"categories":1193,"tags":1194,"date":131,"draft":1135,"slug":1195,"description":125,"image":1196},[9,14],[128,129,130,15],"ufw-firewall-basics",{"src":133,"alt":134},{"path":136,"title":137,"categories":1198,"tags":1199,"date":145,"draft":1135,"slug":1200,"description":138,"image":1201},[140,10],[142,143,144,30],"git-deploy-key",{"src":147,"alt":148},{"path":150,"title":151,"categories":1203,"tags":1204,"date":155,"draft":1135,"slug":1141,"description":152,"image":1205},[9],[106,105,15],{"src":157,"alt":158},[],1789616168226]