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中的闭包和装饰器
Jun 12 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
Python正则表达式如何进行字符串替换实例
Dec 28 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
关于python写入文件自动换行的问题
Jun 23 Python
Python求均值,方差,标准差的实例
Jun 29 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 Python
Python Pandas 转换unix时间戳方式
Dec 07 Python
Python调用百度OCR实现图片文字识别的示例代码
Jul 17 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
python实现三阶魔方还原的示例代码
Apr 28 Python
python保存大型 .mat 数据文件报错超出 IO 限制的操作
May 10 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
附件名前加网站名
2008/03/23 PHP
Windows下安装Memcached的步骤说明
2010/04/25 PHP
PHP中文分词的简单实现代码分享
2011/07/17 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
PHP的全局错误处理详解
2016/04/25 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
js跑马灯代码(自写)
2013/04/17 Javascript
jQuery固定浮动侧边栏实现思路及代码
2014/09/28 Javascript
javascript表单验证大全
2015/08/12 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
VUE axios发送跨域请求需要注意的问题
2017/07/06 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
Django日志模块logging的配置详解
2017/02/14 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
python模块导入的方法
2019/10/24 Python
Python中sorted()排序与字母大小写的问题
2020/01/14 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
自动化毕业生专业自荐书范文
2014/02/04 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书