Kết nối uWSGI để làm việc với Django và nginx trên Ubuntu 16.04


14

Tôi cố gắng để làm theo hướng dẫn này để thiết lập uWSGIvới Djangonginxtrên Ubuntu16.04.

Tất cả đều hoạt động tốt cho đến bước cuối cùng (ôi thật trớ trêu ...) khi tôi cố gắng thực hiện lệnh này:

sudo service uwsgi start

Nếu thất bại với lỗi sau:

Không thể bắt đầu uwsgi.service: Không tìm thấy đơn vị uwsgi.service.

Những người khác dường như nhận được một lỗi tương tự:

Không thể khởi động uwsgi.service: Đơn vị uwsgi.service không tải được: Không có tệp hoặc thư mục như vậy.

Vấn đề dường như có liên quan đến phiên bản Ubuntu. Mặc dù hướng dẫn đó nhắm vào Ubuntu 14.04, nhưng có vẻ như nó sẽ không hoạt động cho các phiên bản mới hơn vì trong phiên bản 15 Ubuntu đã chuyển từ upstarttrình nền init sang systemdtrình nền init .

Làm cách nào tôi có thể sử dụng systemdđể khởi chạy uWSGI để nó hoạt động với nginx và Django?

Câu trả lời:


27

Các đầu thay đổi cần thiết là để các /etc/uwsgi/sites/firstsite.initập tin. Thay đổi duy nhất cần thiết là thay thế các quyền từ 664đến 666. Kịch bản sẽ như thế này:

[uwsgi]
project = firstsite
base = /home/user

chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application

master = true
processes = 5

socket = %(base)/%(project)/%(project).sock
chmod-socket = 666
vacuum = true

Thứ hai , vì chúng tôi đang sử dụng systemdchứ không phải upstart, tệp sau không cần thiết và có thể bị xóa:/etc/init/uwsgi.conf

Thứ ba , chúng tôi tạo systemdtập lệnh sau tại /etc/systemd/system/uwsgi.service:

[Unit]
Description=uWSGI Emperor service
After=syslog.target

[Service]
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

Làm mới trạng thái của hệ thống init systemd với dịch vụ uWSGI mới này trên tàu

sudo systemctl daemon-reload

Để bắt đầu tập lệnh, bạn cần chạy như sau:

sudo systemctl start uwsgi

Để bắt đầu uWSGIkhởi động lại, bạn cũng sẽ cần:

sudo systemctl enable uwsgi

Bạn có thể sử dụng như sau để kiểm tra trạng thái của nó:

systemctl status uwsgi

Một số chi tiết có thể được tìm thấy ở đây .


1
Làm thế nào để bạn làm cho systemd sử dụng một ảo python? Khi tôi chạy systemctl status uwsgitôi nhận được ImportError: No module named site.
tlng05

2
sử thi ..... tôi đã đấu tranh quá lâu với điều này .... cảm ơn bạn vì giải pháp từng bước dễ dàng đơn giản mà bạn đã viết ở đây. +1
Rakib

1
Tôi đã sử dụng nó một vài lần, câu trả lời rất hữu ích
jozi

0

Để khắc phục lỗi đó: sudo systemctl daemon-reloadđối với tệp uwsgi.service mới được tạo sẽ được tải.

Để thực hiện dịch vụ bắt đầu trên mỗi lần khởi động lại : sudo systemctl enable uwsgi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.