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深入学习之特殊方法与多范式
Aug 31 Python
Python中使用装饰器和元编程实现结构体类实例
Jan 28 Python
利用Python绘制数据的瀑布图的教程
Apr 07 Python
Python 稀疏矩阵-sparse 存储和转换
May 27 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 Python
Python中Numpy包的安装与使用方法简明教程
Jul 03 Python
pandas将numpy数组写入到csv的实例
Jul 04 Python
解决Django中调用keras的模型出现的问题
Aug 07 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
Python while循环使用else语句代码实例
Feb 07 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
python实现126邮箱发送邮件
May 20 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连接数据库代码应用分析
2011/05/29 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
vue router 传参获取不到的解决方式
2019/11/13 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
[06:42]DOTA2每周TOP10 精彩击杀集锦vol.1
2014/06/25 DOTA
django上传图片并生成缩略图方法示例
2017/12/11 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
python实现dijkstra最短路由算法
2019/01/17 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
python enumerate内置函数用法总结
2020/01/07 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
中专生自我鉴定书范文
2013/12/28 职场文书
紧急通知
2015/04/17 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
教师节表彰会主持词
2015/07/06 职场文书
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP
python实现双向链表原理
2022/05/25 Python