- Một ngày đẹp trời rãnh rỗi cài lại em máy cổ W520 của tui, chán ZimaOS rồi, nó đóng quá, siêu bí bách :0 chả cài gì, vọc vạch được. Tui lại tái hòa nhập với cộng đồng xD, Ubuntu Server (24 LTS) thẳng tiến. Cài siêu dễ luôn á, blog này chỉ để lưu lại khi tui cần cài gì tôi lên đây lấy về cho nhanh :) đỡ search. Nhớ đâu viết đến đấy (hoặc làm tới đâu nhớ thì viết) nên có thể mọi người vào mỗi thời gian thì sẽ thấy nội dung nó khác nhau.

- ZimaOS dùng làm NAS server thì đúng bài, đẹp, tiện nhẹ, có bán sẵn Server luôn, tên là ZimaCube, trông vuông vuông gọn gọn nhìn đẹp cực
- À tại sao tui lại cài Ubuntu Server á, dễ xài nhất rồi :) có gì fix cho khỏe. Hiện giờ daily tui dùng Debian, quen thuộc với package apt của nhà Debian rồi, tại daily tui dùng Debian

Config cơ bản
Check ip, SSH Config

- Để SSH vào mà cài luôn
ip a | grep 192.168- Lười, list ip ra rồi pick thằng 192.168 luôn, của mình là 192.168.88.155, quá ngon ta đã có địa chỉ của nhà người yêu rồi. Giờ ta sẽ nhắn tin, alo rủ ẻm đi chơi => SSH
ssh hihi@192.168.88.155- Nếu lười nhập pass mỗi lần SSH thì làm cách này, ở máy local, tạo một file ~/.ssh/config
nano ~/.ssh/config- Với nội dung
Host xyz HostName xxx.yyy.zz.aaa User root IdentityFile ~/.ssh/id_gitlab_lcaohoanq
Host w520 HostName 192.168.88.155 User lcaohoanq IdentityFile ~/.ssh/id_ed25519- Chú ý ref tới các IdentityFile cho đúng nha, check lại xem có không
❯ ls -al ~/.ssh.rw-rw-r-- 188 lcaohoanq 26 Dec 22:51 config.r-------- 411 lcaohoanq 14 Dec 15:33 id_ed25519.rw-rw-r-- 100 lcaohoanq 14 Dec 15:33 id_ed25519.pub.r-------- 2.6k lcaohoanq 14 Dec 15:33 id_gitlab_lcaohoanq.rw-rw-r-- 569 lcaohoanq 14 Dec 15:33 id_gitlab_lcaohoanq.pub.rw------- 6.0k lcaohoanq 26 Dec 22:51 known_hosts.rw------- 5.2k lcaohoanq 26 Dec 22:51 known_hosts.old- Cuối cùng copy public key (file .pub) đưa lên server là xong
ssh-copy-id -i ~/.ssh/id_ed25519.pub lcaohoanq@192.168.88.155- Test vào lại
ssh -i /home/lcaohoanq/.ssh/id_ed25519 'lcaohoanq@192.168.88.155'- Test phát cuối
ssh w520- Nếu vào được thì ngon lành cành đào
VPN: Tailscale

- WireGuard xịn sò hơn mà config lằng nhằng quá, từ bỏ luôn, hiện dùng mỗi Tailscale
nhanh,tiện,sướng - Ref doc đi: https://tailscale.com/kb/1031/install-linux
- Chạy lệnh này cài
curl -fsSL https://tailscale.com/install.sh | sh- Cài xong thì sudo tailscale up, Tailscale trả ra một url auth, copy vào browser rồi Login để nhận device là xong
Tunnel: Cloudflare
![]()
- Cài tá lả
# Add cloudflare gpg keysudo mkdir -p --mode=0755 /usr/share/keyringscurl -fsSL https://pkg.cloudflare.com/cloudflare-public-v2.gpg | sudo tee /usr/share/keyrings/cloudflare-public-v2.gpg >/dev/null
# Add this repo to your apt repositoriesecho 'deb [signed-by=/usr/share/keyrings/cloudflare-public-v2.gpg] https://pkg.cloudflare.com/cloudflared any main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
# install cloudflaredsudo apt-get update && sudo apt-get install cloudflared- Sau khi cài xong rồi thì chạy tiếp lệnh này để nó nhận tunnel trên dashboard của mình, tự lắp token nhóe
sudo cloudflared service install tokentokentokentokentokentoken....Docker

- Doc là chân ái, ráng vào Ctrl + C/V đi anh zai
- Cài xong run được cái container hello-world chưa chắc ngon đâu nha, check docker ps phát xem thử có bị bug permission không? Sửa ở đây (https://stackoverflow.com/questions/48957195/how-to-fix-docker-permission-denied), lỗi do user hiện tại chưa được thêm vào group á mà, 99.9% cài mới docker đều bị :) gặp hoài luôn
Netdata
- Giám sát server, container, app,… siêu ngon, nhẹ, đẹp, dễ xài
- Có 2 cách cài:
- Cài bằng script: Script install
wget
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh- Cài bằng Docker (ưu tiên cách này): Docker install
docker run
docker run -d --name=netdata \ --pid=host \ --network=host \ -v netdataconfig:/etc/netdata \ -v netdatalib:/var/lib/netdata \ -v netdatacache:/var/cache/netdata \ -v /:/host/root:ro,rslave \ -v /etc/passwd:/host/etc/passwd:ro \ -v /etc/group:/host/etc/group:ro \ -v /etc/localtime:/etc/localtime:ro \ -v /proc:/host/proc:ro \ -v /sys:/host/sys:ro \ -v /etc/os-release:/host/etc/os-release:ro \ -v /var/log:/host/var/log:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ -v /run/dbus:/run/dbus:ro \ --restart unless-stopped \ --cap-add SYS_PTRACE \ --cap-add SYS_ADMIN \ --security-opt apparmor=unconfined \ netdata/netdata- Xong rồi truy cập http://server-ip:19999 để xem dashboard thôi
Trường hợp nếu xoay xoay mãi không vào được, hãy kiểm tra xem
- Port
19999có đang listen không
sudo ss -tulpn | grep 19999tcp LISTEN 0 4096 0.0.0.0:19999 0.0.0.0:* users:(("netdata",pid=136540,fd=6))tcp LISTEN 0 4096 [::]:19999 [::]:* users:(("netdata",pid=136540,fd=8))- Firewall có chặn port 19999 không
sudo ufw status- Nếu có chặn thì mở port 19999 lên
sudo ufw allow 19999/tcpsudo ufw reloadDozzle
- Xem log container realtime trên web, nhanh, nhẹ
- Cài bằng Docker
#Default: https://dozzle.dev/guide/getting-started
# I adjust port mapping to avoid conflict with Spring Boot appdocker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 8888:8080 amir20/dozzle:latest- Thường mình sẽ map ra port 8888:8080 để khỏi trùng container Spring Boot (8080)
Set IP Tĩnh, Tắt DHCP
Thỉnh thoảng sẽ cần cho homelab server IP tĩnh, không đổi, để dễ quản lý, có 2 cách:
-
Cấu hình trên Router (nếu router có hỗ trợ)
-
Cấu hình trực tiếp trên server (cách này mình hay dùng), mình sẽ hướng dẫn cách này nha
-
Kiểm tra cấu hình ở
/etc/netplan/
ls /etc/netplan/Thường file sẽ có tên dạng 01-netcfg.yaml, 50-cloud-init.yaml hoặc 00-installer-config.yaml
- Sửa file với quyền sudo
Mình là 50-cloud-init.yaml
sudo vi /etc/netplan/50-cloud-init.yaml- Nếu chưa chỉnh gì thì dhcp4: true, chú ý các khoảng trắng, indent đúng nha
network: version: 2 renderer: networkd ethernets: eth0: # Thay bằng tên card mạng của bạn, kiểm tra bằng ip a | grep 192.168 dhcp4: no addresses: - 192.168.88.155/24 # Địa chỉ IP tĩnh bạn muốn đặt cho server, mình lấy luôn cái IP mà router cấp hiện tại routes: - to: default via: 192.168.88.1 # Địa chỉ IP của Router (Gateway), mình xài router VNPT nameservers: addresses: [8.8.8.8, 1.1.1.1] # DNS của Google và CloudflareLưu file lại, rồi chạy lệnh này để áp dụng cấu hình mới
sudo netplan try # Thử cấu hình mới trướcNếu không có lỗi gì, bấm Enter để áp dụng, nếu có lỗi gì nó sẽ tự rollback lại cấu hình cũ sau 120s
Chắc chắn đúng thì hãy dùng
sudo netplan applyKiểm tra lại IP thực tế
hostname -I- Nếu IP đúng như cấu hình thì okie, xong rồi đó :)
Trường hợp oái ăm (mới gặp phải)
-
Xong hết các bước trên nhưng ssh vào server không được, báo lỗi timeout, không kết nối được. Kì cục vãi
-
Confirm rằng
- Hostname đã đúng
/etc/netplan/xxx.yamlđã đúng syntax- Đúng tên card mạng
- Firewall có chặn không
- Check SSH đang listen không
sudo ss -tulpn | grep ssh# Hoặc grep port 22 luôn cũng được- Nếu ra kết quả, oke vậy là đã listen port 1604 rồi, bước cuối check ssh service đang chạy không
sudo systemctl status ssh- Nếu không chạy thì start nó lên
sudo systemctl enable sshsudo systemctl start ssh- Oke xong rồi thử ssh lại xem được chưa nha :)
Cập nhật thêm, giờ post này như nhà kho vậy, bắt đầu từ Ubuntu nhưng sau này có khi tui sẽ thêm các distro khác vào, ví dụ như Alpine Linux, CentOS, Debian… nào đặc biệt hay gặp thì sẽ note vào
Alpine Linux
Do launch một LXC Alpine Linux trên Proxmox, nên tui sẽ note lại cách setup cơ bản Alpine Linux luôn
Check SSH đang chạy không
sudo rc-service sshd statusCó 2 trường hợp, thường thì launch một instance mới sẽ chưa cài sshd
alpine3-experiment:~# rc-service sshd status * rc-service: service `sshd' does not exist- Nếu chưa cài sshd thì chạy lệnh này để cài
sudo apk updatesudo apk add openssh- Check lại status
alpine3-experiment:~# rc-service sshd status * status: stopped- Start sshd
sudo rc-update add sshdsudo rc-service sshd startsudo rc-service sshd statusCần Python, để kết nối từ Ansible
sudo apk add python3