--- title: کامنتدونی استاتیک بجای دیسکاس layout: post tags: دیسکاس نتلیفای کامنتدونی دیدگاه نظر category: پروژه uuid: 821f0087-e296-49de-bc23-2140df503eed --- در ادامه شرح میدهم چرا و چگونه سیستم نظرات وبسایت را از دیسکاس به یک سیستم دستساز تقریبا استاتیک منتقل کردهام. ## چرا تصمیم گرفتم دیسکاس را کنار بگذارم؟ به دو دلیل. اول اینکه دیسکاس بدون قندشکن در ایران قابل استفاده نیست. دیگر اینکه دیسکاس زیادی سنگین بود و مقدار زیادی اسکریپت غیرضروری در صفحات بارگزاری میکرد. سایت کم ترافیک من را بیهوده سنگین کرده بود و سود چندانی هم نداشت. مهمتر از همه اینها چالش ایجاد کامنتدونی استاتیک را دوست داشتم! ## چه آلترناتیوهایی برای دیسکاس وجود دارد؟ استاتیکبازهای اینترنت دست به کارهای خلاقانه مختلفی برای داشتن یک کامنتدونی استاتیک زدهاند. راهکارهای موجود روی سه محور اصلی میچرخد: - ایمیل دیدگاهها - باز کردن پولریکوئست در گیتهاب - اجرای سرور اختصاصی و همچنین: - استفاده از Firebase - صرف نظر از کامنتدونی ### ارسال نظر با ایمیل در این روش به کمک ایمیل کاربر نظرش را ارسال میکند و وبلاگصاحاب بعدا کامنتها را به وبسایتش اضافه میکند. با نوشتن مقداری اسکریپت حتی میتواند این فرآیند را تا حدودی خودکار کرد. این روش به نوعی خالصترین روش استاتیک است. برخی افراد از امکانات جیمیل مثل افزودن یک فیلتر بعد از ایمیل استفاده میکنند مثلا `john.doe+post42@gmail.com`. ### گیتهاب به عنوان کامنتدونی برخی افراد از ابزاری بنام [Staticman][استاتیکمن] استفاده میکنند. این برنامه به ازای هر نظر یک پولریکوئست در مخزن وبسایت روی گیتهاب ایجاد میکند. نحوه تایید نظرات هم این است که وبلاگصاحاب هم میتواند پولریکوئست را مرج کند یا نکند. البته امکان مرج خودکار هم هست که در اینصورت نظرات نیاز به تایید ندارند. بعد از مرج سایت از نو ساخته شده و نظرات نمایش داده میشود. این برنامه اوپنسورس است و هاست رایگان هم دارد. هر کسی میتواند خودش هم آنرا هاست کند. ### اجرای یک سرور اختصاصی این روش کم مقداری با روش قبلی همپوشانی دارد. این روش در حقیقت راه انداختن یک دیسکاس شخصی است. از اجرای یک [اسکریپت PHP][اسکریپت] ساده گرفته تا راهاندازی سروری کوچک و جمع و جور مثل [isso][ایسو] یا سرور عریض و طویلی مانند [Discourse][دیسکورس]. هرکس بنا به ترافیک و نیاز و سلیقهاش یکی را انتخاب میکند. البته این لیست کامل نیست و پلاگینهای جکیل و برنامههای ریز و درشت دیگری هم باید باشند (بیشتر ریز البته!) ### استفاده از Firebase [فایربیس][فایربیس] یکی از محصولات شرکت گوگله که ساخت اپلیکیشنهای serverless رو ساده میکنه. یعنی اپلیکیشن موبایل یا وب مستقیما با فایربیس صحبت میکنه و میتونه از دیتابیس و سایر امکانات اون استفاده کنه. پیاده کردن کامنتدونی استاتیک به کمک فایربیس امکانپذیره. مثلا [این پلاگین جکیل][فایرپلاگین] یک کامنتدونی به کمک فایربیس میسازه. ### صرف نظر از کامنتدونی کم نیستند کسانی که از کامنتدونی صرفنظر میکنند و تعامل با خوانندگانشان را به شبکههای اجتماعی مانند توئیتر و یا هکرنیوز منتقل میکنند. عدهای هم که به نهایت بینیازی رسیدهاند برای دل خودشان مینویسند و از هرچه رنگ تعلق پذیرد آزاد شدهاند و کلا قید کامنتدونی را زدهاند! ## الگوریتم کلی کامنتدونی استاتیک مهمترین تمایز کامنتدونی استاتیک با داینامیک در اینه که انتشار نظرات با تاخیر همراهه. چرا که سروری گوش به زنگ تغییرات در صفحه و ریفرش کردن اون نیست. اصلا امکان ریفرش کردن صفحه نیست و سایت باید ریبیلد بشه. یعنی مرحله جمعآوری نظرات و انتشار نظرات در وبسایت پیوسته نیستند. بنابراین یک کامنتدونی استاتیک به شکل زیر کار میکند: - جمعآوری نظر: ایمیل، گیتهاب، سرور شخصی، فایربیس - پردازش نظرات: حذف اسپم، سورت کردن و مانند اینها - تولید وبسایت: ساخت دوباره صفحهات با نظرات بروز شده ## من کدامیک از روشهای بالا را بکار گرفتهام؟ هیچکدام. من یک کامنتدونی استاتیک مبتنی بر [نتلیفای][نتلیفای] ساختم. بسیاری از راهکارهایی که دیگران در وبسایتهای استاتیکشان بکارگرفتهاند لازمهاش اجرا کردن یک برنامه در یک سرور سوم است. من قصد داشتم همه چیز را در سرویسدهنده استاتیک وبسایتم خلاصه کنم. مدتی پیش در مورد [Netlify][نتلیفای] نوشتم. من در حال حاضر وبسایت و مدیریت دامنه آن و بیلدسرور آن را به ترتیب از گیتهاب و [DNSimple][دیانسیمپل] و [ورکر][ورکر] به نتلیفای منتقل کردهام. این تغییر باعث سادهسازی قابل توجه وبسایت و روند بیلد کردن آن شده است. نتلیفای امکانی دارد برای ثبت نتایج فرمهای HTML. یعنی بدون ایجاد سرور جداگانه میتوان فرمهایی در وبسایت گنجاند و نتایج آنها را در کنترل پنل نتلیفای مشاهده کرد. اما نکته اصلی اینجاست که نتلیفای پس از ثبت نظرات میتواند یک بیلد تریگر کند یا فرم ثبت شده را به یک آدرس ایمیل ارسال کند یا یک سرویس خارجی را به کمک WebHook صدا بزند. من از این امکان نتلیفای برای ساخت کامنتدونی استفاده کردم. ## طرح کلی کامنتدونی من برنامه من سه بخش دارد: 1. جمعآوری نظرات ارسالی به کمک نتلیفای 2. پردازش نظرات و کامیت آنها در گیتهاب 3. افزودن کامنتدونی استاتیک به وبسایت جکیل ### جمعآوری به کمک نتلیفای این قسمت از همه سادهتر است. کافیست یک فرم HTML در هرکجای صفحه قرار بدهیم و به آن یک برچسب نتلیفای بزنیم: ~~~html
~~~ هر بار که این فرم به سرور ارسال بشود نتلیفای نتیجه آن را ثبت میکند. از طریق کنترل پنل و API میتوان فرمها و ارسالها را مدیریت کرد. ### پردازش نظرات پس از ثبت برای اینکار یک [اسکریپت شل][شل] و یک [اسکریپت پایتون][پایتون] نوشتم. با هر بار ارسال فرم، نتلیفای اسکریپت بیلد را اجرا میکند. این اسکریپت کارهای زیر را انجام میدهد: 1. پیشنیازهای اجرای اسکریپت پایتون را نصب میکند. 2. اسکریپت پایتون را جهت استخراج کامنتها از نتلیفای اجرا میکند. 3. فایلهای نظرات را به گیتهاب اضافه میکند. 4. سایت را از نو میسازد. از این جهار مرحله فقط گزینه شماره یک و دو به نتلیفای مربوط است و دیگر کاری با آن نداریم. اسکریپت پایتون ما کارهای زیر را انجام میدهد: 1. مقادیر ضروری از قبیل توکن نتلیفای و رشتهی سرّی را از محیط میخواند. 2. لیست نظرات را از نتلیفای دانلود میکند. 3. هر نظر را به فرمت مورد نظر وبسایت تبدیل میکند. 4. اطلاعاتی خصوصی را رمزنگاری میکند. 5. هر نظر را فایل مربوط به صفحه خودش اضافه میکند. حالا ما همه کامنتها را به فرمت [YAML][یمل] تبدیل کردهایم. [هر نظر][نمونه] فرمتی اینگونه خواهد داشت: ~~~yaml - bucket: !!binary | Z0FBQUFBQmFSN19RdWxHeU4tcGp5clR2Z2Z5d0ozZkRTRHV0OGtUYnpub1RIZ09qdkpaazVqQXZO bms5QURNQ25hcEp0cHZSaldEN01OaXBJNXQ5dUxRU215RS1HQjhOTlc5WGFEcWdfaG9hYnhpTzV5 RExodlE9 date: 2017-04-12 11:00:06+00:00 email: a84eca4314e52cf150347841e3a17cf1 message:بسیار عالی جناب صادقی
زحمات شما و دیگر دوستان نادیدهگرفته نخواهد
شد.
ممنون