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批量重命名同一文件夹下文件的方法
May 25 Python
python关键字and和or用法实例
May 28 Python
VSCode下配置python调试运行环境的方法
Apr 06 Python
Python实现调用另一个路径下py文件中的函数方法总结
Jun 07 Python
Python中is和==的区别详解
Nov 15 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
tensorflow estimator 使用hook实现finetune方式
Jan 21 Python
opencv中图像叠加/图像融合/按位操作的实现
Apr 01 Python
Python过滤序列元素的方法
Jul 31 Python
Python使用socket_TCP实现小文件下载功能
Oct 09 Python
python解压zip包中文乱码解决方法
Nov 27 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 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
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
详解js中==与===的区别
2017/01/08 Javascript
几种tab切换详解
2017/02/03 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
node.js学习笔记之koa框架和简单爬虫练习
2018/12/13 Javascript
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python3搜索及替换文件中文本的方法
2015/05/22 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
python实现决策树分类算法
2017/12/21 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
Python里面如何实现tuple和list的转换
2012/06/13 面试题
企业管理专业个人求职信范文
2013/09/24 职场文书
家长给老师的道歉信
2014/01/13 职场文书
大学生活动策划方案
2014/02/10 职场文书
音乐会主持人开场白
2015/05/28 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL