我有一个本地虚拟环境,在我的数字海洋服务器(Ubuntu 16.04)中有一个基本的Djangorest应用程序。 基本的wsgi.py是:
import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "workout_rest.settings") # This application object is used by any WSGI server configured to use this # file. This includes Django's development server, if the WSGI_APPLICATION # setting points here. from django.core.wsgi import get_wsgi_application application = get_wsgi_application() # Apply WSGI middleware here. # from helloworld.wsgi import HelloWorldApplication # application = HelloWorldApplication(application)
我一直在按照这个教程: https : //www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04
当我用这个命令testingGunicorn的服务项目的能力时:gunicorn –bind 0.0.0.0:8000 myproject.wsgi:application一切正常。
所以我试图设置Gunicorn来使用systemd服务文件。 我的/etc/systemd/system/gunicorn.service文件是:
[Unit] Description=gunicorn daemon After=network.target [Service] User=ben Group=www-data WorkingDirectory=/home/ben/myproject ExecStart=/home/ben/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:/home/ben/myproject/myproject.sock myproject.wsgi:application [Install] WantedBy=multi-user.target
我的Nginxconfiguration是:
server { listen 8000; server_name server_domain_or_IP; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/ben/myproject; } location / { include proxy_params; proxy_pass http://unix:/home/ben/myproject/myproject.sock; } }
我已经把听音端口从80改为8000,因为80给了我一个err_connection_refused错误。 使用以下命令启动服务器之后:
sudo systemctl restart nginx
当我尝试运行我的网站时,出现502错误网关错误。 我试过这些命令(在教程注释中find):
sudo systemctl daemon-reload sudo systemctl start gunicorn sudo systemctl enable gunicorn sudo systemctl restart nginx
但没有任何变化。 当我用这个命令查看Nginx日志时:
sudo tail -f /var/log/nginx/error.log
我可以读取该袜子文件不存在:
2016/10/07 09:00:18 [crit] 24974#24974: *1 connect() to unix:/home/ben/myproject/myproject.sock failed (2: No such file or directory) while connecting to upstream, client: 86.197.20.27, server: 139.59.150.116, request: "GET / HTTP/1.1", upstream: "http://unix:/home/ben/myproject/myproject.sock:/", host: "server_ip_adress:8000"
为什么这个袜子文件没有创build? 我如何configurationDjango / gunicorn来创build这个文件? 我在我的Django项目的INSTALLED_APP中添加了gunicorn,但它并没有改变任何东西。
编辑:
当我用nginx -t
testingnginxconfiguration文件时,我得到一个错误: open() "/run/nginx.pid" failed (13: Permission denied)
。 但是,如果我用sudo运行命令: sudo nginx -t
,testing成功。 这是否意味着我必须允许“本”用户运行Ngnix?
关于gunicorn日志文件,我找不到方法来阅读它们。 他们在哪里储存?
当我通过使用ps aux | grep gunicorn
来检查gunicorn是否正在运行 ps aux | grep gunicorn
:
ben 26543 0.0 0.2 14512 1016 pts/0 S+ 14:52 0:00 grep --color=auto gunicorn
当你运行gunctorn的systemctl enable和start命令时,帽子就会发生:
sudo systemctl enable gunicorn Synchronizing state of gunicorn.service with SysV init with /lib/systemd/systemd-sysv-install... Executing /lib/systemd/systemd-sysv-install enable gunicorn sudo systemctl start gunicorn I get no output with this command sudo systemctl is-active gunicorn active sudo systemctl status gunicorn ● gunicorn.service - gunicorn daemon Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; vendor preset: enabled) Active: active (exited) since Thu 2016-10-06 15:40:29 UTC; 23h ago Oct 06 15:40:29 DevUsine systemd[1]: Started gunicorn.service. Oct 06 18:52:56 DevUsine systemd[1]: Started gunicorn.service. Oct 06 20:55:05 DevUsine systemd[1]: Started gunicorn daemon. Oct 06 20:55:17 DevUsine systemd[1]: Started gunicorn daemon. Oct 06 21:07:36 DevUsine systemd[1]: Started gunicorn daemon. Oct 06 21:16:42 DevUsine systemd[1]: Started gunicorn daemon. Oct 06 21:21:38 DevUsine systemd[1]: Started gunicorn daemon. Oct 06 21:25:28 DevUsine systemd[1]: Started gunicorn daemon. Oct 07 08:58:43 DevUsine systemd[1]: Started gunicorn daemon. Oct 07 15:01:22 DevUsine systemd[1]: Started gunicorn daemon.
我不得不改变我的袜子文件夹的权限:
sudo chown ben:www-data /home/ben/myproject/
另外一件事是,我在很多帖子里看过后,改变了袜子的位置,把袜子文件保存在django项目中并不是一个好的实践。 我的新位置是:
/home/ben/run/
不要忘记更改权限:
sudo chown ben:www-data /home/ben/run/
要确保gunicorn被刷新,运行这些命令:
pkill gunicorn sudo systemctl daemon-reload sudo systemctl start gunicorn
这将杀死gunicorn进程,并开始新的进程。
你可以运行这个命令来启动服务器启动过程:
sudo systemctl enable gunicorn
现在一切正常。