ubuntu上web项目的部署,:uwsgi, uwsgi + nginx, uwsgi+nginx分布式部署

Ubuntu中pip和pip3区别:
pip默认给python2用,pip3默认给Python3使用

django中有runserver可以运行项目为什么还要部署:
因为runserver是一个单线程的服务器,不支持多线程访问

项目部署有三种方式:
1. uwsgi
2. uwsgi + nginx(充当静态资源服务器和反向代理)
3. uwsgi + nginx分布式部署(充当静态资源服务器和负载均衡)

##########################################################################################
项目部署需要在ubuntu服务器上安装的东西:
1. python
2. Django
3. MySQL
4. 项目依赖的库

win需要安装的东西:
xshell, xftp
##########################################################################################
Ubuntu:
可以先更新一下软件包:
sudo apt-get update
1.安装python3:
sudo apt-get instal python3
2.安装pip3:
sudo apt-get install pip3
如果无法定位软件包:
apt install python3-pip
3.安装MySQL数据库:
sudo apt-get install mysql-server
4. 安装Django
sudo apt-get install django==1.11
5.也可以一次性安装所有的依赖库:
进入本机项目开发的环境下,把文件通过xftp传送到ubuntu中:
pip freeze > requirements.txt
到ubunu的环境下:
pip3 install -r requirements.txt

6.uWSGI项目部署,uwsgi是python的一个模块,要确保它的安装
pip3 instal uwsgi
##########################################################################################
4. 在ubuntu上安装xshell和xftp的服务器实现远程访问和文件传输。
ubuntu上实现远程访问:
1.sudo apt-get install  openssh-server
2.cd /etc/ssh
3.sudo vim sshd_config
4.修改:PermitRootLogin yes
5.重启服务 service sshd restart
6.ifconfig  查看IP 远程连接
7.在另一台电脑上可以通过xsheel这样的工具输入ubuntu的IP和设置的root密码即可访问!

ubuntu上实现xftp远程传输
1. sudo apt-get install vsftpd
2.cd /etc/
3.sudo vim vsftpd.conf
4.修改以下(把前面的#删掉):
    write_enable=YES
    local_umask=022
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
5.重启服务
    service vsftpd restart
6.在另一台电脑上可以通过xftp这样的工具输入ubuntu的IP和设置的root密码即可进行文件传输!
##########################################################################################
一:将项目部署在uwsgi服务器上:
首先在ubuntu的主目录下创建一个文件夹用于放置项目:
mkdir work
修改部署文件的文件夹权限chmod 777 work
将本机的整个项目压缩成一个压缩包通过xftp放到work文件夹下
解压zip文件, unzip 压缩包名,检查项目完整性
进入项目的setting文件查看项目连接的是哪种数据库以及数据库名称:more setting.py, 如果是mysql
进入Mysql: mysql -u root -p 连接接入数据库
创建setting文件中指定的数据库:create database 数据库名称 default charset 'utf8';
show databases;
use 数据库名称

同步数据,切换到项目主目录下:
python manage.py makemigrations
python manage.py migrate

如果有初始数据需要先从本机数据库的可视化工具中以SQL格式导出数据,查看的时候只需用inset语句,用于同步完迁移文件生成表后,mysql命令行执行insert语句插入原始数据

查看表,查看插入的原始数据
select * from 表明; 查看所有的插入数据

ubuntu在主项目下创建静态文件夹用于收集静态文件:
mkdir static_file
使用pwd复制绝对路径,在setting文件的静态文件区域添加,让django知道静态文件应该去哪里找:
STATIC_ROOT='将静态文件的绝对路径复制过来'
保存退出之后运行命令收集静态文件:
python manage.py collectstatic

两种项目运行方式:
1.uwsgi --http=本机Ip:port --file=shopping/wsgi.py --static-map=/static=static_file
2.uwsgi --http=本机Ip:port --file=shopping/wsgi.py --static-map=/static=static_file & 表示在后台运行,前台就看不到了
##########################################################################################
但是这样运行太过繁琐,推荐使用的方式:
在项目的主目录下创建usigi.ini文件,通过配置所需要的选项启动uwsig服务:
vim uwsgi.ini 
[uwsgi]
http: 192.168.37.128:8000
chdir = /home/damu/work/shopping(写自己项目主目录)
wsgi-file = shopping/wsgi.py(wsgi文件的路径)
processes = 4 (开启四个进程)
threads = 2(每个进程开启两个线程)
master = true
pidfile=uwsgi.pid
daemonize = uwsgi.log(记录日志)
static-map=/static=static_file
wq! 保存退出
运行:
uwsgi --ini uwsgi.ini
可以去usgi的官方文档查看更详细的配置
##########################################################################################
二:uwsgi + nginx(反向代理)项目部署
使用第一种方式对静态文件支持不是太友好
uwsgi: 用于部署web程序应用
nginx作用: 反向代理,静态文件服务器
使uwsgi服务器停止运行:
uwsgi --stop uwsgi.pid
检查服务是否停止:
ps -ef|grep uwsgi

修改uwsgi.ini文件:
将http注释掉,修改为:
socket: 127.0.0.1:8000
static-map注释掉
wq! 保存退出

安装nginx:
apt-get install nginx
也可以下载nginx源代码(nginx.tar.gz)->解压->make & make install

1.修改nginx配置文件:
/etc/nginx/nginx.conf
添加虚拟服务器配置[server]:
    添加反向代理路由配置[location - uwsgi_pass]
    添加静态文件服务器路由配置[location - alias]
重启nginx
修改nginx配置文件具体步骤:
vim nginx.conf找到http{}这一个模块,配置服务器,直接在模块内部的最后追加:
server{
    listen 80;
    server_name 服务器ip或者域名;
    # 下面是反向代理的配置
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
    }
    # 下面是静态文件的配置
    location / static{
        alias /home/damu/work/shopping/static_file;(前面收集的静态文件的文件夹路径)
    }
}
wq!保存退出
输入nginx启动nginx服务器
ps -ef|grep nginx 查看服务是否启动

然后在地址栏输入服务器Ip不需要加端口就可以直接访问

备注:
nginx对于静态文件的处理优于uwsgi
uwsgi对于动态请求的操作非常优秀,所以用nginx反向代理让uwsgi处理动态请求
也可以把django项目单独部署在nginx服务器上,但是步骤非常繁琐
##########################################################################################

三:uwsgi + nginx 分布式部署
当并发请求数据特别巨大的情况下,第二种部署方式就不一定能满足!
此时就需要分布式项目部署操作
1.单服务器模式[伪分布式]
在一台服务上边用uwsgi部署多个项目或者多个相同的项目,使用nginx做静态资源服务器和负载均衡,负载均衡就是当客户端发来请求,负责请求的分发,发往不同的uwsgi服务器,静态服务器直接去静态文件查询对应的数据,这就是一台服务器的配置模型
先把服务器停下:
uwsgi --stop uswgi.pid

1.uwsgi.ini改造:
将uwsgi的接受请求的方式,修改为http方式[nginx由反向代理的角色->请求分发]
进入主项目下的uwsgi.ini文件:
[uwsgi]
http = 127.0.0.1:8001
...
下面的都一样
wq!保存
启动项目:
uwsgi --ini uwsgi.ini

然后将同一个项目部署多份:
cp -rf shopping shopping2
然后修改shopping2中的uwsgi文件端口改为8002
chdir最后边改成shopping2
wq!保存
启动项目:
uwsgi --ini uwsgi.ini


2.nginx配置
cd /etc/nginx
vim nginx.conf
在http{}中server中配置静态文件服务器
location / static {
    alias /home/damu/work/shopping/static_file;(前面收集的静态文件的文件夹路径)
}

同时在nginx.conf的http中配置负载均衡:
upstream myweb {
    server ip:port;(本地ip127.0.0.1:不同的端口号)
    server ip:port;
    ...
}
http的server中:
location / {
    proxy_pass http://myweb;
}
wq!保存
退出一下nginx
nginx -s quit
再启动nginx
nginx
使用xshell另外开两个链接窗口分别进入两个shopping项目:
tail -f uwsgi.log 命令是实时查看uwsgi.log最后10行的日志更新。

备注:
默认情况下, nginx的负载均衡,请求轮询发给所有的后端服务器
一般会把项目部署多份uwsgi服务器,当有内容需要更新的时候,先进入一个项目的主目录停止一个uwsgi服务器uwsgi --stop uwsgi.pid,这时另外的uwsgi服务器是会正常工作的,更新完内容后再启动这个服务器就会自动恢复与nginx的连接(因为nginx一直在于后台服务器发送心跳连接,实时监控后台服务器的运行情况),以这样的方式依次把所有的项目都更新完成


2.多服务器模式[分布式集群]
模型就是把项目部署到多台服务器上,然后在任何一台服务器上部署nginx都可以,只需部署一个nginx,然后修改nginx的
在uwsgi.ini的http中末尾配置负载均衡:
upstream myweb {
    server ip:port; (ip和端口写各个服务器的IP和端口)
    server ip:port;
    ...
}

百度不同省份都有自己的nginx前端服务器
nginx + uwsgi整个称为web的服务端,nginx在软件架构上称为前端服务器,uwsgi在软件架构上称为后端服务器


##########################################################################################
uwsgi服务器的启动:
uwsgi --ini uwsgi.ini
uwsgi服务器的停止:
uwsgi --stop uwsgi.pid

退出nginx:
nginx -s quit
启动nginx:
nginx
 

猜你喜欢

转载自blog.csdn.net/qq_40994972/article/details/84349518