云服务器部署Python项目(nginx+uwsgi+mysql+项目)
python项目部署到云服务器
关注公众号“轻松学编程”了解更多。
一、硬件准备
云服务器,系统ubuntu_16_04 。
注意:要在安全组中开放Http的80端口。
二、软件准备
1、两个工具
XShell:控制远程Linux主机,SSH工具 ;
Xftp :上传代码到远程主机;
下载地址一:
https://www.netsarang.com/download/down_form.html?code=622&downloadType=0&licenseType=1
下载地址二:
https://github.com/liangdongchang/tools
注:以下shell命令都在xshell软件中编写
打开xshell软件,新建会话,连接服务器ip就可以远程操控云服务器。
2、软件源
a.软件源更新
apt clean
apt update
b.(可跳过)如果有些模块找不到,可切换软件源
# 在修改source.list前,最好先备份一份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.old
#打开
sudo vim /etc/apt/source.list
#然后可以去找清华或豆瓣的源,覆盖原文件
3、Python-Web开发环境
a.建虚拟环境
#创建文件夹
mkdir apps
cd apps
mkdir mysite
cd mysite
#.mysitevenv表示文件夹是隐藏的,可通过命令ls -a来查看
mkdir .mysitevenv
cd .mysitevenv
#导入venv
apt install python3-venv
#安装venv,命名为mysitevenv
sudo python3 -m venv mysitevenv
b.安装pip3
#安装
sudo apt install python3-pip
#对pip3进行升级,也可以不升
sudo pip3 install --upgrade pip
#如果遇到这个错误,可以按照以下方法解决
pip 10.0.0 BUG
Traceback (most recent call last): File "/usr/bin/pip3", line 9,
in <module>
from pip import main
ImportError: cannot import name main
解决方案:
修改: /usr/bin/pip3
打开:vim /usr/bin/pip3
把
from pip import main
if __name__ == '__main__':
sys.exit(main())
改为:
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
c.导出项目中关联的模块
在终端输入以下命令,生成模块关联文件
pip3 freeze > requirements.txt
生成requirements.txt。
d.通过xftp把requirements.txt文件上传到服务器中。
e.在虚拟环境中导入项目需要的模块
#进入虚拟环境
cd mysitevenv
#启动虚拟环境
source ./mysitevenv/bin/activate
#找到requirements.txt的路径
find / -name requirements.txt
#导入模块
pip3 install -r /root/apps/mysite/requirements.txt
#查看是否导入成功
pip3 freeze
注意:如果项目中有xadmin(站点管理模块),不能直接通过pip3 install xadmin来安装,如果安装了先pip3 uninstall xadmin卸载,到https://github.com/sshwsfc/xadmin下载安装包,然后把安装包拖到云服务器中的当前目录下,直接通过
pip3 install xadmin-master.zip
安装。
原因:pip3 install xadmin安装的是python2.0版本的xadmin,在python3.6版本中不适用。
4、服务器
a.安装Nginx
apt install nginx
如果安装成功
使用http://tool.chinaz.com/port/
站长工具测试80端口,应该是开启的状态,否则要到服务器安全组里添加配置。
b.安装uwsgi
启动虚拟环境,然后再安装
pip3 install uwsgi
pip install uwsgi出错
plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory
首先安装python3环境
apt install python3-dev
然后在虚拟环境中
pip install uwsgi
5、数据库
a.安装MySQL
apt install mysql-server
apt install mysql-client
apt install libmysqlclient-dev
ubuntu系统下MySQL开启远程连接
可参考:https://blog.csdn.net/xsj_blog/article/details/52753088
b.安装redis缓存数据库
apt install redis-server
#server和client都会安装上
三、项目导入
1、通过xFtp把项目导入云服务器中
2、数据迁移
a.先在MySQL数据库中新建一个对应项目的数据库。
b.在应用中的migrations中删除以前的表模块
c.在项目根目录中运行
python3 manage.py makemigrations
生成数据表sql模块
执行数据迁移
python3 manage.py migrate
注意:如果出现错误,有可能是MySQL数据库中的的数据库与settings.py中设置的数据库名称不一致导致。
四、uwsgi服务器
1、Django配置
在Django项目中添加uwsgi.ini文件
文件内容为:
[uwsgi]
# 使用nginx连接时 使用
;socket=0.0.0.0:8000
# 直接作为web服务器使用
http=127.0.0.1:8000
# 配置工程目录
chdir=/root/apps/mysite
# 配置项目的wsgi目录。相对于工程目录
wsgi-file=MySites/wsgi.py
virtualenv = /root/apps/mysite/.mysitevenv/mysitevenv
#配置进程,线程信息,最好与云服务器的一致
processes=1
threads=1
;启用多线程
enable-threads=True
;允许主进程开子进程
master=True
;进程日志
pidfile=uwsgi.pid
;业务日志
daemonize=uwsgi.log
注意:如果uwsgi.ini用不了有可能是编码问题,python3支持utf-8,如果用记事本编辑,可能编码是其它编码格式,这可能会用不了uwsgi.ini文件。
2、Flask配置
在flask项目中添加uwsgi.ini文件
[uwsgi]
socket = 127.0.0.1:5000
wsgi-file = manage.py
callable = app
3、运行和停止
运行命令:
在项目目录下
uwsgi --ini uwsgi.ini
停止运行:
方式1:
uwsgi --stop uwsgi.ini
- 实测中进程并未停止
方式2:
#寻找uwsgi主进程pid
ps -ef | grep uwsgi
#杀死进程
kill -9 1932
注意:修改了代码或配置,都要杀死和重启uwsgi服务器
五、Nginx服务器
1、关于
1.1简介
Nginx是由伊戈尔.塞索耶夫开发的,于2004年10月4日公开源码,以类BSD许可证形式发布
Nginx是一款轻量级、高性能的HTTP/反向代理服务器
也是一个IMAP/POP3/SMTP服务器
其特点是占用内存少,并发能力强,在同类型的网页服务器中表现优秀
Nginx因它的稳定性,丰富的功能,示例配置文件和低系统资源的消耗而闻名
中国大陆使用Nginx的网站
淘宝,京东,腾讯,百度,新浪,网易…
1.2 为什么使用 Nginx
作为We服务器:相比Apache,Nginx使用资源更少,支持更多的并发连接,体现更高的效率,使Nginx倍受欢迎,能够支持高达50000个并发连接数的响应
作为负载均衡服务器:Nginx既可以在内部直接支持Redis和PHP,也可以支持作为HTTP代理服务器对外进行服务,Nginx使用C编写,不论是系统资源开销还是CPU使用效率都处理的非常优秀
Nginx安装非常简单,配置文件非常简洁,Bug非常少:Nginx启动非常容易,并且几乎可以做到7 * 24小时不间断运行,即使运行数个月也不需要重新启动
1.3安装
apt install nginx
1.4参考
官网
http://nginx.org/
中文资料
http://tengine.taobao.org/book/
静态资源服务
开发者服务器默认集成了静态资源服务
关闭后静态资源服务失效(只能处理动态代码)
静态代码交给Nginx实现动静分离
2、配置
2.1 寻找配置文件所在的位置
find / -name nginx.conf
2.2 默认使用的配置文件
/etc/nginx/nginx.conf
2.3 自定义路径无法定位uwsgi_params
如果要给uwsgi做反向代理,就不能使用自定义位置的配置文件
2.4 /etc/init/nginx.conf
后台启动的相关配置(使用较少)
2.5 测试配置是否有效
nginx -t -c 配置文件的位置
2.6 配置样本
找到要修改的default文件
vi /etc/nginx/sites-enabled/default
在里面修改server配置
server {
# 监听在80端口
listen 80;
# 主机地址
server_name xxx.xxx.xxx.xxx;
# 如果有域名,可以使用域名代替主机地址
# server_name www.xxx.com xxx.com;
# 接下来的都是路由派发
# 访问路由就是主机地址时(反向代理)
location / {
#root /apps/mysite;
#index apps/templates/main/index.html;
# 反向代理监听在127.0.0.1:8000位置的uwsgi服务器
# 前提是uwsgi已经运行并监听在8000端口
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
# 访问路由就是指定的app时(反向代理)
location /mysite {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5001;
}
# 访问静态资源(正向代理)
location /static {
#root html/blog;
# 静态资源目录
alias /apps/mysite/static;
}
# 访问指定文件夹下的任意资源(正向代理)
location /fresh{
alias /apps/mysite/fresh;
# 默认访问某个页面
index index.html;
}
#使用富文本下的静态资源
location /tiny_mce {
alias /root/apps/mysite/.mysitevenv/mysitevenv/lib/python3.5/site-packages/tinymce/static/tiny_mce;
}
}
注意:
Django静态资源收集:
由于第三方的静态资源路径不统一,所以使用Nginx访问静态资源时需要特殊配置:
a.首先在settings.py中设置一个存放所有静态资源的目录;
STATIC_ROOT = '/root/apps/static/'
b.在linux中的目录/root/apps/下新建一个static目录
mkdiv /static
c.在项目根目录下运行
python manage.py collectstatic
d.在/etc/nginx/sites-enabled/default文件中的server里设置
# 访问静态资源(正向代理)
location /static {
# 静态资源目录
alias /root/apps/static/;
}
3、Nginx指令
# 启动
nginx
注意:如果要为uwsgi做反向代理,要提前启动uwsgi
#使用指定的配置文件启动
nginx -c 配置文件位置
注意:只有正向代理才能自定义配置文件位置,如果配置文件不在/etc/nginx/下,就无法定位uwsgi_params。如果要为uwsgi做反向代理,则配置文件位置最好使用默认位置/etc/nginx/nginx.conf
#测试配置文件是否有效
nginx -t -c 配置文件的位置
#暴力停止
nginx -s stop
#正常退出
nginx -s quit
#重启(配置文件已经被修改)
nginx -s reload
4、使用systemctl去操作Nginx
# 启动
systemctl start nginx
# 停止
systemctl stop nginx
#重启
systemctl restart nginx
#查看状态
systemctl status nginx
六、常用shell命令
#查看端口使用情况
netstat -atpl | grep 6379
#编辑器打开
vim uwsgi.int
#启动uwsgi服务器
uwsgi --ini uwsgi.ini
#查看进程
ps -ef | grep uwsgi
#杀进程
kill -9 1932
#导出设置
pip3 freeze > requirements.txt
#解包
tar -zxvf nginx-1.14.0.tar.gz
#全局查找
find / nginx
sudo find / -name nginx.conf
#查看状态
systemctl status nginx
#停止
systemctl stop nginx
#启动
systemctl start nginx
#重启
systemctl restart nginx
#回到上级目录
cd -
#更新源
apt update
#删除
rm -rf migrations
#修改字段
alter table axf_goods modify onSale bool default 1
vim中
i 进入编辑
esc退出
:wq 保存
:q!退出
:set nu 打开行号
G 到末尾
#使用配置文件启动
nginx -c /root/code.nginx.conf
#测试配置环境是否能用
nginx -t -c /root/code.nginx.conf
#启动虚拟环境
source path activate
#退出虚拟环境
deactivate
linux python3.5更新到3.6
https://blog.csdn.net/shenqiongniujiahui/article/details/50494172
https://www.linuxidc.com/Linux/2017-07/145453.htm
ubuntu 16版默认使用的是python3.5
#连接远程地址
ssh -l root ip地址
#更新
apt update
apt upgrade
#更改源 使用国内的源快些
#虚拟环境管理工具
pip3 install virtualenvwr apper
#查看隐藏文件夹
ls -a
#修改环境变量
vi ~/.bashrc
#刷新变量
source ~/.bashrc
#查找文件
whereis 文件
#查看
more 文件
#改文件名
mv 文件名 文件名2
#查看当前目录路径
pwd
####七、效果图
注意:
uwsgi中配置listen=1024时,启动uwsgi时可能会报错:
django + uwsgi + nginx 日志Listen queue size is greater than the system max net.core.somaxconn (128).
解决方法:
修改系统参数
/proc/sys/net/ipv4/tcp_max_syn_backlog 原来2048 改为8192
/proc/sys/net/core/somaxconn 原来128 改为262144
后记
【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。
也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!
公众号
关注我,我们一起成长~~
云服务器部署Python项目(nginx+uwsgi+mysql+项目)的更多相关文章
- 【云服务器部署】---Linux下安装MySQL
[云服务器部署]---Linux下安装MySQL 有关如何阿里云ECS建网站,推荐一片文章,我是是通过这篇文章安装tomcat和jdk的 网址:阿里云ECS建网站(建站)超详细全套完整图文教程! 注意 ...
- [阿里云部署] Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器
部署地址:123.56.7.181 Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器 这个标题就比之前的"ECS服务器配置Web环境的全过程及参考资料&qu ...
- Python FLask 腾讯云服务器部署
CentOs 7.0云服务器部署Python Flask 使用: Python 2.7 Flask nginx gunicorn easy_install python-dev yum install ...
- django 本地项目部署uwsgi 以及云服务器部署 uwsgi+Nginx+Docker+MySQL主从
一 .django 本地项目部署uwsgi 1 本地部署项目 uwsgi安装测试 通过uwsgi 进行简单部署 安装uwsgi命令:pip install uwsgi -i http://pypi.d ...
- Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器
Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器 闲着无聊的时候部署了一个Django项目玩,用vm虚拟机部署的. 准备工作 我使用的系统是Ubuntu16 ...
- 【云服务器部署】---Linux下安装nginx
[云服务器部署]---Linux下安装nginx 之前两篇,分别讲了:Linux下安装MySQL 和 springboot项目部署云服务器 nginx安装也是挺简单的.具体步骤如下: 第一步,下载 ...
- 在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境 项目运行环境 阿里云(单核CPU, 1G内存, Ubuntu 14.04 x64 带宽1Mbps), 具体购买和ssh连接阿 ...
- Install Python+Django+Nginx+UWSGI
一.软件环境: CentOS6.6_64bit 需要用到的软件: [root@django tools]# ll 总用量 33336 -rw-r--r-- 1 root root 7497785 3月 ...
- #阿里云#云服务器部署可道云(KodExplorer)
前言:在做一些项目的时候,经常有一些文档交流,修改之后的文档在QQ或微信上发来发去,还要下载,很是不爽,有一个挺有用的东西叫做KodExplorer可道云. kodexplorer可道云是目前国内有代 ...
随机推荐
- 如何让百度网盘下载速度达60MB/s!
(软件下载方式在文末) 自从 PanDownload 被处理之后 一直没有超越它的可替代的应用出来 但是最近,竟然有人接盘了!重新制作上线 推出了更加强劲的复活版! 放张图,大家先感受下 60MB/s ...
- 开源两个spring api项目
开源两个spring api项目 转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13762616.html 工作也有五年有余了,中间一直迫于时间或能力没从零开 ...
- Mysql中把varchar类型的字段转化为tinyint类型的字段
因为之前不知道tinyint类型的用法,所以将一些状态属性字段类型设置成了varchar类型,然后用"是"和"否"来判断状态 后来了解到了tinyint,就想试 ...
- 一个漂亮的JavaScript“警告”替代品
下载 一个漂亮的JavaScript"警告"替代品 安装 $ npm安装-节省sweetalert 使用 从"sweetalert"进口swal; 横波测井(& ...
- 有感于“U盘型人才”
先转载一篇互联网上转载比较多的一篇文章,文章是一名职业规划师写的: 上一阶段欠的债,下一阶段总要还,剩男剩女的家里比较着急也是这个道理,该结婚的时候不结婚,生涯任务没完成,必将影响下一段 ...
- MeteoInfoLab脚本示例:inpolygon
inpollygon函数是用来判断带坐标(x/y)的数据是否在某个或者一组多边形(Polygon)中,返回的结果中如果做多边形内则值为1,否则值为-1.下面一个例子演示了利用一个shape文件和inp ...
- 快速掌握ES6语法
常量变量 let and const 先说说常量和变量的概念吧, 常量是说那种进行一次赋值后不会更改的值,比如说游戏账户的 ID, 变量是说赋值后有更改的需求的,比如游戏名,游戏密码. 在之前的 Ja ...
- ES异常处理-NoNodeAvailableException
1.问题描述 ES client客户端能创建,但是在用客户端操作时报:NoNodeAvailableException[None of the configured nodes are availab ...
- 【树形DP】BZOJ 3829 Farmcraft
题目内容 mhy住在一棵有n个点的树的1号结点上,每个结点上都有一个妹子i. mhy从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装zhx牌杀毒软件,第i个妹子安装时间为Ci. ...
- Linux系统编程—信号捕捉
前面我们学习了信号产生的几种方式,而对于信号的处理有如下几种方式: 默认处理方式: 忽略: 捕捉. 信号的捕捉,说白了就是抓到一个信号后,执行我们指定的函数,或者执行我们指定的动作.下面详细介绍两个信 ...