centos python环境路径_Centos系统Python环境搭建和项目部署

本文详细介绍了如何在CentOS系统上搭建Python3环境,包括源安装与SCL安装方法,以及如何设置虚拟环境、安装Flask和gunicorn。接着讲解了Nginx的安装和配置,最后讨论了使用Supervisord进行进程管理,并展示了Flask应用与Nginx、gunicorn、Supervisord的集成部署步骤。
摘要由CSDN通过智能技术生成

一、Python

1. 源安装 Python3

# 开发者工具

$ sudo yum -y install yum-utils

$ sudo yum-builddep python

# 下载解压

$ wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz

$ tar -zxf Python-3.6.8.tgz

$ cd Python-3.6.8/

# 编译安装

$ ./configure

$ make

$ sudo make install

$ python3 --version

# 设置默认版本

$ alias python='/usr/local/bin/python3.6'

2. SCL安装 Python3

# 1. 激活SCL

$ sudo yum install centos-release-scl

# 2.安装python3

$ sudo yum install rh-python36

# 3.使用python3

$ python --version

Python 2.7.5

$ scl enable rh-python36 bash

$ python --version

Python 3.6.3

# 4. 安装开发工具

$ sudo yum groupinstall 'Development Tools'

注意:

此处设定python3版本,如果重新打开会话,会恢复默认的python2.7

设置默认

$ scl enable python36

$ scl enable python36 bash

3. 虚拟环境venv

$ mkdir myapp

$ cd myapp

$ scl enable rh-python36 bash

$ python -m venv env

$ source env/bin/activate

(env) [xw@VM_0_6_centos myapp]$

4. 安装Flask

hello.py

from flask import Flask

app = Flask(__name__)

@app.route('/')

def hello_world():

return 'Hello World!'

(env) [xw@VM_0_6_centos myapp]$pip install --upgrade pip

(env) [xw@VM_0_6_centos myapp]$pip install Flask

(env) [xw@VM_0_6_centos myapp]$ export FLASK_APP=hello

(env) [xw@VM_0_6_centos myapp]$ flask run

(env) [xw@VM_0_6_centos myapp]$ deactivate

5. 安装gunicorn

(env) [root@VM_0_6_centos myapp]$ pip3 install gunicorn

(env) [root@VM_0_6_centos myapp]# gunicorn hello:app

二、安装Nginx

1. 安装Nginx

# 1. 安装Nginx

yum -y install nginx

systemctl enable nginx

systemctl start nginx

systemctl status nginx

# 2. 释放端口防火墙HTTP (`80`) and HTTPS (`443`) ports.

firewall-cmd --permanent --zone=public --add-service=http

firewall-cmd --permanent --zone=public --add-service=https

sudo firewall-cmd --reload

# 3. 浏览器`http://YOUR_IP`

2. 重要指令

# 开启服务

sudo systemctl start nginx·#无输出

sudo service start nginx #发行版命令

# 开机启动

sudo systemctl enable nginx

# 关闭服务

sudo systemctl stop nginx

sudo service stop nginx

# 重启

sudo systemctl restart nginx

sudo service restart nginx

# 重新加载

更改 Nginx 的配置时,都需要重新加载或重新启动 Nginx

sudo systemctl reload nginx

sudo service reload nginx

# 测试语法错误

sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

# 查看nginx状态

sudo systemctl status nginx

# 查看nginx版本

sudo nginx -v

# 输出 Nginx 版本以及配置选项

sudo nginx -V

指令小结:

sudo systemctl stop nginx

sudo systemctl start nginx

sudo systemctl restart nginx

sudo systemctl reload nginx

sudo systemctl disable nginx

sudo systemctl enable nginx

三、设置 Nginx server

1. 创建目录结构

/var/www/

├── example.com

│ └── public_html

├── example2.com

│ └── public_html

├── example3.com

│ └── public_html

新建文件

mkdir -p /var/www/example.com/public_html

创建index.html

sudo nano /var/www/example.com/public_html/index.html

用nano文本编辑器粘贴/var/www/example.com/public_html/index.html

案例测试

成功部署

修改用户组

sudo chown -R nginx: /var/www/example.com

2. 配置server

Nginx 服务器块配置文件文件必须以.conf结尾,并存储在目录/etc/nginx/conf.d中

1.新建example.com.conf

/etc/nginx/conf.d/example.com.conf

server {

listen 80;

listen [::]:80;

root /var/www/example.com/public_html;

index index.html;

server_name example.com www.example.com;

access_log /var/log/nginx/example.com.access.log;

error_log /var/log/nginx/example.com.error.log;

location / {

try_files $uri $uri/ =404;

}

}

测试配置

sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

重启

sudo systemctl restart nginx

3. Flask + Nginx + Gunicorn

配置服务器

server {

listen 80;

server_name 49.234.220.252;

access_log /var/log/nginx/hello/access.log;

error_log /var/log/nginx/hello/error.log;

location / {

proxy_pass http://127.0.0.1:8000;

proxy_set_header Host $host;

proxy_set_header X-Real-Ip $remote_addr;

}

}

启动

$ cd myapp/

$ source env/bin/activate

# 创建日志文件夹

(env) $ mkdir -p /var/log/nginx/hello/

# 修改所有者

(env) $ sudo chown -R nginx: /var/log/nginx/hello

(env) $ sudo nginx -t

(env) $ systemctl reload nginx

(env) $ gunicorn hello:app

查看进程

# pstree -ap|grep gunicorn

四、Supervisor

进程管理工具,方便的监听、启动、停止、重启一个或多个进程。

supervisor:要安装的软件的名称。

supervisord:装好supervisor软件后,supervisord用于启动supervisor服务。

supervisorctl:用于管理supervisor配置文件中program。

1. 安装supervisor

yum -y install supervisor

# 生成2个文件

`-- /etc/

|-- ...

|-- supervisord.conf # 配置文件

`-- supervisord.d/ # 配置文件夹

修改supervisord.conf

[unix_http_server]

file=/var/run/supervisor.sock

[supervisord]

logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)

logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)

logfile_backups=10 ; (num of main logfile rotation backups;default 10)

loglevel=info ; (log level;default info; others: debug,warn,trace)

pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)

nodaemon=false ; (start in foreground if true;default false)

minfds=1024 ; (min. avail startup file descriptors;default 1024)

minprocs=200 ; (min. avail process descriptors;default 200)

[rpcinterface:supervisor]

supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]

serverurl=unix:///var/run/supervisor.sock

[include]

files = supervisord.d/*.ini

2. 自定义配置示例

测试程序结构

`-- dosupervisor/

|-- log/ # 日志文件夹

| |-- long.err.log #错误

| `-- long.out.log #输出

`-- long.sh # 调用程序

# long.sh

#!/bin/bash

while true

do

# Echo current date to stdout

echo `date`

# Echo 'error!' to stderr

echo 'error!' >&2

sleep 1

done

配置long_script.conf

# /etc/supervisord.d/long_script.conf

[program:long_script]

command=/root/dosupervisor/long.sh

autostart=true

autorestart=true

stderr_logfile=/root/dosupervisor/log/long.err.log

stdout_logfile=/root/dosupervisor/log/long.out.log

查看状态

[root@VM_0_6_centos ~]# supervisorctl status

long_script RUNNING pid 16862, uptime 0:00:51

[root@VM_0_6_centos ~]# supervisorctl stop long_script

long_script: stopped

[root@VM_0_6_centos ~]# supervisorctl status

long_script STOPPED Aug 02 11:22 PM

滚动查看结果

tail -f long.out.log

3. 用到的指令

yum -y remove supervisor #卸载

supervisord --version

# 初始化配置

echo_supervisord_conf > /etc/supervisord.conf

supervisord : 启动supervisor

supervisorctl reload :修改完配置文件后重新启动supervisor

supervisorctl status :查看supervisor监管的进程状态

supervisorctl start 进程名 :启动XXX进程

supervisorctl stop 进程名 :停止XXX进程

supervisorctl stop all:停止全部进程。

supervisorctl update:根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启

# 看进程服务

ps -ef | grep supervisord

#启动supervisor,-c制定让其读取的配置文件

supervisord -c /etc/supervisord.d/long_script.conf

#关闭supervisor

supervisorctl shutdown

#重新加载supervisor配置文件,并重启superivisor

supervisorctl reload

# 设置开机启动

systemctl enable supervisord

4. 开机启动

systemctl enable supervisord

systemctl is-enabled supervisord

systemctl stop supervisord

systemctl start supervisord

systemctl status supervisord

systemctl reload supervisord

systemctl restart supervisord

systemctl restart supervisord

supervisorctl reload

五、Flask+Gunicorn+Nginx+Supervisord

1. 目录结构

$ tree -I "env|__pycache*|*.pyc" -FCL 3

.

|-- hello.py

`-- rungun.sh*

2. 主程序

# hello.py

$ cat hello.py

from flask import Flask

app = Flask(__name__)

@app.route('/')

def hello():

return '

hello word

'

if __name__ == '__main__':

app.run(host='0.0.0.0',debug=True)

3. 定义启动项

$ cat rungun.sh

#!/bin/bash

cd /root/myapp

source env/bin/activate

gunicorn hello:app

4. 定义supervisord

$ cat /etc/supervisord.d/hello.ini

[program:hello]

command=/root/myapp/rungun.sh

autostart=true

autorestart=true

stdout_logfile=/var/log/supervisor/hello/hello_out.log

stderr_logfile=/var/log/supervisor/hello/hello_err.log

5. 配置nginx

$ cat /etc/nginx/conf.d/hello.conf

server {

listen 80;

server_name 49.234.220.252;

access_log /var/log/nginx/hello/access.log;

error_log /var/log/nginx/hello/error.log;

location / {

proxy_pass http://127.0.0.1:8000;

proxy_set_header Host $host;

proxy_set_header X-Real-Ip $remote_addr;

}

}

6. 命令

systemctl restart supervisord

supervisorctl reload

更优方案

上述方法只能启动,无法停止或者重启

重新定义supervisord

$ cat /etc/supervisord.d/hello.ini

[program:hello]

command=/root/myapp/env/bin/gunicorn hello:app

directory=/root/myapp

autostart=true

autorestart=true

stdout_logfile=/var/log/supervisor/hello/hello_out.log

stderr_logfile=/var/log/supervisor/hello/hello_err.log

命令

(env) [root@VM_0_6_centos bin]# supervisorctl reload

Restarted supervisord

(env) [root@VM_0_6_centos bin]# supervisorctl stop hello

hello: stopped

(env) [root@VM_0_6_centos bin]# supervisorctl start hello

hello: started

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值