如何在linux上部署flask项目 Python3.7 + virtualenv + uwsgi + git + mysql-5.6.45 + nginx

源码编译安装所需要的环境

yum install gcc

yum install -y zlib zlib-devel

yum install -y openssl openssl-devel

安装python3.7.3环境

cd /opt             #进入opt目录

mkdir subpack         # 创建一个安装包存放的目录(目录名随便起)

cd subpack      # 进入到创建的这个目录下

wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz    # 下载python

xz -d Python-3.7.3.tar.xz          # 解压

tar -xf Python-3.7.3.tar            # 解压

cd Python-3.7.3       # 进入安装包目录

./configure --prefix=/opt/python37/      # 编译第一步,并指定python的安装路径

make        # 编译第二步

make install     # 编辑第三步

echo $PATH     # 取出当前环境变量

vim /etc/profile       # 编辑全局配置文件

PATH=”/opt/python37/bin: {$PATH}”     # 把当前PATH写入到文件最后一行,并保存退出

source /etc/profile          # 读取配置文件,加载变量生效

python3           # 进入python3编辑

exit()        # 退出python编辑

安装Virtualenv虚拟环境,进入虚拟环境后再安装uwsgi 和项目依赖包

pip3 install --upgrade pip                # 更新pip

pip3 install virtualenv     #  安装virtualenv

cd /opt    # 进入/opt

virtualenv venv       # 创建名为venv的虚拟环境

source venv/bin/activate        # 进入venv的虚拟环境

pip3 install uwsgi            # 安装uwsgi

pip3 install /项目目录下/requirements.txt            # 安装项目的依赖包

deactivate       # 退出当前虚拟环境

安装git

yum install git         # 安装的是旧版本的git

安装mysql

​​​​​​​rpm -qa|grep -i mysql     # 查询是否安装过mysql

rpm -ev Mysql服务        # 如果查询到了就先清除mysql服务

find / -name mysql          # 查询mysql目录

rm -rf /mysql目录          # 删除掉mysql目录

rm -rf /etc/my.cnf            # 删除掉mysql启动配置文件

cd /usr/local/           # 进入目录

mkdir mysql    # 创建mysql文件夹

cd mysql          # 进入该目录下

wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-server-5.6.45-1.el7.x86_64.rpm            # 下载文件

wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-client-5.6.45-1.el7.x86_64.rpm            # 下载文件

chmod 777 MySQL-server-5.6.45-1.el7.x86_64.rpm     # 授权

chmod 777 MySQL-client-5.6.45-1.el7.x86_64.rpm      # 授权

//注:--nodeps --force 表示不检查依赖

rpm -ivh MySQL-server-5.6.45-1.el7.x86_64.rpm --nodeps –force        # 编译安装

rpm -ivh MySQL-client-5.6.45-1.el7.x86_64.rpm --nodeps –force         # 编译安装

service mysql start          # 启动mysql服务

vi /root/.mysql_secret    # 查看默认密码

mysql -uroot -p 默认密码    # 进入数据库

use mysql;       # 进入mysql库,会提示你必须先修改密码

select host,user from user;     # 查询用户表

// 默认只允许本机连接,非必要不用配置

update user set host=’%’ where user=’root’ and host=’localhost’;        # 授权所有用户访问

flush privileges;       # 刷新权限

exit           # 退出数据库

安装nginx

cd /usr/local    # 进入目录

mkdir nginx     # 创建nginx文件目录

cd nginx           # 进入该目录

wget http://nginx.org/download/nginx-1.13.7.tar.gz    # 下载nginx的tar包

tar -xvf nginx-1.13.7.tar.gz      # 解压缩

cd nginx-1.13.7       # 进入到nginx解压后的安装包

//编译第一步:执行命令,考虑到后续安装ssl证书 添加两个模块

./configure --with-http_stub_status_module --with-http_ssl_module

make        # 编译第二步

make install     # 编译第三步

启动uwsgi

cd 项目目录下       # 进入项目目录

touch uwsgi.ini        # 在项目目录下创建文件

touch uwsgi.pid

touch uwsgi.log

touch uwsgi.status

vim uwsgi.ini           # 编辑文件

[uwsgi]

socket=127.0.0.1:9001   # 并非 flaskrun的端口,而是内部tcp通讯的端口

chmod-socket=662

wsgi-file=/项目目录/run_server.py                 # 指定项目启动文件

callable=app_server                 # app_server = Flask(__name__),这里的app_server

touch-reload=/项目目录/

master=true

processes=4             # 进程数不要大于服务器的核心数

threads=20              # 每个进程可以有多少个线程

virtualenv=/opt/venv/            # 指定应用的虚拟环境

vacuum=true

thunder-lock = True         # 防止惊群

daemonize = /项目目录/uwsgi.log

pidfile = /项目目录/uwsgi.pid

# harakiri = 60         # 超时时间

uwsgi --ini uwsgi.ini         # 启动

uwsgi --reload uwsgi.pid         # 重启

uwsgi --stop uwsgi.pid             # 关闭

启动nginx

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # 启动nginx服务,也可以像python一样加入环境变量

vi /usr/local/nginx/conf/nginx.conf        # 编辑nginx配置

server {

  listen 9000;     # 随便找个未被占用的端口

  server_name localhost;           # 将localhost修改为你服务器的公网ip地址

  charset utf-8;

  location / {

    include uwsgi_params;

    uwsgi_pass 127.0.0.1:9001;            # uwsgi.ini 文件中的IP与端口

  }

}

/usr/local/nginx/sbin/nginx -s reload     # 重启nginx服务

若想使用外部主机访问nginx,需要关闭服务器防火墙或开放nginx服务端口,端口为nginx.conf的配置端口

centOS7关闭防火墙命令: systemctl stop firewalld.service

关闭防火墙会导致服务器有一定风险,所以建议是单独开放服务端口

查询端口号80 是否开启:firewall-cmd --query-port=80/tcp

开放80端口:firewall-cmd --zone=public --add-port=80/tcp --permanent

重启防火墙:firewall-cmd --reload       # 重启服务之后才能生效

收回开放的80端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent

查看所有开放的端口:firewall-cmd --zone=public --list-ports

# 重启项目

cd /home/bom_system/         # 进入项目目录

source /opt/venv/bin/activate       # 进入虚拟环境

uwsgi --reload uwsgi.pid         # 重启uwsgi

nginx -s reload         # 重启nginx

最新文章

  1. lower函数
  2. stringstream操纵string小总结
  3. 理解 JS 回调函数中的 this
  4. Apache Spark源码走读之11 -- sql的解析与执行
  5. wordpress学习-plugins-001
  6. Android中GridView滚动到底部加载数据终极版
  7. Linux进程间通信IPC学习笔记之同步一(线程、互斥锁和条件变量)
  8. thinkphp 行为扩展
  9. 【技术贴】note8 N5100刷机 双清 落雨
  10. jquery mobile基本结构搭建
  11. Delphi获取系统服务描述信息
  12. Enze frist day
  13. mysql只导出表结构或数据
  14. .net core 时间戳转换
  15. 记录——时间轮定时器(lua 实现)
  16. Chrome浏览器扩展开发系列之五:Page Action类型的Chrome浏览器扩展
  17. 关于package.json的理解
  18. 201521123082 《Java程序设计》第9周学习总结
  19. http目录显示时间与服务器相差8小时
  20. Java开源生鲜电商平台-推荐系统模块的设计与架构(源码可下载)

热门文章

  1. vue+html5实现上传图片
  2. SVN的安装和使用手册2
  3. Bug Bash测试
  4. Spring随意总结
  5. 对象可能是类数组对象 不具备数组的原型内的方法 所以可以用call或者apply把this指向改成数组或对象原型
  6. sheet.getLastRowNum()获取行数不准的问题
  7. redis之五种基本数据类型
  8. Java通过注解获取方法反射运行
  9. js树搜索框查询所有匹配节点及父节点(纯js实现)
  10. lowcodeEngine设计器源码简析(创建流程,主要对象), 怎么生成一个左侧面板