כיצד לפרוס יישום Django:

מה דעתך על שלום לכולם, זה המאמר הראשון שלי ב<» DesdeLinux (מתוך כמה שיש לי בטיוטות שלי xD), אני מקווה שזה שימושי לך 😀

ובכן, בעבודתי החדשה והנוכחית, כרגע מתבצעת העברת מספר מערכות לג'אנגו (כמה מוזר אה ?? xD) ואחת המשימות שלי, מלבד פיתוח, היא להכניס אותן לייצור, אז כמה טוב חניך, מכיוון שזו הייתה הפעם הראשונה שהפקתי יישום בשרת אמיתי: $ התחלתי לקרוא את המסמך הרשמי של כל אחת מהחבילות הנדרשות של הערימה (Gunicorn ו- Supervisord יותר מכל), וראיתי שהמדריכים ב- ספרדית הם לא היו ברורים לי במיוחד בהיבטים מסוימים, החלטתי ליצור מדריך מיני עם הצעדים שביצעתי בכדי להכניס את היישום לייצור, בהתבסס על מחסנית Django, Gunicorn, Supervisord, Nginx ו- Postgresql.

במקרה בו אני עובד, השרתים עדיין מריצים את Debian Squeeze, אך המדריך אמור להיות תקף לחלוטין להפצות אחרות ... אז בואו ניגש ישר לעניין ונתחיל:

אני אעבוד כמשתמש-על. ראשית, נדרשות החבילות הבאות:

PIP -> כלי להתקנת וניהול חבילות עבור Python
aptitude install python-pip

nginx -> שרת אינטרנט (נשתמש בו כ- proxy הפוך וכדי לשמור במטמון את הקבצים הסטטיים 'img, js, css') אנו מתקינים אותו עם:
aptitude install nginx

מְפַקֵחַ -> יישום לניהול וניטור היישום שלנו, אם כי הוא משמש להרבה יותר. אנו מתקינים אותו עם:
aptitude install supervisor

וירטואלי -> זה עוזר לנו ליצור סביבת ביצוע וירטואלית מותאמת אישית ליישום שלנו. אנו מתקינים אותו עם:
aptitude install python-virtualenv

גוניקהורן -> שרת אינטרנט לפייתון (אנחנו עוד לא נתקין את זה)

אני מניח שכבר צריך להתקין ולהגדיר את postgresql

psychopg2 -> מחבר Postgresql לפיתון (גם לא נתקין אותו)

צור סביבה וירטואלית באמצעות virtualenv:

ראשית נעבור לספריית העבודה בה נשתמש להפקה:
cd /var/www/

ואז בספריה זו ניצור את הסביבה הווירטואלית:
virtualenv ENV-nombreApp

אנו עוברים לספריה שיצרתי זה עתה וירטואלי
cd ENV-nombreAPP

אנו מעתיקים את היישום בספריה זו וכעת אנו ממשיכים להפעיל את הסביבה באמצעות:
source bin/activate

הפקודה אמורה להיראות כעת (ENV)usuario@host:

זה יגרום כעת לכל מה שאנחנו עושים מאוחסן בספריה / var / www / ENV-appname / מבלי להשפיע על חבילות המערכת

עכשיו אנחנו עוברים לספריית היישומים:
cd nombreApp

אנו ממשיכים להתקין את רשימת התלות ביישומים (במידת הצורך), בה הם מוגדרים בקובץ דרישות. טקסט:
pip install -r requirements.txt

אנו יכולים גם להתקין חבילות בנפרד, למשל, להתקנת המחבר של PostgreSQL:
pip install psycopg2

התקנה ותצורה של GUnicorn:

כדי להתקין אותו אנו עושים זאת באותו אופן:
pip install gunicorn

עכשיו אנחנו הולכים להגדיר את זה, בשביל זה אנחנו הולכים ליצור קובץ שנקרא gunicorn-deploy.py בשורש היישום שלנו, (למרות שהשם יכול להיות כל דבר) עם התוכן הבא:

bind = "127.0.0.1:8001" # dirección a donde accederá Nginx
logfile = "/var/www/logs/nombreApp/gunicorn.log" # dirección donde estarán los logs de la aplicación
workers = 1 # dependerá en medida de la carga de trabajo que tenga la aplicación, también depende del hardware con que se cuente
loglevel = 'info' # tipo de logging

תצורת הפיקוח:

עכשיו בואו נקבע את מְפַקֵחַ, לשם כך אנו מייצרים את קובץ התצורה עם

echo_supervisord_conf > /etc/supervisord.conf

כעת אנו עורכים את קובץ התצורה:
vim /etc/supervisord.conf

ואנחנו מבטלים את השורות הבאות על ידי הסרת ה-; (נְקוּדָה וּפְסִיק):

[unix_http_server] file = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50Mb logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = falsed minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appname] command = / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py directory = / var / www / ENV-appname / appname / autostart = true autorestart = true user = שם משתמש redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

כעת ניצור את הסקריפט לפיקוח על מנת להתחיל עם המערכת, לשם כך ניצור את הקובץ:
vim /etc/init.d/supervisord

ונוסיף את התוכן הבא:

 # הפעלה אוטומטית של פיקוח # תיאור: הפעלת אוטומטית של פיקוח # שם תהליך: פיקוח # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 בהתחלה) echo -n "מפקח החל:" $ SUPERVISORD הד ;; stop) echo -n "עצירת מפקח:" $ SUPERVISORCTL הד כיבוי ;; הפעל מחדש) echo -n "הפסקת מפקח:" $ SUPERVISORCTL כיבוי הד הד -n "מפעיל מפקח:" $ SUPERVISORD הד ;; ש- C

ועכשיו אנו נותנים הרשאות ביצוע לקובץ כך שהוא יכול להתחיל במערכת:
sudo chmod +x /etc/init.d/supervisord

אנו מעדכנים את הקישורים להפעלת השירות:
sudo update-rc.d supervisord defaults

אנו מתחילים את השירות:
sudo /etc/init.d/supervisord start

הגדרת nginx:

שלב זה הוא גם די פשוט, ניצור את קובץ התצורה הבא של nginx ליישום שלנו:

vim /etc/nginx/sites-enabled/nombreApp

ונוסיף לך את התוכן הבא

שרת {האזנה 9001; # יציאה איפה שהם רוצים שרת שם nginx יקשיב www.domain.com; # או 192.168.0.100, כתובת אליה ניגש access_log /var/log/nginx/Appname.access.log; # שם יהיה לנו את מיקום יומן היישום / {# לאן nginx יתקשר בעת גישה אל www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header מארח $ http_host; } מיקום / סטטי / {# אליו nginx תיכנס כאשר אנו נכנסים www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

ואנחנו מפעילים מחדש את nginx:
service nginx restart

הגדרת Django:

בואו ונשנה את קובץ התצורה של django:
vim nombreApp/settings.py

אנו מחפשים את הקו שאומר DEBUG = נכון ואנחנו משנים את הערך, נותר DEBUG = שווא

אנו מוסיפים את הפרמטרים של DB:

DATABASES = {'ברירת מחדל': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # או mysql, או כל מה שהם משתמשים 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'סיסמה DB', 'HOST': 'localhost', # או זה שהם צריכים 'PORT': '', # או זה שהם משתמשים בו}}

אנחנו מחפשים את הקו ALLOWED_HOSTS = [] ואנחנו מוסיפים את התחום או את הכתובת דרכה ניגש, משאירים משהו כמו ALLOWED_HOSTS = ['www.domain.com']

אנו מגדירים את הספריה עבור הקבצים הסטטיים, אנו מחפשים את השורה שאומרת STATIC_ROOT = ' ' ואנחנו משנים את הערך, מציבים את הנתיב המוחלט במקום בו אנו רוצים שהקבצים הסטטיים שלנו יהיו, במקרה שלי השארתי אותו פחות או יותר ככה STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

כמעט סיימנו, אנו מבצעים את הפקודה הבאה:
./manage.py collectstatic

פעולה זו תיצור תיקיה עם השם 'סטטיסטיקות בנתיב שאנחנו מציינים ב מה Architect ", שם כל הקבצים הסטטיים שלנו יהיו.

ולבסוף אנו מפעילים מחדש את המפקח על מנת לבצע את השינויים החדשים:
supervisorctl restart nombreApp

וזה יהיה הכל, בסופו של דבר זה לא כל כך נכון? זה נראה לי פשוט 😀

אני מקווה שזה שימושי עבורך, ברכות 😉

תיעוד של GUnicorn

תיעוד פיקוח


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   f3niX דיג'ו

    אני מבין כי אין למקם את אפליקציית Django בשורש תיקיית שרת האינטרנט (/ var / www)? למען הביטחון, אני לא יודע אם אני טועה.

    ברכות.

    1.    urKh דיג'ו

      בסדר !!! זה היה דבר שלא הייתי מודע אליו לחלוטין, אעדכן את הערך 😛 וברגע שאחזור ביום שני אעשה שינויים ביישום ה- xD
      תודה

  2.   רודריגו בראבו (גוידור) דיג'ו

    אח Epale הדרכה טובה. לאחרונה הייתי גם באותו דבר אבל בדביאן 7 הייתי צריך לחפש ולקרוא פחות או יותר. אני ממליץ לך ליצור את הסביבה הווירטואלית של virtualenv בבית המשתמש בתיקיה נסתרת.

    ברכות!

  3.   סרב פנריז דיג'ו

    hahaha ctm אני אתמול תיעד את ג'נגו ואתה כבר עובר דרך הגלקסיה 999999 ברכות גברים xD

  4.   daniel2ac דיג'ו

    מאמר טוב מאוד =) רק לפני שבוע פרסתי את אפליקציית django שלי אבל עשיתי את זה עם uwsgi ו- nginx, אתה יודע איזה יתרון יש לגוניקורן? ראיתי את זה מוזכר הרבה.
    נחמד לראות ש- django נהיה מאוד פופולרי, האמת היא המסגרת הטובה ביותר שראיתי =)

  5.   אוזקר דיג'ו

    עבור STATIC_ROOT מה שאני עושה זה להגדיר משתנה גלובלי. משהו כזה:

    import os
    PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')

    איפה backend זו אפליקציה שיצרתי. בדרך זו אני מוודא כי במקום בו אני פורס את הפרויקט, הדרך הגלובלית זהה.

  6.   sgmart דיג'ו

    מעניין, אנסה בעתיד.

    אגב, האם מישהו יודע לאפשר מבטאים ודמויות שאינן אסצ'י ביישום django?

    חיפשתי בכל מקום, אף אחת מהשיטות הבאות לא מתאימה לי:
    sys.setdefaultencoding ('utf-8') # ב- sites.py

    # - * - קידוד: utf-8 - * - # בכל קובץ פיתון

    עריכת site.py, והצבת utf-8 במקום ascii אמורה לעבוד, אבל $ file models.py מודיע לי שהקובץ שלי עדיין הוא ascii.

    הצעות כלשהן?

    1.    sgmart דיג'ו

      זה עבד!!!!

  7.   אנימה 230 דיג'ו

    הדרכה טובה מאוד אבל אתה יכול לעשות אחת מהדרכים להעלות את האפליקציה שלי בשרת אינטרנט שכבר נמצא בהפקה
    תודה