[Home Server] Hôm nào!!!
CasaOS là cái gì
CasaOS là một phần mềm mã nguồn mở được xây dựng trên hệ sinh thái docker. Nó có thể đơn giản hóa quá trình triển khai và quản lý ứng dụng container.
CasaOS được phát hành bởi IceWhale Technology vào năm 2021. CasaOS nhằm mục đích xác định lại trải nghiệm kỹ thuật số đám mây riêng cho người dùng và nhà phát triển thông qua dân chủ hóa dữ liệu và cho phép mọi người đưa mục tiêu đó lên một quy mô mới.
- Tính năng của CasaOS
- Quản lý tất các tệp trong FILES.
- Chia sẻ file qua mạng.
- Dễ dàng cài đặt và quản lý nhiều các docker container.
- Tự do thêm ổ đĩa và không gian mở rộng.
- Bảo vệ dữ liệu riêng tư của bạn
- Chia sẻ file qua mạng.
Phần cứng
- Main Celeron cùi xin được
- Card Wifi mSata cũng xin được
- SSD mSata ORICO phải mua
- Case cũng phải mua
- HDD SATA vẫn là đồ đi xin
- Và 1 đường truyền internet cắm dây vì nhiều lí do linh tinh Tí nữa sẽ giải thích
Thiết lập Debian 12 “Bookworm”
Dùng Debian 12 vì đây là hàng
Official Support,TestedvàRecommended
Desktop Environment thì chọn XFCE cho nhẹ, hoặc KDE cho nhiều tính năng. Máy cùi Celeron thì chọn XFCE thôi
Nên cài = file ISO netinstall, chứ cài bằng file full lại phải vào /etc/apt/sources.list tắt cái source DVD đi. Không tắt thì apt update nó lại báo lỗi thiếu source, lằng nhằng lắm
Cài Debian 12 đến bước chọn Desktop Environment có thể chọn luôn
XFCE,ssh servervàstandard system utilitiescho nhanh
Chạy với quyền
su
1 su -
Debian 12 “Bookworm” và XFCE Minimal (Vì tiết kiệm vài trăm MB mà ta thêm vài trăm bước thao tác)
Cài Debian không có DE - Sau đấy cài XFCE1
Debian chưa có gói
sudođâu nên vẫn phải chạysu -từ trước
1
nano /etc/apt/sources
Thêm non-free vào. Lúc sửa thì tìm đúng dòng để sửa: Thực ra thêm vào cuối file cũng được, nhưng mà sau này lúc nào apt update nó cũng báo trùng nhìn khó chịu lắm.
1
deb http://deb.debian.org/debian bookworm main contrib non-free-firmware non-free
Cập nhật nguồn và cài xfce và các gói bổ sung tính năng khác
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo apt update
apt install sudo
apt install xfce4
apt install \
libxfce4ui-utils \
thunar \
xfce4-appfinder \
xfce4-panel \
xfce4-session \
xfce4-settings \
xfce4-terminal \
xfce4-power-manager \
xfconf \
xfdesktop4 \
xfwm4\
network-manager-gnome
Cài các phần mềm linh tinh khác (Tùy sở thích)
1
2
3
4
apt install \
epiphany-browser \ # Simple yet powerful GNOME web browser targeted at non-technical users
atril \ # simple multi-page document viewer: PostScript (PS), Encapsulated PostScript (EPS), DJVU, DVI, XPS and PDF
ristretto \ # image viewer for the Xfce desktop environment
1
reboot now
Nếu sau khi khởi động lại mà Network Manager không hiển thị kết nối Ethernet/LAN dù vẫn có mạng:
Chạy lệnhsudo nano /etc/NetworkManager/NetworkManager.conf
Sửa[ifupdown] managed=falsethànhtrueThêm dòng này vào cuối
1 2 [keyfile] unmanaged-devices=*,except:type:wifi,except:type:wwan,except:type:ethernetKhởi động lại service
sudo service network-manager restartHoặc khởi động lạisudo reboot now
Cài Debian kèm XFCE - Sau đó xóa bớt2
1
2
3
4
5
6
7
8
9
10
11
12
cd ~
https://github.com/LostByteSoft/Debian-10
cd Debian-10
cd Debian_12
chmod +x *.sh
./remove ALL deb 12.5 excep zzz.sh
./remove zzz evince.sh
./remove zzz firefox-esr.sh
./remove zzz gimp.sh
./remove zzz libreoffice.sh
./remove zzz rhythmbox.sh
apt autoremove
Thêm user chính vào sudo
1
usermod -aG sudo <username>
Cài driver Wifi
Cái card wifi xin được kia lại dùng chip
Broadcom BCM43142 (PCI ID 14e4:4365), và đáng buồn là phải cài driver wifi chứ Debian không tự nhận
1
nano /etc/apt/sources.list
Thêm non-free vào. Lúc sửa thì tìm đúng dòng để sửa: Thực ra thêm vào cuối file cũng được, nhưng mà sau này lúc nào apt update nó cũng báo trùng nhìn khó chịu lắm.
1
deb http://deb.debian.org/debian bookworm main contrib non-free-firmware non-free
- Thao tác
- Cập nhật danh sách gói
- Cài gói cần thiết
linux-imagetương ứng,linux-headersvàbroadcom-sta-dkms- Vô hiệu hóa module xung đột
- Nạp module
wl - Cài gói cần thiết
1
2
3
4
apt-get update
apt-get install linux-image-$(uname -r|sed 's,[^-]*-[^-]*-,,') linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms
modprobe -r b44 b43 b43legacy ssb brcmsmac bcma
modprobe wl
Sửa nếu chẳng may cài lỗi
1 2 apt-get install -f dpkg-reconfigure broadcom-sta-dkms
Kiểm tra kết quả: Có
wl.kotrong danh sách
1 find /lib/modules/$(uname -r)/updates
Dùng giao diện DE để kết nối wifi!
Tự động mount ổ cứng dữ liệu khi khởi động
Nếu dùng các environment khác (ví dụ như
KDE…) thì sẽ có giao diện đồ họa để config, nhưng XFCE rất là minimal nên phải dùng CLI thôi
KDE Partition Manager > Edit Mount Point
Tìm đường dẫn phần cứng của ổ đĩa cần mount
1
lsblk
Kết quả: Phân vùng muốn mount là sda1
1
2
3
4
root@debian:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 232.9G 0 disk
└─sda1 8:1 0 232.9G 0 part
Tìm UUID
1
ls -al /dev/disk/by-uuid/
Phân vùng cần mount là /dev/sda1 và UUID của nó
Mount thủ công
1
2
mkdir /media/storage1
mount /dev/sda1 /media/storage1
Mount tự động khi khởi động bằng fstab
1
nano /etc/fstab
Nội dung /etc/fstab sẽ thế này
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sdb1 during installation
UUID=410e1383-d8a0-41f4-92c9-5070c0dd8870 / ext4 errors=remount-ro 0 1
# swap was on /dev/sdb5 during installation
UUID=7ad24829-f7ec-472e-be88-0f007dc90b12 none swap sw 0 0
Thêm vào /etc/fstab
1
2
# data drive
UUID=0cbe24cf-b0df-4753-b7a7-bc9f9f66b86e /media/storage1 ext4 defaults 0 0
Kiểm tra lỗi với findmnt --verify
1
2
3
4
5
6
root@debian:~# findmnt --verify
[W] your fstab has been modified, but systemd still uses the old version;
use 'systemctl daemon-reload' to reload
0 parse errors, 0 errors, 1 warning
root@debian:~#
Unmount ổ đã mount thủ công (Optional)
1
umount /media/storage1
Khởi động lại
sudo reboot nowđể mount tự động
Cài CasaOS
Thao tác đơn giản, nhanh gọn
1
wget -qO- https://get.casaos.io | sudo bash
Hoặc
1
curl -fsSL https://get.casaos.io | sudo bash
Sau khi cài xong, sẽ hiển thị link để truy cập có dạng http://<ip_lan>/. Truy cập và tạo tài khoản mới
CasaOS hiện chỉ cho lập 1 tài khoản: Nên là ta chỉ dùng để làm home-server
Thêm nguồn cho AppStore
| Name | Link |
|---|---|
| Linux Server | https://casaos-appstore.paodayag.dev/linuxserver.zip |
| Cool Store | https://casaos-appstore.paodayag.dev/coolstore.zip |
| Home Automation | https://github.com/mr-manuel/CasaOS-HomeAutomation-AppStore/archive/refs/tags/latest.zip |
| Big Bear CasaOS | https://github.com/bigbeartechworld/big-bear-casaos/archive/refs/heads/master.zip |
| TMC Community | https://github.com/mariosemes/CasaOS-TMCstore/archive/refs/heads/main.zip |
| Pentest Docker | https://github.com/arch3rPro/Pentest-Docker/archive/refs/heads/master.zip |
MeTube
Xóa quảng cáo với SponsorBlock
Thêm Environment Variables
- Key
YTDL_OPTIONS- Value
{"postprocessors":[{"key":"SponsorBlock","categories":["sponsor"]},{"key":"ModifyChapters","remove_sponsor_segments":["sponsor"]}]}
1
{"postprocessors":[{"key":"SponsorBlock","categories":["sponsor"]},{"key":"ModifyChapters","remove_sponsor_segments":["sponsor"]}]}
Jellyfin
Hardware acceleration
Không hiểu sao chạy bản ở store
Officialthì không được, mà chạy bản ởTMC Communitythì được
Thêm biến môi trường
Volumes
| Host | Container |
|---|---|
| /media/storage1 | /media |
| /DATA/AppData/jellyfin-tmc/config | /config |
| /DATA/AppData/jellyfin-tmc/cache | /cache |
Devices
| Host | Container |
|---|---|
| /dev/dri/ | /dev/dri/ |
Modipy
Chạy nền service
- Ưu điểm
- Cập nhật mới nhất
- Nhanh, gọn, dễ cài, tài liệu đầy đủ
- Bắt kênh âm thanh dễ, dùng DE để chỉnh trực quan
- Nhanh, gọn, dễ cài, tài liệu đầy đủ
- Nhược điểm
- Nhanh quá Chạy trước cả
dockernên không load được các thue viện chạy trên CasaOS _Phải khởi động lại dịch vụ- Khó quản lý: Tự cưng lại có 1 thằng nằm ngoài CasaOS
Cài thôi nào
1
2
3
4
5
sudo mkdir -p /etc/apt/keyrings
sudo wget -q -O /etc/apt/keyrings/mopidy-archive-keyring.gpg https://apt.mopidy.com/mopidy.gpg
sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/bullseye.list
sudo apt update
sudo apt install mopidy
Chạy nền nào
1
sudo dpkg-reconfigure mopidy
Quản lý dịch vụ chạy nền
1
2
3
4
sudo service mopidy start
sudo service mopidy stop
sudo service mopidy restart
sudo service mopidy status
Cài phần mở rộng
1
2
3
4
5
6
7
sudo apt install python3-pip
sudo apt install mopidy-mpd
sudo apt install mopidy-local
sudo python3 -m pip install Mopidy-Jellyfin --break-system-packages
sudo python3 -m pip install Mopidy-Iris
sudo python3 -m pip install Mopidy-YouTube
sudo python3 -m pip install --upgrade "yt-dlp[default]"
Tùy chỉnh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# For information about configuration values that can be set in this file see:
#
# https://docs.mopidy.com/en/latest/config/
#
# Run `sudo mopidyctl config` to see the current effective config, based on
# both defaults and this configuration file.
[http]
enabled = true
hostname = 0.0.0.0
port = 6680
zeroconf = Mopidy HTTP server on $hostname
allowed_origins =
csrf_protection = true
default_app = mopidy
[local]
enabled = true
media_dir = /media/storage1/Music
[file]
enabled = true
media_dirs =
/media/storage1/Music
[mpd]
enabled = true
hostname = 0.0.0.0
[youtube]
enabled = true
autoplay_enabled = true
youtube_dl_package = yt_dlp
[jellyfin]
hostname = 127.0.0.1:8097
username = <username_jellyfin>
password = <password_jellyfin>
Chạy docker
- Ưu điểm
- Load được thư viện
jellyfinmà không cần khởi động lại- Cài nhanh, không phụ thuộc vào Debian nền
- Nhược điểm
- Bản trên
dockerhubcũ rồi: Không chạy đượcYoutubeDù là dùng homeserver để load nhạc từ Youtube thì hơi ngu, nhưng có thì vẫn hơn- Tương thích phần cứng hên xui
Test audio, tự dưng thấy loa rú ầm lên là được
1
2
3
4
sudo docker run --rm \
--user root --device /dev/snd \
wernight/mopidy \
gst-launch-1.0 audiotestsrc ! audioresample ! autoaudiosink
Install a customized app
1
2
3
4
5
6
7
docker run -d \
--user root --device /dev/snd \
-v "/media/storage1/:/var/lib/mopidy/media:ro" \
-v "/DATA/AppData/mopidy/local:/var/lib/mopidy/local" \
-v "/DATA/AppData/mopidy/mopidy.conf:/config/mopidy.conf" \
-p 6600:6600 -p 6680:6680 \
wernight/mopidy
- Title
wernight/mopidy- Icon URL
https://raw.githubusercontent.com/mopidy/mopidy/refs/heads/main/docs/_static/mopidy.png
Web UI
| http:// | :6680 | /iris |
Port
| Host | Container | Protocol |
|---|---|---|
| 6600 | 6600 | TCP |
| 6680 | 6680 | TCP |
Volumes
| Host | Container |
|---|---|
| /media/storage1/ | /var/lib/mopidy/media |
| /DATA/AppData/mopidy/local | /var/lib/mopidy/local |
| /DATA/AppData/mopidy/mopidy.conf | /config/mopidy.conf |
Devices
| Host | Container |
|---|---|
| /dev/snd | /dev/snd |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[core]
data_dir = /var/lib/mopidy
restore_state = true
[local]
media_dir = /var/lib/mopidy/media/Music
[file]
enabled = true
media_dirs =
/var/lib/mopidy/media/Music|Music
/var/lib/mopidy/media/Downloads/metube|Metube
[audio]
output = tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink host=0.0.0.0 port=5555
mixer_volume = 61
[m3u]
playlists_dir = /var/lib/mopidy/playlists
[http]
hostname = 0.0.0.0
[mpd]
hostname = 0.0.0.0
[spotify]
username=USERNAME
password=PASSWORD
[gmusic]
username=USERNAME
password=PASSWORD
[soundcloud]
auth_token=TOKEN
Cập nhật dữ liệu cho module Mopidy-Local: Chạy trong Settings của App > [>_] Terminal and Logs
1
mopidy local scan
Mở cửa ra cho internet đi vào
TailScale
Tailscale là một dịch vụ VPN cho phép kết nối các thiết bị và ứng dụng của bạn ở khắp mọi nơi trên thế giới tạo thành một mạng LAN ảo. Các kết nối giữa hai thiết bị được mã hóa dựa trên giao thức WireGuard, bảo đảm chỉ có các thiết bị nằm trong hệ thống mạng riêng ảo có thể giao tiếp với nhau.
Tailscale kết nối các thiết bị tạo thành hệ thống mạng dạng lưới ngang hàng (peer-to-peer mesh network), được gọi là tailnet. Nhờ vậy giúp cải thiện tốc độ kết nối, giảm độ trễ và tăng sự ổn định cho hệ thống mạng.
Quan trọng là
tailscalecó kèm theoMagicDNS, cho đặt tên miền (gọi làtailname) đối với máy trong mạng Thế là không cần nhớ IP
Nhưng MagicDNS và tailname không hoạt động với subdomain: Tình cờ làm sao mà CasaOS truy cập tất cả các app là qua port!
Cosmos Cloud thì mặc định là dùng subdomain (đương nhiên là vẫn đặt port làm phương án phụ được) Nhưng cái này để lúc khác nói
Nguồn: https://hub.docker.com/r/tailscale/tailscale
Import docker run chạy agent vào CasaOS > :heavy_plus_sign: > Customized App
1
docker run -d --name=tailscaled -v /var/lib:/var/lib -v /dev/net/tun:/dev/net/tun --network=host --cap-add=NET_ADMIN --cap-add=NET_RAW tailscale/tailscale
Thêm biến môi trường
- Key
- TS_AUTHKEY
- Value tự tạo mới trên website https://login.tailscale.com/admin/settings/keys
- tskey-auth-ab1CDE2CNTRL-0123456789abcdef
Lưu ý
--name=tailscaledsẽ là tên thiết bị trên Dashboard của TailScale Nếu thích thì có thể đổi tên khác
Tạo SSL: Chạy trong Settings của App > [>_] Terminal and Logs
1
tailscale cert <domain_name>
Nginx Proxy Manager
- Ưu điểm
- Docker: có tính đóng gói cao, xóa đi là sạch, không liên quan đến hệ thống
- Public Domain và DNS: Không cần chạy VPN như TailScale với ZeroTier
- Nhược điểm
- Public: Mở cửa ra cho tất cả mọi người, dễ toang
- Cần 1 tên miền (phải mua hoặc xin)
- Không truy cập được App từ WebUI của CasaOS theo port, phải gán từng tên miền cho từng App
- Cần 1 tên miền (phải mua hoặc xin)
Thiết lập DNS
Mua/Xin 1 tên miền và thiết lập thêm bản ghi DNS (DNS Record) mới:
- Type
A(khuyến nghị): bản ghi ánh xạ từ tên miền sang địa chỉ IPv4AAAA: bản ghi ánh xạ từ tên miền sang địa chỉ IPv6 _(Nếu có dùng thì cũng nên đi kèm 1 bản ghiAvì IPv6 vẫn là câu chuyện tương lai - 10 năm nay nó vẫn là chuyện tương lai)CNAME: bản ghi chuyển hướng tên miền, ví dụ:www.example.comvềexample.com- Name
@hoặc/vàwwwđối với tên miền gốc (còn gọi làapex domain,root domain,… ví dụexample.com)<subdomain>nếu sử dụng các tên miền con (ví dụsubdomain.example.com)- Value
- Địa chỉ IP công khai của home-server, diễn Nôm thì là cái IP mà nhà mạng cấp cho cục modem của mình Vào trang gateway <192.168.1.1> của modem xem là chắc nhất vì các trang web kiểu
whatismyipcó thể dính VPN- Nếu dùng bản ghi
Type CNAMEthì đặt là tên miền đích muốn chuyển đến - Nếu dùng bản ghi
- TTL
- Bao nhiêu cũng được, tùy thương gia bán tên miền thôi
Ví dụ về bản ghi DNS của GoDaddy: @ cho tên miền gốc, subdomain và sub-của-sub-domain. TTL được tùy chọn từ 1/2 tiếng đến 1 tuần thì mình chọn 1 tiếng cho đẹp!
Port Fowarding
Thưở Internet sơ khai, trên các diễn đàn cổ xưa về Torrent thường được diễn Nôm là
mở port. Nhưng giờ mình gọi làchuyển tiếp cổngcho nó sang mồm
Mô hình mạng đơn giản mượn từ LazyAdmin
- Đại khái là khi đi từ Internet vào home-server của mình sẽ có 1 con đường là
tên miền > modem > server - Thông qua DNS đã thiết lập thì từ
tên miềnđã đi được đếnmodemthông qua địa chỉ IP công khai do nhà mạng cấp- Nhưng từ
modemđếnserverthì cần có 1 thằng dẫn đường, và ở đây mình dùng thằngport- Lúc này
modemsẽ chuyển yêu cầu kết nói quaportxác định đến địa chỉ một địa chỉ IP xác định - Nhưng từ
Và ở đây mình cần làm 2 việc
- Đặt địa chỉ IP tĩnh cho server CasaOS
- Port forwarding thằng 2 cổng
80và443tới địa chỉ IP của CasaOS
1. Đặt địa chỉ IP tĩnh cho server CasaOS
Cách 1: Đặt địa chỉ trên system
Tùy Desktop Environment sẽ có giao diện khác nhau, nhưng nhìn chung là có dạng kiểu này
Tuy nhiên là không nên dùng cách này, vì đây là kiểu xin Ê router, cho tao địa chỉ IP này đi. Chẳng may không xin được là khỏi vào mạng!
Cách 2: Config DHCP của router (Khuyến nghị)
Đại khái là đặt gạch trước địa chỉ IP dành riêng cho card mạng của server (phân biệt bằng địa chỉ MAC): Đảm bảo là lúc nào cũng server cũng sẽ đúng địa chỉ nội bộ. Cũng tùy router và firmware mà có giao diện config khác nhau, lọ mọ quanh mấy từ khóa DHCP Reservation, Reserve IP,…
2. Port Forwading 2 cổng 80 và 443 tới CasaOS
Mỗi Router, firmware lại có thao tác khác nhau. Nhưng nhìn chung sẽ quanh quẩn mấy từ khóa NAT, Virtual Server, Port Forwarding, Applications and Gaming…
Giao diện modem iGate của VNPT
Đổi port của WebUI CasaOS (Vì thằng Nginx Proxy Manager cần port 80)
Dựng Nginx Proxy Manager lên chạy thôi
Import docker compose chạy agent vào CasaOS > :heavy_plus_sign: > Customized App
1
2
3
4
5
6
7
8
9
10
11
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- /DATA/AppData/nginx-proxy-manager/data:/data
- /DATA/AppData/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
- Kiểm tra lại đường dẫn Web UI
http:// :81 /
Mở WebUI của Nginx Proxy Manager, đăng nhập theo tài khoản mặc định, xong rồi kiểu gì cũng phải đổi
- Username
- admin@example.com
- Password
- changeme
Host > Proxy Host > Add Proxy Host
Tab Details
- Domain Names
- ví dụ
example.com
| Scheme | Forward Hostname/IP | Port |
|---|---|---|
http | IP LAN của CasaOS | Port WebUI của App |
[] Cache Assets [] Block Common Exploits [] Websockets Support
Tab SSL: Chọn Request Lets Encrypt SSL và Nhập Email



