Caddy و راه اندازی سریع وب سایت استاتیک و خودکار مبتنی بر Git — به زبان ساده
در برخی موارد با موقعیتهایی مواجه میشویم که قرار است یک وبسایت استاتیک را در حد امکان در کمترین زمان آماده و راهاندازی کنیم. این وبسایت میتواند یک سایت واقعی، یک زیرساخت یا یک صفحه فرود ابتدایی باشد. Caddy یک وبسرور مدرن است که بر روی سادگی و امنیت متمرکز شده است. این وبسرور به صورت بومی از Git و Let’s Encrypt پشتیبانی میکند و معماری مبتنی بر افزونه دارد.
استفاده از Caddy بسیار آسان است و در این نوشته راهنمای استفاده از آن برای راهاندازی 5 دقیقهای یک وبسایت استاتیک که با یک ریپازیتوری Git همگام میشود را آموزش میدهیم.
پیشنیازها
یک سرور اوبونتو 16.04 که به صورت ابتدایی پیکربندی شده باشد. هدف ما این است که در حد امکان در سریعترین زمان ممکن یک وبسایت را بالا بیاوریم و بنابراین نمیخواهیم چندان درگیر مباحث مرتبط با امنیت بشویم. اما باید توجه داشته باشید که پیکربندی یک فایروال و یا استفاده از یک فایروال کلود الزامی است.
همچنین باید یک نام دامنه داشته باشید تا برای وبسایت استفاده کنید.
گام 1 – نصب Caddy
Caddy فایلهای باینری پیشساختهای دارد که میتوانید از وبسایت آن دانلود کنید.
wget -O caddy.tar.gz "https://caddyserver.com/download/linux/amd64?plugins=http.git&license=personal"
دستور فوق یک فایل باینری را برای تنظیمات زیر دانلود میکند:
- پلتفرم: لینوکس 64 بیت
- افزونهها: http.git
- لایسنس: شخصی
به خاطر داشته باشید که لایسنس شخصی تنها برای کاربردهای غیرتجاری ارائه شده است. فایل آرشیو دانلود شده را در یک دایرکتوری جدید استخراج کنید و داخل دایرکتوری بروید:
mkdir caddy tar vxf caddy.tar.gz -C caddy cd caddy
این آرشیو شامل فایل باینری caddy و یک فایل سرویس Systemd است. ما از هر دو این فایلها در راهنمای خود استفاده خواهیم کرد. ابتدا فایل باینری را نصب میکنیم:
sudo cp caddy /usr/local/bin sudo chown root:root /usr/local/bin/caddy sudo chmod 755 /usr/local/bin/caddy
از آنجا که Caddy به عنوان وبسرور فرانت ما عمل میکند، باید بتواند روی پورتهای 80 و 443 گوش کند. لینوکس برای این که فایلهای باینری بتوانند بر روی هر پورتی به جز 10234 گوش دهند، این الزام را دارد که به صورت root اجرا شوند. با این حال میتوانیم به فایلهای باینری خاصی اجازه دهیم که بدون دسترسیهای کامل root چنین کاری را انجام دهند:
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy
سپس دایرکتوریهای پیکربندی Caddy را اجرا کرده و دسترسیهای مناسب را تنظیم میکنیم:
sudo mkdir /etc/caddy sudo chown -R root:www-data /etc/caddy sudo mkdir /etc/ssl/caddy sudo chown -R www-data:root /etc/ssl/caddy sudo chmod 0770 /etc/ssl/caddy
درنهایت فایل سرویس Systemd را نصب میکنیم:
sudo cp init/linux-systemd/caddy.service /etc/systemd/system/ sudo chown root:root /etc/systemd/system/caddy.service sudo chmod 644 /etc/systemd/system/caddy.service sudo systemctl daemon-reload
گام 2 – پیکربندی Caddy
در این راهنما به منظور نمایش طرز کار Caddy از وبسایت زیر استفاده شده است:
https://github.com/kamaln7/basic-static-website
فایل پیکربندی Caddy در مسیر etc/caddy/Caddyfile/ قرار دارد. این فایل را در یک ویرایشگر متنی باز کرده و کد زیر را در آن وارد کنید:
example.com { tls you@example.com internal /.git git https://github.com/kamaln7/basic-static-website.git { interval 300 } gzip redir 301 { if {scheme} is http / https://{host}{uri} } }
دقت کنید که در ابتدای کد به جای example.com باید نام دامنه خود را وارد کنید و همچنینم به جای you@example.com ایمیل خود را درج نمایید. این آدرس ایمیل برای صدور گواهی let’s Encrypt برای دامنه شما استفاده میشود تا مطمئن شوند که شما فرد مجازی هستید که اجازه دسترسی به گواهی را دارید.
پیکربندی پیشفرض ساده است. از فشردهسازی gzip در موارد مناسب استفاده میشود و همه ترافیک HTTP به HTTPS ریدایرکت میشود.
بخش اصلی این پیکربندی بلوک git است. در این بخش Caddy طوری پیکربندی شده است که از محتوای ریپازیتوری Git به عنوان فایلهای وبسایت استفاده کرده و هر 5 دقیقه یک بار، بهروزرسانیها را بررسی کند.
گام 3 – پیکربندی SSL
پیش از پیکربندی و آغاز Caddy باید یک DNS راهاندازی کنیم تا Caddy بتواند یک گواهی SSL را از طریق let’s Encrypt دریافت کند. برای توصیف میزان سادگی راهاندازی https روی وبسرور Caddy عبارتی بهتر از «دیوانه کننده» نمیتوان یافت. در تصویر زیر میبینید که به چه صورت، تنها در طی چند ثانیه نه تنها https روی وبسایت فعال میشود؛ بلکه ورودیهای http نیز به طور خودکار به https ریدایرکت میشوند.
گام 4 – آغاز Caddy
با دستور زیر میتوانید Caddy را آغاز کرده و اجرای خودکار آن در هنگام بوت شدن سرور را فعال کنید:
sudo systemctl start caddy sudo systemctl enable caddy
ممکن است چند ثانیه طول بکشد تا caddy گواهی Let’s Encrypt را دریافت کرده و ریپازیتوری را کلون کند؛ اما در ادامه میتوانید نام دامنه خود را در مرورگر وارد کرده و بارگذاری وبسایت را ببینید. اینک هر تغییری که در ریپازیتوری Git ایجاد کنید به صورت خودکار روی وبسایت اعمال میشود.
گام 5 – بهینهسازی توزیع آنی با استفاده از وبهوکها
Caddy هر پنج دقیقه یک بار ریپازیتوری Git را بررسی میکند تا موارد تغییر یافته را روی وبسایت اعمال کند و با این که میتوان زمان را بر روی اعداد کمتری نیز تنظیم کرد؛ اما راهحل بهتر این است که به جای این کار، حساب گیتهاب را طوری پیکربندی کنید که هر گونه تغییرات را به وبسرور Caddy ارسال کند. بدین ترتیب بهروزرسانی وبسایت تقریباً آنی خواهد بود.
Caddy این فرایند را نیز بسیار ساده ساخته است. وبهوک نیازمند یک رمز است که میتوانید از هر چیزی که دوست دارید استفاده کنید. برنامه uuidgen ابزار سادهای است که امکان ایجادیم رشته رمز تصادفی امن را به سادگی فراهم میسازد. کافی است uuidgen را اجرا کرده و خروجی را کپی کنید.
Caddyfile را ویرایش کرده و خط زیر را درون بلوک Git وارد کنید. توجه کنید که به جای secret، رمزی که کپی گردهاید را وارد نمایید:
hook /github_hook secret
Caddy را ریاستارت کرده و تغییرات را اعمال کنید:
sudo systemctl restart caddy
سپس گیتهاب را طوری پیکربندی کنید که از نقطه انتهایی وبهوک جدید استفاده کند. برای این کار به صفحه تنظیمات ریپازیتوری خود رفته و بر روی Webhooks کلیک کنید. یک وبهوک جدید اضافه کرده و URL پیلود آن را به صورت https://domain.com/github_hook تعیین کنید. نوع محتوا را application/json وارد کرده و با ورود رمز خود بر روی Add Webhook کلیک کنید.
اینک هر زمان که تغییری را در ریپازیتوری Git خود push کنید، به طور خودکار در طی چند ثانیه در وبسایت اعمال میشود. برای نمونه اگر از وبسایت نمونه که در بالا اشاره کردیم استفاده کردهاید میتوانید در آنجا به تغییر دادن b—gold به b— blue وبسایت را آبی کنید. سپس فایل بهروزرسانی شده را کامیت کرده و صفحه را مجدداً بارگذاری کنید.
سخن پایانی
در این راهنما یک وبسایت کاملاً خودکار بدون نیاز به نگهداری را با استفاده از فناوریهای مدرنی مانند HTTP/2 و Let’s Encrypt راهاندازی کردیم. Caddy یک وبسرور خوب است که ویژگیهایی عالی مانند رندرینگ آنی Markdown را ارائه میکند. میتوانید فهرستی از افزونهها و ویژگیهای آن را در صفحه مربوطه وبسایت ببینید. همچنین با مراجعه به صفحه مستندات میتوانید ویژگیهایی که دارد و شیوه استفاده از آنها را مشاهده کنید.
اگر به این نوشته علاقهمند بودید، موارد زیر نیز احتمالاً مورد توجه شما قرار خواهند گرفت:
- چگونه میتوانیم یک محیط توسعه و سرور مجازی برای برنامه نویسی وب بسازیم؟
- آموزش پیاده سازی یک پروژه وب کامل و ساده
- مجموعه آموزشهای طراحی و برنامه نویسی وب
- گنجینه آموزش های طراحی وب
- ابزارها و راهکارهای مدیریت وبسایتها
- تنظیم و راه اندازی SSL روی یک وبسایت — به زبان ساده
==