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常用内置模块之xml模块(详解)
May 23 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
Django 生成登陆验证码代码分享
Dec 12 Python
python将txt文件读入为np.array的方法
Oct 30 Python
python numpy元素的区间查找方法
Nov 14 Python
postman传递当前时间戳实例详解
Sep 14 Python
Pytorch之contiguous的用法
Dec 31 Python
最小二乘法及其python实现详解
Feb 24 Python
使用python对excel表格处理的一些小功能
Jan 25 Python
Python爬虫UA伪装爬取的实例讲解
Feb 19 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 Python
python实现学生信息管理系统(面向对象)
Jun 05 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
wordpress之wp-settings.php
2007/08/17 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
2019/06/14 PHP
javascript 异常处理使用总结
2009/06/21 Javascript
一些常用的JS功能函数代码
2009/06/23 Javascript
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
python pytest进阶之fixture详解
2019/06/27 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
医学专业五年以上个人求职信
2013/12/03 职场文书
十八大闭幕感言
2014/01/22 职场文书
物理系毕业生自荐书范文
2014/02/22 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
初三学习决心书
2014/03/11 职场文书
事业单位财务人员岗位职责
2015/04/14 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS