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之玩转字符串(2)更新篇
Sep 28 Python
python实现超简单端口转发的方法
Mar 13 Python
Python实现的飞速中文网小说下载脚本
Apr 23 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
python中使用zip函数出现错误的原因
Sep 28 Python
python之pymysql模块简单应用示例代码
Dec 16 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
在django admin中配置搜索域是一个外键时的处理方法
May 20 Python
python中关于数据类型的学习笔记
Jul 19 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
Python合并pdf文件的工具
Jul 01 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 SQL Injection with MySQL
2011/02/27 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
php生成动态验证码gif图片
2015/10/19 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
2016/08/17 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
Vue-cli3多页面配置详解
2020/03/22 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
[35:43]2018DOTA2亚洲邀请赛 4.1 小组赛B组 paiN vs Effect
2018/04/03 DOTA
pyramid配置session的方法教程
2013/11/27 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
魔幻般冒泡背景的CSS3按钮动画
2016/02/27 HTML / CSS
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
车辆维修工自我评价怎么写
2013/09/20 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
防灾减灾标语
2014/10/07 职场文书
公司经营目标责任书
2015/01/29 职场文书
PyTorch中的torch.cat简单介绍
2022/03/17 Python