انتخاب روش مناسب برای بالا آوردن چند سایت با داکر(prod/dev)

network
docker

#41

خب اینکه نباید توی یک شبکه باشن درست ولی توی راهنمای فایل redis.conf در قسمت شبکه که من بالا گذاشتم نوشته اگر شما bind رو تنظیم نکنید و خط مربوط به اون comment باشه به صورت پیشفرض به همه ip ها اجازه میده و اگر شما اون رو بزارین روی 127.0.0.1 فقط به صورت لوکال قابل دسترس هست. پس چون ما از شبکه داکر استفاده میکنیم کانتینرهای که میخوان به redis دسترسی پیدا بکنن باید در رنج اون باشن.
اینجا هم در موردش گفته
https://redis.io/topics/security


#42

خب اجازه بده، وقتی شما redis رو به نتورک های دیگه وصل نکنید و به بیرون وصل نباشه چه خطری شما رو تحدید میکنه؟ اون توضیح در فایل redis، داکر و نتورکینگ شما رو در نظر نداره و کاملا جنرال هست. با روشی که عرض کردم فقط سرویس user به redis دسترسی داره و پورت redis فقط در نتورکی که بین redis و user هست expose میشه، مگر اینکه شما port های redis رو فروارد کنید که بعید میدونم همچین کاری بکنید☺️


#43

برای redis الان تست کردم bind رو غیر فعال کردم حرفتون درست بود از کانتینر دیگه ای نتونستم بهش دسترسی داشته باشم چون در یک شبکه نبودن. خب برای فایل پستگرس که نمیشه این کارو انجام داد چون یک کانتینر به پستگرس از طریق شبکه خودش دسترسی داره ولی نباید به دیتابیس دیگه ای دسترسی داشته باشه اینو چه میشه کرد :thinking:


#44

مجتبا جان مورد postgres رو متوجه نشدم چون اصلا مغزم کار نمیکنه🥶، میشه بیشتر توضیح بدی؟


#45

خب توی پستگرس چندتا دیتابیس وجود داره .

users
cms
email

هر دیتابیس user خودش رو باید داشته باشه که داره

user_for_users
user_for_cms
user_for_email

و در نهایت user به دیتابیس خودش اختصاص داده شده

user              database
===============================
user_for_users    users
user_for_cms      cms
user_for_email    email

هر کانتینر بر اساس نیازش به یک یا چند دیتابیس باید وصل بشه
مثلا کانتینر cms فقط یک دیتابیس داره اونم cms هست
یا users دوتا داره users و email

چون ما منابع محدودی داریم من برای هر سرویس یا همون کانتینر دیتابیس جداگانه ای درست نکردم و کلا دیتابیس ما مشترک هست برای همه سرویس هایی که نیاز به پستگرس دارن

شبکه رو هم که بالا من عکسشو گزاشتم . هر کانتینر با شبکه خودش به کانتنیر پستگرس وصل میشه تا اینجا مشکلی نیست . مشکل سر این هست که کانتینر cms نباید به دیتابیس users دسترسی داشته باشه ،‌البته چون کاربر هر دیتابیس یکی نیست اینم مشکلی ایجاد نمیکنه و بیشتر تنظیمات بالا که انجام شد برای امنیت بیشتر هست که خوده پستگرس جلوشو میگیره به این صورت

# TYPE  DATABASE        USER            ADDRESS                 METHOD
#------------------------------------------------------------------------
host  users      user_for_users      172.20.10.5           md5
host  cms        user_for_cms        172.20.20.6           md5
host  email      user_for_email      172.20.30.7           md5

#46

فکر کردم قرار شد از اون ip ها نجات پیدا کنیم، باز هم مشکل شما با نتورکینگ‌ داکر حل میشه. البته بازم که بهتر توجه کردم انگار منظور شما اینه که هر دیتابیس که در همون کانتینر مشابه هست فقط از سرویس خاص خودش پذیرش داشته باشه، اما این چه مشکل امنیتی رو حل می کنه؟


#47

بابت ویرایش پست ها پوزش می خوام، حس خوبی بهم میده😂


#48

حتی با شبکه داکر هر کانتینری که به پستگرس وصله به همه دیتابیس ها میتونه دسترسی داشته باشه، در صورتیکه اسم کاربر و رمز مربوط به اون دیتابیس رو داشته باشه.
این تنظیمات باعث میشه که یک کانتینر که حتی با داشتن اسم کاربر و رمز هم نتونه به اون دیتابیس وصل بشه اگر ما بهش اجاز نداده باشیم.

علت استفاده از این تنظیمات هم اینه که ما یک دیتابیس مشترک داریم برای هموشون ولی اگر هر سرویسی برای خودش دیتابیس جدا داشت این تنظیمات نیاز نبود


#49

نمیشه دیتابیسی که قراره انقدر جدا باشه اصلا تبدیل به یک سرویس بشه؟
حالا اگر user نیاز به 2 تا کانتینر دیگه داشت و خواستید تعداد replicas بالا بره چی میشه؟
اینو خودم تست نکردم اما آیا نمیشه با نام سرویس محدودیت ایجاد کرد؟ حتما باید ip باشه؟


#50

خب اگر مصرف cpu , ram براش کم باشه میشه جدا کرد

اینم یه سوالی بود که میخواستم بپرسم . برای replicas اگر واقعا دچار مشکل میشیم باید حذف بکنم این مورد رو

باید بررسی کنم


#51

داشتم فکر می کردم شاید بتونیم برای سرویس ها رنج ip مشخص کنیم و به پستگرس هم همینو بگیم اما خیلی پیچیدگی الکی بوجود میاد، شایدم نه🤔


#52

به نظرم باید بررسی کنم ببینم تعداد کانتینرها و مقدار مصرف ram و cpu چقدر هست و بر چه اساس این مقادیر زیاد میشه. بعد بیام برای هر سرویس کانتینر پستگرس خودش رو راه بندازم تا با شبکه داکر امنیتشون حفظ بشه. این تنظیمات که سرویس ها برای خودشون گزاشتن به قول شما برای حالت general هست و اینا به داکر و شبکه اش توجه نکردن. رنج ip هم اگر جواب بده باز پیچیدگی زیاد میشه. همین الان برای چند تا سرویس خیلی زیاد شده تنظیمات شبکه اش :disappointed_relieved:


#53

میتونیم منابع pg رو کاملا کنترل کنیم، فقط باید max_connections و shared_buffers و همچنین رم اختصاص داده شده به pg نسبت منطقی داشته باشند، وگرنه مشکلاتی مثل خرابی دیتا در شرایط خاص بوجود میاد. منظورم این نیست که رم بیش از نیاز باشه، منظورم رعایت دقیق نسبت های منطقیه که در داکیومنت pg هم ذکر شده.
https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server