在nginx+uwsgi的部署中发现部署的过程,会有不少时候出现502的错误,或者直接程序死了,到如今,学习一个nginx+gunicorn的部署,html
咱们拿到新的服务器对的时候,应该先更新下服务器:python
$ sudo yum update
其次咱们应该建立一个用户,用来部署,在Centos下建立用户:mysql
$ adduser jummy #这里是输入用户名,jummy能够换成本身喜欢的用户名
$ passwd jummy # 这里是输入密码
---------受权--------------
$ chmod -v u+w /etc/sudoers
$ vim /etc/sudoers
咱们在这个sudoers
的文件下咱们找到root那行:nginx
# /etc/sudoers
···
root ALL=(ALL) ALL
jummy ALL=(ALL) ALL # 这是新添加的用户须要本身写
保存退出后,应该收回这个权限chmod -v u-w /etc/sudoers
git
$ su jummy
$ sudo cat /etc/sudoers
$ 输入密码,这里照输入,由于密码看不见的,因此你看到是空白,但其实输入对确认就能够了
这样咱们就新建立用户完毕,能够去配置环境了redis
我是在centos7下的,装了python3.6,和虚拟环境,虚拟环境的做用想必学py的人都知道他的用处,若是不会能够在 Centos下安装pyenv和virtualenvwrappersql
$ mkdir workspace
$ pip instlall virtualenv
$ virtualenv typeidea
$ source typeidea/bin/activate
咱们先建一个文件夹来装咱们的虚拟环境,而后在建立一个名为typeidea
的虚拟环境(你的名字能够跟我不同),而后咱们进入到咱们的环境当中django
把咱们写的代码放到服务器,大家能够选择用FileZilla传输过去,也能够用Git,这里为了装B一下,我仍是用Git
去传输,若是对Git
不熟悉能够看Git的使用操做vim
$ cd
$ mkdir typeidea
$ cd typeidea
$ git clone 你的仓库地址
通常咱们的项目在上传到服务器时,会打包一份requirements.txt
的文件,这是用于加载咱们在开发阶段所用到包,以及版本,为了不在部署的时候版本不同,而致使的问题,咱们一般会先生成个txt
的文件,因此在你的开发环境中,进入虚拟环境,在你的项目根目录执行以下:centos
$ pip freeze > requirements.txt
生成完成后,能够去看我写的Git
操做,把项目上传到GitHub上,或者本身搭建的Git
服务器,在切到服务器中Git
下来,进入到服务器的虚拟环境,去到requirements.txt
的路径下
$ pip install -r requirements.txt
系统会自动帮你安装依赖
这两个是咱们用的最多的插件,mysql
的安装在个人简书上会有一个详细的安装过程,但那是5.6的若是是其余的,请本身去问问搜索引擎,这里不详细介绍,mysql5.6安装,下面是redis的安装以下
$ wget http://download.redis.io/releases/redis-4.0.9.tar.gz
$ tar xzf redis-4.0.9.tar.gz
$ cd redis-4.0.9
$ make
若是其余配置须要本身去设置先,暂时个人博客是用了这两个插件
这里咱们能够先直接启动下项目python manage.py runserver
,看下是否能正常启动仍是说少了安装包什么的,若是少了,能够经过pip
去安装一波,启动成功后Ctrl+c
结束掉。在settings.py
中咱们先看看有没有设置静态文件收集在哪里的语句,若是没,就加上
$ vim settings.py
ALLOWED_HOSTS = ['*'] # 能够配置为你的域名或者公网IP,写*是匹配所有均可以
···
THEME = 'themes/default'
STATIC_URL = '/static/'
STATIC_ROOT = '../static_files/'
···
只要加入STATIC_ROOT
这个就好,后面的路径请本身选择,我这里是放在了上一层目录当中,由于个人项目路径是,一个typeidea
,里面才是django
的项目,咱们收集静态文件
$ cd typeidea
$ python manage.py collectstatic
到这里咱们就能发现咱们的上一层目录已经多了静态资源的文件夹
# 在虚拟环境下
$ pip install gunicorn
根据gunicorn
的文档咱们试下用gunicorn
启动下项目,这里的typeidea
换成本身的项目名。
$ gunicorn typeidea.wsgi:application -w 4 -b 0.0.0.0:8000
这里简单说明一下,-w
的参数是指启动多少个线程,我这里能够启动4个线程,这个根据本身的服务器大小,已经项目需求去启动数目,通常4个线程够用了。
-b
的参数是指明了启动的端口,默认是127.0.0.1:8000
,这里我是指明了监听所有端口,这个能够跟启动django
的项目端口同样,这样咱们就能发现咱们的线程启动了,也不会有错误,咱们把这个gunicorn扔到后台去跑,或者进阶去用supervisord.conf
去管理,这里的typeidea
换成本身的项目名。
$ nohup gunicorn typeidea.wsgi:application -w 4 -b 0.0.0.0:8000 &
nginx
的 功能能够说很强大,能作负载均衡,端口的分发,对静态资源的处理等等,咱们先来一波下载nginx
$ sudo yum install nginx
下载好后,咱们直接运行命令启动咱们的nginx
$ sudo service nginx start
这样就能看到咱们熟悉的欢迎页面了,咱们先来看看nginx的配置在去写nginx
$ cd /etc/nginx
$ sudo cat nginx.conf
这个时候咱们就能看到在配置中有这样的一句话,
include /etc/nginx/conf.d/*.conf;
这个意思是他启动的时候会去读取conf.d
下的配置文件,也就是咱们能够在这个 /etc/nginx/con.d
目录下去写配置文件,操做以下
$ cd /etc/nginx/conf.d
$ sudo touch nginx.conf
$ sudo vim nginx.conf
配置文件的内容以下:
# /etc/nginx/conf.d/nginx.conf
server {
listen 80;
root /home/jummy/workspace/typeidea-env/; #配置虚拟环境的目录
access_log /home/jummy/workspace/typeidea/log/access_log; #配置这个log文件夹
error_log /home/jummy/workspace/typeidea/log/error_log; #配置这个log文件夹
server_name www.jummy.top; # 配置域名
#处理静态文件 /favicon.ico:
location /favicon.ico {
alias /home/jummy/typeidea/static_files/favicon.ico; # 若是没,不用配置
}
#处理django的静态文件
location /static/ {
alias /home/jummy/typeidea/static_files/; # 收集静态资源的路径
}
#处理请求转发8000接口 若是你的gunicorn是其余端口,请本身改
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这样咱们的nginx配置文件就能写完了,可是若是你重启的话,会发现一个问题,那就是权限,你会发现你启动的文件,于你的配置文件权限不同,这会致使你没法启动,或者是其余问题,咱们返回以前的/etc/nginx
的目录之下,把下面的用户名改成本身的用户名字,就能够了:
# /etc/nginx/nginx.conf
···
user jummy
···
固然写完nginx
的时候咱们能够进入到本身写的配置路径下面,执行nginx -t
看下所运行的状态,或者第几行发生到错误。而后咱们就能够启动nginx,在浏览器输入本身的IP或者域名就成功
ps:1.若是发现启动仍是没法访问,首先检查一下防火墙,防火墙要开80端口,不会开能够看这编Linux上防火墙的设置
2.去本身的服务器厂家的控制台,查看本身是否放通了安全组,通常要放通80,若是要调试能够顺便把8000端口也放通,固然取决于本身实际需求
3.检查本身的nginx
的静态路径,反响代理的端口和IP,以及文件的权限问题
4.以上机器是在阿里云,腾讯云的Centos7.2的服务器上测试,均部署成功,若有问题,请留言,谢谢大佬们
若是有问题,能够在下方留言,或者发邮件到a929440925@gmail.com,我会把我所知的帮大家解答,若有很差的地方,也能够留言说说,谢谢你们,转载请说明出处,谢谢
若是想要用Supervisrcrd
去管理,能够看这编文章Supervisrcrd