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+项目)的更多相关文章

  1. 【云服务器部署】---Linux下安装MySQL

    [云服务器部署]---Linux下安装MySQL 有关如何阿里云ECS建网站,推荐一片文章,我是是通过这篇文章安装tomcat和jdk的 网址:阿里云ECS建网站(建站)超详细全套完整图文教程! 注意 ...

  2. [阿里云部署] Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器

    部署地址:123.56.7.181 Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器 这个标题就比之前的"ECS服务器配置Web环境的全过程及参考资料&qu ...

  3. Python FLask 腾讯云服务器部署

    CentOs 7.0云服务器部署Python Flask 使用: Python 2.7 Flask nginx gunicorn easy_install python-dev yum install ...

  4. django 本地项目部署uwsgi 以及云服务器部署 uwsgi+Nginx+Docker+MySQL主从

    一 .django 本地项目部署uwsgi 1 本地部署项目 uwsgi安装测试 通过uwsgi 进行简单部署 安装uwsgi命令:pip install uwsgi -i http://pypi.d ...

  5. Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器

    Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器 闲着无聊的时候部署了一个Django项目玩,用vm虚拟机部署的. 准备工作 我使用的系统是Ubuntu16 ...

  6. 【云服务器部署】---Linux下安装nginx

    [云服务器部署]---Linux下安装nginx 之前两篇,分别讲了:Linux下安装MySQL  和  springboot项目部署云服务器 nginx安装也是挺简单的.具体步骤如下: 第一步,下载 ...

  7. 在阿里云服务器上配置CentOS+Nginx+Python+Flask环境

    在阿里云服务器上配置CentOS+Nginx+Python+Flask环境 项目运行环境 阿里云(单核CPU, 1G内存, Ubuntu 14.04 x64 带宽1Mbps), 具体购买和ssh连接阿 ...

  8. Install Python+Django+Nginx+UWSGI

    一.软件环境: CentOS6.6_64bit 需要用到的软件: [root@django tools]# ll 总用量 33336 -rw-r--r-- 1 root root 7497785 3月 ...

  9. #阿里云#云服务器部署可道云(KodExplorer)

    前言:在做一些项目的时候,经常有一些文档交流,修改之后的文档在QQ或微信上发来发去,还要下载,很是不爽,有一个挺有用的东西叫做KodExplorer可道云. kodexplorer可道云是目前国内有代 ...

随机推荐

  1. 如何让百度网盘下载速度达60MB/s!

    (软件下载方式在文末) 自从 PanDownload 被处理之后 一直没有超越它的可替代的应用出来 但是最近,竟然有人接盘了!重新制作上线 推出了更加强劲的复活版! 放张图,大家先感受下 60MB/s ...

  2. 开源两个spring api项目

    开源两个spring api项目 转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13762616.html 工作也有五年有余了,中间一直迫于时间或能力没从零开 ...

  3. Mysql中把varchar类型的字段转化为tinyint类型的字段

    因为之前不知道tinyint类型的用法,所以将一些状态属性字段类型设置成了varchar类型,然后用"是"和"否"来判断状态 后来了解到了tinyint,就想试 ...

  4. 一个漂亮的JavaScript“警告”替代品

    下载 一个漂亮的JavaScript"警告"替代品 安装 $ npm安装-节省sweetalert 使用 从"sweetalert"进口swal; 横波测井(& ...

  5. 有感于“U盘型人才”

    先转载一篇互联网上转载比较多的一篇文章,文章是一名职业规划师写的:        上一阶段欠的债,下一阶段总要还,剩男剩女的家里比较着急也是这个道理,该结婚的时候不结婚,生涯任务没完成,必将影响下一段 ...

  6. MeteoInfoLab脚本示例:inpolygon

    inpollygon函数是用来判断带坐标(x/y)的数据是否在某个或者一组多边形(Polygon)中,返回的结果中如果做多边形内则值为1,否则值为-1.下面一个例子演示了利用一个shape文件和inp ...

  7. 快速掌握ES6语法

    常量变量 let and const 先说说常量和变量的概念吧, 常量是说那种进行一次赋值后不会更改的值,比如说游戏账户的 ID, 变量是说赋值后有更改的需求的,比如游戏名,游戏密码. 在之前的 Ja ...

  8. ES异常处理-NoNodeAvailableException

    1.问题描述 ES client客户端能创建,但是在用客户端操作时报:NoNodeAvailableException[None of the configured nodes are availab ...

  9. 【树形DP】BZOJ 3829 Farmcraft

    题目内容 mhy住在一棵有n个点的树的1号结点上,每个结点上都有一个妹子i. mhy从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装zhx牌杀毒软件,第i个妹子安装时间为Ci. ...

  10. Linux系统编程—信号捕捉

    前面我们学习了信号产生的几种方式,而对于信号的处理有如下几种方式: 默认处理方式: 忽略: 捕捉. 信号的捕捉,说白了就是抓到一个信号后,执行我们指定的函数,或者执行我们指定的动作.下面详细介绍两个信 ...