tornado nginx部署 nginx部署django项目_tornado nginx部署

 1、nginx功能:动静分离、负载均衡、反向代理

 2、uwsgi:是实现wsgi协议的web服务器,用来转发nginx请求到web application(如django项目)

django项目叫BBS14,上传到服务器的/home/lhz/my_project/online_project中

nginx 安装到:/etc/nginx中

虚拟环境,在/home/lhz/.virtualenvs/python39_django

项目部署前的准备

一、Mysql数据库准备

1、生成.sql文件,在cmd下执行如下命令

>mysqldump -h 127.0.0.1 -uroot -pHuawei@123 oasystem > f:oasystem.sql
                                IP                                            待导数据库     导出的位置和名字

2、将生成的oasystem.sql文件上传到服务器上,假设上传到/opt/mysql_data/中

3、在服务器的mysql中到入项目的数据库
#先创建项目的数据库
>create database oasystem;
#导入项目的数据库数据
>use oasystem;
> source /opt/mysql_data/oasystem.sql
#看到很多ok,再查询一下数据库表是否存在
>show tables;
二、django项目准备
1、修改debug和允许启动的ip
#进入settings.py文件
DEBUG=False
ALLOWED_HOSTS = ['*']
debug设置为False后,django项目就不会处理静态文件了,报错时也不会显示出错误的问题了。
allowed_hosts是设置允许使用哪个ip来启动django项目的,这里最好先改成'*',允许所有。
2、收集静态文件
static文件夹
#静态文件收集
 STATIC_URL = '/static/'
 #STATICFILES_DIRS=[#os.path.join(BASE_DIR,'static')]
 #添加上这个
 STATIC_ROOT = os.path.join(BASE_DIR, 'static')media文件夹设置,一般在项目搭建时就已经设置好的。
#settings配置文件
 MEDIA_URL='/media/'
 MEDIA_ROOT=os.path.join(BASE_DIR,'media') #到总路由文件下(项目同名目录下的url.py文件):添加
 from BBS14 import settings
 from django.conf.urls.static import static
 urlpatterns+=static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)执行静态文件收集命令:【在terminal下执行】
python manage.py collectstatic
3、生成依赖文件
使用的是uwsgi部署,先在测试环境中下载uwsgi,生成依赖文件时就有该包了
pip install uwsgi
使用pip来生成依赖文件
pip freeze > requirements.txt 
使用pipreps来生成依赖文件
#先安装pipreps
 pip install pipreqs
 #导出依赖包,生成依赖文件,默认生成requirements.txt 
 pipreqs ./ --encoding=utf-8pip和pipreps生成的依赖文件的区别:
1、pip是将环境中的所有包都写上
2、pipreps是将项目依赖的包写上
4、将django项目上传到服务器中
在项目根目录下创建uwsgi.ini文件,这个是uwsgi的配置文件
假设上传到/home/liuhaizhang/my_project/online_project

三、服务器上准备好虚拟环境

1、先下载项目对应的python解释器
$~ sudo apt update  #更新软件源
 $~ sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
 $~ wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz     #官网下载压缩包
 $~ sudo tar -xvzf Python-3.9.0.tgz  #解压
 $~ cd Python-3.9.0   #进入python文件夹
 $~ ./configure --with-ssl  prefix=/opt/python39   #指定python安装位置
 $~ make  #编译
 $~ sudo make install #安装2、搭建虚拟环境
#下载virtualenv依赖
 $ > sudo apt install virtualenv #virtualenv不是官方自带的包,需要pip安装
  $ >pip3 install virtualenv
  $> pip3 install virtualenvwrapper #到home目录下创建 .virtualenv文件夹
  $ >sudo mkdir $HOME/.virtualenv #打开 ~/.bashrc文件,并添加如下
 #指定存放虚拟环境的路
 $>  vi ~/.bashrc 添加下面两条:虚拟环境存放的路径
 export WORKON_HOME=$HOME/.virtualenvs
 source ~/.local/bin/virtualenvwrapper.sh #运行
 source ~/.bashrc
#找环境中virtualenvwrapper.sh所在位置]
 sudo  find / -name virtualenvwrapper.sh #我的在:/home/lhz/.local/bin/virtualenvwrapper.sh
3、新建一个虚拟环境给新项目使用
指定python解释器来创建虚拟环境:
 $> mkvirtualenv -p /opt/python39/python3.9 python39_django #指定解释器成创建虚拟环境,虚拟环境的名字
4、给虚拟环境安装依赖:我的django项目名是BBS14
$> cd /home/lhz/my_project/online_project/BBS14
$> workon python39_django    #这一步必须有,切换到虚拟环境中,后面再给虚拟环境安装依赖
$> pip install -r requirement.txt

四、安装nginx

1、更新源
 $> sudo apt update
 2、安装nginx
 $> sudo apt install nginx
 3、查看版本
 $> sudo nginx -v
 nginx常用命令
 前提:进入到nginx安装位置(ubuntu18默认在/etc/nginx/)
  #nginx的配置文件,在/etc/nginx/
 nginx.cong

项目部署-配置

一、nginx配置

进入到/ect/nginx中,可以看到nginx.conf文件,该文件是nginx 的配置文件
vi   /etc/nginx/nginx.conf
配置
#user  nobody;
 worker_processes  1;
 #pid        logs/nginx.pid;events {
     worker_connections  1024;
 }http {
     client_header_buffer_size 16k;
 large_client_header_buffers 4 64k;
     include       mime.types;
     default_type  application/octet-stream;
     keepalive_timeout  65;
     upstream myoasystem{
         #负载均衡,名字随便起,是给proxy_pass使用
         #server 127.0.0.1:8888 weight=1;
         #server 127.0.0.1:8080 weight=2; #权重
         server  192.168.137.5:8080 weight=2;
     }
     
     server {
         listen       80;
    #  server_name  localhost;
         server_name 192.168.137.5;
       #访问ip:80端口时,会转向proxy_pass中的服务器
  location / {
            include    /etc/nginx/uwsgi_params;
           uwsgi_pass myoasystem;        }
 #静态资源的访问
  location /static {
             alias /home/lhz/my_object/online_object/BBS14/static;
         }         #用户的资源的访问,若没有配置该文件夹,可以不用设置
 location /media {
             alias /home/lhz/my_object/online_object/BBS14/media;
         }         location = /50x.html {
            root   html;
         }    }
 }
nginx命令:启动nginx
#启动
 $> sudo nginx#重启
 $> sudo nginx -s reload#关闭
 $> sudo nginx -s stop#查看nginx进程
 $> ps aux|grep nginx

二、uwsgi配置

进入到项目根目录中

cd /home/lhz/my_object/online_object/BBS14/

修改uwsgi.ini文件:sudo vi  uwsgi.ini

[uwsgi]
#uwsgi监听0.0.0.0:8080 nginx发送的请求,项目以8080端口启动
 socket=192.168.137.5:8080#http=0.0.0.0:8888
#配置项目根路径,项目的所在目录,改成linux电脑中的路径
chdir=/home/lhz/my_object/online_object/BBS14
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名
wsgi-file=/home/lhz/my_object/online_object/BBS14/BBS14/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log
#如果使用的是虚拟环境,需要配置
#virtualenv = ''
virtualenv = /home/lhz/.virtualenvs/python39_django
uwsgi命令:启动uwsgi
uwsgi  --ini uwsgi.ini    #启动
uwsgi --stop  uwsgi.pid   #停止
uwsgi  --reload  uwsgi.pid  #重启
ps aux|grep  uwsgi   #查看uwsgi进程

易错注意:在启动uwsgi.ini配置文件前,要先切换到该项目所需的虚拟环境中。

在浏览器中访问:192.168.137.5:80  ,访问你的项目

部署时遇到的问题:

1、502 bad getway    : 先查看你的uwsgi配置有没有问题,再去项目根目录下查看uwsgi.log文件,里面有问题描述。

2、400 request  : 这个是由于我的settings配置文件中,没有allow_hosts=['127.0.0.1'] ,没有允许192.168.137.5,改成ALLOW_HOSTS=['*'],允许所有就可以了。

3、开放8080端口:

#查看防火墙状态
sudo ufw status
#开启防火墙
sudo ufw enable   
#开放8080端口
sudo ufw allow 8080
#开放端口需要重启防火墙生效
  sudo ufw reload