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 解析html之BeautifulSoup
Jul 07 Python
python基础教程之缩进介绍
Aug 29 Python
python进阶教程之文本文件的读取和写入
Aug 29 Python
python实现获取客户机上指定文件并传输到服务器的方法
Mar 16 Python
Python和JavaScript间代码转换的4个工具
Feb 22 Python
Python中django学习心得
Dec 06 Python
Python实现的三层BP神经网络算法示例
Feb 07 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
django admin后管定制-显示字段的实例
Mar 11 Python
python打开文件的方式有哪些
Jun 29 Python
Python selenium实现断言3种方法解析
Sep 08 Python
Python Pygame实战在打砖块游戏的实现
Mar 17 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代码
2008/04/09 PHP
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
php对数组排序代码分享
2014/02/24 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
php和asp语法上的区别总结
2019/05/12 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
JavaScript事件列表解说
2006/12/22 Javascript
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
2018/03/23 Javascript
vue组件中使用props传递数据的实例详解
2018/04/08 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
Tensorflow卷积神经网络实例
2018/05/24 Python
python config文件的读写操作示例
2019/09/27 Python
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
实习生自我鉴定
2013/12/12 职场文书
自我鉴定书面格式
2014/01/13 职场文书
商铺门面租房协议书
2014/10/21 职场文书
以权谋私检举信范文
2015/03/02 职场文书
清明节随笔
2015/08/15 职场文书
Nginx服务器如何设置url链接
2021/03/31 Servers
提升Nginx性能的一些建议
2021/03/31 Servers
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
速龙x4-860k处理器相当于i几
2022/04/20 数码科技