最新小白详细描述在centos7.5上安装python3并使用Nginx+virtualenv+supervisor来部署tornado项目(整理集合结合实际)系列1

Centos7默认自带了Python2.7版本(选择最小安装可能没有),但是因为项目需要使用Python3.x你可以按照此文的三个方法进行安装.(本文是大致部署好后一段时间才写的,由于中间遇到许多坑导致无法知道有些步骤是否起作用了,细节可能会有一些出入请自行辨别。)

1.安装python3.5

安装必要工具 yum-utils ,它的功能是管理repository及扩展包的工具 (主要是针对repository)

su root 先切换到root用户

yum install yum-utils

使用yum-builddep为Python3构建环境,安装缺失的软件依赖,使用下面的命令会自动处理.

yum-builddep python

完成后下载Python3的源码包(笔者以Python3.5.0为例),Python源码包目录(我放在了/root下面):

https://www.python.org/ftp/python/

wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tar.xz

(这了要先获取/root文件夹权限chmod -R 777 命令)最后一步,编译安装Python3,默认的安装目录是 /usr/local 如果你要改成其他目录可以在编译(make)前使用 configure 命令后面追加参数 “–prefix=/alternative/path” 来完成修改。

chmod -R 777 /root

cd root

tar -xvJf Python-3.5.0.tar.xz

cd Python-3.5.0

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

make && make install

最后创建软链接(可以理解为相当于快捷方式复制到/user/bin/下)

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

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

 

2.Virtualenv来创建虚拟环境

前面也说到了由于项目原因需要的python环境为python35,故运用Virtualenv来创建虚拟环境。

安装Virtualenv之前,先安装pip(安装Pip之前必须要先安装setuptools,安装setuptools之前,必须要安装了Python)

接着在终端输入:yum install -y python-setuptools,之后输入easy_install pip,这样就安装好了pip

Virtualenv安装首先在终端下输入:

pip install virtualenv

virtualenv可以创建一个拥有自己安装目录的环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理python版本和管理python库。 下面是创建python3的虚拟环境

创建ENV目录

cd ~ && mkdir ENV && cd ENV

创建python3虚拟环境

cd ~ && mkdir ENV && cd ENV

virtualenv -p /usr/local/python3/bin/python3.5 python3(一定要按这个来,按原文的来我在python3.5上torando项目启动不了服务)
 

看到类似这样的输出说明虚拟环境我们已经创建成功,下面是使他生效:

[[email protected]_0_10_centos ENV]# source python3/bin/activate
(python3) [[email protected]_0_10_centos ENV]#

注意,在虚拟环境生效之后前面会有(python3)的提示,来指示现在所生效的虚拟环境名。 在创建虚拟环境的时候,如果加上--system-site-packages的话会集成系统现有的包。 这样,虚拟环境就生效了,我们就可以使用pip来安装包而不会和系统的包发生冲突。如下:

pip install tensorflow==1.8.0

pip install tornado

等相关包

这是我们最后运行tornado项目的python环境。接下来关闭可以使用如下命令来退出现在的虚拟环境:

(python3) [[email protected]_0_10_centos ENV]# deactivate
[[email protected]_0_10_centos ENV]#

可以看到,在退出之后前面的(python3)就会消失掉。到这里虚拟环境创建完毕。

到这里大部分引用了https://cloud.tencent.com/developer/article/1342114

以及pip安装引用了http://www.mamicode.com/info-detail-1788904.html

 

3.安装Supervisor

linux下安装方法很简单。

cd /

先退回到根目录,这样配置文件才会出现在etc下

pip install supervisor

安装好supervisor之后,默认是没有生成配置文件的。可以通过以下命令生成配置文件(这一步相当于是给你一个默认的模版)

echo_supervisord_conf > /etc/supervisord.conf

接着输入

mkdir /etc/supervisor

touch /etc/supervisor/basics.conf

chmod -R 777 /etc

在/etc目录下找到supervisord.conf并打开(/etc/supervisord.conf就是这个路径,当然你也可以配置到其它任意位置),拖到最下面改成如下所示。

当然相对应的要在/etc下创建一个supervisor文件夹(名字可以随意选者,不过相对应的要在supervisord.conf中更改)。

接着打开/etc/supervisor/basics.conf进行添加服务代码。

下面以我实际配置的添加的代码为例:

[group:strapp]
programs=strategy

[program:strategy]
command=/root/ENV/python3/bin/python /home/xlc-centos7-pc/test/ts.py --port=80%(process_num)02d
directory=/home/xlc-centos7-pc/test
process_name = %(program_name)s%(process_num)d
autorestart=false
redirect_stderr=true
stdout_logfile=/home/xlc-centos7-pc/var/log/tornado.log
stdout_logfile_maxbytes=500MB
stdout_logfile_backups=50
stderr_logfile=/home/xlc-centos7-pc/var/log/tornado.log
loglevel=info
numprocs = 4
numprocs_start = 1

/root/ENV/python3/bin/python时python路径(虚拟环境),/home/xlc-centos7-pc/test/ts.py是运行web服务的目标文件,port=80%(process_num)02d是端口配合下面的numprocs = 4和numprocs_start = 1,表示8001,8002,8003,8004,当然你还可以直接part=8001,那么如果你要开启四个服务就要写四遍。还要注意的是autorestart这参数,如果值是true的话,你会发现这些服务无论都关不掉了,kill 之后还会自动重起进程。这就是supervisor最强大的地方,我为了关掉这些服务(因为当时发现一个问题想要看看日志,却发现无论怎么重起服务新加的代码都不生效,重新配置启动却一直报告说这些端口被占用),最后将autorestart改成false才将服务停止。所以在调试的时候最好先设置为false,部署的时候设置为true防止服务挂掉。

接着我使用了下面的代码在终端启动了配置文件,这要服务就起来了(说到这里之前的代码中可能是需要root用户下才可以使用的,而有些文件夹的需要权限才可操作,使用chmod -R 777 目录(文件)或chmod +x 文件 就是给执行权限的意思

supervisord -c /etc/supervisord.conf 

我的项目代码打开了127.0.0.1:8001,可以看到如下图。

当然如果你想要重新配置或者配置有了更新可以使用以下代码

supervisorctl shutdown

supervisord -c /etc/supervisord.conf

unlink/tmp/supervisor.sock

supervisord -c /etc/supervisord.conf

如果仅仅是要更新配置则用以下代码即可(不过使用前必须启动supervisor(使用过supervisord -c /etc/supervisord.conf))

supervisorctl update

先对应的还有

# 停止某一个进程,program_name 为 [program:x] 里的 x
supervisorctl stop program_name
# 启动某个进程
supervisorctl start program_name
# 重启某个进程
supervisorctl restart program_name
# 结束所有属于名为 groupworker 这个分组的进程 (start,restart 同理)
supervisorctl stop groupworker:
# 结束 groupworker:name1 这个进程 (start,restart 同理)
supervisorctl stop groupworker:name1
# 停止全部进程,注:start、restart、stop 都不会载入最新的配置文件
supervisorctl stop all
# 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
supervisorctl reload
# 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
supervisorctl update

参考:https://www.cnblogs.com/zhaoding/p/6257363.html

https://blog.csdn.net/wr166/article/details/79051725

 

猜你喜欢

转载自blog.csdn.net/qq_36401512/article/details/84237063
0条评论
添加一条新回复