我这里用一个读书分享类python项目,来讲解一下在centos服务器上配置python环境和Flask项目上传部署,前端是web和微信小程序,web端和服务器端的功能在本地基本可以调试完成,但是调试微信小程序的功能时,服务器端必须要正式发布,所以存在服务端程序一边修改一边上传的情况。接下来我就谈谈我在服务器配置、pycharm上传项目到云服务器方法以及项目发布成功过程中遇到的一些问题及其解决方法。

一、配置服务器

首先是服务器配置,我用的是腾讯云服务器,centos7.3

由于centos服务器默认安装的是python2.x版本,python 指向的是python2.x

而我使用的是python3.7.3版本,因此我们要安装python3.7.3版本,并且让python要指向python3.7.3,在安装python3.7.3之前,先备份,备份之前先安装相关包,用于下载编译python3

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

不能忽略相关包

然后备份备份python2.x版本的内容

进入到python的目录:

cd  /usr/bin/

备份python

mv python python.bak

切换到根目录

cd ~

下载python3.7.3版本的源码
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz

解压

tar -xvJf Python-3.7.3.tar.xz

切换进入到相应的目录

cd Python-3.7.3

编译安装

./configure --with-ssl prefix=/usr/local/python3

make && make install

安装完毕,/usr/local/目录下就会有python3了

注意:

我在centos下安装python3.7.3版本时报错ModuleNotFoundError: No module named '_ctypes'的解决办法

(安装python3.7.0以上版本会出现该问题)

3.7版本需要一个新的包libffi-devel,安装此包之后再次进行编译安装即可。

安装libffi-devel命令:

#yum install libffi-devel -y

重新编译安装:
#make install

接着我们可以添加软链到执行目录下/usr/bin

ln -s /usr/local/python3/bin/python3 /usr/bin/python

可以看到软链创建完成

测试安装是否成功

python -v 看看输出的是不是python3的版本

执行python2 -v 看到的就是python2的版本

因为执行yum需要python2版本,所以我们还要修改yum的配置,执行:

vi /usr/bin/yum

把#! /usr/bin/python修改为#! /usr/bin/python2
同理 vi /usr/libexec/urlgrabber-ext-down 文件里面的#! /usr/bin/python 也要修改为#! /usr/bin/python2

这样python3版本就安装完成;同时python2也存在

python -v 版本3

python2 -v 版本2
Python3装完后,默认已经安装了pip,此时只要配置下软链接即可使用pip工具:

上述就是centos系统配置python3.7.3环境的相关内容

二、上传项目

首先在pycharm的命令行行中执行下面命令,生成依赖文件目录requirements.txt

pip3 freeze >requirements.txt

平时我们上传文件到服务器都是采用XFTP,如XShell工具,但是Pycharm带有部署python项目功能,并方便实时调试

首先打开Pycharm,然后点击Tools,再点击下面倒数第五的Deployment,
再点击出现的倒数第四个Configuration,就出现下面的:

先点击左上角的添加按钮,
添加我们的项目(不是代码,是整个项目),然后在connection页面:选择sftp,
再依次填写IP地址,端口号(端口号应该都是22,因为一般服务器的文件上传端口就是22)。
Root apth:是服务器上的存放文件的路径,user name为登录服务器的名称。Auth Type验证方式可以用ssh也可以用户名密码,
如果服务器配置了ssh登录,直接选择自己私钥的路径即可,
不过我这里就使用了用户名加密码登录的方式。
然后点击IP右边的Test SFTP connection来测试是否能正确连接上,如果可以,我们进行下一步:
点击右边的Mappings,我们配置需要上传的文件的本地路径:
一般你只需要点击那个Use this server as default即可,其他的localpath
:是当前文件的路径,一般点了以后就自动填写,deployment path直接/就可以,web path直接/就可以(都是默认的),
然后回到Connect页面,点击确定即可。

最后一步,鼠标单击项目,然后右键单击出现的倒数第五个Deployment,
再选择出现的第一个upload to Thinbook(Thinbook是我的项目名称)单击回车即可出现开始上传的进度条:

等项目上传完毕后,执行下面命令安装依赖包

pip install -r  requirements.txt

到这里,项目上传部署完成,我们一定会迫不及待的去启动代码,刚开始我是在浏览器控制台中操作服务器的,后来我使用XShell5来操作服务器,我这里网站接口是web.py文件,我在centos服务器命令行下执行:python web.py,项目跑起来了。

三、项目部署完成后的事情

这时在浏览器输入服务器的IP地址和端口号(IP地址:端口号)应该就可以运行了,其实不然

flask默认IP用的是127.0.0.1,端口是5000,但是我的外网无法访问,所以我想需要指定IP和端口进行操作,

run(host='x.x.x.x' ,port=5000,debug=True)

直接把外网写入IP处,还是不可以,最后把内网写入,即172开头的网络,然后外网访问成功。

到这里,我们成功访问自己的网站了,是不是很开心,可是突然想着一个问题,怎么通过绑定的域名来访问网站呢,我用了输入域名和域名加端口号两种方式,但是都不行,并且我们在访问网站的时候也没有输入端口号。

其实http默认是80端口,如果我们在端口号设置为80,在访问的时候直接输入IP地址不需要加端口, 非80端口必须要加上端口才能访问, 此时,通过域名也可以正常访问。

最后关闭浏览器控制台,大功告成,可是项目竟然访问不了,这是怎么回事呢
难道关闭Xshell或者浏览器控制台后服务器程序也关闭了?

的确是这样的,要想关闭Xshell或者浏览器控制台后服务器程序一直运行,应该用下面方式运行程序
nohup python web.py &       其中nohup和&中间是运行程序的命令,web.py是我项目的入口文件

到此,项目应该是可以正常运行了