Centos系统Python环境搭建和项目部署

目录

  • 一、Python

    • 1. 源安装 Python3
    • 2. SCL安装 Python3
    • 3. 虚拟环境venv
    • 4. 安装Flask
    • 5. 安装gunicorn
  • 二、安装Nginx
    • 1. 安装Nginx
    • 2. 重要指令
  • 三、设置 Nginx server
    • 1. 创建目录结构
    • 2. 配置server
    • 3. Flask + Nginx + Gunicorn
  • 四、Supervisor
    • 1. 安装supervisor
    • 2. 自定义配置示例
    • 3. 用到的指令
    • 4. 开机启动
  • 五、Flask+Gunicorn+Nginx+Supervisord
    • 1. 目录结构
    • 2. 主程序
    • 3. 定义启动项
    • 4. 定义supervisord
    • 5. 配置nginx
    • 6. 命令
  • 更优方案
    • 重新定义supervisord
    • 命令
  • 参考

一、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 <command>
$ scl enable python36 bash

3. 虚拟环境venv

$ mkdir myapp
$ cd myapp
$ scl enable rh-python36 bash
$ python -m venv env
$ source env/bin/activate
(env) [[email protected]_0_6_centos myapp]$ 

4. 安装Flask

hello.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'
(env) [[email protected]_0_6_centos myapp]$pip install --upgrade pip
(env) [[email protected]_0_6_centos myapp]$pip install Flask
(env) [[email protected]_0_6_centos myapp]$ export FLASK_APP=hello
(env) [[email protected]_0_6_centos myapp]$ flask run
(env) [[email protected]_0_6_centos myapp]$ deactivate

5. 安装gunicorn

(env) [[email protected]_0_6_centos myapp]$ pip3 install gunicorn
(env) [[email protected]_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
  1. 新建文件
mkdir -p /var/www/example.com/public_html
  1. 创建index.html
sudo nano /var/www/example.com/public_html/index.html

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

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>案例测试</title>
  </head>
  <body>
    <h1>成功部署</h1>
  </body>
</html>
  1. 修改用户组
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;
    }
}
  1. 测试配置
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. 重启
sudo systemctl restart nginx

3. Flask + Nginx + Gunicorn

  1. 配置服务器
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;
       }   

}
  1. 启动

$ 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
  1. 查看进程
# 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. 自定义配置示例

  1. 测试程序结构
`-- 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
  1. 配置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
  1. 查看状态
[[email protected]_0_6_centos ~]# supervisorctl status
long_script                      RUNNING   pid 16862, uptime 0:00:51
[[email protected]_0_6_centos ~]# supervisorctl stop long_script
long_script: stopped
[[email protected]_0_6_centos ~]# supervisorctl status
long_script                      STOPPED   Aug 02 11:22 PM
  1. 滚动查看结果
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 '<h1>hello word</h1>'

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) [[email protected]_0_6_centos bin]# supervisorctl reload
Restarted supervisord
(env) [[email protected]_0_6_centos bin]# supervisorctl stop hello
hello: stopped
(env) [[email protected]_0_6_centos bin]# supervisorctl start hello
hello: started

参考

[1]. Deploying a Flask Site Using NGINX Gunicorn, Supervisor and Virtualenv on Ubuntu

[2]. centos7安装supervisor详细教程

[3]. python web 部署:nginx + gunicorn + supervisor + flask 部署笔记

原文地址:https://www.cnblogs.com/xuwei1/p/11294352.html

时间: 2024-10-10 06:12:50

Centos系统Python环境搭建和项目部署的相关文章

Linux环境搭建及项目部署

一. VMWare安装图解 1.点击下一步 2.接受条款,下一步 3.选择安装目录,不建议有中文目录和空格目录.下一步 4.下一步 5.这两个选项根据可以爱好习惯选择,下一步 6.安装 7.完成 9.在第一次启动该软件时,需要输入注册码(也可自行到百度上找): 注册码:FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA 二. Centos安装图解 装好后运行 1.点击创建新的虚拟机 2.选择典型安装,下一步 3.选择centos的映像文件,下一步 4.设置虚拟机的名字,并设置centos

OA环境搭建及项目部署

创建虚拟机Windows Server 2003 安装准备:Jdk安装包,Tomcat服务器安装,Mysql安装包,oa数据开发包 将下图文件共享至需要搭建OA环境的操作系统中 一.    JDK的安装 1.双击桌面jdk安装图标 点击我接受条款 更改JDK安装路径,在C盘根目录下建立java文件夹,点击下一步 2.再次点击下一步,出现如下安装页面,点击下一步 3.语言无需更改,点击下一步 4.继续点击下一步,安装完成. 5.为了在任何命令下都能对源文件进行编译,需要设置环境变量 6.点击 "新

centos安装python环境搭建

安装python 安装easy_install 下载源码 wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz 解压 tar -xf Python-2.7.10.tgz cd Python-2.7.10.tgz 编译-安装 ./configure make make install 安装easy_install wget http://peak.telecommunity.com/dist/ez_setup.py pyth

Python环境搭建(windows)

Python环境搭建(windows) Python简介 Python(英国发音:/?pa?θ?n/ 美国发音:/?pa?θɑ?n/),是一种面向对象.直译式计算机编程语言,具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块. 与Scheme.Ruby.Perl.Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理内存使用.

Linux环境下快速项目部署

由于Linux和Java一样开源,所以现在在服务器的部署上基本上都是采用Linux平台作为服务器,然后部署项目!在开发项目的过程中,绝大部分程序猿还是使用最经典的windows操作系统,虽然Linux也有桌面化的系统,对于国人来说,还是不太习惯,并且国内的软件绝大部分都不支持Linux平台,所以在使用的频率那是相当的少! 在开发中,开发环境中编译使用等一系列通过后,还不能说功能已经ok,因为环境一旦变化,出现的问题的可能是自己没有考虑的,所以程序猿都知道真实的环境才是最可靠的,有时候出现的问题,

学习环境搭建&lt;一&gt;批量部署,无人值守,部署salt master/minion

%新人自学的,肯定有不对的地方,指出来大家共同学习% 准备: rhel-server-6.4-x86_64-dvd.iso salt.tar.gz 第一步: 准备一台服务器,用以管理其他服务器 system---→       rhel-server-6.4-x86_64-dvd.iso ip---→                20.10.10.111 hostname----→  admin.black.com 配置好yum源 mkdir /iso mount /dev/cdrom /is

Centos 基础开发环境搭建之Maven私服nexus

1. 软件 a) 下载Nexus 地址:http://www.sonatype.org/downloads/nexus-2.1.2-bundle.tar.gz b) 如无特殊说明,本文档操作用户为nexus c) nexus默认的管理员用户名密码是:admin/admin123 2. 安装 a) 解压 1 $ tar zxvf nexus-2.1.2-bundle.tar.gz b) 移动到其他目录 1 $ mv nexus-2.1.2 /home/nexus/nexus c) 设置为系统自启动

Python学习--Python 环境搭建

Python环境搭建 Python是跨平台的编程语言,可应用于Windows.Linux.Mac OS X.你可以通过终端窗口输入"python"命令来查看本地是否安装了Python已经安装的Python的版本. Python下载 你可以到Python的官网下载你想要的版本.(Python官网:http://www.python.org/)你也可以下载Python官网文档.(Python文档下载地址:www.python.org/doc/) Python安装 Python可以被安装在不

转载自php100中文网 centos下lamp 环境搭建

学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP.WAMP.MAMP等.这里我介绍一下LAMP环境的搭建,即Linux.Apache.MySQL.PHP环境. 一.首先安装操作系统 操作系统:centos6.3 IP地址:192.168.146.129 网关: DNS: 操作系统安装步骤,此处不在给出截图. 备注:服务器系统采用最小化安装,安装一下GCC编译工具和一个桌面即可.如下图所示: <a href="http://www.php100.com/u