I want to deploy my Flask app on Ubunut 16.04 with nginx and uWSGI but whenever I do sudo systemctl start nebulon I don't get an error but the status says the following:
nebulon.service - uWSGI instance to serve nebulon
Loaded: loaded (/etc/systemd/system/nebulon.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2017-09-16 18:08:35 UTC; 5s ago
Process: 18718 ExecStart=/nebulonapp/nebulon.sock --ini /nebulonapp/nebulon.ini (code=exited, status=203/EXEC)
Main PID: 18718 (code=exited, status=203/EXEC)
nebulon.service:
[Unit]
Description=uWSGI instance to serve nebulon
After=network.target
[Service]
User=nebulonuser
Group=www-data
WorkingDirectory=/nebulonapp
ExecStart=/nebulonapp/nebulon.sock --ini /nebulonapp/nebulon.ini
[Install]
WantedBy=multi-user.target
In /nebulonapp
I have the nebulon.ini:
[uwsgi]
chdir=/nebulonapp/
wsgi-file = wsgi.py
callable = app
plugin=python35
master = true
processes = 5
socket = nebulon.sock
chmod-socket = 666
vacuum = true
die-on-term = true
The nebulon.sock
is in /nebulonapp
but it is empty. The status of uWSGI is the following:
uwsgi.service - LSB: Start/stop uWSGI server instance(s)
Loaded: loaded (/etc/init.d/uwsgi; bad; vendor preset: enabled)
Active: active (exited) since Sat 2017-09-16 18:22:53 UTC; 10s ago
Docs: man:systemd-sysv-generator(8)
Process: 18828 ExecStop=/etc/init.d/uwsgi stop (code=exited, status=0/SUCCESS)
Process: 18854 ExecStart=/etc/init.d/uwsgi start (code=exited, status=0/SUCCESS)
Sep 16 18:22:53 nebulon systemd[1]: Stopped LSB: Start/stop uWSGI server instance(s).
Sep 16 18:22:53 nebulon systemd[1]: Starting LSB: Start/stop uWSGI server instance(s)...
Sep 16 18:22:53 nebulon uwsgi[18854]: * Starting app server(s) uwsgi
Sep 16 18:22:53 nebulon uwsgi[18854]: ...done.
Sep 16 18:22:53 nebulon systemd[1]: Started LSB: Start/stop uWSGI server instance(s).
Testing uWSGI with the following command works though.
uwsgi --socket 0.0.0.0:5000 --plugin-python3 --protocol=http -w wsgi:app
Thanks for your help.
The issue is with permissions. The guide you are following from digital ocean is missing a crucial step - nginx uses the www-data group to create the socket, and because of that you need to give ownership of your project folder to that group and make sure the user you are executing with is a part of that.
Simply, run these 2 commands
chown -R sammy:www-data /home/sammy/<project>/*
usermod -aG www-data sammy