Python Web程序部署到Ubuntu服务器上的方法


Posted in Python onFebruary 22, 2018

在本文记录了我在Ubuntu中部署Flask Web站点的过程, 其中包括用户创建、代码获取、Python3环境的安装、虚拟环境设置、uWSGI启动程序设置,并将Nginx作为前端反向代理。希望对各位有所帮助。

Python Web程序部署到Ubuntu服务器上的方法

建立一个Python Web程序专用账户

adduser haseo
vim /etc/sudoers #将haseo用户加入导sudo用户清单中
sudo usermod -a -G www-data haseo

安装Python3并配置程序运行环境

1.更新Ubuntu的软件库

sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get install build-essential libssl-dev libffi-dev python3-dev #安装一些必要的工具包

2.安装python包管理工具

python3 -V
sudo apt-get install -y python3-pip
pip3 install virtualenv

配置Python 程序

1.创建程序目录

mkdir -p /var/www/html/pricing-service

2.修改目录权限

sudo chown haseo:haseo /var/www/html/pricing-service

3.创建一个SSH Key使得用户可以同步GitHub的代码

ssh-keygen
cat ~/.ssh/id_rsa.pub # 复制公钥并增加到GitHub(https://github.com/settings/keys)

4.复制GitHub上的代码

git clone git@xxx .

5.创建log目录

mkdir log

6.创建虚拟目录

pip3 install virtualenv
python3 -m virtualenv venv # 在pricing-service目录下执行
./venv/bin/pip install -r requirements.txt
./venv/bin/pip install uwsgi

配置uwsgi

1.测试一下python直接运行程序是否可以访问

vim ~/myproject/wsgi.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
 return "<h1 style='color:blue'>Hello There!</h1>"
if __name__ == "__main__":
 app.run(host='0.0.0.0')
python wsgi.py

2.创建WSGI入口文件

vim ~/myproject/wsgi.py
from myproject import app
if __name__ == "__main__":
 app.run()

3.测试uWSGI是否正常运行

uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app

4.创建uWSGI配置文件

前面测试没问题之后我们开始创建uWSGI配置文件

vim ~/myproject/wsgi.ini

[uwsgi]
module = wsgi:app
master = true
processes = 5
socket = socket.sock
chmod-socket = 660
vacuum = true
die-on-term = true

5.创建systemd文件

sudo vim /etc/systemd/system/price_service.service

[Unit]
Description=uWSGI instance to serve price_service
After=network.target
[Service]
User=haseo
Group=www-data
WorkingDirectory=/var/www/html/pricing-service
Environment="PATH=/var/www/html/pricing-service/venv/bin"
ExecStart=/var/www/html/pricing-service/venv/bin/uwsgi --ini wsgi.ini
[Install]
WantedBy=multi-user.target

6.启动并启用wsgi服务

sudo systemctl start price_service
sudo systemctl enable price_service

配置Nginx

1.安装nginx

apt-get install nginx

2.Nginx状态查看及进程管理

systemctl status nginx
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//' #获取服务器的IP地址
sudo systemctl start nginx
sudo systemctl reload nginx
sudo systemctl disable nginx # 精致nginx在系统启动的时候启动
sudo systemctl enable nginx

3.配置Nginx站点

vim /etc/nginx/sites-available/default
server {
  listen 8080; #监听IP
  real_ip_header X-Forwarded-For;
  set_real_ip_from 127.0.0.1; # 告诉Python程序是谁发送的请求
  server_name localhost;
  location / { # 用户访问的根目录比如 http://www.bihell.com/
    include uwsgi_params; # Flask程序需要uwsgi解析
    uwsgi_pass unix:/var/www/html/pricing-service/socket.sock; #uwsgi通过这个文件传递信息
    uwsgi_modifier1 30;
  }
  # 404错误页面配置,下同
  error_page 404 /404.html;
  location = /404.html {
    root /usr/share/nginx/html;
  }
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
  root /usr/share/nginx/html;
 }
}

4.软链接导nginx sites-enabled 目录

sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled

5.测试配置

sudo nginx -t

6.重新启动nginx大功告成

sudo systemctl restart nginx

总结

以上所述是小编给大家介绍的Python Web程序部署到Ubuntu服务器上的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
python 自动化将markdown文件转成html文件的方法
Sep 23 Python
python模块之re正则表达式详解
Feb 03 Python
python实现爬取图书封面
Jul 05 Python
selenium处理元素定位点击无效问题
Jun 12 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
Python内置类型性能分析过程实例
Jan 29 Python
利用python在excel中画图的实现方法
Mar 17 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
Apr 27 Python
详细分析Python垃圾回收机制
Jul 01 Python
django和flask哪个值得研究学习
Jul 31 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 Python
Python中 传递值 和 传递引用 的区别解析
Feb 22 #Python
centos 安装python3.6环境并配置虚拟环境的详细教程
Feb 22 #Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 #Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 #Python
基于Django用户认证系统详解
Feb 21 #Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 #Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
Feb 21 #Python
You might like
Zerg建筑一览
2020/03/14 星际争霸
深入分析PHP优化及注意事项
2016/07/04 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
微信小程序解析富文本过程详解
2019/07/13 Javascript
Python文件操作类操作实例详解
2014/07/11 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
Python列表解析配合if else的方法
2018/06/23 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
python中format函数如何使用
2020/06/22 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
大学生学习生活的自我评价
2013/11/01 职场文书
零件设计自荐信范文
2013/11/27 职场文书
甲方资料员岗位职责
2013/12/13 职场文书
创建省级文明单位实施方案
2014/02/27 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
python中super()函数的理解与基本使用
2021/08/30 Python