自己写的笔记,记录一下自己部署的过程遇到的困难和对问题的理解,欢迎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指出,谢谢