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