Cài o3o Meet lên máy chủ của bạn
o3o Meet là nền tảng họp và dạy học trực tuyến tự chủ hạ tầng: video/âm thanh WebRTC, bảng vẽ thời gian thực trên bài giảng, ghi hình, phòng chờ, điểm danh, trang quản trị và app Windows cho người chủ trì. Toàn bộ chạy trên máy chủ của chính bạn — dữ liệu, bản ghi hình, danh sách người dùng không rời khỏi máy.
Tổng quan
Cài đặt chỉ cần một dòng lệnh trên máy Ubuntu sạch. Bộ cài tự cài Docker, nginx, certbot; kéo mã nguồn; sinh mọi bí mật; xin chứng chỉ HTTPS; dựng dịch vụ; cài bộ cập nhật; rồi in đường vào trang chào mừng để bạn tự cấu hình logo, tên tổ chức, đăng nhập SSO và giấy phép trên trình duyệt. Thời gian cài trọn bộ khoảng 5–10 phút tuỳ tốc độ mạng của máy chủ.
curl -fsSL https://install.o3o.vn/meet/cai-o3o-meet.sh \
| sudo bash -s -- --domain meet.congty.vn --email it@congty.vnThay meet.congty.vn bằng tên miền đã trỏ về máy và it@congty.vn bằng email nhận thông báo chứng chỉ. Chi tiết từng bước ở dưới.
1. Trước khi cài
Bộ cài kiểm và nhắc, nhưng không làm thay ba việc: chuẩn bị máy, trỏ DNS và mở tường lửa ở nhà cung cấp. Làm đủ ba việc này trước thì lần cài đầu sẽ xong ngay, không phải chạy lại.
Máy chủ
| Hạng mục | Yêu cầu | Ghi chú |
|---|---|---|
| Hệ điều hành | Ubuntu Server 22.04 LTS hoặc 24.04 LTS, bản 64-bit, mới cài sạch | Máy ảo / VPS / máy vật lý đều được. Bộ cài dùng nginx của hệ thống và xoá site mặc định; máy đang chạy web khác trên cổng 80/443 thì không nên dùng chung. |
| Quyền | Tài khoản root hoặc có sudo | Bộ cài từ chối chạy khi không phải root. |
| CPU · RAM · đĩa | Tối thiểu 2 vCPU · 4 GB RAM · 40 GB SSD | Đủ cho vài lớp/cuộc họp cùng lúc. Nhiều lớp đồng thời hơn thì thêm CPU và băng thông; ghi hình chiếm đĩa (ước chừng dưới 1 GB mỗi giờ ghi ở 720p) — theo dõi /data/recordings. |
| Mạng | IP công khai tĩnh gắn thẳng vào máy | Máy đứng sau NAT/router vẫn cài được với --sau-nat --ip <IP công khai>, nhưng phải chuyển tiếp đủ các cổng dưới đây. |
| Kết nối ra ngoài | Máy ra được internet (apt, Docker Hub, Let's Encrypt, kho mã) | Máy trong mạng nội bộ không ra được kho: chép cây mã lên rồi cài với --nguon. |
Mạng & tường lửa
Mở các cổng sau ở tường lửa của nhà cung cấp (security group / firewall của VPS). Bộ cài không tự mở vì mỗi nhà cung cấp một kiểu.
| Cổng | Giao thức | Dùng cho |
|---|---|---|
| 22 | TCP | SSH quản trị |
| 80, 443 | TCP | Web, API, WebSocket nét vẽ (/ws), tín hiệu LiveKit (/rtc), xin chứng chỉ |
| 7881 | TCP | Media WebRTC qua TCP (khi UDP bị chặn phía người dùng) |
| 5349 | TCP | TURN/TLS — cho người dùng sau mạng công ty chặt |
| 3478 | UDP | TURN/UDP |
| 50000–60000 | UDP | Media WebRTC (hình và tiếng) |
Tên miền (DNS)
Tạo một bản ghi A trỏ tên miền về IP công khai của máy, ví dụ meet.congty.vn → 203.0.113.10. Mặc định bộ cài dùng một tên miền duy nhất: LiveKit và máy chủ nét vẽ đi chung tên miền theo đường dẫn, cùng một chứng chỉ.
Muốn tách riêng (một số hệ thống proxy/CDN cần), thêm cờ --tach-ten-mien và tạo thêm ba bản ghi A cho livekit., ws., turn. nằm dưới tên miền chính (livekit.meet.congty.vn…). Cài kèm Keycloak thì thêm id.meet.congty.vn.
Kiểm DNS đã lan chưa (kết quả phải là IP máy):
dig +short A meet.congty.vn @1.1.1.12. Cài đặt
Đăng nhập SSH vào máy rồi chạy đúng một dòng. Bộ cài in tiến trình theo 7 bước và dừng ngay tại dòng gặp lỗi (có báo số dòng và lệnh hỏng).
curl -fsSL https://install.o3o.vn/meet/cai-o3o-meet.sh \
| sudo bash -s -- --domain meet.congty.vn --email it@congty.vnCài xong, màn hình in ra ba thứ cần giữ lại:
- Đường vào trang chào mừng kèm khoá một lần:
https://meet.congty.vn/chao-mung?khoa=… - Mã chủ trì dùng chung (8 chữ số) — cách vào lớp khi chưa nối SSO
- Kết quả 7 phép kiểm tại chỗ (web, nét vẽ, LiveKit, ghi hình, bộ cập nhật, HTTPS) — mỗi dòng ĐẠT hoặc HỎNG kèm lý do
Tuỳ chọn dòng lệnh
| Cờ | Ý nghĩa | |
|---|---|---|
--domain <tên miền> | bắt buộc | Tên miền chính đã trỏ về máy. |
--email <email> | khuyên dùng | Email nhận cảnh báo chứng chỉ Let's Encrypt sắp hết hạn. |
--keycloak | tuỳ chọn | Chưa có máy chủ đăng nhập (SSO)? Cài kèm Keycloak tại id.<tên miền>. Đã có Keycloak/OIDC riêng thì bỏ cờ này và điền ở trang chào mừng. |
--tach-ten-mien | tuỳ chọn | Bốn tên miền con livekit. ws. turn. thay cho một tên miền chung (cần thêm 3 bản ghi DNS). |
--sau-nat --ip <IP> | tuỳ chọn | Máy sau NAT/router: không tự dò IP, ghim IP công khai cho LiveKit. |
--repo <url git> | tuỳ chọn | Kho mã khác kho mặc định (bản nội bộ, bản fork). |
--nhanh <token> | tuỳ chọn | Kho riêng: token chỉ-đọc (GitLab read_repository). Token được cất riêng cho root, không nằm trong cấu hình git. |
--nguon <thư mục> | tuỳ chọn | Cài từ cây mã đã chép sẵn trên máy (máy không ra được kho). Sau đó nối kho bằng o3o-cap-nhat noi-kho để cập nhật được — xem mục Cập nhật. |
Bộ cài làm gì (7 bước)
- Phần mềm nền — cài Docker, nginx, certbot, git, dnsutils (chờ tối đa 5 phút nếu máy vừa khởi động còn đang tự cập nhật).
- Mã nguồn — kéo kho vào
/opt/o3o-meet(hoặc chép từ--nguon). - Sinh cấu hình — tạo
/opt/o3o-meet/cai-dat/.envchứa toàn bộ bí mật (quyền 600), cấu hình LiveKit và ghi hình. Chạy lại thì giữ nguyên bí mật cũ; đổi--domainthì chỉ cập nhật tên miền. - nginx — site riêng cho tên miền, chuyển tiếp
/rtctới LiveKit và/wstới máy chủ nét vẽ. - DNS và chứng chỉ — kiểm từng tên miền có trỏ về máy chưa, xin chứng chỉ Let's Encrypt (webroot), cài hook gia hạn tự động. DNS chưa đúng thì dịch vụ vẫn dựng; chạy lại sau khi DNS đúng.
- Dựng dịch vụ —
docker compose build+up -d: redis, livekit, egress (ghi hình), annotation-server, web-app (và keycloak nếu chọn); cài dịch vụ cập nhậto3o-cap-nhat. - Kiểm tại chỗ — 7 phép ĐẠT/HỎNG kèm log khi hỏng, rồi in đường vào trang chào mừng và mã chủ trì.
3. Sau khi cài
Trang chào mừng
Mở đường dẫn https://meet.congty.vn/chao-mung?khoa=… mà bộ cài in ra. Khoá dùng một lần; lỡ đóng terminal thì đọc lại trên máy chủ: sudo cat /data/config/khoa-cai-dat.txt. Trang gồm 5 bước:
- Tổ chức & logo — tên tổ chức hiện trên trang vào, ngôn ngữ, logo PNG/JPEG (logo ngang, logo vuông, biểu tượng).
- Đăng nhập SSO & quản trị viên — địa chỉ Keycloak/OIDC (
issuer,client id,client secret) và email quản trị viên. Đây là bước quan trọng nhất: trang/adminchỉ vào được bằng SSO với email trong danh sách này. - Máy chủ media — thường bỏ qua. Chỉ điền khi muốn đặt LiveKit ở máy khác hoặc thêm máy chia tải.
- Giấy phép — dán khoá giấy phép nếu đã có (có thể nhập sau ở trang admin).
- Hoàn tất — hệ thống ghi cờ đã cài rồi mới xoá khoá một lần; ghi không được (đĩa đầy…) thì báo lỗi và giữ khoá để bạn thử lại.
https://meet.congty.vn/api/auth/callback). Cài kèm --keycloak thì tài khoản quản trị Keycloak nằm trong .env (KC_ADMIN_USER / KC_ADMIN_PASSWORD).Quản trị & đường vào
| Đường dẫn | Dành cho |
|---|---|
https://meet.congty.vn/ | Trang vào phòng cho mọi người |
/admin | Quản trị viên (SSO): lớp/cuộc họp đã diễn ra, danh sách người tham dự, bản ghi hình, logo, công tắc tính năng, SSO, API LiveKit, máy chủ media, giấy phép, phiên bản & cập nhật |
/sotay/ | Sổ tay vận hành cho người chủ trì |
/tai-app | Tải app Windows cho người chủ trì (vẽ lên mọi phần mềm, bảng nổi, tự cập nhật) |
Mã chủ trì dùng chung (in ra cuối bộ cài, lưu ở TEACHER_CODE trong .env) là phương án khi chưa nối SSO: ai có mã này mở được phòng với vai chủ trì. Nối SSO xong nên tắt công tắc này ở /admin › Hệ thống.
4. Giấy phép
o3o Meet chạy được ngay không cần giấy phép ở mức tối đa 2 phòng mở cùng lúc — đủ để dùng thử và cho tổ chức nhỏ. Giấy phép nâng hạn mức số phòng theo tên miền và thời hạn; hết hạn có 30 ngày ân hạn rồi mới về mức 2 phòng. Phòng đang mở không bao giờ bị cắt — giấy phép chỉ chặn mở thêm phòng quá hạn mức.
- Nhập khoá ở bước 4 trang chào mừng, hoặc bất cứ lúc nào tại
/admin › Giấy phép. - Khoá được kiểm ngoại tuyến bằng chữ ký số — máy chủ của bạn không gọi về đâu cả.
- Xin hoặc gia hạn giấy phép: liên hệ o3o qua o3o.vn, cung cấp tên miền đang cài và số phòng cần dùng cùng lúc.
5. Cập nhật
Vào /admin › Hệ thống, khối Phiên bản & cập nhật: bấm Kiểm bản mới để so với kho, rồi Cập nhật ngay. Việc cập nhật do dịch vụ o3o-cap-nhat trên máy chủ thực hiện (trang web không có quyền chạy docker — cố ý, để ai chiếm được web cũng không chiếm được máy). Mất 1–3 phút; web-app dựng lại nên người đang trong phòng bị ngắt khoảng 10 giây rồi tự nối lại — trang admin hỏi lại và cho biết đang có mấy phòng mở.
Dịch vụ tự kiểm bản mới mỗi ngày. Nhật ký cập nhật hiện ngay dưới nút; lần cập nhật lỗi thì nút đổi thành Thử cập nhật lại.
Máy cài từ --nguon chưa nối kho nên nút báo "chưa nối kho từ xa". Nối một lần trên máy chủ (bí mật và dữ liệu nằm ngoài git, không mất):
sudo o3o-cap-nhat noi-kho https://gitlab.apps.vn/khahuyvu/o3o-meet.gitChạy tay khi cần: sudo o3o-cap-nhat kiem · sudo o3o-cap-nhat cap-nhat · nhật ký ở /data/config/cap-nhat.log.
6. Đổi tên miền · cài lại
Cài thử bằng tên tạm rồi đổi sang tên thật, hay chuyển tên miền: trỏ DNS mới về máy, rồi chạy lại bộ cài với --domain mới. Bí mật giữ nguyên; tên miền trong cấu hình, chứng chỉ, bản dựng web được làm lại; LiveKit tự khởi động lại với cấu hình mới. Đổi từ một tên miền sang bốn tên miền (thêm --tach-ten-mien) cũng làm y như vậy.
curl -fsSL https://install.o3o.vn/meet/cai-o3o-meet.sh \
| sudo bash -s -- --domain meet-moi.congty.vn --email it@congty.vn7. Sao lưu · gỡ cài
/opt/o3o-meet/cai-dat/.env— toàn bộ bí mật của hệ thống. Ai cầm được tệp này là chiếm được cả hệ thống: cất nơi an toàn, không gửi qua chat/email./data/— cấu hình đã điền (config/), điểm danh, phòng, bản ghi hình (recordings/— hình ảnh người tham dự, có thể là trẻ em: không để công khai).
/opt/o3o-meet kéo lại được từ kho, không cần sao lưu.
cd /opt/o3o-meet/cai-dat
sudo docker compose --env-file .env down -v
sudo systemctl disable --now o3o-cap-nhat
sudo rm -rf /opt/o3o-meet /data /usr/local/bin/o3o-cap-nhat \
/etc/systemd/system/o3o-cap-nhat.service \
/etc/nginx/sites-enabled/o3o-* /etc/nginx/sites-available/o3o-*
sudo nginx -t && sudo systemctl reload nginx8. Khắc phục sự cố
Ba lệnh xem tình trạng trên máy chủ:
cd /opt/o3o-meet/cai-dat
sudo docker compose --env-file .env ps
sudo docker compose --env-file .env logs --tail 50 livekit egress web-app
sudo systemctl status o3o-cap-nhat --no-pager| Hiện tượng | Nguyên nhân thường gặp | Cách sửa |
|---|---|---|
Bước 5 báo ✗ meet.congty.vn → (chưa có), cuối cùng "Chưa có chứng chỉ" | DNS chưa trỏ hoặc chưa lan; Cloudflare đang bật proxy | Sửa DNS (DNS only), chờ vài phút, chạy lại đúng lệnh cài. Khoá chào mừng giữ nguyên. |
| Vào phòng được nhưng không ai nghe/thấy ai | Tường lửa nhà cung cấp chưa mở UDP 50000–60000 (hoặc 7881/tcp, 3478/udp) | Mở cổng ở security group / firewall của VPS. Không cần cài lại. |
Phép egress ghi được /data — HỎNG, không ghi hình được | Container ghi hình không đọc được cấu hình hoặc không ghi được /data/recordings | Bộ cài in 4 dòng log egress ngay dưới phép hỏng. Chạy lại bộ cài (đặt lại quyền). Kiểm: ls -ld /data/recordings phải là drwxrwsr-x root:root. |
| Bộ cài dừng ở bước 1 với "Could not get lock" | Ubuntu vừa khởi động đang tự cập nhật (unattended-upgrades) | Bộ cài đã chờ tối đa 5 phút; vẫn hỏng thì chờ thêm rồi chạy lại. |
| Bộ cài in "DỪNG ở dòng N: …" | Một lệnh trong bộ cài hỏng (mạng đứt, đĩa đầy, kho không truy cập được…) | Đọc lệnh in kèm, sửa nguyên nhân, chạy lại. Kho riêng cần --nhanh <token>. |
/admin báo chưa được mở / không có quyền | Chưa điền email quản trị ở trang chào mừng, hoặc SSO chưa đúng client | Sửa ADMIN_EMAILS trong .env (cách nhau bằng dấu phẩy) rồi docker compose --env-file .env up -d web-app; kiểm Redirect URI trên Keycloak. |
| Mất khoá trang chào mừng | Đóng terminal trước khi chép | sudo cat /data/config/khoa-cai-dat.txt. Tệp không còn = đã hoàn tất chào mừng, vào /admin. |
| Nút Cập nhật báo "chưa nối kho từ xa" | Máy cài từ --nguon | sudo o3o-cap-nhat noi-kho <url kho> (xem mục 5). |
| HTTPS chạy nhưng chứng chỉ sắp hết hạn không tự gia hạn | Cổng 80 bị chặn sau khi cài | Mở lại cổng 80; sudo certbot renew --dry-run để kiểm. |
Tài liệu thêm
- Bản script bộ cài (đọc trước khi chạy, nếu muốn): cai-o3o-meet.sh
- Kho mã nguồn: gitlab.apps.vn/khahuyvu/o3o-meet — tài liệu vận hành chi tiết (SERVER.md) và giấy phép sử dụng (LICENSE.md) nằm trong kho.
- Sổ tay cho người chủ trì sau khi cài:
https://<tên miền của bạn>/sotay/ - Dùng thử không cần cài: meet.o3o.vn