מה דעתך על שלום לכולם, זה המאמר הראשון שלי ב<» 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
וזה יהיה הכל, בסופו של דבר זה לא כל כך נכון? זה נראה לי פשוט 😀
אני מקווה שזה שימושי עבורך, ברכות 😉
אני מבין כי אין למקם את אפליקציית Django בשורש תיקיית שרת האינטרנט (/ var / www)? למען הביטחון, אני לא יודע אם אני טועה.
ברכות.
בסדר !!! זה היה דבר שלא הייתי מודע אליו לחלוטין, אעדכן את הערך 😛 וברגע שאחזור ביום שני אעשה שינויים ביישום ה- xD
תודה
אח Epale הדרכה טובה. לאחרונה הייתי גם באותו דבר אבל בדביאן 7 הייתי צריך לחפש ולקרוא פחות או יותר. אני ממליץ לך ליצור את הסביבה הווירטואלית של virtualenv בבית המשתמש בתיקיה נסתרת.
ברכות!
hahaha ctm אני אתמול תיעד את ג'נגו ואתה כבר עובר דרך הגלקסיה 999999 ברכות גברים xD
מאמר טוב מאוד =) רק לפני שבוע פרסתי את אפליקציית django שלי אבל עשיתי את זה עם uwsgi ו- nginx, אתה יודע איזה יתרון יש לגוניקורן? ראיתי את זה מוזכר הרבה.
נחמד לראות ש- django נהיה מאוד פופולרי, האמת היא המסגרת הטובה ביותר שראיתי =)
עבור STATIC_ROOT מה שאני עושה זה להגדיר משתנה גלובלי. משהו כזה:
import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')
איפה backend זו אפליקציה שיצרתי. בדרך זו אני מוודא כי במקום בו אני פורס את הפרויקט, הדרך הגלובלית זהה.
מעניין, אנסה בעתיד.
אגב, האם מישהו יודע לאפשר מבטאים ודמויות שאינן אסצ'י ביישום django?
חיפשתי בכל מקום, אף אחת מהשיטות הבאות לא מתאימה לי:
sys.setdefaultencoding ('utf-8') # ב- sites.py
# - * - קידוד: utf-8 - * - # בכל קובץ פיתון
עריכת site.py, והצבת utf-8 במקום ascii אמורה לעבוד, אבל $ file models.py מודיע לי שהקובץ שלי עדיין הוא ascii.
הצעות כלשהן?
זה עבד!!!!
הדרכה טובה מאוד אבל אתה יכול לעשות אחת מהדרכים להעלות את האפליקציה שלי בשרת אינטרנט שכבר נמצא בהפקה
תודה