Đã bao giờ bạn từng nghĩ mình có thể tự tạo hosting tại nhà hay biến máy tính của mình thành VPS hay chưa? Trước đây mình rất nhiều lần muốn làm cái server tại nhà để chạy website cho đở tốn 5$/tháng thuê vps ở các dịch vụ cung cấp. Do điều kiện thiết bị và cấu hình server tại nhà rất phức tạp nên mãi tới năm 2020 mới làm được cái server tại nhà để chạy website. Nói server cho nó oách chứ thật ra là cái máy tính NUC cài Ubuntu và Cyber Panel.
Demo anh chị test thử: https://bdsvip.tientv.xyz
Về hiệu năng, mình hoàn toàn hài lòng khi host website tại nhà. Tuy nhiên về tính ổn định thì không thể do có nhiều vấn đề cần phải quan tâm và không dễ khắc phục. Ví dụ trường hợp mình hay gặp phải nhất là mất điện …
1. Chuẩn bị trước khi xây dựng server tại nhà
Phần cứng:
- Máy tính, laptop, Nuc kết nối mạng và có thể chạy liên tục dùng làm server.
- USB 4Gb
Kiến thức:
- Domain và hosting
- Biết sử dụng dịch vụ của Cloudflare.com
- Cách thức kết nối SSH: Xem hướng dẫn cài và sử dụng mobaxterm
- Nat modem nhà mạng đang sử dụng tại nhà.
- Tạo USB boot cài hệ điều hành Linux: Xem hướng dẫn tạo usb boot Ubuntu
Chuẩn bị phần mềm
Hệ điều hành: Bạn có thể sử dụng CentOS, Ubuntu Server, Fedora,…. tuy nhiên trong bài này mình sẽ cài Ubuntu Server.
- Ubuntu Server 20.04 LTS: https://releases.ubuntu.com/20.04
- CentOS 7, 8: https://www.centos.org/download
- Fedora Server: https://getfedora.org/en/server/download
Lưu ý: Khi tải Ubuntu các bạn nhớ chọn bản Server install image
Control Panel cho VPS: Các bạn có thể sử dụng các Panel trả phí như Direct Admin, Cpanel … để được hỗ trợ tốt hơn và bảo mật cao hơn. Tuy nhiên, với server tại gia này các bạn nên dùng Free là tốt nhất. Mình đề xuất aapanel hoặc Cyber Panel. Mình đã sử dụng qua 2 Panel free này tự thấy nhanh ổn định, bảo mật tốt, riêng Cyber Panel thì phân user tốt hơn.
Trong bài này mình sẽ sử dụng Cyberpanel: https://cyberpanel.net
Các panel miễn phí khác: https://www.aapanel.com, https://www.webmin.com, http://www.sentora.org
2. Cài đặt hệ điều hành Ubuntu server
Để cài Ubutum server thì bạn tải ubuntu và tạo usb boot cài đặt Ubuntu theo hướng dẫn: Xem hướng dẫn tạo usb boot Ubuntu
Lưu ý: Trước khi cài bạn nên xóa toàn bộ phân vùng trong SSD
Gắng USB boot cài Ubuntu vào máy tính chạy khởi động boot từ USB. Nếu thành công bạn sẽ nhận được màn hình chọn ngôn ngữ cài Ubuntu như hình sau:
Chọn tiếp English rồi Enter. Enter thêm lần nữa đến bước tiếp theo
Bạn chọn như hình đề qua bước tiếp theo
Bấm Done để qua bước tiếp theo. Tại đây bạn nên cắm dây mạng hoặc kết nối Wifi trước để nó nhận được IP từ modem luôn, khỏi phải cấu hình thủ công.
Lưu ý: ghi lại IP mạng để khi cài xong sử dụng nhe. Ip của mình ở trên là: 192.168.142.141
Bấm Done để qua bước tiếp theo
Ở hình trên mình sử dụng ổ đĩa 30GB. Các bạn xem có hiển thị hết dung lượng SSD rồi bấm Done để qua bước tiếp theo.
Lưu ý: Bước này mặc định Ubuntu sẽ không sử hết dung lượng SSD của bạn. Nên bạn cần phải chỉnh tối đa dung lượng SSD như ở phần Gạch chân màu đỏ hình trên. Ổ đĩa mình 30GB, chia cho boot 1 GB còn 28,99GB. Bấm vào dòng gạch đỏ và chỉnh dung lượng bằng dòng trên nó là được. -> bấm Done để qua bước tiếp theo
Bước này là nhập các thông tin cho server.
- Your name: Nhập tên tùy ý, không nhập ký tự đặt biệt
- Your server’s name: Nhập tên server viết liền không dấu
- Pick a username: Tên đăng nhập quản trị server, viết liền không dấu, không nhập chữ admin
- Password: Mật khẩu đăng nhập server, nhập xong nhớ nhé.
Bấm Done qua bước kế tiếp
Bước này bạn dùng phím Space để đánh dấu lự chọn cài đặt: Install OpenSSH Server
Bấm Done để qua bước tiếp
Bước này cứ để mặc định và bấm Done nhé
Quá trình cài đặt này diễn ra khoảng 15 phút hơn, sau khi cài đặt thành công chọn Reboot Now để khởi động lại máy (nhớ rút USB ra).
Khởi động lại là xong đã cài thành công Ubuntu Server
3. Cài đặt Cyber Panel để quản lý server
Để tiến hành cài đặt Cyber Panel thì mình kết nối SSH vào server bầng Mobaxterm để cài cho dể. Tiện lợi copy và Paste.
IP server của mình ở trên là: 192.168.142.141 – Các bạn xem hướng dẫn cài đặt Mobaxterm mình có để linh ở đầu bài nhé.
Sau khi đăng nhập vào SSH điền User và Pass đã tạo ở phần cài Ubuntu ta được như hình dưới
Sau khi SSH vào rồi, bạn gõ lệnh sudo để cấp quyền root cài đặt Cyber Panel.
sudo su -
Dán lệnh cài đặt Cyber Panel vào
sh <(curl https://cyberpanel.net/install.sh || wget -O - https://cyberpanel.net/install.sh)
Đợi một lát, chọn số 1 để cài đặt CyberPanel
Process check completed…
CyberPanel Installer v2.0
1. Install CyberPanel.
2. Install Addons.
3. Exit.
Please enter the number[1-3]: 1
Bạn hãy chọn: Chọn 1 Cài CyberPanel với OpenLiteSpeed
CyberPanel Installer v2.0
RAM check : 81/991MB (8.17%)
Disk check : 1/25GB (6%) (Minimal 10GB free space)
1. Install CyberPanel with OpenLiteSpeed.
2. Install Cyberpanel with LiteSpeed Enterprise.
3. Exit.
Please enter the number[1-3]: 1
Chọn y và enter để cài Full
Install Full service for CyberPanel? This will include PowerDNS, Postfix and Pure-FTPd.
Full installation [Y/n]: y
Bấm enter để mặc định không cài Remote SQL nhé
Do you want to setup Remote MySQL? (This will skip installation of local MySQL)
(Default = No) Remote MySQL [y/N]:
Bước này cài đặt Pass của Cyber (Khác với pass của Ubuntu) bấm enter để mặc định là 1234567 hoặc bạn nhập pass của bạn vào: Mình để mặc định và đổi sau
Please choose to use default admin password 1234567, randomly generate one (recommended) or specify the admin password?
Choose [d]fault, [r]andom or [s]et password: [d/r/s]
Tiếp theo, nó sẽ hỏi bạn một số thứ như: cài Memcached, LiteSpeed Memcached, Redis. Mình chọn y
để cài đặt tất cả.
Please choose to use default admin password 1234567, randomly generate one (recommended) or specify the admin password?
Choose [d]fault, [r]andom or [s]et password: [d/r/s] r (Lưu ý: chọn R để random pass admin)
Admin password will be provided once installation completed…
Replace JS/CSS files to JS Delivr?
This may improve panel loading speed in Asia Pacific region…
Please select [y/N]: y
Install Memcached extension for PHP?
Please select [y/N]: y
Install LiteSpeed Memcached?
Please select [y/N]: y
Install Redis extension for PHP?
Please select [y/N]: y
Install Redis?
Please select [y/N]: y
Cuối cùng, bạn chờ quá trình cài đặt khoảng 10 – 15 phút, sau khi cài CyberPanel thành công bạn sẽ nhận được thông tin đăng nhập như sau:
Ở chỗ visit: trong hình là IP của bạn ngoài môi trường internet, bây giờ bạn chưa nat port ra thì chưa vào được. Vì thế, bạn cần thay đổi IP thành IP cục bộ (IP nãy giờ SSH đang sử dụng của mình: 192.168.142.141).
Như vậy bạn đã cài đặt CyberPanel cho VPS xong rồi đó. Bây giờ đăng nhập vào CyberPanel thông qua 192.168.142.141:8090
bằng các thông tin trên.
Xem thêm: Hướng dẫn cài đặt bảo mật https cho trang quản trị trên CyberPanel
3. NAT Port Modem cho server
(NAT) port cho phép dữ liệu đi qua thiết bị mạng như modem, router wifi …,mà không bị ngăn chặn bởi tường lửa cho phép domain về IP nhà bạn thì domain đó mới truy cập được server web của bạn đã cài.
NAT Port trên các modem: Cái này tham khảo thôi không phải modem nào cũng như nhau và để truy cập được các cài đặt này bạn cần biết tài khoản admin đăng nhập modem nữa nhé (không có thì xin nhà mạng).
Bước 1: Truy cập vào modem đang sử dụng. Modem nhà mình đang sử dụng là của Viettel có địa chỉ truy cập, user và pass ghi ở dưới modem: 192.168.1.1
Bước 2: Gán Ip mặc định cho con server của mình
- Bạn vào phần Lan trong Modem tìm Ip mà thiết bị của mình nhận lúc cài ubuntu như của mình là: 192.168.142.141. Xem địa chỉ Mac của máy server là gì. Ví dụ: 54:27:1e:e4:1e:9d
- Vào phần DHCP Binding để gán IP cho máy server của mình. Để khi khởi động máy server là thì mặc định modem sẽ cấp IP đã gán và Server. Như vậy thì những phần Nat của chúng ta không bị lỗi nhé.
Lưu ý: Bạn nên chọn dãy IP ít sử dụng theo modem để gán.
Bước 3: Nat Port
- Vào Security > DMZ Host (Tùy mỗi modem mà tìm DMZ nhé): Mục này mình phải điền Ip của server đã gán ở trên. Khi truy cập bên ngoài vào mạng nhà mình thì mặc định chuyển tới máy server thay vì các máy tính khác trong hệ thống mạng nhà mình.
- Chuyển qua Port Forwarding để cho Nat các Port dưới.
Please make sure you have opened following port for both in/out:
TCP: 8090 for CyberPanel
TCP: 80, TCP: 443 and UDP: 443 for webserver
TCP: 21 and TCP: 40110-40210 for FTP
TCP: 25, TCP: 587, TCP: 465, TCP: 110, TCP: 143 and TCP: 993 for mail service
TCP: 53 and UDP: 53 for DNS service
Lưu ý: Hình trên là ví dụ chuyển Port 8090. Bạn phải làm lần lượt các port ở trên nhé.
Như vậy là Nat Port xong bạn vào đây để kiểm tra Port nát thành công không. Như hình dưới là thành công
4. Tự động cập nhật IP động cho tên miền.
Internet ở gia đình thì mặc định IP WAN (Địa chỉ IP của mình ngoài internet) sẽ thay đổi liên tục. Vậy nên khi bạn dùng tên miền để truy cập vào Server tại nhà thì bắt buộc phải chỉnh DNS khi IP WAN thay đổi. Mục này hướng dẫn cập nhật tự động DNS cho tên miền.
Lưu ý: Nếu nhà bạn nào có điều kiện sài IP tỉnh thì bỏ qua bước này
Để có thể đổi IP tự động thì mình dùng Cloudflare để thực hiện. Ưu điểm của Cloudflare là cập nhật DNS cực kỳ nhanh và có API liên kết để thực hiện.
Cài đặt và cấu hình Cloudflare
Bước 1: Đăng ký tài khoản và Chuyển DNS tên miền về Cloudflare.com -> Search google vài bước là xong
Bước 2: Lấy API Cloudflare -> Sau khi add tên miền cần đưa về host thì bạn sẽ thấy API
Bước 3: Truy cập vào SSH server để cài đặt và cấu hình chạy cập nhật IP như sau
git clone https://github.com/LINKIWI/cloudflare-ddns-client.git
cd cloudflare-ddns-client
sudo apt install python-is-python3
sudo apt-get install python3-pip
sudo make install
cloudflare-ddns --configure
- Choose [T]oken or [K]ey: chọn chữ K rồi Enter.
- Email: email đăng nhập cloudflare của bạn
- API Key: dán API Key đã lấy từ bước 2 vào.
- Comma-delimited domains: nhập domain cần cập nhật IP vào, nhiều domain thì cách nhau bằng dấu chấm phẩy (,)
Khi nhận được thông báo Configuration file written…. successfully. Gõ tiếp lệnh sau để cập nhật IP vào domain của bạn
cloudflare-ddns --update-now
Thêm cron job tự động cập nhật IP
crontab -e
Chọn 1 tiếp tục nhé
Trong giao diện chỉnh sửa crontab, bạn thêm dòng này vào cuối và lưu lại. Dòng này mang ý nghia là sau 5 phút sẽ update IP một lần, các bạn có thể thay đổi theo ý thích nhé.
*/5 * * * * /usr/local/bin/cloudflare-ddns --update-now
Bấm Ctrl + Z để thoát khỏi trình soạn thảo.
Cuối cùng: Khởi động lại server.
Để kiểm tra thì bạn thử tắt Modem và xem CloudFlare có cập nhật IP không nhé.
Xem thêm: Hướng dẫn cài đặt bảo mật https cho trang quản trị trên CyberPanel
Lời kết
Như vậy là mình đã hướng dẫn các bạn các bước chi tiết nhất để xây dựng một server riêng tại nhà phục vụ cho việc nghiêng cứu và vọc vạch rồi. Về thực tế bạn có thể dùng server này để chạy các web demo cho khác hàng hoặc dùng để làm VPS chính cho các web của bạn cũng được.