Bootcamp: مساعدة في إعداد الإنتاج.

تم إنشاؤها على ١٧ أكتوبر ٢٠١٩  ·  12تعليقات  ·  مصدر: vitorfs/bootcamp

مرحبًا ، أحاول إنشاء برنامج Bootcamp كشبكة اجتماعية للباحثين داخل جامعتي. ومع ذلك ، نظرًا لبعض القيود ، لا يمكنني حاليًا استخدام العلبة كوكيل عكسي للنشر. بدلاً من ذلك ، أستخدم nginx. إذا كان ذلك ممكنًا ، هل يمكن أن تعطيني بعض الإرشادات حول المعلمات التي أحتاج إلى تحديدها لبيئة الإنتاج. رأيت ملف env.example ولكن بما أن المشروع جديد بالنسبة لي ، لا أعرف كيف يتصل كل شيء ببعضه البعض. أنا عالق مع الخطأ التالي

manage.py runworker: error: the following arguments are required: channels

هو موضع تقدير أي مساعدة.

Support discussion help wanted

التعليق الأكثر فائدة

في حالتي ، استخدم المراسلة الفورية بيثون 3.7.1 على جهاز خادم أوبونتو

إعداد اختياري لنسخة بايثون
sudo update alternatives --install /usr/bin/python/ python /usr/bin/python3.7.1

باستخدام هذا الأمر ، فإن python 3.7.1 هي أولويتي الأولى

أولاً ، قم بتثبيت البيئة على الجهاز
sudo -H pip3 install virtualenv

cd /home/pages للتغيير إلى المجلد الصحيح

mkdir bootcamp لإنشاء مجلد المشروع

cd bootcamp/

خلق البيئة
virtualenv bootcampenv
قم بتنشيط بيئتك
source bootcampenv/bin/activate

installl gunicorn
pip3 install gunicorn

ارجع إلى دليل الصفحات
cd ..
وإنشاء مجلد لمشروع معسكر التدريب

django-admin startproject bootcampprojectdir

cd bootcampprojectdir

وتثبيت المتطلبات
pip install -U -r requirements/production.txt

إذا كنت تستخدم dabases مختلفة أو شيء من هذا القبيل ، فابدأ في الترحيل وجمع Static

تحديث جدار الحماية للسماح للمنفذ 8000
sudo ufw allow 8000

إنشاء gunicorn wsgi
gunicorn --bind 0.0.0.0:8000 settings.wsgi

إنشاء مقبس النظام
sudo nano /etc/systemd/system/gunicorn.socket

[وحدة]
الوصف = gunicorn.sock

[قابس كهرباء]
ListenStream = / تشغيل / gunicorn.sock

[تثبيت]
WantedBy = sockets.target

إنشاء خدمة
sudo nano /etc/systemd/system/gunicorn.service

[وحدة]
الوصف = البرنامج الخفي gunicorn
يتطلب = gunicorn.socket
بعد = network.target

[خدمة]
المستخدم = الصفحات
المجموعة = www-data
WorkingDirectory = / الصفحة الرئيسية / الصفحات / bootcampprojectdir / bootcampenv / bin / gunicorn
--ملف سجل الوصول -
- عمال 3
- ربط يونكس: تشغيل / gunicorn.sock
تطبيق settings.wsgi

[تثبيت]
WantedBy = multi-user.target

تمكين كل شيء
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket

افحصها
file /run/gunicorn.sock
عندما لا يكون لديك خطأ ، فلا بأس بذلك

تحقق من حالة
sudo systemctl status gunicorn.socket

تحقق من الخدمة
curl --unix-socket /run/gunicorn.sock localhost

عندما لا ترى كود htnl ، شيء ما مع خدمة gunicorn.

تأكد من تشغيل الخدمة
sudo systemctl status gunicorn

عندما يكون كل شيء على ما يرام ، تمر الخطوة التالية NGinx إلى gunicorn
تثبيت nginx
sudo apt install nginx

إنشاء موقع في nginx
إنشاء خدمة
sudo nano /etc/nginx/sites-available/bootcampproject

الخادم {
استمع 80
server_name 99.99.99.99

  location = /favicon.ico { access_log off; log_not_found off; }
  location /static/ {
        root /home/pages/bootcampprojectdir;
  }

موقعك / {
تشمل proxy_params ؛
proxy_pass http: // unix : /run/gunicorn.sock ؛
}
}

احفظ وانسخ هذا الملف إلى المواقع الممكنة
sudo ln -s /etc/nginx/sites-available/bootcampproject /etc/nginx/sites/enabled

وتحقق من إعداد nginx

sudo nginx -t

في حالة عدم وجود أخطاء ، أعد تشغيل nginx
sudo systemctl restart nginx

أضف منافذ جدار الحماية nginx ، ولكن احذف أولاً المنفذ 8000 من الاختبار

sudo ufw delete allow 8000

أضف nginx
sudo ufw allow 'Nginx Full'

ال 12 كومينتر

أهلا،
أنا لا أستخدم العلبة. أنا أستخدم gunicorn لجميع مشاريع django الخاصة بي.

هل قمت بتثبيت جميع المتطلبات؟
القنوات> = 2.1.1 # https://github.com/django/channels
قنوات ريدس> = 2.2.1 # https://github.com/django/channels_redis

يمكنك التحقق عبر وحدة التحكم

$ python -c "import channels"
$ echo $?

0 يعني وجود
1 يعني ، الوحدة غير موجودة في النظام

القنوات مثبتة. أواجه مشكلة أخرى الآن. هنا ملف عامل الإرساء الخاص بي و env. أنا أواجه مشكلة مع خدمة العمال. لست متأكدا ما يفعله. نقدر حقًا مساعدتك ، مشروعك ممتع للغاية ويمكن أن يساعد العديد من الأشخاص في جامعتي إذا دخل هذا حيز الإنتاج.

env.txt

docker-compose.txt

هنا سجل الخطأ.

worker_1    | /usr/local/lib/python3.6/site-packages/daphne/server.py:13: UserWarning: Something has already installed a non-asyncio Twisted reactor. Attempting to uninstall it; you can fix this warning by importing daphne.server early in your codebase or finding the package that imports Twisted and importing it later on.
worker_1    |   UserWarning,
django_1    | DEBUG 2019-10-17 21:28:37,751 base 1 140450066271560 Configuring Raven for host: https://sentry.io
worker_1    | DEBUG 2019-10-17 21:28:35,663 base 1 140638836505928 Configuring Raven for host: https://sentry.io
worker_1    | Running worker for channels ['channels', 'notifications']
worker_1    | DEBUG 2019-10-17 21:28:36,297 base 1 140638836505928 Sending message of length 5534 to https://sentry.io/api/1782977/store/
worker_1    | Traceback (most recent call last):
worker_1    |   File "manage.py", line 30, in <module>
worker_1    |     execute_from_command_line(sys.argv)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
worker_1    |     utility.execute()
worker_1    |   File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
worker_1    |     self.fetch_command(subcommand).run_from_argv(self.argv)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
worker_1    |     self.execute(*args, **cmd_options)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
worker_1    |     output = self.handle(*args, **options)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels/management/commands/runworker.py", line 46, in handle
worker_1    |     worker.run()
worker_1    |   File "/usr/local/lib/python3.6/site-packages/asgiref/server.py", line 60, in run
worker_1    |     event_loop.run_until_complete(self.handle())
worker_1    |   File "/usr/local/lib/python3.6/asyncio/base_events.py", line 484, in run_until_complete
worker_1    |     return future.result()
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 30, in handle
worker_1    |     [listener.result() for listener in listeners]
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 30, in <listcomp>
worker_1    |     [listener.result() for listener in listeners]
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 37, in listener
worker_1    |     message = await self.channel_layer.receive(channel)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels_redis/core.py", line 461, in receive
worker_1    |     return (await self.receive_single(channel))[1]

تغيير في محيطك
REDIS_URL=redis://127.0.0.1:6379

هل يمكنك أن تريني كيفية تكوين خدمة العمال؟ ولماذا نحتاجها؟ جديد في هذا المشروع ، لذا لست متأكدًا من مكان البحث عن تلك المعلومات

أه ، هذا كثير. لم يتم ذلك في بضع دقائق ...

بادئ ذي بدء ، يرجى التحقق مما إذا كنت قد قمت بتثبيت جميع المتطلبات على بيئة الخادم الخاص بك

pip install -U -r requirements/production.txt

ثانيًا ، مشروعك يعمل على محلي؟

تكوين مشروع غير ممكن بدون كل الملفات. وأنا لست الأفضل لتكوينه. يمكنني التحقق من تهيئتي ومشاركتي ، لكن هذا لم يتم اختباره واعتماده لمعسكر التمهيد. قد تحتاج إلى إعدادات إضافية.

أقوم بتدوير الخدمة باستخدام تكوين عامل ميناء. يعمل النشر المحلي بشكل جيد ولكن Production.yml شيء مختلف تمامًا. أنا أشرك redis ، daphne ، postgres. إذا كان لديك ملف إنشاء عامل ميناء في متناول يديك في مكان ما ، فيرجى مشاركته. شكرا

احصل على Outlook لنظام التشغيل iOS https://aka.ms/o0ukef


من: samazaphikel [email protected]
تاريخ الإرسال: الخميس ، 17 أكتوبر 2019 ، الساعة 5:03:30 مساءً
إلى: vitorfs / bootcamp [email protected]
نسخة إلى: Tri Minh Pham [email protected] ؛ المؤلف [email protected]
الموضوع: Re: [vitorfs / bootcamp] المساعدة في إعداد الإنتاج. (رقم 193)

أه ، هذا كثير. لم يتم ذلك في بضع دقائق ...

بادئ ذي بدء ، يرجى التحقق مما إذا كنت قد قمت بتثبيت جميع المتطلبات على بيئة الخادم الخاص بك

تثبيت الأنابيب -متطلبات U -r / production.txt

ثانيًا ، مشروعك يعمل على محلي؟

تكوين مشروع غير ممكن بدون كل الملفات. وأنا لست الأفضل لتكوينه. يمكنني التحقق من تهيئتي ومشاركتي ، لكن هذا لم يتم اختباره واعتماده لمعسكر التمهيد. قد تحتاج إلى إعدادات إضافية.

-
أنت تتلقى هذا لأنك قمت بتأليف الموضوع.
الرد على هذا البريد الإلكتروني مباشرة، مشاهدته على جيثب https://github.com/vitorfs/bootcamp/issues/193؟email_source=notifications&email_token=ADEK4AB5JEUP5LQ4APTJ6ITQPDOLFA5CNFSM4JB4YOCKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBRVI2A#issuecomment-543380584 ، أو إلغاء الاشتراك https://github.com/notifications/unsubscribe- المصادقة / ADEK4ADBCG24WLWIT3IM6OLQPDOLFANCNFSM4JB4YOCA .

في حالتي ، استخدم المراسلة الفورية بيثون 3.7.1 على جهاز خادم أوبونتو

إعداد اختياري لنسخة بايثون
sudo update alternatives --install /usr/bin/python/ python /usr/bin/python3.7.1

باستخدام هذا الأمر ، فإن python 3.7.1 هي أولويتي الأولى

أولاً ، قم بتثبيت البيئة على الجهاز
sudo -H pip3 install virtualenv

cd /home/pages للتغيير إلى المجلد الصحيح

mkdir bootcamp لإنشاء مجلد المشروع

cd bootcamp/

خلق البيئة
virtualenv bootcampenv
قم بتنشيط بيئتك
source bootcampenv/bin/activate

installl gunicorn
pip3 install gunicorn

ارجع إلى دليل الصفحات
cd ..
وإنشاء مجلد لمشروع معسكر التدريب

django-admin startproject bootcampprojectdir

cd bootcampprojectdir

وتثبيت المتطلبات
pip install -U -r requirements/production.txt

إذا كنت تستخدم dabases مختلفة أو شيء من هذا القبيل ، فابدأ في الترحيل وجمع Static

تحديث جدار الحماية للسماح للمنفذ 8000
sudo ufw allow 8000

إنشاء gunicorn wsgi
gunicorn --bind 0.0.0.0:8000 settings.wsgi

إنشاء مقبس النظام
sudo nano /etc/systemd/system/gunicorn.socket

[وحدة]
الوصف = gunicorn.sock

[قابس كهرباء]
ListenStream = / تشغيل / gunicorn.sock

[تثبيت]
WantedBy = sockets.target

إنشاء خدمة
sudo nano /etc/systemd/system/gunicorn.service

[وحدة]
الوصف = البرنامج الخفي gunicorn
يتطلب = gunicorn.socket
بعد = network.target

[خدمة]
المستخدم = الصفحات
المجموعة = www-data
WorkingDirectory = / الصفحة الرئيسية / الصفحات / bootcampprojectdir / bootcampenv / bin / gunicorn
--ملف سجل الوصول -
- عمال 3
- ربط يونكس: تشغيل / gunicorn.sock
تطبيق settings.wsgi

[تثبيت]
WantedBy = multi-user.target

تمكين كل شيء
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket

افحصها
file /run/gunicorn.sock
عندما لا يكون لديك خطأ ، فلا بأس بذلك

تحقق من حالة
sudo systemctl status gunicorn.socket

تحقق من الخدمة
curl --unix-socket /run/gunicorn.sock localhost

عندما لا ترى كود htnl ، شيء ما مع خدمة gunicorn.

تأكد من تشغيل الخدمة
sudo systemctl status gunicorn

عندما يكون كل شيء على ما يرام ، تمر الخطوة التالية NGinx إلى gunicorn
تثبيت nginx
sudo apt install nginx

إنشاء موقع في nginx
إنشاء خدمة
sudo nano /etc/nginx/sites-available/bootcampproject

الخادم {
استمع 80
server_name 99.99.99.99

  location = /favicon.ico { access_log off; log_not_found off; }
  location /static/ {
        root /home/pages/bootcampprojectdir;
  }

موقعك / {
تشمل proxy_params ؛
proxy_pass http: // unix : /run/gunicorn.sock ؛
}
}

احفظ وانسخ هذا الملف إلى المواقع الممكنة
sudo ln -s /etc/nginx/sites-available/bootcampproject /etc/nginx/sites/enabled

وتحقق من إعداد nginx

sudo nginx -t

في حالة عدم وجود أخطاء ، أعد تشغيل nginx
sudo systemctl restart nginx

أضف منافذ جدار الحماية nginx ، ولكن احذف أولاً المنفذ 8000 من الاختبار

sudo ufw delete allow 8000

أضف nginx
sudo ufw allow 'Nginx Full'

مرحبًا phamminhtris ، أنا سعيد لأنك تستخدم المشروع ، ومما تجده مفيدًا. هناك طريقتان رئيسيتان لنشر المشروع في بيئة إنتاج. الأول سيستخدم Docker ، لكن لديه محاذير خاصة به ، ومن الواضح أنه يتطلب قدرًا لا بأس به من الإلمام بـ Docker و docker-compose . أنا بعيد كل البعد عن الخبير وهذا هو سبب استخدامي للتطوير فقط ، ولكن ربما يمكنك أن تجد شيئًا مفيدًا هنا .

الطريقة الأخرى هي تنفيذ المشروع كما هو ، وهو "أسهل" (أو على الأقل يمكنك العثور على المزيد من الموارد والأدلة لنشره) ، فقط تذكر تحميل ملف .env بالمتغيرات المطلوبة ، يمكنك استخدام نموذج الإصدار المضمن لفهم كيفية الإعلان عنها.

هل يكفي مجرد استخدام gunicorn كخادم وحيد؟ لقد رأيت بعض الميزات التي تتطلب خادم تطبيق ASGI مثل daphne لخدمة حركة مرور مقبس الويب. يرجى تصحيح لي إذا كنت مخطئا. شكرا لك على المساعدة اللطيفة. حقا نقدر ذلك.

Nginx هو المكان الذي تصل إليه الطلبات من الإنترنت أولاً. يمكنه التعامل معها بسرعة كبيرة ، وعادة ما يتم تكوينه للسماح فقط لهذه الطلبات بالمرور ، والتي تحتاج حقًا للوصول إلى تطبيق الويب الخاص بك.

يترجم Gunicorn الطلبات التي يحصل عليها من Nginx إلى تنسيق يمكن لتطبيق الويب الخاص بك التعامل معه ، ويتأكد من تنفيذ التعليمات البرمجية عند الحاجة.

يمكن لكل فرد أن يفعل شيئًا لا يستطيع الآخر القيام به.
Nginx هو خادم ويب وبروكسي عكسي. إنه مُحسَّن للغاية لجميع الأشياء التي يحتاج خادم الويب إلى القيام بها.

اعتن بتوجيه اسم المجال (يقرر أين يجب أن تذهب الطلبات ، أو إذا كانت هناك استجابة للخطأ بالترتيب)
خدمة الملفات الثابتة
تعامل مع الكثير من الطلبات الواردة مرة واحدة
تعامل مع العملاء البطيئين
طلبات إعادة التوجيه التي يجب أن تكون ديناميكية لـ Gunicorn
إنهاء SSL (يحدث https هنا)
وفر موارد الحوسبة (وحدة المعالجة المركزية والذاكرة) مقارنة برمز Python الخاص بك
وأكثر من ذلك بكثير ، إذا قمت بتكوينه للقيام بذلك (موازنة التحميل ، التخزين المؤقت ، ...)

جونيكورن
بمجرد أن يقرر Nginx ، أن طلبًا معينًا يجب أن يتم تمريره إلى Gunicorn (بسبب القواعد التي قمت بتكوينه بواسطتها).

تم تحسين Gunicorn بدرجة عالية ولديه الكثير من الميزات المريحة.

تشغيل مجموعة من العمليات / سلاسل العمليات (تنفيذ التعليمات البرمجية الخاصة بك!)
يترجم الطلبات الواردة من Nginx لتكون متوافقة مع WSGI
ترجم استجابات WSGI لتطبيقك إلى استجابات http مناسبة
في الواقع يستدعي كود Python الخاص بك عندما يأتي طلب
يمكن لـ Gunicorn التحدث إلى العديد من خوادم الويب المختلفة
Gunicorn هو مجرد واحد من العديد من خوادم WSGI الصالحة. لا يهتم تطبيقك بالتطبيق الذي تستخدمه ، ولا يهتم Nginx أيضًا.

أنا أفهم ما ورد أعلاه. ومع ذلك ، فإن هذا المشروع خاص جدًا من حيث البروتوكول. إنه يقدم إشعارًا عبر websocket وعلى حد فهمي سنحتاج إلى أكثر من gunicorn و nginx العاديين لتشغيل التطبيق؟ عندما أقوم بتشغيل إنشاء عامل الإرساء المحلي ، لاحظت أن / الإشعارات لا يبدو أنها تعمل. أعلم أنني أطلب الكثير ولكني أقدر حقًا وقتك وجهدك لمساعدتيsamazaphikel. سنحاول التكوين المحلي (لا يوجد عامل إنشاء ، عامل ميناء) فقط قم بخلع ubuntu ومعرفة ما إذا كان ذلك يعمل. شكرا لكم جميعا

دليل مفيد جدا. إغلاق.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

sebastian-code picture sebastian-code  ·  11تعليقات

sebastian-code picture sebastian-code  ·  11تعليقات

Shekharnunia picture Shekharnunia  ·  6تعليقات

yashLadha picture yashLadha  ·  21تعليقات

mwanjajoel picture mwanjajoel  ·  5تعليقات