nginx+gunicorn

在nginx+uwsgi的部署中发现部署的过程,会有不少时候出现502的错误,或者直接程序死了,到如今,学习一个nginx+gunicorn的部署,html

0.建立用户更新系统

咱们拿到新的服务器对的时候,应该先更新下服务器:python

  1. $ sudo yum update

其次咱们应该建立一个用户,用来部署,在Centos下建立用户:mysql

  1. $ adduser jummy #这里是输入用户名,jummy能够换成本身喜欢的用户名
  2. $ passwd jummy # 这里是输入密码
  3. ---------受权--------------
  4. $ chmod -v u+w /etc/sudoers
  5. $ vim /etc/sudoers

咱们在这个sudoers的文件下咱们找到root那行:nginx

  1. # /etc/sudoers
  2. ···
  3. root ALL=(ALL) ALL
  4. jummy ALL=(ALL) ALL # 这是新添加的用户须要本身写

保存退出后,应该收回这个权限chmod -v u-w /etc/sudoersgit

  1. $ su jummy
  2. $ sudo cat /etc/sudoers
  3. $ 输入密码,这里照输入,由于密码看不见的,因此你看到是空白,但其实输入对确认就能够了

这样咱们就新建立用户完毕,能够去配置环境了redis

1.环境

我是在centos7下的,装了python3.6,和虚拟环境,虚拟环境的做用想必学py的人都知道他的用处,若是不会能够在 Centos下安装pyenv和virtualenvwrappersql

  1. $ mkdir workspace
  2. $ pip instlall virtualenv
  3. $ virtualenv typeidea
  4. $ source typeidea/bin/activate

咱们先建一个文件夹来装咱们的虚拟环境,而后在建立一个名为typeidea的虚拟环境(你的名字能够跟我不同),而后咱们进入到咱们的环境当中django

2.Git项目到服务器上

把咱们写的代码放到服务器,大家能够选择用FileZilla传输过去,也能够用Git,这里为了装B一下,我仍是用Git去传输,若是对Git不熟悉能够看Git的使用操做vim

  1. $ cd
  2. $ mkdir typeidea
  3. $ cd typeidea
  4. $ git clone 你的仓库地址
3.下载项目依赖包

通常咱们的项目在上传到服务器时,会打包一份requirements.txt的文件,这是用于加载咱们在开发阶段所用到包,以及版本,为了不在部署的时候版本不同,而致使的问题,咱们一般会先生成个txt的文件,因此在你的开发环境中,进入虚拟环境,在你的项目根目录执行以下:centos

  1. $ pip freeze > requirements.txt

生成完成后,能够去看我写的Git操做,把项目上传到GitHub上,或者本身搭建的Git服务器,在切到服务器中Git下来,进入到服务器的虚拟环境,去到requirements.txt的路径下

  1. $ pip install -r requirements.txt

系统会自动帮你安装依赖

4.下载mysql,redis(这里看本身需求而选择)

这两个是咱们用的最多的插件,mysql的安装在个人简书上会有一个详细的安装过程,但那是5.6的若是是其余的,请本身去问问搜索引擎,这里不详细介绍,mysql5.6安装,下面是redis的安装以下

  1. $ wget http://download.redis.io/releases/redis-4.0.9.tar.gz
  2. $ tar xzf redis-4.0.9.tar.gz
  3. $ cd redis-4.0.9
  4. $ make

若是其余配置须要本身去设置先,暂时个人博客是用了这两个插件

5.启动项目,收集静态,配置settings

这里咱们能够先直接启动下项目python manage.py runserver,看下是否能正常启动仍是说少了安装包什么的,若是少了,能够经过pip去安装一波,启动成功后Ctrl+c结束掉。在settings.py中咱们先看看有没有设置静态文件收集在哪里的语句,若是没,就加上

  1. $ vim settings.py
  2. ALLOWED_HOSTS = ['*'] # 能够配置为你的域名或者公网IP,写*是匹配所有均可以
  3. ···
  4. THEME = 'themes/default'
  5. STATIC_URL = '/static/'
  6. STATIC_ROOT = '../static_files/'
  7. ···

只要加入STATIC_ROOT这个就好,后面的路径请本身选择,我这里是放在了上一层目录当中,由于个人项目路径是,一个typeidea,里面才是django的项目,咱们收集静态文件

  1. $ cd typeidea
  2. $ python manage.py collectstatic

到这里咱们就能发现咱们的上一层目录已经多了静态资源的文件夹

6.启动gunicorn
  1. # 在虚拟环境下
  2. $ pip install gunicorn

根据gunicorn的文档咱们试下用gunicorn启动下项目,这里的typeidea换成本身的项目名。

  1. $ 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换成本身的项目名。

  1. $ nohup gunicorn typeidea.wsgi:application -w 4 -b 0.0.0.0:8000 &
7.nginx的配置

nginx的 功能能够说很强大,能作负载均衡,端口的分发,对静态资源的处理等等,咱们先来一波下载nginx

  1. $ sudo yum install nginx

下载好后,咱们直接运行命令启动咱们的nginx

  1. $ sudo service nginx start

这样就能看到咱们熟悉的欢迎页面了,咱们先来看看nginx的配置在去写nginx

  1. $ cd /etc/nginx
  2. $ sudo cat nginx.conf

这个时候咱们就能看到在配置中有这样的一句话,

  1. include /etc/nginx/conf.d/*.conf;

这个意思是他启动的时候会去读取conf.d下的配置文件,也就是咱们能够在这个 /etc/nginx/con.d目录下去写配置文件,操做以下

  1. $ cd /etc/nginx/conf.d
  2. $ sudo touch nginx.conf
  3. $ sudo vim nginx.conf

配置文件的内容以下:

  1. # /etc/nginx/conf.d/nginx.conf
  2. server {
  3. listen 80;
  4. root /home/jummy/workspace/typeidea-env/; #配置虚拟环境的目录
  5. access_log /home/jummy/workspace/typeidea/log/access_log; #配置这个log文件夹
  6. error_log /home/jummy/workspace/typeidea/log/error_log; #配置这个log文件夹
  7. server_name www.jummy.top; # 配置域名
  8. #处理静态文件 /favicon.ico:
  9. location /favicon.ico {
  10. alias /home/jummy/typeidea/static_files/favicon.ico; # 若是没,不用配置
  11. }
  12. #处理django的静态文件
  13. location /static/ {
  14. alias /home/jummy/typeidea/static_files/; # 收集静态资源的路径
  15. }
  16. #处理请求转发8000接口 若是你的gunicorn是其余端口,请本身改
  17. location / {
  18. proxy_pass http://127.0.0.1:8000;
  19. proxy_set_header X-Real-IP $remote_addr;
  20. proxy_set_header Host $host;
  21. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  22. }
  23. }

这样咱们的nginx配置文件就能写完了,可是若是你重启的话,会发现一个问题,那就是权限,你会发现你启动的文件,于你的配置文件权限不同,这会致使你没法启动,或者是其余问题,咱们返回以前的/etc/nginx的目录之下,把下面的用户名改成本身的用户名字,就能够了:

  1. # /etc/nginx/nginx.conf
  2. ···
  3. user jummy
  4. ···

固然写完nginx的时候咱们能够进入到本身写的配置路径下面,执行nginx -t看下所运行的状态,或者第几行发生到错误。而后咱们就能够启动nginx,在浏览器输入本身的IP或者域名就成功


ps:1.若是发现启动仍是没法访问,首先检查一下防火墙,防火墙要开80端口,不会开能够看这编Linux上防火墙的设置

2.去本身的服务器厂家的控制台,查看本身是否放通了安全组,通常要放通80,若是要调试能够顺便把8000端口也放通,固然取决于本身实际需求

3.检查本身的nginx的静态路径,反响代理的端口和IP,以及文件的权限问题

4.以上机器是在阿里云,腾讯云的Centos7.2的服务器上测试,均部署成功,若有问题,请留言,谢谢大佬们

8.问题

若是有问题,能够在下方留言,或者发邮件到a929440925@gmail.com,我会把我所知的帮大家解答,若有很差的地方,也能够留言说说,谢谢你们,转载请说明出处,谢谢

9.更新了Supervisrcrd管理

若是想要用Supervisrcrd去管理,能够看这编文章Supervisrcrd

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息