اولین باری که روی یک سرور لینوکس SSH زدم، از پنجره سیاه ترسیدم. هیچ دکمه‌ای نبود، هیچ منویی نبود، فقط یک Cursor چشمک می‌زد. امروز بعد از سال‌ها کار روی ده‌ها سرور، همان پنجره سیاه، راحت‌ترین محیط کاری من است. در این مقاله، همان مسیری را می‌نویسم که کاش سال اول کارم کسی برایم نوشته بود: از کجا شروع کنیم، به چه ترتیبی یاد بگیریم، و چه چیزهایی را از ابتدا درست انجام دهیم.

چرا سرور لینوکس؟

Linux (لینوکس) به‌عنوان سیستم‌عامل سرور، در چند دهه گذشته استاندارد صنعت شده است. دلایل این محبوبیت، در سه چیز خلاصه می‌شود: پایداری، انعطاف و اکوسیستم. سرورهای لینوکس ماه‌ها بدون ریستارت کار می‌کنند، از هر سخت‌افزاری پشتیبانی می‌کنند، و تقریباً هر ابزار سرور، اول برای لینوکس ساخته می‌شود.

برای اکثر کاربران وردپرس، انتخاب سرور عملاً انتخاب بین لینوکس و ویندوز است. اگر با وردپرس کار می‌کنید، لینوکس انتخاب طبیعی است، چون وردپرس، PHP، MySQL و اکثر ابزارهای جانبی، اول برای لینوکس بهینه می‌شوند. پیش از هر چیز، پایه‌های سرور را در سرور چیست و چگونه کار می‌کند مرور کنید.

لینوکس را یاد می‌گیری و یک عمر کارت راه می‌افتد؛ ویندوز را یاد می‌گیری و تا نسخه بعدی به‌روز باشی، هنوز در حال یادگیری هستی.

گام صفر: آماده‌سازی پیش از اتصال

پیش از اتصال به سرور، سه چیز لازم دارید: یک سرور (VPS یا Dedicated)، یک SSH Client، و یک نسخه از اطلاعات دسترسی. اگر تازه شروع می‌کنید، خرید VPS نقطه شروع منطقی است. تفاوت VPS و هاست اشتراکی را در VPS و هاست اشتراکی آورده‌ام.

برای SSH Client، در ویندوز Windows Terminal یا PuTTY، در Mac Terminal پیش‌فرض، و در Linux هم Terminal پیش‌فرض کافی است. اگر روی Mac یا Linux کار می‌کنید، ابزار ssh از پیش نصب است. برای ویندوز، نصب Windows Terminal یا ابزارهایی مثل MobaXterm را پیشنهاد می‌کنم.

انتخاب توزیع: Ubuntu، Debian، CentOS

توزیع لینوکس، مجموعه‌ای از سیستم‌عامل و ابزارهای همراه است. سه توزیع اصلی برای سرور:

  • Ubuntu Server: محبوب‌ترین توزیع برای VPS. مستندات گسترده، نسخه‌های LTS با پشتیبانی پنج‌ساله، و جامعه کاربری بزرگ.
  • Debian: پایه Ubuntu است. پایدارتر، ولی نسخه‌های قدیمی‌تر و بسته‌های محافظه‌کارانه‌تر.
  • CentOS و Rocky Linux: جایگزین‌های Red Hat. برای تیم‌های سازمانی با نیاز به پشتیبانی رسمی.

انتخاب من برای مبتدیان و پروژه‌های کوچک تا متوسط: Ubuntu Server 22.04 LTS یا نسخه جدیدتر. برای پروژه‌هایی که طول عمر بلند و پایداری مطلق می‌خواهند، Debian. اگر می‌خواهید سرور را از صفر راه بیندازید، راه‌اندازی VPS را ببینید.

اتصال SSH و اصول اولیه کار با Terminal

اولین اتصال با دستور ssh root@server-ip انجام می‌شود. پس از اتصال، توصیه می‌کنم بلافاصله این پنج کار انجام شود:

  1. به‌روزرسانی سیستم: با apt update && apt upgrade روی Ubuntu.
  2. ساخت کاربر جدید: کار کردن با root، بدترین عادت است.
  3. افزودن کلید SSH به کاربر جدید: به‌جای رمز، کلید استفاده کنید.
  4. غیرفعال‌سازی ورود Root با رمز: در فایل /etc/ssh/sshd_config.
  5. نصب ابزارهای پایه: مثل curl، git، htop و tmux.

پنج دستور پایه‌ای که در Terminal لینوکس هر روز استفاده می‌کنید: ls برای دیدن فایل‌ها، cd برای تغییر دایرکتوری، cat برای دیدن محتوای فایل، grep برای جست‌وجو، و tail برای دنبال‌کردن لاگ‌ها. تسلط بر همین پنج دستور، نیمی از کار روزمره شما را ساده می‌کند.

یک نکته عملی که هر مبتدی باید بداند: پیش از اجرای هر دستور مهم، از دستور man برای دیدن مستندات استفاده کنید. مثلاً man ls. این عادت، شما را از آزمون و خطا در سرور نجات می‌دهد.

کاربران، گروه‌ها و مجوزها

لینوکس یک سیستم‌عامل چندکاربره است. هر فایل و هر فرآیند، یک مالک دارد. سه مفهوم پایه:

  • User: هر کاربر با یک نام و UID مشخص. کاربران معمولی و کاربران سیستمی (System Users).
  • Group: مجموعه‌ای از کاربران. هر کاربر می‌تواند در چند گروه باشد.
  • Permission: سطوح دسترسی (Read/Write/Execute) برای مالک، گروه و سایرین.

مجوزهای فایل با سه عدد یا سه کاراکتر نمایش داده می‌شوند. مثلاً 755 یعنی مالک Read/Write/Execute، گروه Read/Execute، سایرین Read/Execute. دستور chmod برای تغییر مجوز و chown برای تغییر مالک استفاده می‌شود.

یک اصل پایه: فایل‌های وب‌سرور نباید دسترسی Write برای همه داشته باشند. مجوز 644 برای فایل‌های معمولی، 755 برای دایرکتوری‌ها و 600 برای فایل‌های حساس مثل کلیدهای SSH، انتخاب پیش‌فرض من است. این اصول، در امن‌سازی VPS به‌تفصیل آمده است.

مدیریت بسته‌ها: apt و dnf

نصب نرم‌افزار روی لینوکس با ابزار مدیریت بسته انجام می‌شود. روی Ubuntu و Debian، ابزار apt، روی CentOS و Rocky، dnf (یا قدیمی‌تر yum).

چهار دستور apt که در همه پروژه‌ها استفاده می‌کنم:

  • apt update: به‌روزرسانی فهرست بسته‌ها.
  • apt upgrade: به‌روزرسانی بسته‌های نصب‌شده.
  • apt install package-name: نصب بسته جدید.
  • apt remove package-name: حذف بسته.

پیش از هر نصب نرم‌افزار بزرگ، سه سؤال از خودتان بپرسید: آیا به این نرم‌افزار واقعاً نیاز دارم؟ آیا جایگزین سبک‌تری وجود دارد؟ آیا این نرم‌افزار نسخه امن و به‌روز دارد؟ برای آگاهی از اهمیت این موضوع، اهمیت به‌روزرسانی سرور را ببینید.

مدیریت سرویس‌ها با systemd

در توزیع‌های مدرن لینوکس، مدیریت سرویس‌ها با systemd انجام می‌شود. دستور اصلی، systemctl است. چهار دستور کلیدی:

  • systemctl status service-name: وضعیت سرویس.
  • systemctl start service-name: راه‌اندازی سرویس.
  • systemctl stop service-name: توقف سرویس.
  • systemctl enable service-name: فعال‌سازی راه‌اندازی خودکار در Boot.

لاگ سرویس‌ها با journalctl دیده می‌شود. مثلاً journalctl -u nginx -f لاگ‌های Nginx را در زمان واقعی نشان می‌دهد. همین دو ابزار (systemctl و journalctl)، ستون فقرات کار روزمره شما با سرور خواهند بود.

فایروال و امنیت پایه

فایروال، اولین لایه دفاعی است. روی Ubuntu، ابزار ufw ساده‌ترین گزینه است. پیکربندی پایه:

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

این پیکربندی، همه پورت‌های ورودی را می‌بندد و فقط SSH، HTTP و HTTPS را باز می‌گذارد. اگر پورت SSH را تغییر داده‌اید، عدد جدید را جایگزین ۲۲ کنید. اصول کامل این لایه در فایروال نرم‌افزاری سرور آمده است.

در کنار فایروال، نصب Fail2ban را جدی بگیرید. این ابزار لاگ‌ها را تحلیل می‌کند و IPهای مشکوک را بعد از چند تلاش ناموفق، به‌صورت خودکار مسدود می‌کند. روی سرورهای عمومی، این یک لایه رایگان و مؤثر است.

راه‌اندازی وب‌سرور و دیتابیس

پس از آماده‌سازی پایه، معمولاً نوبت به راه‌اندازی وب‌سرور و دیتابیس می‌رسد. دو ترکیب پرکاربرد:

  • LAMP: Linux + Apache + MySQL + PHP.
  • LEMP: Linux + Nginx + MySQL/MariaDB + PHP.

برای وردپرس، هر دو ترکیب کار می‌کنند، ولی Nginx معمولاً سرعت بهتری دارد و منابع کمتری مصرف می‌کند. برای شروع، Apache ساده‌تر است چون پیکربندی‌اش خطی‌تر است. پس از تسلط اولیه، به‌سمت Nginx مهاجرت کنید.

برای نصب وردپرس روی این زیرساخت، معمولاً از یک مدیر بسته مثل apt استفاده می‌کنید، یا از ابزارهایی مثل wp-cli که کار را ساده‌تر می‌کند. اگر با cPanel کار می‌کنید، مسیر راحت‌تر است ولی انعطاف کمتر؛ برای مقایسه، ابزارهای مدیریت سرور را ببینید.

پشتیبان‌گیری: عادتی که از ابتدا بسازید

پشتیبان‌گیری، مهم‌ترین کاری است که اکثر مبتدیان فراموش می‌کنند. سه اصل در بکاپ سرور:

  1. خودکار باشد: بکاپ دستی، دیر یا زود فراموش می‌شود. cron ابزار ساده‌ای برای خودکارسازی است.
  2. بیرون از سرور باشد: بکاپ داخل همان سرور، در حادثه واقعی بی‌ارزش است. از S3، Google Drive یا سرور دوم استفاده کنید.
  3. تست‌شده باشد: بکاپی که بازگردانی‌اش را تست نکرده‌اید، نمی‌دانید کار می‌کند یا نه.

رویه‌های دقیق بکاپ را در پشتیبان‌گیری از سرور آورده‌ام. یک قاعده که در تجربه به آن رسیدم: حتی سرور آزمایشی هم باید بکاپ داشته باشد. هزینه بکاپ، همیشه کمتر از هزینه از‌دست‌دادن داده است.

پایش پایه و اولین هشدارها

مانیتورینگ سرور را می‌توان به‌سادگی از دو ابزار شروع کرد: htop برای دیدن وضعیت لحظه‌ای، و df -h برای دیدن فضای دیسک. این دو ابزار، در سطح پایه، پنجره‌ای به زندگی سرور شما باز می‌کنند.

پس از تسلط اولیه، نصب Prometheus و Grafana یا Zabbix را جدی بگیرید. برای دیدن رویه‌های حرفه‌ای، مانیتورینگ سرور را ببینید. برای بهینه‌سازی منابع پایه، بهبود عملکرد سرور راهنمای خوبی است.

یک عادت که در تجربه به آن رسیدم: هر روز صبح، پنج دقیقه به وضعیت سرور نگاه کنید. این پنج دقیقه، جلوی یک روز پر از آتش‌نشانی را می‌گیرد.

اشتباهات رایج مبتدیان در سرور لینوکس

پنج اشتباهی که بیشترین آسیب را در پروژه‌های مبتدی دیده‌ام:

  1. کار کردن دائمی با root: یک دستور اشتباه با root، می‌تواند کل سیستم را از کار بیندازد. کاربر معمولی با sudo امن‌تر است.
  2. نداشتن بکاپ: یک اشتباه ساده، می‌تواند ماه‌ها کار را از بین ببرد.
  3. بازکردن همه پورت‌ها: هر پورت باز، یک پتانسیل حمله است.
  4. نصب نرم‌افزار بدون بررسی: افزونه‌های ناشناس، همیشه امن نیستند.
  5. نادیده گرفتن به‌روزرسانی: سرور بدون Patch، در برابر آسیب‌پذیری‌های شناخته‌شده بی‌دفاع است.

این اشتباهات در اشتباهات مدیریت سرور با مثال‌های واقعی آورده شده‌اند. آگاهی از این فهرست، در ماه اول کار، جلوی خطاهای پرتکرار را می‌گیرد.

پرسش‌های پرتکرار مبتدیان سرور لینوکس

چند وقت طول می‌کشد تا لینوکس را یاد بگیرم؟ برای کار پایه، یک تا سه ماه. برای تسلط عملیاتی، شش ماه تا یک سال. ترتیب یادگیری مهم‌تر از سرعت است.

آیا باید Shell Scripting یاد بگیرم؟ بله، حداقل در سطح Bash پایه. بیشتر کارهای تکراری با اسکریپت، ساده می‌شوند. برای توسعه، مدیریت سرور لینوکس خودش نقطه شروع است.

آیا باید پنل کنترل نصب کنم؟ برای شروع، نه. نصب پنل کنترل، سطح حمله اضافه می‌کند. اگر تیم غیرفنی دارید، بعداً به آن فکر کنید. مقایسه پنل‌ها در ابزارهای مدیریت سرور آمده است.

چطور از سرور کنار بیایم بدون این‌که همیشه نگران باشم؟ با سه‌گانه بکاپ، فایروال و مانیتورینگ. این سه، خواب شبانه شما را تضمین می‌کنند. مقایسه با ابر در مدیریت سرور ابری آمده است.

سخت‌ترین بخش یادگیری لینوکس چیست؟ از دید من، Debugging نیست؛ عادت‌سازی است. فراموش نکردن بکاپ، فراموش نکردن Patch، و خواندن لاگ‌ها. تکنیک‌ها ساده‌اند؛ تداوم سخت است.

نقشه راه ادامه مسیر

مدیریت سرور لینوکس، از پنج بلوک ساخته می‌شود: اتصال و کار با Terminal، مدیریت کاربران و بسته‌ها، راه‌اندازی سرویس‌ها، امنیت پایه و پشتیبان‌گیری. اگر این پنج بلوک را در سه ماه اول یاد بگیرید، به یک مهندس سرور با اعتماد‌به‌نفس تبدیل شده‌اید.

مسیر یادگیری را به سه فاز تقسیم کنید. فاز اول، یک ماه: تسلط بر دستورات پایه و راه‌اندازی یک سرور تست. فاز دوم، سه ماه: نصب وب‌سرور، پیکربندی فایروال، راه‌اندازی بکاپ. فاز سوم، شش ماه به بعد: مانیتورینگ، خودکارسازی با Ansible و ورود به حوزه‌های ابری.

اگر در ماه‌های اول مسیر، یک اشتباه یا یک مکاشفه مهم داشته‌اید، در دیدگاه‌ها بنویسید. تجربه‌های واقعی از مبتدیان، برای مبتدی‌های بعدی مفیدترین راهنما هستند. 🐧