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中使用copy模块实现列表(list)拷贝
Apr 14 Python
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
python虚拟环境virtualenv的安装与使用
Sep 21 Python
利用Django-environ如何区分不同环境
Aug 26 Python
利用Python+阿里云实现DDNS动态域名解析的方法
Apr 01 Python
Python使用LDAP做用户认证的方法
Jun 20 Python
简单了解python关系(比较)运算符
Jul 08 Python
python将字符串转换成json的方法小结
Jul 09 Python
Python netmiko模块的使用
Feb 14 Python
基于Django集成CAS实现流程详解
Nov 28 Python
pycharm 如何取消连按两下shift出现的全局搜索
Jan 15 Python
Python爬虫中urllib3与urllib的区别是什么
Jul 21 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
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
PHP+JS实现的实时搜索提示功能
2018/03/13 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
python查找重复图片并删除(图片去重)
2019/07/16 Python
python线程信号量semaphore使用解析
2019/11/30 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
python opencv如何实现图片绘制
2020/01/19 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
旧时光糖果:Old Time Candy
2018/02/05 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
迟到早退检讨书
2014/02/10 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
治庸问责心得体会
2014/09/12 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
优秀班集体申报材料
2014/12/25 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL