วิธีปรับใช้แอปพลิเคชัน Django:

สวัสดีทุกคน นี่เป็นบทความแรกของฉันใน <» FromLinux (จากหลายๆ บทความที่ฉันมีในฉบับร่าง xD) ฉันหวังว่ามันจะมีประโยชน์สำหรับคุณ 

ในงานใหม่และงานปัจจุบันของฉันในขณะนี้กำลังมีการย้ายระบบหลายระบบไปยัง Django (แปลกขนาดไหนเนี่ย ?? xD) และหนึ่งในงานของฉันนอกเหนือจากการพัฒนากำลังนำสิ่งเหล่านี้ไปสู่การผลิตดังนั้นจะดีแค่ไหน เด็กฝึกงานเนื่องจากเป็นครั้งแรกที่ฉันนำแอปพลิเคชันไปใช้ในการผลิตบนเซิร์ฟเวอร์จริง: $ ฉันเริ่มอ่านเอกสารอย่างเป็นทางการของแต่ละแพ็คเกจที่ต้องการของสแต็ก (Gunicorn และ Supervisord ส่วนใหญ่) และเห็นว่าบทช่วยสอนใน ภาษาสเปนพวกเขาไม่ค่อยชัดเจนสำหรับฉันในบางแง่มุมฉันตัดสินใจสร้างมินิไกด์พร้อมขั้นตอนที่ฉันทำตามเพื่อนำแอปพลิเคชันไปใช้ในการผลิตโดยอิงจากสแต็ก Django, Gunicorn, Supervisord, Nginx และ Postgresql

ในกรณีที่ฉันทำงานเซิร์ฟเวอร์ยังคงใช้งาน Debian Squeeze อยู่ แต่คำแนะนำควรจะใช้ได้อย่างสมบูรณ์สำหรับการแจกแจงอื่น ๆ ... ดังนั้นมาตรงประเด็นและเริ่มต้น:

ฉันจะทำงานเป็นผู้ใช้ขั้นสูง ก่อนอื่นต้องใช้แพ็คเกจต่อไปนี้:

PIP -> เครื่องมือในการติดตั้งและจัดการแพ็คเกจสำหรับ Python
aptitude install python-pip

Nginx -> เว็บเซิร์ฟเวอร์ (เราจะใช้เป็น reverse proxy และเพื่อแคชไฟล์คงที่ 'img, js, css') เราติดตั้งด้วย:
aptitude install nginx

Supervisord -> แอปพลิเคชันสำหรับจัดการและตรวจสอบแอปพลิเคชันของเราแม้ว่าจะใช้งานได้อีกมากมาย เราติดตั้งด้วย:
aptitude install supervisor

virtualenv -> ช่วยให้เราสร้างสภาพแวดล้อมการดำเนินการเสมือนที่กำหนดเองสำหรับแอปพลิเคชันของเรา เราติดตั้งด้วย:
aptitude install python-virtualenv

กันนิคอร์น -> เว็บเซิร์ฟเวอร์สำหรับ python (เรายังไม่ได้ติดตั้งสิ่งนี้)

ฉันคิดว่าพวกเขาควรติดตั้งและกำหนดค่า postgresql ไว้แล้ว

โรคจิต 2 -> ตัวเชื่อมต่อ Postgresql สำหรับ python (เรายังไม่ได้ติดตั้ง)

สร้างสภาพแวดล้อมเสมือนจริงด้วย Virtualenv:

ก่อนอื่นเราจะย้ายไปที่ไดเร็กทอรีการทำงานที่เราจะใช้ในการผลิต:
cd /var/www/

จากนั้นในไดเรกทอรีนี้เราจะสร้างสภาพแวดล้อมเสมือน:
virtualenv ENV-nombreApp

เราย้ายไปที่ไดเร็กทอรีที่ฉันเพิ่งสร้าง Virtualenv
cd ENV-nombreAPP

เราคัดลอกแอปพลิเคชันในไดเรกทอรีนี้และตอนนี้เราดำเนินการเพื่อเปิดใช้งานสภาพแวดล้อมด้วย:
source bin/activate

ตอนนี้พรอมต์ควรมีลักษณะดังนี้ (ENV)usuario@host:

ตอนนี้จะทำให้ทุกสิ่งที่เราทำถูกเก็บไว้ในไดเร็กทอรี / var / www / ENV-appname / โดยไม่ส่งผลกระทบต่อแพ็คเกจระบบ

ตอนนี้เราย้ายไปที่ไดเรกทอรีแอปพลิเคชัน:
cd nombreApp

เราดำเนินการติดตั้งรายการการขึ้นต่อกันของแอปพลิเคชัน (หากจำเป็น) ซึ่งระบุไว้ในไฟล์ Requirement.txt:
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

การกำหนดค่าหัวหน้างาน:

ตอนนี้มาตั้งค่า supervisordด้วยเหตุนี้เราจึงสร้างไฟล์การกำหนดค่าด้วย

echo_supervisord_conf > /etc/supervisord.conf

ตอนนี้เราแก้ไขไฟล์กำหนดค่า:
vim /etc/supervisord.conf

และเรายกเลิกการใส่ข้อคิดเห็นในบรรทัดต่อไปนี้โดยการลบ; (อัฒภาค):

[unix_http_server] ไฟล์ = / tmp / Supervisor.sock [ผู้ควบคุม] logfile = / var / log / Supervisor.log logfile_maxbytes = 50MB logfile_backups = 10 loglevel = debug pidfile = / var / run / Supervisor.pid nodaemon = false 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 ไดเร็กทอรี = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Username redirect_stderr = true stdout_logfile = / var / www / logs / appname / Supervisorord.log

ตอนนี้เราจะสร้างสคริปต์สำหรับผู้บังคับบัญชาเพื่อเริ่มต้นด้วยระบบเพื่อที่เราจะสร้างไฟล์:
vim /etc/init.d/supervisord

และเราเพิ่มเนื้อหาต่อไปนี้:

 # ผู้บังคับบัญชาเริ่มต้นอัตโนมัติ # # คำอธิบาย: เริ่มต้นอัตโนมัติผู้บังคับบัญชา # ชื่อกระบวนการ: ผู้บังคับบัญชา # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / ผู้บังคับบัญชา SUPERVISORCTL = / usr / local / bin / ผู้บังคับบัญชากรณีที่ $ 1 ในการเริ่มต้น) echo -n "การเริ่มต้นหัวหน้างาน:" $ SUPERVISORD echo ;; หยุด) 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 ฟัง server_name 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; } location / static / {# โดยที่ nginx จะเข้าถึงเมื่อเราป้อน www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

และเรารีสตาร์ท nginx:
service nginx restart

การตั้งค่า Django:

มาแก้ไขไฟล์คอนฟิกูเรชัน django:
vim nombreApp/settings.py

เรามองหาบรรทัดที่ระบุว่า DEBUG = จริง และเราเปลี่ยนค่าที่เหลืออยู่ DEBUG = เท็จ

เราเพิ่มพารามิเตอร์ DB:

DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # หรือ mysql หรืออะไรก็ตามที่ใช้ 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : '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

สิ่งนี้จะสร้างโฟลเดอร์ที่มีชื่อ 'วิชาว่าด้วยวัตถุ ในเส้นทางที่เราระบุในไฟล์ settings.py 'นั่นคือที่มาของไฟล์คงที่ทั้งหมดของเรา

และในที่สุดเราก็รีสตาร์ทหัวหน้างานเพื่อทำการเปลี่ยนแปลงใหม่:
supervisorctl restart nombreApp

และนั่นก็คงเป็นเช่นนั้น สุดท้ายแล้วมันก็ไม่ใช่เรื่องใหญ่อะไรใช่ไหม? มันดูเหมือนง่ายสำหรับฉัน

ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ สวัสดี

เอกสาร GUnicorn

เอกสารกำกับดูแล


เพิ่มเป็นแหล่งข้อมูลที่ต้องการใน Google