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中使用 Selenium 实现网页截图实例
Jul 18 Python
Python 实现简单的电话本功能
Aug 09 Python
Python实现简单的文件传输与MySQL备份的脚本分享
Jan 03 Python
python中的错误处理
Apr 10 Python
python实现扫描日志关键字的示例
Apr 28 Python
解决python matplotlib imshow无法显示的问题
May 24 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
kali中python版本的切换方法
Jul 11 Python
pycharm新建一个python工程步骤
Jul 16 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 Python
Python图像处理库PIL详细使用说明
Apr 06 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-fpm配置详解
2014/02/12 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
php时间戳转换代码详解
2019/08/04 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
Node.js编程中客户端Session的使用详解
2015/06/23 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
微信小程序用canvas画图并分享
2020/03/09 Javascript
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
Python遍历numpy数组的实例
2018/04/04 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
django中cookiecutter的使用教程
2020/12/03 Python
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
捐助倡议书范文
2014/04/15 职场文书
体育口号大全
2014/06/18 职场文书
中学生学习保证书
2015/02/26 职场文书
产品质量保证书范本
2015/02/27 职场文书
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python