阿里云ubuntu16.04ECS+Nginx+uwsgi部署django项目

1.下载nginx:sudo apt-get install nginx
2.打开浏览器访问公网ip,如果显示nginx欢迎界面即为安装成功
3.启动项目所在的虚拟环境:source bin/activate
ubuntu16.04ecs有点坑,默认python命令启动的是python2,下载uwsgi时会产生很多问题	
问题1:缺少setuptools,全局安装:pip3 install setuptools

问题2:plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory,原因是python命令默认
启动python2,一些东西无法用python2下载,需要用python3,所以干脆把ubuntu的python命令改为默认启动python3

参考链接:https://blog.csdn.net/luhu124541/article/details/81607137

4.在虚拟环境中下载uwsgi:pip3 install uwsgi -I --no-cache-dir
5.假设我的django项目名为mysite,则在mysite/目录下新建一个conf文件夹,然后再conf文件夹下新建两个文件,一个是mysite_nginx.conf文件,用于配置nginx,另外一个是uwsgi.ini,用于配置uwsgi
6.将django配置修改成生产环境:
 DEBUG = False
 ALLOWED_HOST = ['xx.xx.xx.xx', 'www.lxxxxx.xin']	#该配置项配置的是允许访问本网站的IP,“*”表示允许所有IP,如果项目部署到服务器上了,就填服务器的公网IP,如果部署的时候用了nginx,则该设置项不起作用
#开发模式用STATICFILES_DIRS,部署模式时用STATIC_ROOT
mysite/mysite/settings.py中设置STATIC_ROOT=os.path.join(BASE_DIR, 'static')
然后运行python manage.py collectstatic迁移项目的静态文件,

7.nginx配置:在mysite_nginx.conf中内容如下:
server {
    listen 8000;	#浏览器中输入的访问端口,需在阿里云上配置对应的安全组。
    server_name xx.xx.xx.xx;	#你的服务器公网ip
    charset utf-8;

    client_max_body_size 75M;
     
    location /static {
    	#django项目的静态文件所在路径,需提前在settings.py中配置好
        alias /home/project/Mysite/mysite/static;	
    }
    location / {
        uwsgi_pass 127.0.0.1:8002;	#与uwsgi对接的端口,需与uwsgi.ini中的socket配置相同。
        include /etc/nginx/uwsgi_params;
    }
}
8.将mysite_nginx.conf软连接到/etc/nginx/sites-enabled/路径,但是我的Nginx14.2没有sites-enabled文件,

 - vim /etc/nginx/nginx.conf
 - 在    include /etc/nginx/conf.d/*.conf;语句下面一行添加:	include /etc/nginx/sites-enabled/*.conf;
 - 在/etc/nginx/目录下新建sites-enabled文件夹
 - 将项目的nginx配置文件软链接到sites-enabled,用下面这条命令行
 - sudo ln -s /home/project/Mysite/mysite/conf/mysite_nginx.conf /etc/nginx/sites-enabled/

9.配置uwsgi.ini:
 [uwsgi]
chdir = /home/project/Mysite/mysite
module = mysite.wsgi:application
socket = 127.0.0.1:8002
master = true
processes = 4

daemonize = /home/project/Mysite/mysite/run.log
disable-logging = true
vacuum = true

10.启动nginx:/etc/init.d/nginx start
启动uwsgi:在mysite/conf/目录下:uwsgi uwsgi.ini
--------------------------------------------------------------
一、网站部署注意事项:
1、如果项目已经部署上线,需要修改nginx.conf的配置,那么需改之后需要
/etc/init.d/nginx restart或者/etc/init.d/nginx reload 才会生效(如果在
nginx.conf中的修改不影响uwsgi,则不需要重新uwsgi uwsg.ini),如果是項目第一次
上线,先用nohup ..... &命令在后台运行该项目,然后配置好conf文件,软链接到
/etc/nginx/site-enabled/目录下,最后再/etc/init.d/nginx reload即可将配置的conf文件
加载,在浏览器访问对应的域名就能显示网站内容。
restart是先stop再start,reload是重新加载配置文件,并检查conf文件的语法,
如果错误会重新使用上一次运行成功的配置,所以已近上线的系统建议使用reload
2、uwsgi uwsgi.ini命令是在虚拟环境中启动的,如果修改了Django项目之后,需要先
在虚拟环境下杀掉uwsgi,先查看uwsgi.ini中配置的uwsgi所占用的端口号,然后lsof -i:port会显示
占用该端口号的uwsgi进程号pid,然后再kill -9 pid 就可以杀掉之前的uwsgi,再uwsgi uwsgi.ini之后刚才的修改才会生效。
3、如果nginx启动了,但是浏览器显示502 Bad GateWay,那么可能就是在非虚拟环境中,把所
有uwsgi进程给杀掉了(uwsgi相当于网关),用source bin/activate 激活虚拟环境,然后虚拟环境下运行uwsgi uwsgi.ini即可
4、浏览器显示Internal Server Error,可能是先在非虚拟环境中把所有uwsgi进程给杀掉了,然后
又在非虚拟环境中启动了uwsgi uwsgi.ini, 解决办法:先在非虚拟环境中killall -9 uwsgi,此时浏
览器会显示Bad GateWay,然后再激活虚拟环境,uwsgi uwsgi.ini启动即可
5、如果采用独立部署+nginx部署的方式,启动nginx之后(nginx中proxy_pass中
配置的端口需要与beego的conf/app.conf文件中httpport配置的端口相同),在后台
不挂断运行beego:nohup bee run &;如果有错误,项目根目录下自动生成的nohub.out文件中
会有错误信息。
6、nginx二级域名配置时,不同项目都市listen 80, server_name + 不同项目对应的域名,
然后proxy_pass转发到项目接受的端口
7、nginx配置server_name时,如果想通过abc.com访问,那么配置为:
server_name abc.com;注意,(.abc.com可以匹配xx.abc.com)。
8、beego出现502 bad gateway,可能是app.conf中的httpport配置项与nginx的conf配置
文件中的转发端口不对应,也有可能是nginx启动了但是项目没正常启动。

二、域名和备案常识
1、主域名可以不用来访问网站,只用分级域名访问网站;
2、主域名备案后,二级域名不需要备案,二级域名访问的网站可以与主域名备案信息不同
3、不论用主域名还是二级域名来访问网站,都需要在网站底部加上备案号,并链接到工信部[http://www.beian.miit.gov.cn]
4、国内服务器,主域名需要备案,主域名备案后,二级域名不需要备案;国外的服务器主域名不需要备案。
5、带www的二级域名访问的网站内容需要与主域名保持一致,其他二级域名可以直接使用。
---------------------------------------------------------------

11.在浏览器中输入:<公网ip:8000>+django项目中的url就可访问了
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页