۳ گام افزایش امنیت وردپرس با Docker: استفاده از فایل .env برای دیتابیس


این نوشته مرتبط با پست اول است، در پست قبل در مورد راه اندازی وردپرس با داکر Docker صحبت کردم و مراحل راه اندازی اون رو توضیح دادم در این پست قصد دارم روی راه حلی کار کنم که امنیت وردپرس با داکر و امنیت داده های حساس رو بهتر کنه و آن جدا کردن اطلاعات حساس دیتابیس از فایل کانفیگ .yml است که به صورت یک متن ساده در فایل docker-compose.yml ذخیره شده بود.

راه حل: استفاده از فایل .env


برای حل این مشکل، تنظیمات و اطلاعات حساس مثل یوزرنیم و پسوردها را از فایل اصلی کانفیگ ( docker-compose.yml ) جدا و آن را در فایل .env وارد کردم. با این رویکرد اطلاعات حساس را در یک فایل جداگانه داریم.

مزایای امنیت وردپرس با داکر

  • از نشت تصادفی اطلاعات جلوگیری میکند.
  • مدیریت یوزرنیم و پسوردها آسان تر شده میشود.


نوشتن مستقیم اطلاعات در docker-compose.yml مانند این است که کلید خانه‌ تان را روی در جا بگذارید! با استفاده از Environment Variables ( متغیرهای محیطی) ما یک لایه اضافی ایجاد می‌کنیم که امنیت و انعطاف پذیری سیستم را افزایش میدهد.

مراحل پیاده سازی

مرحله اول: ایجاد فایل .env برای ذخیره اطلاعات دیتابیس

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

nano .env
nano .env
# Database Configuration
MYSQL_ROOT_PASSWORD=yourPass
MYSQL_DATABASE=wordpress
MYSQL_USER=yourUserName
MYSQL_PASSWORD=yourPass

# WordPress Configuration
WORDPRESS_DB_HOST=db:3306
WORDPRESS_DB_USER=yourUserName
WORDPRESS_DB_PASSWORD=yourPass
WORDPRESS_DB_NAME=wordpress


سپس فایل را ذخیره میکنیم. باید مطابق تصویر زیر باشد:

نکته فنی:
یادتان باشد پسوردهای دارای کاراکتر خاص را در کتیشن ‘ ‘ قرار دهید چون کاراکترهایی مثل # در کد نویسی به معنای ” کامنت یا همان توضیحات” هستند و اگر کتیشن نباشد، ممکن است پسورد شما ناقص خوانده شود. همچنین دقت کنید که بین نام متغیر، علامت مساوی و مقدار آن، هیچ فاصله‌ای (Space) نباشد. مثلاً MYSQL_USER=admin درست است، اما MYSQL_USER = admin باعث خطا می‌شود

مرحله دوم: متغییر سازی Docker compose

برای این کار در فایل docker-compose.yml به جای اینکه مستقیماً نام کاربری و پسورد را بنویسید از کارکترهای {}$ استفاده میکنیم با این کار داکر میفهمد که باید از فایل مخفی بخواند ( تنها قسمت enviroment را ویرایش کنید):

nano docker-compose.yml
…
environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}

…
    environment:
      - WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST}
      - WORDPRESS_DB_USER=${WORDPRESS_DB_USER}
      - WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD}
      - WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME}


فایل docker-compose.yml در نهایت باید چیزی شبیه به تصویر زیر باشد:


نکته فنی:
شاید بپرسید چرا از {}$ استفاده می‌کنیم؟ این یک روش استاندارد در لینوکس برای فراخوانی متغیرهاست. داکر با دیدن این علامت، مقدار واقعی را از فایل .env برمی‌دارد و جایگزین می‌کند. استفاده از آکولا {} اختیاری است اما کمک می‌کند تا نام متغیر با کلمات چسبیده به آن قاطی نشود.

گام نهایی، اعمال تغییرات


اعمال تغییرات پس از ذخیره هر دو فایل، دستور زیر را در ترمینال اجرا کنید تا داکر کانتینرها را با تنظیمات جدید بازنشانی کند:

docker compose up -d


نکته: در نسخه‌های جدید داکر، نیازی به خط فاصله در دستور docker compose نیست.

نتیجه گیری:

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


⚠️ هشدار امنیتی بسیار مهم: اگر از سیستم Git برای مدیریت کدهای خود استفاده می‌کنید، حتماً نام فایل .env را در فایل .gitignore قرار دهید. این کار باعث می‌شود اطلاعات حساس دیتابیس شما به اشتباه در مخازن آنلاین (مثل GitHub) منتشر نشود و امنیت سرور شما به خطر نیفتد.

برای مشاهده سایر یادداشت‌ها به صفحه اصلی iBijan مراجعه کنید اگر به مطالب با این سبک علاقه دارید، میتونید من را در شبکه های اجتماعی ایکس (توییتر) و اینستاگرام دنبال کنید:

X: @iBijan_com Instagram: iBijancom

دیدگاهتان را بنویسید