Nginx یک سرور وب متنباز و قدرتمند است که برای ارائه وبسایتهای ایستا و پویا، پراکسی معکوس، لود بالانسینگ و سایر قابلیتهای مرتبط با سرور HTTP طراحی شده است. این سرور به دلیل توانایی مدیریت همزمان تعداد زیادی از اتصالات و عملکرد بهینه، یکی از پرطرفدارترین سرورهای وب در جهان به شمار میرود و میزبان بسیاری از سایتهای پرمخاطب است. در کنار آن، داکر به عنوان ابزاری متنباز برای کانتینرسازی، محیطی ایزوله و قابلحمل برای اجرای نرمافزارها فراهم میکند که در مقایسه با ماشینهای مجازی یا سرورهای سنتی، منابع کمتری مصرف میکند. Docker با استفاده از کانتینرها، محیطهای سبکی ایجاد میکند که هسته سیستمعامل و فایل سیستم را به اشتراک میگذارند. کانتینرسازی Nginx با Docker، فرآیند مدیریت و بهروزرسانی سرورها را ساده میکند و نیاز به نصب و پیکربندی دستی را از بین میبرد. در این آموزش، مراحل راهاندازی nginx با کمک داکر را مورد بررسی قرار میدهیم.
پیشنیازهای راهاندازی nginx با کمک داکر
برای راهاندازی Nginx با کمک داکر در لینوکس اوبونتو 22.04، به موارد زیر نیاز دارید:
یک سرور Ubuntu 22.04
سرور باید طبق راهنمای تنظیم اولیه سرور با یک کاربر غیر روت (Non-root) دارای دسترسی sudo و فایروال آماده شده باشد.
داکر نصبشده روی سرور
پیش از هر چیز نیاز به نصب داکر بر روی سرور مجازی لینوکس اوبونتو دارید. پس از نصب داکر، میتوانید با مرحله اول شروع کنید.
مرحله اول؛ دانلود Nginx از Docker Hub
Docker Hub یک مخزن عمومی از فایلهای داکر است که شامل تصاویر رسمی و ارسالشده توسط کاربران میشود. تصاویر رسمی داکر توسط جامعه داکر نگهداری شده و برای استفادههای رایج طراحی شدهاند.
برای دانلود نسخه پیشساخته Nginx، دستور زیر را اجرا کنید:
docker pull nginx
این دستور تمام اجزای لازم برای کانتینر را دانلود میکند. داکر این اجزا را ذخیره میکند، بنابراین نیازی نیست هر بار که کانتینر را اجرا میکنید، image را مجدداً دانلود کنید.
سپس برای اجرای کانتینر Nginx بهعنوان یک وب سرور عمومی، از این دستور استفاده کنید:
docker run --name docker-nginx -p 80:80 nginx
توضیحات دستور:
- run برای ایجاد یک کانتینر جدید است.
- –name نام کانتینر را مشخص میکند. اگر خالی بماند، نامی تصادفی مانند nostalgic_hopper اختصاص داده میشود.
- -p پورت محلی را به پورت داخلی کانتینر نگاشت میکند (در اینجا پورت 80).
- nginx نام image در Docker Hub است.
با واردکردن آدرس IP سرور در مرورگر، صفحه پیشفرض Nginx را مشاهده خواهید کرد.
مرحله دوم؛ اجرای کانتینر در حالت جدا شده (Detached Mode)
در این مرحله، کانتینر Nginx را بهگونهای اجرا میکنید که در پسزمینه فعالیت کند و مستقل از ترمینال باشد. این حالت امکان مدیریت بهتر و جلوگیری از توقف تصادفی کانتینر را فراهم میکند. برای اجرای کانتینر Nginx در حالت جدا شده، دستور زیر را وارد کنید:
docker run --name docker-nginx -p 80:80 -d nginx
توضیحات دستور:
- `-d`: این فلگ باعث میشود که کانتینر در حالت جدا شده (Detached Mode) اجرا شود و نیازی نباشد که ترمینال برای ادامه فعالیت کانتینر باز بماند.
- `–name docker-nginx`: نام کانتینر را docker-nginx تعیین میکند.
- `-p 80:80`: پورت 80 محلی (Local Machine) را به پورت 80 کانتینر نگاشت میکند.
- `nginx`: مشخص میکند که image پیشساخته Nginx از Docker Hub استفاده شود.
بررسی وضعیت کانتینر
برای اطمینان از اجرای موفق کانتینر، از دستور زیر استفاده کنید:
docker ps
خروجی نمونه:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b91f3ce26553 nginx "/docker-entrypoint.…" 56 seconds ago Up 54 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp docker-nginx
توضیحات خروجی:
- `CONTAINER ID`: شناسه منحصربهفرد کانتینر.
- `STATUS`: وضعیت کانتینر که نشاندهنده Up (فعال بودن) کانتینر است.
- `PORTS`: نقشهبرداری پورتها (مثلاً 0.0.0.0:80→80/tcp).
- `NAMES`: نام کانتینر، که در این مثال docker-nginx است.
مشاهده صفحه پیشفرض
برای مشاهده صفحه پیشفرض Nginx:
- آدرس IP سرور را در مرورگر وارد کنید.
- صفحه خوشامدگویی پیشفرض Nginx را مشاهده خواهید کرد که تأیید میکند کانتینر بهدرستی اجرا شده است.
توقف و حذف کانتینر
- برای توقف کانتینر:
docker stop docker-nginx
- برای حذف کانتینر:
docker rm docker-nginx
در این مرحله، کانتینر Nginx بهصورت مستقل و پایدار اجرا شده است. اکنون میتوانید کانتینر را مطابق نیاز خود تنظیم کنید یا فایلهای سفارشی را به آن اضافه کنید.
مرحله سوم؛ ساخت یک صفحه وب برای ارائه روی Nginx
در این مرحله، یک صفحه سفارشی برای وبسایت خود ایجاد میکنید. این تنظیم به شما امکان میدهد محتوای وبسایت خود را خارج از کانتینر نگه دارید و از آن بهطور پایدار استفاده کنید.
ایجاد پوشه برای محتوای وبسایت
ابتدا یک پوشه برای محتوای وبسایت در دایرکتوری خانگی خود ایجاد کنید:
mkdir -p ~/docker-nginx/html
سپس با اجرای دستور زیر به این پوشه بروید:
cd ~/docker-nginx/html
ساخت فایل HTML
یک فایل HTML جدید ایجاد کنید تا روی سرور نمایش داده شود. در این مثال از ویرایشگر متن nano استفاده شده، اما شما میتوانید هر ویرایشگر دیگری را انتخاب کنید:
nano index.html
محتوای زیر را در فایل قرار دهید:
Markup
<html>
<head>
<title>Docker nginx Tutorial</title>
</head>
<body>
<div class="container">
<h1>Hello Mobinhost</h1>
<p>This Nginx page is brought to you by Docker and MobinHost</p>
</div>
</body>
</html>
اگر از nano استفاده میکنید، با فشردن کلیدهای CTRL+X، سپس Y و در نهایت Enter فایل را ذخیره و خارج شوید.
اکنون شما یک صفحه index.html دارید که جایگزین صفحه پیشفرض Nginx خواهد شد.
مرحله چهارم؛ اتصال کانتینر به سیستم فایل محلی
در این گام، Nginx را به کانتینر خود متصل میکنید تا از طریق پورت 80 بهطور عمومی در دسترس باشد و محتوای وبسایت شما را ارائه دهد.
استفاده از قابلیت Data Volumes در Docker
Docker به شما اجازه میدهد دایرکتوریهای سیستم فایل محلی را به کانتینر خود متصل کنید. با این کار، میتوانید فایلهای وبسایت را بدون نیاز به تغییرات در کانتینر ویرایش کنید.
Nginx بهصورت پیشفرض فایلهای خود را از مسیر زیر میخواند:
/usr/share/nginx/html
برای اتصال دایرکتوری ~/docker-nginx/html به این مسیر در کانتینر، از دستور زیر استفاده کنید:
docker run --name docker-nginx -p 80:80 -d -v ~/docker-nginx/html:/usr/share/nginx/html nginx
توضیحات دستور:
- `-v`: نشاندهنده اتصال یک ولوم (Volume) است.
- `~/docker-nginx/html`: مسیر دایرکتوری روی سیستم شما.
- `/usr/share/nginx/html`: مسیر دایرکتوری داخل کانتینر.
- `-d`: اجرای کانتینر در حالت جدا شده (Detached Mode).
نمایش صفحه وب جدید
آدرس IP سرور خود را در مرورگر وارد کنید تا صفحه جدید نمایش داده شود. این صفحه اکنون بهجای صفحه پیشفرض Nginx ارائه خواهد شد.
اضافه کردن محتوای بیشتر
اگر محتوای بیشتری به پوشه ~/docker-nginx/html/ اضافه کنید یا فایل index.html را ویرایش کنید، میتوانید تغییرات را مستقیماً در وبسایت مشاهده کنید.
به عنوان مثال:
- اضافه کردن فایل about.html امکان دسترسی به آن از طریق http://your_server_ip/about.html را فراهم میکند.
- این تغییرات بدون نیاز به تعامل مستقیم با کانتینر اعمال میشوند.
مرحله پنجم؛ استفاده از فایل پیکربندی اختصاصی Nginx (اختیاری)
اگر میخواهید کنترل بیشتری بر عملکرد Nginx داشته باشید، میتوانید از یک فایل پیکربندی سفارشی Nginx با کانتینر Docker استفاده کنید.
۱. بازگشت به دایرکتوری اصلی پروژه
ابتدا مطمئن شوید که در دایرکتوری اصلی پروژه هستید:
cd ~/docker-nginx
۲. کپی کردن فایل پیکربندی Nginx
از دستور docker cp برای کپی کردن فایل پیکربندی پیشفرض Nginx به دایرکتوری پروژه استفاده کنید:
docker cp docker-nginx:/etc/nginx/conf.d/default.conf default.conf
۳. توقف و حذف کانتینر
از آنجا که قرار است از یک فایل .conf سفارشی استفاده کنید، باید کانتینر را بازسازی کنید. ابتدا کانتینر را متوقف کنید:
docker stop docker-nginx
سپس آن را حذف کنید:
docker rm docker-nginx
۴. ویرایش فایل پیکربندی
اکنون میتوانید فایل پیکربندی پیشفرض Nginx را بهصورت محلی ویرایش کنید. این فایل میتواند برای ارائه یک دایرکتوری جدید یا استفاده از قابلیت proxy_pass برای ارسال ترافیک به یک برنامه یا کانتینر دیگر تنظیم شود. برای اطلاعات بیشتر درباره فایلهای پیکربندی Nginx میتوانید راهنمای مربوطه را مطالعه کنید.
۵. ایجاد کانتینر جدید با فایل پیکربندی سفارشی
بعد از ذخیره فایل پیکربندی، کانتینر جدیدی ایجاد کنید. برای این کار از دستور زیر استفاده کنید که شامل فلگ -v برای لینک دادن فایل پیکربندی و دایرکتوری محتوای وب است:
docker run --name docker-nginx -p 80:80 -v ~/docker-nginx/html:/usr/share/nginx/html -v ~/docker-nginx/default.conf:/etc/nginx/conf.d/default.conf -d nginx
این دستور محتوای وبسایت و فایل پیکربندی سفارشی را به کانتینر متصل میکند.
۶. اعمال تغییرات در فایل پیکربندی
به یاد داشته باشید هر زمان که فایل پیکربندی را تغییر دادید، باید کانتینر را با دستور زیر مجدداً راهاندازی کنید:
docker restart docker-nginx
این کار کانتینر را دوباره راهاندازی کرده و تغییرات شما را روی صفحات مربوطه اعمال میکند.
جمع بندی
در این مطلب به نحوه راهاندازی nginx با کمک داکر در لینوکس اوبونتو 2.04 پرداختیم و مراحل آن را مورد بررسی قرار دادیم. داکر و Nginx ترکیبی قدرتمند برای میزبانی وبسایتها و مدیریت سرورها ارائه میدهند. با استفاده از داکر میتوانید Nginx را بهسرعت راهاندازی کرده و بدون نیاز به نصب و پیکربندی پیچیده، از آن برای ارائه وبسایتهای ایستا یا پویا استفاده کنید. این روش با کاهش پیچیدگیهای مدیریت سرور، به توسعهدهندگان امکان میدهد تا محیطهای ایزوله و پایدار ایجاد کنند و از قابلیتهای انعطافپذیر داکر مانند ولومها و پیکربندیهای سفارشی بهره ببرند.