Vận hành máy chủ
Quản trị và cấu hình
Trang quản trị, gửi mã đăng ký (SMS, email), các giá trị cấu hình máy chủ, sao lưu và bảo mật — tài liệu tham chiếu cho người vận hành.
Máy chủ có sẵn một trang quản trị mở bằng trình duyệt. Tại đây bạn xem trạng thái máy chủ, quyết định cách gửi mã đăng ký và đăng nhập, và quản lý người dùng cũng như bot. Tài liệu này là tài liệu tham chiếu, tập hợp trang quản trị và các giá trị cấu hình máy chủ vào một chỗ. Nếu bạn cần cài đặt trước, hãy xem Cài đặt máy chủ.
Giao diện trang quản trị hiện bằng tiếng Hàn. Khi tài liệu này nhắc đến một tab, nút hay mục cài đặt, nhãn tiếng Hàn đúng như trên màn hình được ghi kèm trong ngoặc.
Mở trang quản trị
Trang quản trị nằm ở /admin/ trên cổng HTTP quản trị (8080 trong cấu hình vận hành), và chỉ mở trên chính máy chủ (127.0.0.1). Người vận hành truy cập qua tunnel SSH.
# Trên máy tính của bạn (để nguyên cửa sổ này)
ssh -N -L 8080:127.0.0.1:8080 <người-dùng>@<máy-chủ>
# Trình duyệt: http://localhost:8080/admin/
# Token (trên máy chủ)
sudo cat /srv/pabal/pabal_server/data/admin-token
Nhập token rồi bấm Mở (열기). Trình duyệt sẽ ghi nhớ token; muốn xóa thì bấm Xóa token (토큰 지우기) ở góc trên bên phải. Muốn tự đặt token, hãy truyền TELEGRAM_ADMIN_TOKEN (từ 16 ký tự trở lên) — khi đó máy chủ sẽ không ghi tệp token.
Các tab hiển thị gì
| Tab | Nội dung | Làm mới |
|---|---|---|
| Bảng điều khiển (대시보드) | Số người, phiên và kết nối đang truy cập; số người, bot, nhóm, tin nhắn, ảnh; thời gian chạy, cổng, DB, JVM, kiểm tra trạng thái. Nếu số thử nghiệm đang bật thì có dải cảnh báo | 5 giây |
| Mã đăng ký (가입 코드) | Các mã đang chờ (số điện thoại, cách gửi, trạng thái gửi, mã, thời gian còn lại, số lần nhập sai) và lịch sử gần đây. Sao chép mã, hủy mã | 3 giây |
| Người dùng (사용자) | Mọi tài khoản — số điện thoại, email đăng nhập (sửa được), có đang truy cập không, số thiết bị đăng nhập, số tin nhắn. Đăng xuất mọi thiết bị (모든 기기 로그아웃), Chặn số (번호 차단) | 10 giây |
| Bot (봇) | Các bot được tạo bằng BotFather — người tạo, menu lệnh, cách kết nối (MTProto · HTTP polling · địa chỉ webhook và lý do thất bại), số update đang chờ | 10 giây |
| Cài đặt (설정) | Quy tắc đăng ký và đăng nhập, SMS, email (SMTP), chặn số điện thoại | Lưu thủ công |
| Lưu trữ (저장소) | Thư mục dữ liệu, địa chỉ DB (ẩn mật khẩu), số lượng và dung lượng ảnh, số stream được lưu theo từng loại | 10 giây |
Các thao tác nguy hiểm (đăng xuất, chặn, hủy mã) phải bấm hai lần mới được thực hiện.
Mã đăng ký và đăng nhập
Khi người dùng nhập số điện thoại vào ứng dụng, máy chủ tạo mã và gửi theo cách đã chọn trong tab Cài đặt (설정).
| Cách gửi | Mã được gửi đến đâu | Màn hình ứng dụng |
|---|---|---|
| Trang quản trị (관리 화면) | Tab Mã đăng ký (가입 코드). Người vận hành sao chép và tự báo cho người dùng | Số điện thoại → "Đã gửi mã" → nhập mã (nếu là số mới thì nhập tên) |
| SMS | Tin nhắn qua một trong Twilio · Solapi · webhook | Giống như cách trang quản trị |
| Email (이메일) | Thư qua SMTP | Số điện thoại → nhập email → "Đã gửi mã qua email" → nhập mã |
- Với cách email, đăng ký mới có thể dùng địa chỉ bất kỳ, và địa chỉ đó trở thành email đăng nhập của tài khoản. Tài khoản đã có chỉ nhận mã qua email đăng nhập đã đăng ký — để ngăn việc ai đó điền địa chỉ của mình vào số điện thoại của người khác để vào tài khoản. Tài khoản đã có mà chưa có email đăng nhập sẽ được gửi mã qua SMS (nếu đã cấu hình) hoặc qua trang quản trị. Bạn có thể nhập email đăng nhập cho người dùng trong tab Người dùng (사용자).
- Việc gửi diễn ra ở phía sau, nên ứng dụng chuyển ngay sang màn hình nhập mã. Kết quả gửi (thành công, thất bại và lý do) hiện trong tab Mã đăng ký.
- Chỉ đăng ký (nhập tên) được sau khi đã nhập đúng mã. Mã sai chỉ được chấp nhận trong số lần cho phép; sau đó ngay cả mã đúng cũng bị từ chối.
Cài đặt — đăng ký và đăng nhập
| Mục | Ý nghĩa | Mặc định |
|---|---|---|
| Cho phép đăng ký mới (새 가입 허용) | Nếu tắt, chỉ tài khoản đã có mới đăng nhập được. Số mới bị từ chối với thông báo "số điện thoại không hợp lệ" | Bật |
| Cách gửi mã (코드 전달 방식) | Trang quản trị (관리 화면) / SMS / email (이메일) | Trang quản trị |
| Hiện mã trên trang quản trị (관리 화면에 코드 표시) | Hiện mã trong tab Mã đăng ký ngay cả khi dùng cách SMS hoặc email (phòng khi gửi thất bại) | Bật |
| Số thử nghiệm (테스트 번호) (+99966…) | Theo cấu hình máy chủ (서버 설정대로) / bật (켜기) / tắt (끄기). Khi vận hành thật thì tắt | Theo cấu hình máy chủ |
| Số chữ số của mã (코드 자릿수) · thời hạn hiệu lực (코드 유효 시간) | 5–6 chữ số · 1–60 phút | 5 chữ số · 5 phút |
| Khoảng cách yêu cầu lại (재요청 간격) · tối đa mỗi ngày (번호당 하루 최대 요청) | Số giây trước khi cùng một số được nhận mã lại (0–3600) · số lần tối đa trong 24 giờ (1–1000) | 60 giây · 10 lần |
| Số lần nhập sai cho phép (틀린 입력 허용 횟수) | Vượt quá thì mã đó bị khóa (1–20) | 5 lần |
Cài đặt — SMS
| Nhà cung cấp | Giá trị cần điền | Ghi chú |
|---|---|---|
| Webhook | Địa chỉ nhận (https://…), header Authorization (tùy chọn) | Máy chủ gửi POST {"phone":"+8210…","code":"12345","text":"…"}. Phản hồi 2xx là thành công. Dùng khi kết nối với máy chủ SMS riêng hoặc dịch vụ khác |
| Twilio | Account SID, Auth Token, số gửi hoặc Messaging Service SID | Toàn thế giới, kể cả số nước ngoài |
| Solapi (trước đây là CoolSMS) | API Key, API Secret, số gửi | SMS trong nước Hàn Quốc. Số gửi phải là số đã được đăng ký trước với Solapi. Số +82 được gửi theo định dạng 010… |
Nội dung tin nhắn có thể chứa {code} (mã) và {minutes} (thời hạn hiệu lực). Mặc định: [파발] 인증 코드: {code} (nghĩa là "[Pabal] Mã xác thực: {code}"; mặc định này bằng tiếng Hàn, bạn có thể đổi nội dung). Sau khi lưu, hãy kiểm tra bằng Gửi thử (테스트 발송).
Cài đặt — email (SMTP)
| Dịch vụ | Máy chủ · cổng · bảo mật | Tên người dùng · mật khẩu |
|---|---|---|
| Gmail | smtp.gmail.com · 587 · STARTTLS | Địa chỉ Gmail · mật khẩu ứng dụng (Tài khoản Google → Bảo mật → Xác minh 2 bước → Mật khẩu ứng dụng) |
| Naver | smtp.naver.com · 587 · STARTTLS | ID · mật khẩu (bật sử dụng POP3/SMTP trong cài đặt thư) |
| Máy chủ chuyển tiếp thư nội bộ | Địa chỉ relay · 25 · không có | Để trống |
Địa chỉ gửi phải là địa chỉ mà tài khoản SMTP được phép gửi. Tiêu đề và nội dung cũng dùng được {code}, {minutes}.
Quản lý người dùng
- Đăng xuất mọi thiết bị (모든 기기 로그아웃): ngắt mọi phiên đăng nhập (khóa xác thực) của tài khoản đó. Dùng cho người dùng bị mất thiết bị.
- Chặn số (번호 차단): số đó không nhận được mã, và tài khoản của số đó bị đăng xuất ngay khỏi mọi thiết bị. Giống với danh sách chặn số điện thoại (전화번호 차단) trong tab Cài đặt.
- Email đăng nhập (로그인 이메일): cần thiết để tài khoản đã có đăng nhập bằng email khi dùng cách email.
- @BotFather là bot bên trong máy chủ nên không thể bị đăng xuất.
Quản lý bot
Trong tab Bot (봇), bạn xem cách kết nối của từng bot — có đang kết nối qua MTProto không, có gọi getUpdates qua HTTP trong 1 phút gần đây không, địa chỉ webhook là gì và hiện có đang thất bại không (kèm lý do). Nếu số update đang chờ cứ tăng mãi, nghĩa là chương trình bot đã dừng hoặc webhook đang thất bại. Việc xóa bot và cấp lại token do người tạo bot thực hiện tại @BotFather.
Biến môi trường
Máy chủ đọc tệp cấu hình (server-config.json) rồi ghi đè bằng biến môi trường. Tệp compose vận hành đã đặt sẵn các giá trị dưới đây, nên thông thường bạn chỉ cần sửa .env.
| Biến | Ý nghĩa | Giá trị trong compose vận hành |
|---|---|---|
TELEGRAM_PORT | Cổng MTProto | MTPROTO_PORT (8443) |
TELEGRAM_HOST | Địa chỉ mà MTProto lắng nghe | 0.0.0.0 |
TELEGRAM_PUBLIC_HOST | Địa chỉ máy chủ thông báo cho ứng dụng (help.getConfig) | PUBLIC_IP |
TELEGRAM_WEB_PORT | Cổng của trang web, tài liệu, Bot API, trang quản trị | 8080 |
TELEGRAM_WEB_HOST | Địa chỉ mà cổng đó lắng nghe. Mặc định 127.0.0.1 | 0.0.0.0 (bên trong container; trên host chỉ công khai ở 127.0.0.1) |
TELEGRAM_PUBLIC_URL | Địa chỉ trang web. Dùng cho liên kết (me_url_prefix), liên kết mời, ví dụ trong tài liệu, ảnh xem trước | https://DOMAIN/ |
TELEGRAM_DATA_DIR | Vị trí của ảnh, admin-token, operations.json | /app/data |
TELEGRAM_RSA_KEY | Đường dẫn khóa bí mật RSA của máy chủ (nếu chưa có thì được tạo lần đầu, khóa công khai là .pub) | /app/keys/private.pem |
TELEGRAM_DC_ID | Số DC của máy chủ này | (mặc định của image là 1) |
TELEGRAM_DB_TYPE | memory · h2 · postgresql | postgresql |
TELEGRAM_DB_URL, TELEGRAM_DB_USERNAME, TELEGRAM_DB_PASSWORD | Kết nối JDBC | jdbc:postgresql://pabal-postgres:5432/pabal, pabal, POSTGRES_PASSWORD |
TELEGRAM_DB_MAX_POOL_SIZE | Số kết nối DB | 20 |
TELEGRAM_ADMIN_TOKEN | Token trang quản trị (nếu để trống thì được tạo trong data/admin-token) | ADMIN_TOKEN |
TELEGRAM_TEST_NUMBERS | Số thử nghiệm +99966…. Chỉ dùng khi phát triển | false |
TELEGRAM_WEBHOOK_ALLOW_LOCAL | Cho phép webhook của bot dùng http:// và địa chỉ nội bộ. Chỉ dùng khi phát triển | (không đặt = false) |
JAVA_OPTS | Tùy chọn JVM (bộ nhớ) | Giá trị trong .env |
Tệp dữ liệu
| Tệp | Nội dung | Quyền |
|---|---|---|
keys/private.pem | Khóa bí mật RSA của máy chủ. Tuyệt đối không đưa ra ngoài | 600 |
keys/private.pem.pub | Khóa công khai. Dùng khi build ứng dụng và cho /docs/server-key.pem | — |
data/admin-token | Token trang quản trị | 600 |
data/operations.json | Các giá trị trong tab Cài đặt — quy tắc đăng ký, giá trị bí mật SMS và SMTP, số bị chặn | 600 |
data/media/ | Ảnh gốc | — |
Bảng events của PostgreSQL | Tài khoản, cuộc trò chuyện, tin nhắn, đăng nhập, bot, cấu hình webhook — nhật ký của mọi thay đổi | — |
Ghi chú bảo mật
- Đừng mở cổng quản trị trực tiếp ra Internet. Caddy trong cấu hình vận hành chặn các đường dẫn quản trị như
/admin,/health,/metricsbằng 404. - Mọi request dữ liệu quản trị đều cần
Authorization: Bearer <token>, và trang của website khác không thể đọc được dữ liệu này. - Các giá trị bí mật SMS và SMTP chỉ nằm trong
operations.json; màn hình và API chỉ báo "đã lưu". Nếu để trống ô giá trị bí mật khi lưu, giá trị cũ vẫn được giữ. - Token và giá trị bí mật không bị ghi vào log, còn số điện thoại trong log được che bớt. Địa chỉ Bot API (có chứa token) cũng không được ghi vào log.
- Khóa xác thực nằm trong DB, nên người truy cập được DB có thể giải mã lưu lượng của người dùng. Hãy bảo vệ DB và bản sao lưu kỹ như khóa RSA.
Giới hạn
- Mã đang chờ và lịch sử gần đây nằm trong bộ nhớ nên sẽ mất khi máy chủ khởi động lại (chỉ cần yêu cầu lại trong ứng dụng).
- Việc gửi thật của nhà cung cấp SMS cần được kiểm tra bằng tài khoản của từng nhà cung cấp. Máy chủ tạo request theo đúng tài liệu của từng nhà cung cấp.
- Chưa có: xóa tài khoản, buộc xóa bot, xem tin nhắn, xem log, biểu đồ.