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 排序算法总结及实例详解
Sep 28 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
获取python文件扩展名和文件名方法
Feb 02 Python
python多任务及返回值的处理方法
Jan 22 Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
只需要这一行代码就能让python计算速度提高十倍
May 24 Python
PyTorch dropout设置训练和测试模式的实现
May 27 Python
Python max函数中key的用法及原理解析
Jun 26 Python
Python实现简单得递归下降Parser
May 02 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中$this-&amp;gt;含义分析
2009/11/29 PHP
php检测图片木马多进制编程实践
2013/04/11 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
PHP编写daemon process 实例详解
2016/11/13 PHP
javascript removeChild 使用注意事项
2009/04/11 Javascript
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
js获取class的所有元素
2013/03/28 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
2020/07/23 Javascript
Python 正则表达式操作指南
2009/05/04 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
Python 的类、继承和多态详解
2017/07/16 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
全球度假村:Club Med
2017/11/27 全球购物
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
Java中实现多态的机制
2015/08/09 面试题
应用化学专业职业生涯规划书
2014/01/22 职场文书
大学生旅游业创业计划书
2014/01/29 职场文书
高考备战决心书
2014/03/11 职场文书
讲解员培训方案
2014/05/04 职场文书
高中教师考核方案
2014/05/18 职场文书
教学反思怎么写
2016/02/24 职场文书