آموزش نصب و راهاندازی سرور چت Prosody روی اوبونتو 24.04

مقدمه پروزودی (Prosody) یک سرور چت XMPP است که از پیامرسانی رمزنگاریشده با TLS (بهصورت یکبهیک و گروهی) پشتیبانی میکند. پروتکل XMPP (Extensible Messaging and Presence Protocol) یک پروتکل پیامرسانی باز است که در گذشته با نام جَبر (Jabber) نیز شناخته میشد. این بدان معناست که هر کلاینت چت XMPP میتواند به سرور Prosody متصل شده و گفتگو را آغاز کند.
XMPP یک استاندارد بالغ و متنباز است که توسط نیروی مهندسی اینترنت (IETF) نگهداری میشود. این پروتکل بهطور فعال توسعه پیدا میکند و در بسیاری از برنامهها استفاده میشود؛ بهعنوانمثال، سرویس Google Talk که توسط میلیونها کاربر استفاده میشد، بر پایه همین پروتکل بنا شده بود. سرورهای XMPP مانند Prosody، گزینهای انعطافپذیر برای پیامرسانی محسوب میشوند که بیش از دو دهه از عمر آنها میگذرد.
در این آموزش، شما یک سرور Prosody را نصب و پیکربندی میکنید که از چتهای یکبهیک و گروهی و همچنین قابلیت آپلود فایل در پنل چت برای به اشتراکگذاری پشتیبانی میکند. تمامی ارتباطات توسط گواهی رمزنگاری TLS محافظت میشوند تا دادههای شخصی شما کاملاً خصوصی بمانند.
پیشنیازها پیش از شروع این راهنما، به موارد زیر نیاز دارید:
- یک سرور اوبونتو 24.04 با حداقل ۵۱۲ مگابایت رم که طبق راهنمای راهاندازی اولیه سرور اوبونتو پیکربندی شده باشد (شامل یک کاربر غیر روت با دسترسی sudo و فایروال).
- یک کلاینت چت XMPP روی سیستم محلی خود. هر یک از برنامههای چت لیستشده در صفحه کلاینتهای XMPP با سرور Prosody شما سازگار خواهد بود.
- دو زیردامنه (Hostname) که به سرور شما pointing شده باشند. شما به دو زیردامنا نیاز دارید زیرا Prosody از یکی برای چت مستقیم و دیگری برای اتاقهای چت گروهی استفاده میکند. برای یادگیری نحوه اتصال دامنهها به سرورهای ابری پارمین کلود (Parmin Cloud) میتوانید به مستندات DNS پارمین کلود مراجعه کنید. در این راهنما از دو زیردامنه نمونه زیر استفاده میکنیم:
chat.your-domain: برای چتهای یکبهیک.room.your-domain: برای اتاقهای چت گروهی.
بهعنوان کاربر غیر روت با دسترسی sudo وارد سرور خود شوید تا این راهنما را آغاز کنید.
مرحله ۱ — نصب Prosody
در این مرحله، مخزن APT اختصاصی Prosody را به سرور خود اضافه کرده و سپس Prosody را از آن نصب میکنید. ما از مخزن رسمی Prosody استفاده میکنیم تا مطمئن شویم جدیدترین نسخههای پکیجها نصب میشوند.
ابتدا با ویرایشگر متن خود یک فایل مخزن جدید ایجاد و باز کنید. این فایل اطلاعات مخزن Prosody را برای مدیریتگر پکیج APT نگه میدارد:
خط زیر را در فایل اضافه کنید (دقت کنید که برای اوبونتو 24.04 از کلمه noble استفاده کردهایم):
/etc/apt/sources.list.d/prosody.list
اکنون باید کلید عمومی APT مربوط به Prosody را دانلود و نصب کنید. سرور شما از این کلید برای تایید صحت پکیجها استفاده میکند.
دستور زیر از ابزار wget برای دانلود کلید به دایرکتوری فعلی شما استفاده میکند:
از آنجایی که دستور apt-key add در نسخههای جدید اوبونتو منسوخ شده است، کلید را با فرمت مناسب در مسیر کلیدهای معتبر سیستم ذخیره کنید:
اکنون میتوانید فایل کلید دانلود شده را حذف کنید، زیرا دیگر به آن نیاز ندارید:
پایگاه داده پکیجهای سرور خود را بهروزرسانی کنید تا نسخههای جدیدتر از مخزن Prosody شامل شوند:
اکنون میتوانید پکیج سرور Prosody و برخی پکیجهای افزاینده اختیاری را نصب کنید:
پکیجهایی که نصب کردید به شرح زیر هستند:
- prosody: خود سرور Prosody.
- prosody-modules: ماژولهای اضافی Prosody که قابلیتهای سرور را گسترش میدهند.
- lua-dbi-sqlite3: به Prosody اجازه میدهد از دیتابیس SQLite استفاده کند.
- lua-event: به Prosody اجازه میدهد ارتباط کلاینتهای همزمان بیشتری را مدیریت کند.
نصب Prosody کامل شد. در مرحله بعد، دو گواهی TLS دریافت میکنید که Prosody برای رمزنگاری دادههای شما هنگام عبور از اینترنت استفاده خواهد کرد.
مرحله ۲ — دریافت گواهینامههای TLS
پروزودی از گواهینامههای TLS برای رمزنگاری ارتباط بین سرور و کلاینتها استفاده میکند. این گواهیها همان گواهیهایی هستند که هنگام بازدید از وبسایتهای با آدرس HTTPS استفاده میشوند. سازمان Let’s Encrypt گواهینامههای TLS رایگان ارائه میدهد و ابزار certbot را برای دریافت و مدیریت آنها فراهم کرده است. در این مرحله، ابزار certbot را نصب کرده و از آن برای دریافت یک جفت گواهی برای دو زیردامنه خود استفاده میکنید.
ابتدا certbot را نصب کنید (در اوبونتو 24.04 این پکیج در مخازن پیشفرض موجود است):
سپس، اجازه عبور ترافیک HTTP از طریق فایروال UFW را بدهید تا certbot بتواند درخواست گواهی شما را تایید کند:
دستور certbot زیر را اجرا کنید تا گواهی برای یکی از زیردامنههای شما دریافت شود:
گزینههای استفاده شده:
--certonly: فقط گواهی را دریافت کن و هیچ تغییر دیگری در سرور ایجاد نکن.--standalone: یک وبسرور موقت برای اعتبارسنجی گواهی راهاندازی کن.--agree-tos: به طور خودکار با شرایط خدمات Let’s Encrypt موافقت کن.--email your_email: آدرس ایمیلی که به Let’s Encrypt ارسال میشود تا از طریق آن در مورد مسائل امنیتی، انقضای گواهی و … به شما اطلاعرسانی شود. (به جایyour_emailایمیل واقعی خود را وارد کنید).-d chat.your-domain: نام دامنهای که قصد دارید برای سرور Prosody از آن استفاده کنید.
هنگام اجرای این دستور، از شما پرسیده میشود که آیا مایلید آدرس ایمیل خود را با Electronic Frontier Foundation به اشتراک بگذارید یا خیر (این بخش اختیاری است). سپس ثبت گواهی با خروجی زیر ادامه مییابد:
همین دستور را مجدداً برای دریافت گواهی زیردامنه دوم خود اجرا کنید:
اکنون دو دایرکتوری در مسیر زیر دارید:
/etc/letsencrypt/live/room.your-domain/etc/letsencrypt/live/chat.your-domain
این دایرکتوریها حاوی فایلهای گواهی و کلید برای دامنههای شما هستند.
از آنجایی که سرور Prosody بهعنوان کاربر root اجرا نمیشود، مالکیت و مجوزهای دسترسی (Permissions) دایرکتوریها و فایلهای کلید باید تغییر کنند تا سرور Prosody بتواند آنها را بخواند و استفاده کند.
اولین قدم، تغییر گروه مالک کلیدهای خصوصی به گروه prosody است:
سپس، مجوزهای دایرکتوریهایی که حاوی فایلهای گواهی TLS هستند را به 0755 تغییر دهید:
اکنون، مجوزهای دسترسی به کلیدهای خصوصی TLS را تغییر دهید:
مجوز 0640 روی این فایلها به این معناست که کاربر root دسترسی خواندن و نوشتن دارد. اعضای گروه prosody (که کاربر اجرای سرور Prosody در آن عضو است) دسترسی خواندن دارند و سایر کاربران سیستم هیچ دسترسیای به این فایل ندارند.
میتوانید با استفاده از دستور cat بهعنوان کاربر prosody تست کنید که آیا سرور میتواند کلید خصوصی را بخواند یا خیر:
اگر موفقیتآمیز باشد، محتوای فایل کلید روی صفحه نمایش شما ظاهر میشود.
پروزودی برای رمزنگاری ارتباطات آپلود و دانلود فایل، به یک فایل واحد شامل گواهی و کلید خصوصی نیاز دارد. این فایل بهصورت خودکار توسط certbot ایجاد نمیشود، بنابراین باید آن را بهصورت دستی بسازید.
ابتدا به دایرکتوری که حاوی فایلهای کلید و گواهی است بروید و سپس با دستور cat محتوای آنها را در یک فایل جدید به نام key-and-cert.pem ترکیب کنید:
بخش ابتدایی این دستور (sudo sh -c) یک زیرشل (sub-shell) با دسترسی کاربر root باز میکند تا بتواند فایل جدید را در این مسیر بنویسد.
اکنون گروه و مجوزهای این فایل جدید را با گروه و مجوزی که برای کلید خصوصی قبلی تنظیم کردید مطابقت دهید:
به دایرکتوری خانه کاربر خود برگردید:
در نهایت، این فایل باید هر بار که گواهی تمدید میشود بازسازی گردد تا از گواهی منقضیشده استفاده نشود.
ابزار certbot دارای قابلیتی به نام “hook” (قلاب) است که اجازه میدهد قبل یا بعد از تمدید گواهی، یک اسکریپت اجرا شود. شما میتوانید از این مکانیزم برای اجرای اسکریپتی استفاده کنید که فایل ترکیبی شما را پس از هر تمدید بازسازی کند.
فایل اسکریپت جدیدی به نام /etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh با ویرایشگر متن باز کنید:
سپس کدهای زیر را در آن قرار دهید:
/etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh
توضیح بخشهای مختلف این اسکریپت Bash:
#!/usr/bin/env bash: به سیستم میگوید که از مفسر Bash برای اجرای اسکریپت استفاده کند.set -e: باعث میشود اسکریپت در صورتی که هر یک از دستورات با خطا مواجه شد، متوقف شود.>: خروجی دستور cat را به فایل جدیدی در سمت راست هدایت میکند.
تا زمانی که مجوز اجرا به اسکریپت ندهید، قابل اجرا نخواهد بود:
سپس، با اجرای دستور certbot زیر تست کنید که آیا گواهیها بهدرستی نصب شدهاند و اسکریپت پس از تمدید (hook) کار میکند یا خیر:
این دستور به certbot میگوید که گواهیها را تمدید کند اما با گزینه --dry-run از ایجاد تغییرات واقعی جلوگیری میکند. در صورت موفقیت، خروجی زیر را مشاهده خواهید کرد:
اکنون گواهیهای TLS را برای سرور Prosody خود دریافت کردهاید. در مرحله بعد، فایل پیکربندی اصلی Prosody را ویرایش خواهید کرد.
مرحله ۳ — پیکربندی Prosody
پروزودی گزینههای پیکربندی زیادی دارد و این موضوع در حجم بالای فایل پیکربندی اصلی /etc/prosody/prosody.cfg.lua مشهود است. برای مدیریت بهتر این بخش، فایل را از ابتدا تا انتها ویرایش میکنیم.
پیش از شروع ویرایش یک فایل پیکربندی بزرگ، همیشه خوب است یک کپی از آن بگیرید تا در صورت نیاز بتوانید به نسخه اصلی برگردانید:
سپس فایل پیکربندی را باز کنید:
تغییرات پیکربندی در بخشهای کوچکتری در ادامه آورده شده است.
ایجاد مدیر (Administrator) مدیران Prosody کاربرانی هستند که میتوانند از طریق کلاینت چت خود تغییراتی در سرور ایجاد کنند، به همه کاربران پیام بدهند و سایر اقدامات ممتاز را انجام دهند.
مدیران با خط زیر در فایل تنظیم میشوند:
در این مثال، کاربر admin به سرور نمونه اضافه میشود:
برای افزودن کاربر دیگر، باید بعد از کاربر اول کاما قرار دهید:
فعالسازی ماژولهای Prosody توسعهدهندگان Prosody بسیاری از قابلیتها را در قالب ماژولهایی قرار دادهاند که میتوانند فعال یا غیرفعال شوند. یک ماژول با حذف علامت -- (که در زبان Lua نشاندهنده کامنت است) در ابتدای آن فعال میشود.
بخش ماژولهای ویرایششده در فایل پیکربندی به شکل زیر است (خطوطی که از حالت کامنت خارج شدهاند):
ماژولهایی که فعال کردهاید عبارتند از:
mam: پیامهای چت را در سرور ذخیره میکند تا کاربران بتوانند بعداً به آنها دسترسی پیدا کنند.csi_simple: بهینهسازی را برای کلاینتهای موبایل فعال میکند.http_files: اشتراکگذاری فایل را فعال میکند.http_upload: امکان آپلود فایل برای اشتراکگذاری را فراهم میکند.groups: قابلیت دید کاربران توسط یکدیگر را فراهم میکند.announce: به مدیران اجازه میدهد به همه کاربران آنلاین پیام ارسال کنند.
راهاندازی ذخیرهسازی دیتابیس بخش بعدی که باید ویرایش کنید، محل ذخیره پیامها و سایر دادههای کاربران را تعیین میکند. تنظیم پیشفرض استفاده از فایلهای متنی است، اما یک پیکربندی مقیاسپذیرتر، استفاده از دیتابیس است. Prosody از MySQL، PostgreSQL و SQLite پشتیبانی میکند. SQLite برای راهاندازی و نگهداری سادهتر است و برای استقرارهای کوچک مناسب میباشد.
دو خط زیر را با حذف علامت -- از ابتدای آنها فعال کنید:
آرشیو پیامها میتوانید تعیین کنید که سرور پیامهای چت قدیمی را چقدر ذخیره کند:
دوره پیشفرض 1w (یک هفته) نمایش داده شده است. میتوانید از d برای روز، w برای هفته و y برای سال استفاده کنید.
رمزنگاری آپلود و دانلود فایل خط https_certificate به Prosody میگوید که کجا به دنبال فایل ترکیبی گواهی و کلید که قبلاً ساختید بگردد تا از آن برای انتقال فایل استفاده کند. آن را به مسیر فایل ترکیبی خود ویرایش کنید:
حذف localhost در پیکربندی پیشفرض، Prosody روی localhost یا 127.0.0.1 برای ارتباطات چت گوش میدهد. این مورد روی یک سرور ریموت لازم نیست. این رفتار را با اضافه کردن -- به ابتدای خط غیرفعال کنید:
تغییر حداکثر حجم آپلود فایل سرور Prosody شما از اشتراکگذاری فایل توسط کاربران در پنجره چت پشتیبانی میکند. حداکثر اندازه پیشفرض فایلها ۱ مگابایت است. برای افزایش آن، خط زیر را به انتهای فایل پیکربندی اضافه کنید:
عدد انتهای خط، حداکثر حجم فایل به بایت است. مقدار اینجا برابر با ۱۰ مگابایت (۱۰۴۸۵۷۶۰ بایت) است. اگر میخواهید اجازه آپلود فایلهای بزرگتر از ۱۰ مگابایت را بدهید باید خط دیگری اضافه کرده و متغیر http_max_content_size را تنظیم کنید. این مقدار باید بزرگتر از حداکثر حجم آپلود فایل باشد.
پیکربندی فایل گروهها ماژول groups که در بخش ماژولها فعال کردید، به کلاینتهای چت اجازه میدهد یکدیگر را ببینند. این ماژول فایلی را میخواند که نام گروهها و اعضای آنها در آن قرار دارد. با اضافه کردن خط زیر به انتهای فایل پیکربندی، مسیر فایل را مشخص کنید:
این فایل را با دستور زیر در ترمینال دیگری ایجاد کنید:
افزودن تنظیمات VirtualHost سرور چت پروزودی از بلوکی که با VirtualHost شروع میشود برای راهاندازی سرور چت با استفاده از دامنه شما استفاده میکند. بلوک پیکربندی زیر را به انتهای فایل اضافه کنید:
گزینههای استفاده شده:
VirtualHost: دامنهای که Prosody برای سرور چت استفاده میکند.key: کلید خصوصی TLS برای امنسازی ارتباطات.certificate: گواهی TLS برای امنسازی ارتباطات.
افزودن سرور اتاق چت (چت گروهی) این پیکربندی به Prosody اجازه میدهد اتاقهای چت چندکاربره (Multi-User Chat) را به کاربران ارائه دهد. این بلوک را به عنوان یک بخش جدید در انتهای فایل پیکربندی اضافه کنید:
گزینههای استفاده شده:
Component: ماژولmuc(چت چندکاربره) را برای دامنهroom.your-domainفعال میکند.modules_enabled = { "mam_muc"; }: آرشیو کردن پیامهای چت گروهی را فعال میکند.storage: پیامهای چت را در دیتابیس SQLite ذخیره میکند.keyوcertificate: کلید و گواهی TLS برای این دامنه.
فایل را ذخیره کرده و از ویرایشگر خارج شوید.
اکنون سرویس Prosody را ریاستارت کنید تا تنظیمات جدید اعمال شود:
مرحله ۴ — افزودن کاربران و گروههای Prosody
پیش از آنکه کاربران بتوانند وارد شوند، باید آنها را از طریق خط فرمان به سرور Prosody اضافه کنید. از ابزار prosodyctl که بههمراه پکیج نصب شده است برای مدیریت سرور استفاده کنید.
با دستور زیر یک کاربر جدید ثبت کنید:
(به جای sammy نام کاربر و به جای password یک رمز عبور قوی وارد کنید). این کاربر اکنون میتواند به سرور Prosody شما متصل شود.
برای اینکه کاربران شما بتوانند یکدیگر را و وضعیت آنلاین/آفلاین بودن هم را ببینند، بهتر است گروههایی ایجاد کنید. این کار با ایجاد گروهها و افزودن کاربران به آنها در فایلی که قبلاً تعریف کردیم انجام میشود.
فایل گروهها را باز کنید:
یک گروه با قرار دادن نام آن بین براکتها [] تعریف میشود. اعضای گروه در خطوط زیرِ نام گروه قرار میگیرند. در اینجا گروهی به نام Everyone با دو عضو sammy و admin ایجاد شده است:
/etc/prosody/sharedgroups.txt
تمام اعضای یک گروه میتوانند یکدیگر را ببینند. هر زمان کاربران جدیدی اضافه کردید یا اطلاعات گروه را تغییر دادید، باید سرور Prosody را ریاستارت کنید:
مرحله ۵ — اجازه عبور ترافیک Prosody از فایروال
پروزودی برای دریافت ارتباطات از کلاینتها روی پورتهای TCP شماره 5222 و 5322 گوش میدهد. با دستورات زیر این پورتها را در فایروال UFW باز کنید:
سرور Prosody اکنون بهطور کامل نصب و پیکربندی شده است.
مرحله ۶ — پیکربندی کلاینت چت XMPP
در این مرحله، کلاینت XMPP خود را برای اتصال به سرور Prosody پیکربندی میکنید. برای اتصال به سرور باید نام کاربری، نام سرور (Hostname) و رمز عبور خود را وارد کنید.
از آنجایی که سرور را روی پورتهای استاندارد XMPP پیکربندی کردهاید و امنیت TLS بهطور خودکار برقرار میشود، نیازی به تنظیمات دستی پورتها در کلاینت ندارید.
کلاینتهای مختلف ممکن است نام کاربری، رمز عبور و آدرس سرور را در قالبهای متفاوتی درخواست کنند. گاهی نام کاربری و آدرس سرور بههمراه علامت @ در قالب یک آدرس ایمیل وارد میشوند؛ مانند sammy@chat.your-domain. کلاینتها ممکن است به این فرمت بگویند Username یا XMPP Address.
کلاینتهای XMPP برای ورود به جزئیات مذکور به چیز دیگری نیاز ندارند. پس از ورود، میتوانید اعضای دیگر گروه چت را پیدا کنید و در صورت پشتیبانی کلاینت شما، اتاقهای چت گروهی ایجاد کنید.
نتیجهگیری
در این آموزش، شما یک سرور Prosody را با ویژگیهای زیر راهاندازی کردید:
- رمزنگاری TLS
- پشتیبانی از چت یکبهیک و اتاقهای چت گروهی
- اشتراکگذاری فایل
شما همچنین یک کلاینت چت XMPP را برای استفاده از تمام این قابلیتها پیکربندی کردید که به شما امکان میدهد گفتگوی پرfeatureای با دوستان و همکاران خود داشته باشید.
از همراهی شما با پارمین کلود سپاسگزاریم.




