Wiring uWSGI untuk bekerja dengan Django dan nginx di Ubuntu 16.04

14

Saya mencoba untuk mengikuti tutorial ini untuk setup uWSGIdengan Djangodan nginxpada Ubuntu16.04.

Semuanya bekerja dengan baik sampai langkah terakhir (oh ironi ...) di mana saya mencoba menjalankan perintah ini:

sudo service uwsgi start

Jika gagal dengan kesalahan berikut:

Gagal memulai uwsgi.service: Unit uwsgi.service tidak ditemukan.

Orang lain tampaknya mendapatkan kesalahan serupa:

Gagal memulai uwsgi.service: Unit uwsgi.service gagal memuat: Tidak ada file atau direktori tersebut.

Masalah ini tampaknya terkait dengan versi Ubuntu. Sementara tutorial itu ditujukan untuk Ubuntu 14.04, tampaknya itu tidak akan berfungsi untuk versi yang lebih baru karena di versi 15 Ubuntu beralih dari upstartdaemon init ke systemddaemon init .

Bagaimana saya bisa menggunakan systemduntuk meluncurkan uWSGI sehingga berfungsi dengan nginx dan Django?

Vlad Schnakovszki
sumber

Jawaban:

27

The pertama modifikasi yang dibutuhkan adalah untuk /etc/uwsgi/sites/firstsite.iniberkas. Satu-satunya perubahan yang diperlukan adalah mengganti izin dari 664menjadi 666. Script akan terlihat seperti ini:

[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

Kedua , karena kami menggunakan systemddaripada upstart, file berikut ini tidak diperlukan dan dapat dihapus:/etc/init/uwsgi.conf

Ketiga , kami membuat systemdskrip berikut di /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

Refresh keadaan systemd init system dengan layanan uWSGI baru ini

sudo systemctl daemon-reload

Untuk memulai skrip Anda harus menjalankan yang berikut:

sudo systemctl start uwsgi

Untuk memulai uWSGIreboot, Anda juga perlu:

sudo systemctl enable uwsgi

Anda dapat menggunakan yang berikut untuk memeriksa statusnya:

systemctl status uwsgi

Beberapa perincian lebih lanjut dapat ditemukan di sini .

Vlad Schnakovszki
sumber
1
Bagaimana Anda membuat systemd menggunakan python virtualenv? Ketika saya berlari, systemctl status uwsgisaya mengerti ImportError: No module named site.
tlng05
2
epik ..... saya sudah berjuang begitu lama dengan ini .... terima kasih atas solusi langkah-demi-langkah mudah yang telah Anda tulis di sini. +1
Rakib
1
Saya menggunakannya beberapa kali, jawaban yang sangat membantu
jozi
0

Untuk mengatasi kesalahan itu: sudo systemctl daemon-reloaduntuk file uwsgi.service yang baru dibuat akan dimuat.

Untuk membuat layanan start pada setiap reboot: sudo systemctl enable uwsgi.

Alexandr Karbivnichiy
sumber