MongoDB یک پایگاه داده سندمحور است که در APIها، برنامههای Node.js و تحلیل داده کاربرد فراوان دارد. اوبونتو آن را در مخازن خودش ندارد، پس باید از مخزن رسمی MongoDB نصبش کرد. این راهنما آن را روی VPS Linux Infrawire راهاندازی میکند، احراز هویت را فعال میکند و دسترسی را محدود میسازد.
📋 پیشنیازها
- یک VPS با Ubuntu 24.04 (noble) روی معماری x86_64 یا ARM64 و دسترسی SSH با کاربر root (آیپی و گذرواژه root در بخش مشتریان شما موجود است)
- پردازندهای که مجموعه دستورهای AVX را ارائه دهد (از MongoDB 5.0 به بعد الزامی است): خروجی
grep -c avx /proc/cpuinfoباید عددی بزرگتر از 0 باشد - دستکم 2 گیگابایت رم توصیه میشود
1. افزودن مخزن رسمی
کلید امضا را وارد کنید و مخزن مربوط به Ubuntu 24.04 را تعریف کنید.
Bashapt update && apt install -y curl gnupg curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor echo 'deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse' > /etc/apt/sources.list.d/mongodb-org-8.0.list
2. نصب و راهاندازی سرویس
Bashapt update apt install -y mongodb-org systemctl enable --now mongod systemctl status mongod --no-pager
متابسته mongodb-org سرور (mongod)، پوسته (mongosh) و ابزارها را نصب میکند. دادهها در /var/lib/mongodb و لاگها در /var/log/mongodb/mongod.log قرار دارند.
3. ساخت کاربر مدیر
احراز هویت هنوز غیرفعال است، پس پوسته محلی بدون اطلاعات ورود متصل میشود. اولین مدیر را در پایگاه داده admin بسازید؛ passwordPrompt() گذرواژه را میپرسد تا هرگز در تاریخچه پوسته نماند.
Bashmongosh
JavaScript1use admin 2db.createUser({ 3 user: 'admin', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'userAdminAnyDatabase', db: 'admin' }, 'readWriteAnyDatabase' ] 6})
4. فعالسازی احراز هویت
فایل /etc/mongod.conf را ویرایش کنید و بلوک security را اضافه (یا از حالت توضیح خارج) کنید:
YAMLsecurity: authorization: enabled
Bashsystemctl restart mongod
از این پس هر اتصال باید احراز هویت شود.
5. ساخت کاربر برنامه
برنامه شما هرگز نباید از حساب مدیر استفاده کند. کاربری به آن بدهید که فقط به پایگاه داده خودش دسترسی دارد.
Bashmongosh -u admin -p --authenticationDatabase admin
JavaScript1use appdb 2db.createUser({ 3 user: 'appuser', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'readWrite', db: 'appdb' } ] 6})
رشته اتصال متناظر mongodb://appuser:PASSWORD@127.0.0.1:27017/appdb?authSource=appdb است.
6. دسترسی شبکه و فایروال
MongoDB بهطور پیشفرض فقط روی 127.0.0.1 گوش میدهد؛ این امنترین حالت است، وقتی برنامه روی همان VPS اجرا میشود. برای اجازه دادن به سرور دیگر، آدرس VPS را در /etc/mongod.conf اضافه کنید:
YAMLnet: port: 27017 bindIp: 127.0.0.1,VPS_IP
سپس در فایروال فقط سرور برنامه را مجاز کنید و هرگز پورت 27017 را برای کل اینترنت باز نکنید:
Bashufw allow OpenSSH ufw allow from APP_SERVER_IP to any port 27017 proto tcp ufw enable systemctl restart mongod
✅ بررسی نصب
Bashmongod --version mongosh --eval 'db.runCommand({ ping: 1 })' mongosh -u appuser -p --authenticationDatabase appdb appdb --eval 'db.test.insertOne({ ok: true })' ss -ltnp | grep 27017
دستور آخر نشان میدهد MongoDB روی کدام آدرس گوش میدهد. یک پرسوجوی بدون احراز هویت مانند db.getUsers() اکنون باید با خطای مجوز شکست بخورد.
🔧 عیبیابی
mongod شروع نمیشود (Illegal instruction یا کد خروج 132) : پردازنده مجازی AVX را ارائه نمیدهد. با grep avx /proc/cpuinfo بررسی کنید؛ بدون AVX، MongoDB 8.0 روی این ماشین اجرا نمیشود.
شروع با خطای دسترسی ناموفق است : مالک فایلهای داده و سوکت را با chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb اصلاح کنید، فایل قدیمی /tmp/mongodb-27017.sock را حذف کنید و ریاستارت کنید. جزئیات در journalctl -u mongod است.
Authentication failed : کاربر در یک پایگاه داده مشخص ساخته شده است. پایگاه درست را با --authenticationDatabase (یا authSource در URI) بدهید.
اتصال راه دور با تایماوت مواجه میشود : bindIp، قوانین ufw status و اینکه آیپی کلاینت با آیپی مجاز شما یکی باشد را بررسی کنید.
🎉 MongoDB 8.0 نصب شد، با احراز هویت ایمن شد و برای برنامه شما آماده است!