Trước giờ, quy trình cài đặt và quản lý các ứng dụng self-host trong homelab ở nhà của mình thường diễn ra như sau:
- Tạo máy ảo VM hoặc container LXC mới trên Proxmox, cài đặt thêm Docker và Docker Compose.
- Cài đặt ứng dụng bằng Docker-Compose, hoặc Portainer.
- Tạo Reverse Proxy với Nginx Proxy Manager để có thể truy cập ứng dụng thông qua tên miền.
- Thêm ứng dụng vào Dashboard của Homepage để tiện việc truy cập khi cần.
Mình đã thao tác quen tay nên tất cả các bước này thường chỉ mất tối đa 10 phút. Nhưng với những bạn mới bắt đầu tìm hiểu về Docker / Self-Host, đây rõ ràng là một thách thức khi có quá nhiều khái niệm và ứng dụng phải nghiên cứu làm quen.
Để giúp tinh gọn việc cài đặt và quản lý homelab, gần đây mình đang dần chuyển qua sử dụng Cosmos-Server, một công cụ miễn phí cực kỳ mạnh mẽ dành cho các homelabber. Quan trọng hơn là nó rất dễ sử dụng, dễ quản lý, phù hợp cho các bạn mới bắt đầu hay đã có kinh nghiệm.
Bài viết này sẽ hướng dẫn bạn cách cài đặt và sử dụng Cosmos-Server.
Mục Lục
I. Giới thiệu Cosmos-Server
Cosmos-Server là một nền tảng quản lý ứng dụng all-in-one (tất cả trong một dành) được tối ưu để cài đặt trên server cá nhân. Nó bao gồm các tính năng sau:
- Reverse Proxy (tương tự như Nginx Proxy Manager hay Traefik), tích hợp sẵn công cụ xác thực chứng chỉ SSL Let’s Encrypt.
- Docker Container Manager (tương tự Portainer) để quản lý Docker container, image, volume, network.
- App Store: (tương tự Portainer, CasaOS, Yunohost) tích hợp sẵn kho ứng dụng có thể cài đặt chỉ với vài cú click chuột.
- SmartShield technology: Tích hợp sẵn các công cụ bảo mật để chống DDOS, hỗ trợ xác thực 2FA
- Authentication Server: tính năng xác thực danh tính để tối ưu bảo mật
- Dashboard: (tương tự Homepage, Dashy) để tạo trang chủ cá nhân.
- VPN: giúp truy cập ứng dụng từ bên ngoài mà không cần phải mở port trên router.
Tóm lại, Cosmos-Server không chỉ thay thế hoàn toàn các ứng dụng mình đang sử dụng: Portainer, Nginx Proxy Manager, Homepage, mà còn giúp việc quản lý trở nên tiện lợi hơn hẳn khi tất cả thao tác đều có thể thực hiện trong cùng 1 giao diện.
II. Cài cặt Cosmos-Server
SSH vào server, cài đặt Docker bằng lệnh
curl -fsSL https://get.docker.com | sudo sh
Code language: Nginx (nginx)
Tạo thư mục mới trên server và tạo file docker-compose.yml
mkdir ~/cosmos-server
cd ~/cosmos-server
nano docker-compose.yml
Code language: Bash (bash)
Nhập vào đoạn mã sau và lưu lại.
version: '3.3'
services:
cosmos-server:
ports:
- '80:80'
- '443:443'
- '4242:4242/udp'
container_name: cosmos-server
hostname: cosmos-server
restart: always
privileged: true # Required for SELinux
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
- './config:/config'
- '/:/mnt/host'
image: 'azukaar/cosmos-server:latest'
Code language: YAML (yaml)
Kích hoạt Cosmos-Server
docker compose up -d
Code language: Nginx (nginx)
Tiếp theo, mở trình duyệt, truy cập vào địa chỉ IP của server để bắt đầu quá trình thiết lập. Ví dụ: http://192.168.0.50
.
Bấm Next để tiếp tục
Bấm Connect để tạo database
Sau khi Database được kích hoạt, bấm Next
Nhập vào domain bạn muốn sử dụng để truy cập Cosmos-Server, chọn Use Let’s Encrypt automatic HTTPS, Email, và bấm Update để tạo chứng chỉ SSL. Ví dụ: cosmos-server.thuanbui.me
Lưu ý: domain cần phải được chỉnh DNS trỏ về IP của server đang cài đặt Cosmos-Server.
Nhập thông tin tài khoản admin và bấm Create.
Bấm Apply and Restart để hoàn thành quá trình thiết lập Cosmos-Server
III. Cài đặt ứng dụng trên Cosmos Server
Truy cập vào Comos-Server sử dụng tên miền bạn đã cấu hình ở bước trên. Đăng nhập bằng thông tin tài khoản admin đã chọn.
Sau khi đăng nhập, Cosmos sẽ hiện ra trang Home trắng trơn vì lúc này chưa có ứng dụng nào được cài đặt.
Chọn mục Market ở menu bên tay trái để xem danh sách các ứng dụng có sẵn. Bạn cũng có thể cài đặt ứng dụng bất kỳ bằng cách bấm vào nút Import Compose File và nhập nội dung file docker-compose.yml
vào đó.
Mình chọn ứng dụng Code-Server, bấm nút Install để bắt đầu cài đặt.
Nhập thêm 1 số thông tin liên quan: path, URL, và bấm Next
Bấm nút Create để Cosmos bắt đầu tải Docker image và cài đặt ứng dụng
Sau khi cài đặt xong, hệ thống sẽ hiện ra thông báo: server không sử dụng chứng chỉ wildcard certificate nên sau khi cài đặt ứng dụng mới, server sẽ phải khởi động lại để xác thực chứng chỉ SSL cho tên miền mới. Bấm OK là xong.
Ứng dụng sau khi cài đặt sẽ hiện ra ở trang Home để bạn có thể dễ dàng truy cập khi cần.
IV. Cấu hình Wildcard SSL
Để tối ưu việc cài đặt ứng dụng và xác thực chứng chỉ SSL, mình sẽ cấu hình sử dụng Wildcard SSL cho hệ thống. Chỉ cần 1 chứng chỉ SSL duy nhất cho tên miền cosmos-server.thuanbui.me
sẽ sử dụng được cho tất cả các tên miền con như vscode.cosmos-server.thuanbui.me
hay plex.cosmos-server.thuanbui.me
.
1. Trỏ DNS về IP của server
Sử dụng Cloudflare DNS, tạo chỉ mục DNS mới cho tên miền *.cosmos-server.thuanbui.me
và trỏ về IP của Server đang cài đặt Cosmos-Server.
2. Thiết lập Cloudflare API Token
Tạo API Tokens mới:
- Permision: Edit DNS và Read Zone
- Zone Resources: chọn tên miền bạn muốn sử dụng
Sau khi tạo xong, copy API Tokens để chuẩn bị paste vào mục cấu hình trên Cosmos-Server
3. Cấu hình DNS Challenge
Quay lại Cosmos-Server, truy cập vào mục Configuration, tìm đến phần Encryption và nhập vào các thông tin cần thiết:
- Bấm chọn vào mục Use Wildcard Certificate for the root domain of …
- Mục (optional, only…) nhập vào
*.cosmos-server.thuanbui.me
vàcosmos-server.thuanbui.me
- Pick a DNS provider: chọn cloudflare, sau đó nhập Token API đã tạo ở trên vào mục CF_DNS_API_TOKEN.
Bấm Save để lưu lại. Hệ thống sẽ khởi động lại sau 1-2 phút.
V. Các tính năng khác
Cosmos-Server còn nhiều tính năng mạnh mẽ khác mà mình chưa có thời gian mò đến
- Tạo Reverse Proxy: truy cập vào mục URLS để xem các tên miền đã được cấu hình. Bạn có thể bấm vào nút Create để tạo Reverse Proxy mới.
- Quản lý Docker: truy cập vào mục ServApps để xem các container đang hoạt động. Bạn có thể tạm ngừng, khởi động lại, xem logs, truy cập vào Terminal,… của container ở đây.
- Quản lý User: truy cập mục User để tạo thêm người sử dụng cho Cosmos-Server
- VPN: truy cập mục Constellation để tạo VPN
Chúc bạn cài đặt thành công và tận hưởng thời gian khám phá Cosmos-Server.
Em làm xong tất cả rồi, mà tới bước cuối cùng, sau khi restart thì nó cứ báo là “Your connection isn’t private”. Hình như có vấn đề gì đó ở chỗ chứng chỉ SSL nhưng em không biết phải sử lý sao cả 🙁
Em có thể gõ lệnh
docker compose logs
để xem nó báo lỗi gì. Nhiều khả năng là lỗi không tạo được chứng chỉ SSL từ Let’s Encrypt.Em vừa xem log. Và hiểu ra là e chưa mở port trên router =)) em vừa cài lại okie rồi a. Tks a nhiề 😀
Anh cho e hỏi chút. Em cài WordPress từ cosmos-server. Em không thể upload theme quá 2mb. Em lên discog của dự án để hỏi thì họ kêu thêm evn UPLOAD_LIMIT = 64M. Em đã thử nhưng không được. Thử thêm mấy evn tương tự cũng không. Anh giúp em với 😀
Em cần tạo 1 file
wordpress.ini
trên server, lưu trong/home
trong đó ghi nội dungupload_max_filesize = 64M
. Sau đó lúc cài WordPress cần truy cập vào phần mount point, tạo thêm mount point mới như sau: Type: chọn Bind; Soure:/home/wordpress.ini
; Target:/usr/local/etc/php/conf.d/wordpress.ini
, như hình này: https://tinyurl.com/yqpqdkpqRồi bấm Create để tạo, lúc này limit sẽ được tăng lên 64M: https://tinyurl.com/ykgh3wlk
Xem thêm ở đây: https://stackoverflow.com/questions/58813424/docker-wordpress-container-with-custom-php-ini-file-settings
Cosmos server vẫn cài trên Proxmox phải k anh Thuận
Comos-Server dựa trên Docker nên cài trên bất kỳ máy tính nào hỗ trợ Docker đều được nha em: Proxmox, Ubuntu, Debian, macOS, Raspberry, Windows, Synology,…
Anh ơi em làm bị lỗi như này không biết là do vấn đề gì ạ: “failed to deploy a stack: cosmos-server Pulling cosmos-server Error Error response from daemon: Get “https://registry-1.docker.io/v2/”: dial tcp: lookup registry-1.docker.io on 192.168.1.1:53: read udp 192.168.1.113:42664->192.168.1.1:53: read: connection refused”, mong anh giúp đỡ!
Bạn tham khảo cách khắc phục ở đây: https://forums.docker.com/t/ubuntu-22-04-error-response-from-daemon-get-https-registry-1-docker-io-v2-dial-tcp-lookup-registry-1-docker-io-on-127-0-0-53-read-udp-127-0-0-1-48086-127-0-0-53-read-connection-refused/138376
tuyệt quá, em làm được rồi, cám ơn anh nhé ^^
Mình gặp lỗi
[ERROR] LETSENCRYPT_REGISTER : acme: error: 429 :: POST :: https://acme-v02.api.letsencrypt.org/acme/new-acct :: urn:ietf:params:acme:error:rateLimited :: Error creating new account :: too many registrations for this IP: see https://letsencrypt.org/docs/too-many-registrations-for-this-ip/
Đợi 3-4 tiếng sau rồi thử lại nha bạn.
Mình setup tới bước cuối ấn save xong truy cập lại dính lỗi “redirected you too many times” không thể truy cập lại được Cosmos. Có phải ở Cloudflare mình setup 2 DNS:
*.cosmos.naai.studio
cosmos.naai.studio
Setup DNS vậy là dúng rồi bạn nhé. Còn bị lỗi gì thì bạn phải xem logs (docker compose logs) xem nó báo lỗi gì. Nhiều khả năng là lỗi SSL.
Mình gần đây có setup lại cái này trên PC thì okay hết. Mỗi tội các service giao tiếp với nhau kiểu gì thì chưa kiểm soát được. Ví dụ prowlarr cần kết nối với radarr nhưng mình thử bằng domain https hay để localhost đều k kết nối được. Kể cả gõ IP nội bộ của PC vào vẫn k nhận. Mình cần vào docker potainer và join vào vào 1 network chung hay sao nhỉ?
Thêm một vấn đề nữa là mỗi lần tắt máy mở lại khởi động docker xong nó bắt setup cosmos lại từ đầu luôn. Làm sao để ngưng tình trạng này nhỉ? Mình cài lên PC
Docker nào cũng cài trên PC mà bạn. Chắc ý bạn là cài trên Windows?
Mình luôn chạy Docker trên Ubuntu, và cái Cosmos này chưa bao giờ bị lỗi như thế. Khởi động máy lại luôn tự động chạy lại như cũ.
Mình không có VPS đủ mạnh để cài cái này nên thử trước trên PC ở nhà. Mà PC chạy window nên có vấn đề phát sinh nhiều chăng. Thấy sau khi cài xong nó hiện thông báo Your Cosmos server is not running in the docker host network mode. It is recommended that you migrate your install. Nhưng mình để networkmode host thì hết truy cập đc vào bằng domain hay bằng localhost.
Mình muốn cài cosmos-server này lên con router PC chạy routeros Mikrotik. Nhưng mà bị lỗi Cannot connect to the Docker daemon at unix:///var/run/docker.sock
Cái này là do mình cấu hình sai. Hay là không thể cài được nó trên routeros nhỉ?
Mình chưa test Docker trên RouterOS bao giờ nên không biết nhé.
Cổng 80 & 443 bị bind bởi adguard thì làm cách nào được ạ ?
Bạn chỉnh lại cho Adguard dùng cổng khác, ví dụ 8080 và 4443
Bác hướng dẫn cài trên DSM 7.2 đi bác. Làm mà cứ bị lỗi hoài á!