• nginx+uwsgi+django部署(前后端不分离)


     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-8

    pip和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进程

    在浏览器中访问: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 

  • 相关阅读:
    Python-函数
    【4天快速入门Python数据挖掘之第2天】Numpy——高效的运算工具
    解决 net core 3.x 跨域问题
    AQS初探
    GEE入门篇|图像处理(二):在Earth Engine中进行波段计算
    静态语言和动态语言的区别
    Kamiya丨Kamiya艾美捷抗-C-Myc,多克隆说明书
    G.711语音编解码器详解
    【运行时的类型识别】
    ssh免密登录
  • 原文地址:https://blog.csdn.net/weixin_46371752/article/details/126009748