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

易错注意:在启动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 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值