EQVPS
لوحة التحكمابدأ الآن

كيف تثبّت Redis على VPS: حد للذاكرة وحفظ على القرص وكلمة مرور لا تضيع

ثبّت Redis على Ubuntu 24.04، وحدّد ذاكرته كي لا يستولي على الخادم كله، وفعّل ملف AOF دون أن تمسح بياناتك، وضع كلمة مرور تبقى بعد إعادة التشغيل. في خطوتين من هذه الخطوات فخاخ وقعنا فيها بأنفسنا على خادم الاختبار.

يحتفظ Redis بالبيانات في الذاكرة ويرد في نحو جزء من الألف من الثانية، ولهذا يقف خلف تطبيقات كثيرة بوصفه ذاكرة تخزين مؤقت أو طابورًا أو مخزنًا للجلسات. التثبيت أمر واحد. العمل الحقيقي في الإعدادات الافتراضية: لا حد للذاكرة، ولقطات قد تضيع معها آخر الكتابات، وخطآن سهلان يمسحان بياناتك بصمت أو يعطّلان كلمة المرور. يغطي هذا الدليل كل ذلك على Ubuntu 24.04. نفّذنا كل خطوة على صورتنا، والأرقام من خادم Micro (2 vCPU و2 GB).

تحتاج إلى مستخدم بصلاحيات sudo. دليل إعداد Ubuntu ينشئ واحدًا.

1. التثبيت

sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping

استغرق التثبيت 13 ثانية وأعطانا Redis 7.0.15. يبدأ فورًا ومع كل إقلاع، ويرد بـ PONG، ويستمع على الخادم نفسه فقط: 127.0.0.1:6379 و[::1]:6379، مع protected-mode yes. ومن دون بيانات استخدم 13.5 MB من الذاكرة.

كان في السجل تحذير بالفعل:

WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.

يحفظ Redis على القرص من نسخة عن نفسه ينشئها عبر fork، ومع الإعداد الافتراضي للنواة قد يفشل هذا الـ fork عندما تضيق الذاكرة. أصلح ذلك مرة واحدة:

echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server

بعد إعادة التشغيل اختفى التحذير.

2. حدّد ذاكرته

في الإعداد الأصلي تكون قيمة maxmemory هي 0، أي بلا حد، والسياسة noeviction. سيظل Redis يأخذ الذاكرة حتى تنفد من الخادم. ضع سقفًا وقرّر ما يحدث عند بلوغه:

redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE

اختبرنا السياستين بحد 64 MB و400,000 عملية كتابة:

  • noeviction (الافتراضية): توقفت الذاكرة عند 63 MB وفشلت الكتابات الجديدة بالخطأ OOM command not allowed when used memory > 'maxmemory'. مناسبة للطابور أو لأي شيء لا تستطيع خسارته.
  • allkeys-lru: تخلّص Redis من المفاتيح الأقدم استخدامًا، وعددها 48,606، ومرّت كل الكتابات. مناسبة لذاكرة التخزين المؤقت.

يحفظ CONFIG REWRITE الإعدادات الحالية في /etc/redis/redis.conf كي تبقى بعد إعادة التشغيل. ويضيف كذلك سطرًا عليك معرفته قبل الخطوة 4.

3. اختر طريقة الحفظ على القرص

افتراضيًا يكتب Redis لقطة (/var/lib/redis/dump.rdb) بعد تغيير واحد خلال ساعة، أو 100 خلال خمس دقائق، أو 10,000 خلال دقيقة. اختبرنا ثلاث طرق لإيقافه:

كيف توقف Redisلقطات فقط (افتراضي)مع ملف AOF
systemctl restartلم يضع شيء: يحفظ عند الإيقافلم يضع شيء
قُتل بـ kill -9اختفى المفتاح المكتوب بعد آخر لقطةمفتاح كُتب قبل ثانيتين بقي موجودًا

في الحالتين أعاد systemd تشغيل Redis تلقائيًا خلال ثوانٍ.

إذا كان في Redis بيانات ستفتقدها، ففعّل ملف AOF (append-only file). يسجّل كل كتابة ويدفعها إلى القرص مرة كل ثانية. افعل ذلك على الخادم وهو يعمل، لا بتعديل الملف:

redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_

جرّبنا الطريق الآخر أولًا، فكلّفنا بياناتنا. غيّرنا appendonly no إلى appendonly yes في redis.conf وأعدنا التشغيل. عاد Redis بملف AOF فارغ ولم يحمّل شيئًا من اللقطة، فاختفت كل المفاتيح الموجودة. ثم عند إيقافه لاحقًا كتب محتواه الجديد، من دون المفاتيح القديمة، فوق dump.rdb أيضًا. يتجنب CONFIG SET ذلك: يكتب Redis ملف AOF أولًا من البيانات الموجودة في الذاكرة. بعد إعادة التشغيل كانت كل مفاتيحنا موجودة.

إذا كان Redis مجرد ذاكرة تخزين مؤقت يمكن أن تبدأ فارغة، فافعل العكس وأوقف الحفظ بالأمر redis-cli CONFIG SET save "".

4. ضع كلمة مرور

هذا هو الفخ الثاني. بعد أي CONFIG REWRITE يضيف Redis 7 هذا السطر في نهاية redis.conf:

user default on nopass ~* &* +@all

ومعناه «المستخدم الافتراضي لا يحتاج كلمة مرور». بعد ذلك أضفنا requirepass في موضع أعلى من الملف وأعدنا التشغيل. ظل Redis يرد بـ PONG دون كلمة مرور، لأن سطر user يتغلب عليه. اضبط كلمة المرور عبر Redis نفسه:

REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE

احفظ كلمة المرور في مكان آمن. يخزّنها Redis الآن على شكل تجزئة SHA-256 في سطر user default نفسه. بعد إعادة التشغيل رد redis-cli ping بـ NOAUTH Authentication required. ولم ينجح إلا مع كلمة المرور. مرّرها إلى redis-cli عبر المتغير REDISCLI_AUTH. مع -a تظهر في قائمة العمليات، ويحذّرك redis-cli من ذلك. وفي تطبيقك ضعها في عنوان Redis: redis://:PASSWORD@127.0.0.1:6379/0.

5. الوصول إليه من حاسوبك

أبقِ Redis على 127.0.0.1 واستخدم نفق SSH. استعمل منفذ SSH الخاص بخادمك، وهو في باقات NAT منفذك الشخصي:

ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22

ما دام النفق يعمل، يتحدث redis-cli -p 6380 وأدوات سطح المكتب على حاسوبك مع Redis على الخادم، ولا يُفتح شيء جديد على الإنترنت. مع دليل مفاتيح SSH يدخل النفق دون كلمة مرور.

ما مدى سرعته

على خادم الاختبار Micro أعطانا redis-benchmark مع 50 عميلًا:

الاختبارطلبات في الثانيةالتأخير الوسيط
SET30,3031.0 ms
GET35,1490.9 ms
SET، 16 أمرًا في كل ذهاب وإياب272,1092.4 ms
GET، 16 أمرًا في كل ذهاب وإياب414,9381.3 ms

لذاكرة التخزين المؤقت أو طابور المهام في تطبيق ويب، هذا أكثر بكثير مما ستحتاج. السرعة الإضافية تأتي من إرسال الأوامر دفعات (pipelining).

أي باقة تختار

يحتاج Redis إلى ذاكرة لبياناتك، وإلى القليل غير ذلك. Nano (2 vCPU، و1 GB، و$3 شهريًا) يشغّل Redis بجانب تطبيق صغير مع maxmemory 256mb. Micro (2 GB، و$5 شهريًا) يترك مساحة لذاكرة مؤقتة أكبر إلى جانب التطبيق. وإذا كان على جهاز آخر أن يتصل بـ Redis مباشرة، فاستخدم عنوان IPv4 خاصًا بك (بدءًا من Nano-IP بسعر $8 شهريًا) واسمح لذلك العنوان وحده في جدار الحماية. كل الباقات في صفحة VPS، والدفع بـ USDT أو USDC أو ETH على شبكات Base أو Ethereum أو Polygon.

الأسئلة الشائعة

كم يحتاج Redis من الذاكرة؟

Redis نفسه صغير جدًا: 13.5 MB بعد التثبيت مباشرة على خادمنا. ما يحتاجه هو مساحة لبياناتك، لأنها تعيش في الذاكرة. اضبط maxmemory على ما يستطيع الخادم التنازل عنه، مثلًا 256 MB على خادم بذاكرة 1 GB، واختر ما يحدث عند امتلائها.

Redis أم Valkey؟

Valkey تفرّع من Redis بدأ من الإصدار 7.2 ويتكلم البروتوكول نفسه، لذا تعمل أغلب برامج العملاء مع الاثنين. في Ubuntu 24.04 لا يوجد سوى Redis 7.0.15. أما Debian 13 ففيه Redis 8.0 وValkey 8.1، ويحصل Debian 12 على Valkey 8.0 من backports. خطوات هذا الدليل تنطبق على الاثنين.

لماذا يفقد Redis بيانات بعد التعطل؟

افتراضيًا يحفظ Redis لقطة على القرص كل بضع دقائق، حسب عدد المفاتيح التي تغيّرت. عندما قتلنا العملية، كان المفتاح المكتوب بعد آخر لقطة قد اختفى. فعّل ملف AOF الذي يكتب كل ثانية، وعندها لن يكلفك التعطل أكثر من نحو ثانية من الكتابات.

أضفت requirepass إلى redis.conf، فلماذا ما زال Redis يقبل الأوامر دون كلمة مرور؟

على الأرجح لأن الأمر CONFIG REWRITE نُفّذ في وقت ما. في Redis 7 يضيف هذا الأمر السطر user default on nopass ~* &* +@all في نهاية redis.conf، وهذا السطر يلغي requirepass المكتوب أعلى منه. اضبط كلمة المرور عبر CONFIG SET requirepass ثم نفّذ CONFIG REWRITE، فيحفظها Redis في ذلك السطر.

هل يمكنني فتح المنفذ 6379 على الإنترنت؟

لا تفعل. منافذ Redis المفتوحة تُفحص طوال الوقت، وهي طريق شائع لاختراق الخوادم. اتصل بـ Redis من حاسوبك عبر نفق SSH، أو أبقه على الخادم نفسه مع التطبيق الذي يستخدمه.

التعليقات

لا تعليقات بعد. كن الأول.

اترك تعليقًا

تُراجَع التعليقات قبل ظهورها.