Debian tarqatmalari uchun takrorlanadigan paketlar talabi kuchaymoqda
Debian hamjamiyati takrorlanadigan paketlar (reproducible builds)ni majburiy qilishni ko'rib chiqmoqda – bu xavfsizlik, ishonchlilik va sifatni oshiradi.

Bugun ko'p foydalanuvchilar Signal yoki WhatsApp kabi yopiq platformalarga tayanadi. Biroq, bunday xizmatlar bir kun to‘xtab qolsa, aloqalar ham uzilib qoladi. XMPP (Extensible Messaging and Presence Protocol) esa federatsiyalangan, ochiq standart bo‘lib, o‘z serveringizni boshqarish orqali mustaqil xabar almashish imkonini beradi. Ushbu maqolada Docker konteynerida Prosody XMPP serverini o‘rnatish, TLS sertifikatlari, fayl yuklash, guruh chat va TURN/STUN orqali ovozli qo‘ng‘iroqlarni yo‘lga qo‘yish jarayonlari batafsil ko‘rib chiqiladi.
XMPP serverlari boshqa serverlar va mijozlar bilan aloqani SRV yozuvlari orqali topadi. Quyidagi yozuvlarni domeningiz DNS paneliga qo‘shing:
_xmpp-client._tcp.example.com SRV 0 5 5222 xmpp.example.com. – mijozlar uchun port_xmpp-server._tcp.example.com SRV 0 5 5269 xmpp.example.com. – server‑to‑server federatsiya portixmpp.example.com – server IP manziliga yo‘naltiradiupload.xmpp.example.com va guruh chat uchun conference.xmpp.example.com yozuvlarini ham qo‘shish tavsiya etiladi.Prosody xavfsiz aloqasiz ishga tushmaydi. Cloudflare DNS challenge yordamida Let’s Encrypt sertifikatini quyidagicha olish mumkin:
docker run --rm \ -v ~/docker/xmpp/certs:/etc/letsencrypt \ -v ~/docker/xmpp/cloudflare.ini:/etc/cloudflare.ini:ro \ certbot/dns-cloudflare certonly \ --dns-cloudflare \ --dns-cloudflare-credentials /etc/cloudflare.ini \ -d xmpp.example.com
Keyin fayl ruxsatlarini moslashtiring va har oy yangilanish uchun cron qo‘shing.
services:
prosody:
image: prosodyim/prosody:13.0
container_name: xmpp
restart: unless-stopped
ports:
- "5222:5222"
- "5269:5269"
volumes:
- prosody-data:/var/lib/prosody
- ./prosody.cfg.lua:/etc/prosody/prosody.cfg.lua:ro
- ./certs/live/xmpp.example.com/fullchain.pem:/etc/prosody/certs/xmpp.example.com.crt:ro
- ./certs/live/xmpp.example.com/privkey.pem:/etc/prosody/certs/xmpp.example.com.key:ro
volumes:
prosody-data:
5222 mijozlar, 5269 federatsiya uchun. Ma'lumotlar hajmi prosody-data hajmida saqlanadi.
Prosody modullari yordamida mobil qurilmalar, xavfsizlik va arxivlashni yoqish mumkin. Eng muhim modullar:
carbons – bir nechta qurilmada xabarlar sinxronlanadismacks – uzluksiz aloqani tiklaydi, xabar yo‘qolishini oldini oladicloud_notify – push‑xabarnomalar, batareya tejash uchunmam – server‑tomonida xabar arxivlashblocklist – spam va zararli foydalanuvchilarni bloklashXavfsizlik sozlamalari:
c2s_require_encryption = true s2s_require_encryption = true s2s_secure_auth = true authentication = "internal_hashed" allow_registration = false
Bu barcha aloqalarni TLS orqali shifrlaydi va ro‘yxatdan o‘tishni qo‘lda amalga oshirishni talab qiladi.
TLS faqat uzatish vaqtida shifrlashni ta’minlaydi, lekin server xabarlarni o‘qishi mumkin. OMEMO protokoli esa xabarlarni mijoz darajasida shifrlaydi, shuning uchun hatto server admini ham mazmunni ko‘ra olmaydi. OMEMO’ni alohida sozlash shart emas – u mijoz dasturlari (Monal, Conversations, Gajim) tomonidan avtomatik qo‘llab‑quvvatlanadi.
Prosody HTTP‑porti 5280 orqali fayl almashishni amalga oshiradi. Reverse proxy (masalan, Caddy) orqali HTTPSga yo‘naltirish tavsiya etiladi:
xmpp.example.com {
reverse_proxy xmpp:5280
}
Guruh chat uchun conference.xmpp.example.com komponentini muc (Multi‑User Chat) va muc_mam modullari bilan yoqish kifoya.
NAT orqa tarmog‘ida ishlaydigan mijozlar to‘g‘ridan‑to‘g‘ri media oqimini yaratolmaydi. Bu muammoni hal qilish uchun coturn konteynerini qo‘shamiz:
services:
coturn:
image: coturn/coturn:latest
container_name: coturn
restart: unless-stopped
network_mode: host
volumes:
- ./turnserver.conf:/etc/coturn/turnserver.conf:ro
tmpfs:
- /var/lib/coturn
Konfiguratsiyada use-auth-secret va static-auth-secret orqali umumiy maxfiy kalit belgilab, Prosodyga ham shu kalitni ko‘rsatish kifoya.
Ro‘yxatdan o‘tish o‘chirib qo‘yilgan, shuning uchun foydalanuvchi qo‘lda qo‘shiladi:
docker exec -it xmpp prosodyctl adduser foydalanuvchi@xmpp.example.com
Keyin har qanday XMPP mijozida (Monal – iOS, Conversations – Android, Gajim – desktop) login qilishingiz mumkin.
UFW yoki boshqa firewall orqali 5222, 5269, 3478, 5349 va TURN relay UDP portlarini oching. Routerda ham shu portlarni forward qilishni unutmang.
Docker va Prosody yordamida bir necha konteynerda to‘liq funksional XMPP serverini yaratish oddiy va arzon. Siz o‘z xabarlaringizni, fayllaringizni, guruh chatlaringizni va hatto ovozli qo‘ng‘iroqlarni mustaqil, shifrlangan muhitda boshqarasiz. Signal kabi yopiq platformalarga qo‘shimcha sifatida bu yechim sizga raqamli hayotingizni yanada mustahkamlaydi.