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 相关文章推荐
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
python简单分割文件的方法
Jul 30 Python
Python基本语法经典教程
Mar 11 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
机器学习10大经典算法详解
Dec 07 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
python3连接MySQL数据库实例详解
May 24 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
python set内置函数的具体使用
Jul 02 Python
python读写csv文件方法详细总结
Jul 05 Python
Python实现弹球小游戏
Aug 01 Python
python 19个值得学习的编程技巧
Aug 15 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页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
Less 安装及基本用法
2018/05/05 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
JS实现小米轮播图
2020/09/21 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
Python中字符串的修改及传参详解
2016/11/30 Python
Python 读写文件的操作代码
2018/09/20 Python
django session完成状态保持的方法
2018/11/27 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
Python爬虫开发与项目实战
2020/12/16 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
研究生毕业自我鉴定范文
2014/03/27 职场文书
社会公德演讲稿
2014/05/20 职场文书
小学运动会班级口号
2014/06/09 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
教师个人查摆剖析材料
2014/10/14 职场文书
导师鉴定意见
2015/06/05 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
Python如何让字典保持有序排列
2022/04/29 Python