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:

  1. Tạo máy ảo VM hoặc container LXC mới trên Proxmox, cài đặt thêm Docker và Docker Compose.
  2. Cài đặt ứng dụng bằng Docker-Compose, hoặc Portainer.
  3. Tạo Reverse Proxy với Nginx Proxy Manager để có thể truy cập ứng dụng thông qua tên miền.
  4. 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.

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 shCode 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.ymlCode 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 -dCode 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.mecosmos-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.

Nếu bạn cần hỗ trợ kỹ thuật miễn phí, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời trong thời gian sớm nhất.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *


31 Comments

  1. 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ả 🙁

  2. 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 😀

    1. Em cần tạo 1 file wordpress.ini trên server, lưu trong /home trong đó ghi nội dung upload_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/yqpqdkpq
      Rồ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

  3. 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 đỡ!

  4. 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

  5. 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ỉ?

    1. 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

      1. 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ũ.

        1. 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.

  6. 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ỉ?

  7. em cài thành công rồi. nhưng em gặp vấn đề với cloudfare. không biết em chỉnh sai ở đâu. mà giờ bị lỗi dns. máy tính vs điện thoại giờ phải chỉnh dns của nhà mạng thành dns của cloudflare thì mới vào được site. anh biết cách nào không. chỉ em với @@

    1. Nếu dùng DNS của Cloudflare vào được nghĩa là em đã setup thành công. Còn dùng DNS của nhà mạng không vô được nghĩa là nhà mạng đang chặn gì đó. Tốt nhất là chỉnh DNS của toàn hệ thống qua dùng DNS của CloudFlare sẽ tốt hơ.

  8. Anh Thuận cho em hỏi theo kinh nghiệm của anh thì Cosmos-server này có thể dùng thay thế tất cả các ứng dụng như Dockge, Caddy không? Hay tuỳ từng trường hợp vẫn cần phải có 2 món kia ạ? Em cài Cosmos chạy trên Xpenology cảm nhận ban đầu là khá ổn, Caddy thì không cài được trên DSM mà chỉ cài được trên Docker của máy tính chạy Windows (có thể do nó cần cổng mặc định 80/443 mà DSM đã lấy mất). Dockge thì khá tiện nhưng nếu Cosmos mà thay thế được hoàn toàn thì chắc em gỡ Dockge cho gọn máy. Cảm ơn anh nhiều, xem blog của anh mở mang được rất nhiều thứ 😄

    1. Xài cái nào thì tùy theo nhu cầu mỗi người nên không thể nói trước Cosmos-Server có thể thay thế cho Dockge + Caddy được hay không nhé. Caddy vẫn có thể cài trên DSM được, nhưng cần đổi port khác với port 80 / 443 , và cấu hình lại port forwarding trên router.

      1. Em thấy là dùng Cosmos rất tiện nếu có nhiều app trong homelab, vì nó dùng DNS-01 với wildcard trên Cloudflare nên việc cấp SSL cho app nhanh vô cùng, hay nhất là mỗi lần không phải vô thêm subdomain trong DNS records. Nhưng e cũng cần chạy thêm 2-3 trang WordPress, mà anh chia sẻ rằng Caddy chạy WordPress rất tốt và ổn định. Do đó em hơi phân vân, em cũng chưa thấy bài hướng dẫn chạy multi-site WordPress trên Caddy của anh, nên không biết nếu chạy multi-site trên Cosmos thì nên làm thế nào ạ? Mỗi trang WordPress của e có tên miền riêng (không dùng subdomain) nên em dùng Cosmos cấp SSL và thiết lập reverse proxy cũng được, chỉ là nếu có cách nào cài và quản lý được nhiều trang WordPress trên môi trường Container Manager thì có lẽ với trường hợp của em sẽ tiện hơn là dùng Caddy. Anh cho em lời khuyên nha, thanks anh!

        1. Caddy cũng thiết lập Wildcard DNS-01 được nha em.
          Còn trên Cosmos muốn tạo nhiều site WordPress thì em cứ vô tạo nhiều lần là được, anh thấy đâu có vấn đề gì.
          Anh chỉ mò Cosmos cho vui, chứ không sử dụng thực tế. Đa số trường hợp anh chỉ dùng dòng lệnh để thiết lập Docker Compose.

Bạn cần hỗ trợ kỹ thuật chuyên sâu?

Khám phá các gói dịch vụ giúp bạn tối ưu công việc và vận hành hệ thống hiệu quả hơn. Từ chăm sóc website đến hỗ trợ kỹ thuật, mọi thứ đều linh hoạt và phù hợp với nhu cầu của bạn.