我在DigitalOcean上部署了一个与Docker一起部署的Django项目。我以this tutorial为基础,但是不得不进行一些更改才能使其正常运行。我尝试进行SMTP电子邮件注册时(我在本地可以正常工作)时遇到500错误,最直接的问题是我无法获得有关此错误的更多信息,因为没有任何内容写入nginx access.log / error .log(文件始终为空),并且我找不到的任何docker日志都没有输出。
我已经遍历了Stack Overflow和整个Internet,但是没有任何帮助。我试过更改日志文件的权限/所有者以匹配Nginx worker,没有区别。我尝试重新指定Nginx配置中的默认日志文件(/var/log/nginx/error.log),即使似乎我不必这样做,也没有什么区别。
这是我在启用nginx / sites的功能中所拥有的:
server {
listen 80;
server_name 134.209.172.141;
charset utf-8;
location /static {
alias /www/static;
}
location / {
proxy_pass http://web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
...以及nginx Dockerfile:
FROM tutum/nginx
RUN rm /etc/nginx/sites-enabled/default
COPY sites-enabled/ /etc/nginx/sites-enabled
我没有指定nginx.conf文件,但是我注意到如果我将外壳放入nginx容器中,则在/etc/nginx/nginx.conf中会有这样的文件。也许这是Docker映像默认提供的?
这是我用来构建的docker-compose.yml:
version: '3'
services:
web:
restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
- redis:redis
volumes:
- web-django:/usr/src/app
- web-static:/usr/src/app/static
env_file: .env_prod
command: /usr/local/bin/gunicorn cpm_project.wsgi:application -w 2 -b :8000
nginx:
restart: always
build: ./nginx/
ports:
- "80:80"
volumes:
- web-static:/www/static
links:
- web:web
postgres:
restart: always
image: postgres:latest
volumes:
- pgdata:/var/lib/postgresql/data/
redis:
restart: always
image: redis:latest
ports:
- "6379:6379"
volumes:
- redisdata:/data
volumes:
web-django:
web-static:
pgdata:
redisdata:
无数小时的修补后,尽管我对docker / nginx的理解存在很大差距,但我还是有一些可行的方法。但是,当我将SMTP添加到Django settings.py并尝试实时测试电子邮件注册时,单击“注册”按钮后出现500错误。然后经过数小时的研究,尝试不同的事情并弄乱头发,我没有关于此错误的更多信息,也没有什么看起来甚至是对实际问题的提示,更不用说解决方案了。看起来让Nginx日志正常工作是一个不错的起点,但是我将不胜感激。
很乐意张贴任何可能有用的其他代码,不想淹没您。
答案 0 :(得分:0)
知道了。如果其他人遇到类似的问题,最后的解决方法是在启用了我的网站的情况下定义一个新的错误日志文件,并添加以下行:
error_log /var/log/nginx/new_error.log debug;
大约在同一时间,我意识到我可以在Django设置中临时设置DEBUG = True并在浏览器中获取详细的错误消息。回想起来,这似乎是完全显而易见的,但是出于某种原因我却没有想到。
500错误的最终问题竟然是smtp服务器上的安全设置,与我的代码无关。