Django + nginx + uwsgi部署阿里云以及遇到的一些坑(部署后admin后台404)

自己写的笔记,记录一下自己部署的过程遇到的困难和对问题的理解,欢迎dalao指出我的错误

主要是遇到了以下坑:

1、配置了nginx+uwsgi,但是输入ip后还是只有weicom to nginx
2、输入ip可以访问django的web页面了,但是想进入django自带的后台,ip/admin或者自己定义url,ip/xxx的时候会显示404

安装python、django、nginx、uwsgi(ubuntu环境)

这个一搜一大把,就不赘述了,重点讲一个:
有些云服务器自带python2环境,但是没有python3,当你安装了python3,但是他默认python2是主,python3是次,那么就需要把python3变成主:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

nginx配置

*先确保你的nginx在运作,安装好后直接访问ip就行,本地就127.0.0.1,端口默认是80。
service nginx start 运行后,他什么都不会提示,如果有提示,可能是端口占用了,那你往下看绿色字体那,改一下端口。在浏览器输入“ip:端口号”,你就可以看到“welcome to nginx!”的字样。这一步中掠过了配置静态文件,也是因为网上各位dalao都有给出明确的步骤。

找到nginx的sites-available,它在你的nginx安装那。我的是在/etc/nginx/sites-available。里面有个default文件,更改内容:

server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don’t use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/ =404;
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}

绿色字体(80和server_name:_):
可以不改。
但是默认端口80很多时候会被占用,这个端口就是nginx所需要的,改了之后ip后面记得改成对应的,server_name写域名的,没有就不写,或者写你的云服务器IP

蓝色字体:
这几句话要加。
1、include 后面接的是uwsgi_params的路径,这玩意是和sites-available同级的。

在这里插入图片描述
2、uwsgi_pass:127.0.0.1:8000
这个就这么写,后面的端口号你可以改,但这个ip和端口号记住,后面要用。

红色字体
当你的配置为 try_files $uri $uri/ = 404 ,访问 www.123.com/example 的时候 会先在发布目录里边找example这个文件,如果没有的话 就在寻找example这个目录。在try_files 寻找完以后不会跳出location,而是往下执行,如果后边没有需要执行的,就会返回给客户端

当try_files 找不到文件时,内部会将这次请求重定向到最后一个参数,所以最后一个参数必须存在, try_files $uri $uri/ = 404 这个配置,当你访问 www.123.com/example 时找不到example文件或目录的时候,就会重定向到最后一个参数,就是 =404 ,当然也可以指向到其他的location,等等

这句话引用:

https://blog.51cto.com/13930997/2311716

我操作时遇到的错误:
在我django没有设置其他文件夹作为该IP下的其他url时,django中的urls.py中有自带这样一句:

path('admin/', admin.site.urls),

这是django的登录url,当你输入ip/admin的时候就会跳转到自带的登录界面,如果你不注释掉这个try_files,那么当你输入ip/admin的时候会显示404,同理,你添加的其他url也显示404,比如:

path("cat/", send_email_views.index),

然后我输入ip/cat也是提示404,我个人理解就是:你启用了nginx,那么如果你要添加一些url来跳转页面,那你就得创个文件夹,把相关内容放进去,然后通过location /xxx/{参数}来定位他

所以有两种方法:
1、保留这句话,你要创建多的url那你就得整文件夹,并在default中填写相对应参数:location /xxx/{参数}

2、注释或删掉这句话,这样urls.py中添加的url就可以正常访问了。

我是使用了第二种方法,如果我的理解有错,请dalao指出

配置好后重启nginx服务

配置uwsgi

在你的项目目录下创建一个uwsgi.ini文件(和manage.py同级)。
在这里插入图片描述
写入以下内容:

uwsgi.ini file

[uwsgi]

#http=:80 # 当你不想用nginx,想用uwsgi的时候就用http

socket=127.0.0.1:8000 # 用nginx时:跟nginx配置中uwsgi_pass对应,就是这个参数,和nginx关联了起来

chdir = /usr/local/Python-3.7.0/web_projects/auto_email # 这个路径是你django项目的路径,到manage.py那一级就可以了

module=auto_email.wsgi:application # 项目名.wsgi:application

wsgi-file=auto_email/wsgi.py # 项目名/wsgi.py

processes = 4

threads = 2

master = true

pidfile = uwsgi.pid

thelog = uwsgi.log

然后进入setting.py,找到并输入:
ALLOWED_HOSTS = [‘云服务器ip’, ‘localhost’, ‘127.0.0.1’]

配置好后输入uwsgi --ini uwsgin.ini命令启动uwsgi即可。

访问ip:
在这里插入图片描述
可以访问,且红线部分显示的服务是nginx,说明都配置成功了。

以上就是我个人在部署的时候所遇到的一些问题的解决和理解,自己做个笔记,如果有一些内容能帮到和我一样的萌新那真的太好了。如果有误还请dalao指出,谢谢

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值