Menjalankan server
Administrasi dan pengaturan
Halaman admin, pengiriman kode pendaftaran (SMS dan email), nilai pengaturan server, pencadangan, dan keamanan โ referensi untuk operator.
Server dilengkapi halaman admin yang dibuka lewat peramban. Di sana Anda melihat status server, menentukan cara pengiriman kode pendaftaran dan masuk, serta mengelola pengguna dan bot. Dokumen ini adalah referensi yang merangkum halaman admin dan nilai pengaturan server di satu tempat. Jika Anda perlu memasang server terlebih dahulu, lihat Instalasi server.
Tampilan halaman admin berbahasa Korea. Karena itu, saat dokumen ini menyebut tab, tombol, atau pengaturan, label Koreanya dicantumkan di dalam kurung agar mudah ditemukan.
Membuka halaman admin
Halaman admin berada di /admin/ pada port HTTP admin (8080 dalam susunan produksi) dan hanya terbuka di server itu sendiri (127.0.0.1). Operator masuk lewat tunnel SSH.
# di komputer Anda (biarkan tetap berjalan)
ssh -N -L 8080:127.0.0.1:8080 <pengguna>@<server>
# peramban: http://localhost:8080/admin/
# token (di server)
sudo cat /srv/pabal/pabal_server/data/admin-token
Masukkan token, lalu tekan Buka (์ด๊ธฐ). Peramban mengingat token itu, dan Anda bisa menghapusnya dengan Hapus token (ํ ํฐ ์ง์ฐ๊ธฐ) di kanan atas. Jika ingin menentukan token sendiri, berikan TELEGRAM_ADMIN_TOKEN (minimal 16 karakter) โ dengan begitu berkas token tidak ditulis.
Isi setiap tab
| Tab | Isi | Diperbarui |
|---|---|---|
| Dasbor (๋์๋ณด๋) | Orang, sesi, dan koneksi yang sedang tersambung; jumlah orang, bot, grup, pesan, dan foto; waktu aktif, port, dan DB; JVM; pemeriksaan status. Jika nomor uji menyala, muncul pita peringatan | 5 detik |
| Kode pendaftaran (๊ฐ์ ์ฝ๋) | Kode yang sedang menunggu (nomor, cara pengiriman, status pengiriman, kode, sisa waktu, jumlah salah input) dan catatan terbaru. Salin atau batalkan kode | 3 detik |
| Pengguna (์ฌ์ฉ์) | Semua akun โ nomor telepon, email login (bisa diedit), status tersambung, jumlah perangkat yang masuk, jumlah pesan. Keluar dari semua perangkat (๋ชจ๋ ๊ธฐ๊ธฐ ๋ก๊ทธ์์), Blokir nomor (๋ฒํธ ์ฐจ๋จ) | 10 detik |
| Bot (๋ด) | Bot yang dibuat dengan BotFather โ pembuatnya, menu perintah, cara tersambung (MTProto ยท polling HTTP ยท alamat webhook dan alasan kegagalannya), jumlah update yang menunggu | 10 detik |
| Pengaturan (์ค์ ) | Aturan pendaftaran dan masuk, SMS, email (SMTP), pemblokiran nomor telepon | Disimpan manual |
| Penyimpanan (์ ์ฅ์) | Direktori data dan alamat DB (kata sandi disembunyikan), jumlah dan ukuran foto, jumlah stream penyimpanan per jenis | 10 detik |
Tindakan berbahaya (keluar, blokir, pembatalan kode) baru dijalankan jika ditekan dua kali.
Kode pendaftaran dan masuk
Saat seseorang memasukkan nomor telepon di aplikasi, server membuat kode dan mengirimkannya dengan cara yang dipilih di tab Pengaturan (์ค์ ).
| Cara pengiriman | Tujuan kode | Layar aplikasi |
|---|---|---|
| Halaman admin (๊ด๋ฆฌ ํ๋ฉด) | Tab Kode pendaftaran (๊ฐ์ ์ฝ๋). Operator menyalinnya dan memberitahukannya langsung | Nomor โ "Kode telah dikirim" โ kode (jika nomornya baru, nama) |
| SMS | Pesan teks lewat salah satu dari Twilio ยท Solapi ยท webhook | Sama dengan halaman admin |
| Email (์ด๋ฉ์ผ) | Email lewat SMTP | Nomor โ masukkan email โ "Kode telah dikirim ke email" โ kode |
- Dengan cara email, pendaftaran baru boleh memakai alamat apa saja, dan alamat itu menjadi email login akun tersebut. Akun yang sudah ada hanya menerima kode di email login yang terdaftar โ ini mencegah orang masuk dengan memasukkan alamatnya sendiri untuk nomor milik orang lain. Akun lama yang tidak punya email login akan dikirimi lewat SMS (jika sudah diatur) atau lewat halaman admin sebagai gantinya. Email login bisa diisikan di tab Pengguna (์ฌ์ฉ์).
- Pengiriman berlangsung di belakang, sehingga aplikasi langsung beralih ke layar kode. Hasil pengiriman (berhasil atau gagal beserta alasannya) muncul di tab Kode pendaftaran.
- Pendaftaran (memasukkan nama) hanya bisa dilakukan setelah kode dimasukkan dengan benar. Kode yang salah hanya diterima sebanyak batas yang diizinkan; setelah itu, kode yang benar pun ditolak.
Pengaturan โ pendaftaran dan masuk
| Butir | Arti | Bawaan |
|---|---|---|
| Izinkan pendaftaran baru (์ ๊ฐ์ ํ์ฉ) | Jika dimatikan, hanya akun yang sudah ada yang bisa masuk. Nomor baru ditolak sebagai "nomor tidak valid" | Nyala |
| Cara pengiriman kode (์ฝ๋ ์ ๋ฌ ๋ฐฉ์) | Halaman admin (๊ด๋ฆฌ ํ๋ฉด) / SMS / Email (์ด๋ฉ์ผ) | Halaman admin |
| Tampilkan kode di halaman admin (๊ด๋ฆฌ ํ๋ฉด์ ์ฝ๋ ํ์) | Tetap menampilkan kode di tab Kode pendaftaran meskipun memakai cara SMS atau email (untuk berjaga-jaga jika pengiriman gagal) | Nyala |
| Nomor uji (ํ ์คํธ ๋ฒํธ (+99966โฆ)) | Sesuai server (์๋ฒ ์ค์ ๋๋ก) / Nyalakan (์ผ๊ธฐ) / Matikan (๋๊ธฐ). Matikan di produksi | Sesuai server |
| Jumlah digit kode (์ฝ๋ ์๋ฆฟ์) ยท masa berlaku (์ฝ๋ ์ ํจ ์๊ฐ) | 5โ6 digit ยท 1โ60 menit | 5 digit ยท 5 menit |
| Jeda permintaan ulang (์ฌ์์ฒญ ๊ฐ๊ฒฉ) ยท maksimum per hari (๋ฒํธ๋น ํ๋ฃจ ์ต๋ ์์ฒญ) | Detik sampai nomor yang sama bisa menerima kode lagi (0โ3600) ยท jumlah maksimum dalam 24 jam (1โ1000) | 60 detik ยท 10 kali |
| Batas salah input (ํ๋ฆฐ ์ ๋ ฅ ํ์ฉ ํ์) | Jika terlampaui, kode itu dikunci (1โ20) | 5 kali |
Pengaturan โ SMS
| Penyedia | Nilai yang diisi | Catatan |
|---|---|---|
| Webhook (์นํ ) | Alamat penerima di Alamat webhook (์นํ ์ฃผ์, https://โฆ), header Authorization (opsional) | Server mengirim POST {"phone":"+8210โฆ","code":"12345","text":"โฆ"}. Berhasil jika 2xx. Untuk menyambungkan ke server SMS Anda sendiri atau layanan lain |
| Twilio | Account SID, Auth Token, nomor pengirim (๋ฐ์ ๋ฒํธ) atau Messaging Service SID | Seluruh dunia, termasuk nomor luar negeri |
| Solapi (dahulu CoolSMS) | API Key, API Secret, nomor pengirim | SMS domestik Korea. Nomor pengirim harus nomor yang sudah didaftarkan sebelumnya di Solapi. Nomor +82 dikirim dalam format 010โฆ |
Di dalam teks pesan Anda bisa memasukkan {code} (kode) dan {minutes} (masa berlaku). Nilai bawaan: [ํ๋ฐ] ์ธ์ฆ ์ฝ๋: {code} (artinya "[Pabal] Kode verifikasi: {code}"). Setelah menyimpan, periksa dengan Kirim uji (ํ
์คํธ ๋ฐ์ก).
Pengaturan โ email (SMTP)
| Layanan | Server ยท port ยท keamanan | Nama pengguna ยท kata sandi |
|---|---|---|
| Gmail | smtp.gmail.com ยท 587 ยท STARTTLS | Alamat Gmail ยท sandi aplikasi (Akun Google โ Keamanan โ Verifikasi 2 Langkah โ Sandi aplikasi) |
| Naver | smtp.naver.com ยท 587 ยท STARTTLS | ID ยท kata sandi (aktifkan penggunaan POP3/SMTP di pengaturan email Naver) |
| Relay email internal | Alamat relay ยท 25 ยท tidak ada (์์) | Kosongkan |
Alamat pengirim (๋ณด๋ด๋ ์ฃผ์) harus alamat yang boleh dipakai mengirim oleh akun SMTP tersebut. Subjek (์ ๋ชฉ) dan isi (๋ณธ๋ฌธ) juga bisa memakai {code} dan {minutes}.
Mengelola pengguna
- Keluar dari semua perangkat (๋ชจ๋ ๊ธฐ๊ธฐ ๋ก๊ทธ์์): memutus semua status masuk (auth key) akun tersebut. Dipakai untuk pengguna yang kehilangan perangkatnya.
- Blokir nomor (๋ฒํธ ์ฐจ๋จ): nomor itu tidak bisa menerima kode, dan akun dengan nomor itu langsung dikeluarkan dari semua perangkat. Sama dengan daftar Blokir nomor telepon (์ ํ๋ฒํธ ์ฐจ๋จ) di tab Pengaturan (์ค์ ).
- Email login (๋ก๊ทธ์ธ ์ด๋ฉ์ผ): diperlukan agar akun yang sudah ada bisa masuk lewat email saat memakai cara email.
- @BotFather adalah bot di dalam server, jadi tidak bisa dikeluarkan.
Mengelola bot
Di tab Bot (๋ด) Anda bisa melihat cara tersambung setiap bot โ apakah tersambung lewat MTProto, apakah memanggil getUpdates lewat HTTP dalam 1 menit terakhir, serta apa alamat webhook-nya dan apakah sedang gagal (beserta alasannya). Jika jumlah update yang menunggu terus bertambah, program bot sedang berhenti atau webhook-nya sedang gagal. Penghapusan bot dan penerbitan ulang token dilakukan oleh pembuat bot di @BotFather.
Variabel lingkungan
Server membaca berkas pengaturan (server-config.json) lalu menimpanya dengan variabel lingkungan. Berkas compose produksi sudah menetapkan nilai-nilai di bawah, jadi biasanya Anda cukup mengubah .env.
| Variabel | Arti | Nilai di compose produksi |
|---|---|---|
TELEGRAM_PORT | Port MTProto | MTPROTO_PORT (8443) |
TELEGRAM_HOST | Alamat yang didengarkan MTProto | 0.0.0.0 |
TELEGRAM_PUBLIC_HOST | Alamat server yang diberitahukan ke aplikasi (help.getConfig) | PUBLIC_IP |
TELEGRAM_WEB_PORT | Port situs web, dokumentasi, Bot API, dan halaman admin | 8080 |
TELEGRAM_WEB_HOST | Alamat yang didengarkan port itu. Bawaan 127.0.0.1 | 0.0.0.0 (di dalam kontainer; di host hanya dibuka di 127.0.0.1) |
TELEGRAM_PUBLIC_URL | Alamat situs web. Dipakai untuk tautan (me_url_prefix), tautan undangan, contoh di dokumentasi, dan gambar pratinjau | https://DOMAIN/ |
TELEGRAM_DATA_DIR | Lokasi foto, admin-token, dan operations.json | /app/data |
TELEGRAM_RSA_KEY | Jalur kunci privat RSA server (dibuat di awal jika belum ada; kunci publiknya .pub) | /app/keys/private.pem |
TELEGRAM_DC_ID | Nomor DC server ini | (bawaan image: 1) |
TELEGRAM_DB_TYPE | memory ยท h2 ยท postgresql | postgresql |
TELEGRAM_DB_URL, TELEGRAM_DB_USERNAME, TELEGRAM_DB_PASSWORD | Koneksi JDBC | jdbc:postgresql://pabal-postgres:5432/pabal, pabal, POSTGRES_PASSWORD |
TELEGRAM_DB_MAX_POOL_SIZE | Jumlah koneksi DB | 20 |
TELEGRAM_ADMIN_TOKEN | Token halaman admin (jika kosong, dibuat di data/admin-token) | ADMIN_TOKEN |
TELEGRAM_TEST_NUMBERS | Nomor uji +99966โฆ. Khusus pengembangan | false |
TELEGRAM_WEBHOOK_ALLOW_LOCAL | Mengizinkan webhook bot memakai http:// dan alamat internal. Khusus pengembangan | (tidak diatur = false) |
JAVA_OPTS | Opsi JVM (memori) | Nilai di .env |
Berkas data
| Berkas | Isi | Izin |
|---|---|---|
keys/private.pem | Kunci privat RSA server. Jangan pernah dikeluarkan dari server | 600 |
keys/private.pem.pub | Kunci publik. Dipakai untuk build aplikasi dan /docs/server-key.pem | โ |
data/admin-token | Token halaman admin | 600 |
data/operations.json | Nilai dari tab Pengaturan (์ค์ ) โ aturan pendaftaran, nilai rahasia SMS dan SMTP, nomor yang diblokir | 600 |
data/media/ | Foto asli | โ |
Tabel events PostgreSQL | Akun, obrolan, pesan, status masuk, bot, pengaturan webhook โ catatan semua perubahan | โ |
Catatan keamanan
- Jangan buka port admin langsung ke internet. Caddy dalam susunan produksi memblokir jalur administrasi seperti
/admin,/health, dan/metricsdengan 404. - Semua permintaan data admin memerlukan
Authorization: Bearer <token>, dan halaman dari situs lain tidak bisa membacanya. - Nilai rahasia SMS dan SMTP hanya ada di
operations.json; halaman dan API hanya memberi tahu "Tersimpan" (์ ์ฅ๋จ). Jika kolom nilai rahasia dibiarkan kosong saat menyimpan, nilai lama tetap dipakai. - Token dan nilai rahasia tidak dicetak ke log, dan nomor telepon di log disamarkan. Alamat Bot API (yang memuat token) juga tidak dicatat ke log.
- Auth key tersimpan di DB, jadi siapa pun yang bisa mengakses DB dapat membuka lalu lintas pengguna. Jaga DB dan cadangannya seketat kunci RSA.
Keterbatasan
- Kode yang sedang menunggu dan catatan terbaru ada di memori, jadi hilang saat server dimulai ulang (cukup minta lagi dari aplikasi).
- Pengiriman sungguhan oleh penyedia SMS harus diperiksa dengan akun masing-masing penyedia. Server menyusun permintaan sesuai dokumentasi setiap penyedia.
- Yang belum ada: penghapusan akun, penghapusan paksa bot, melihat isi pesan, melihat log, dan grafik.