网站首页 > 技术文章 正文
目录
云服务器部署1【Nginx、Supervisor、Flask、Python】(本篇)
前言
后续准备编写一系列的教程,涉及到微信公众号、小程序、Android、Python以及C#\WPF相关。本篇文章主要记录在公有云服务器上部署Python的步骤,本篇的步骤也适用于阿里云服务器,其它的服务器大壮没有测试过,也欢迎随时讨论。如有哪里不对,欢迎批评指正,谢谢。
环境
云服务器版本:Ubuntu 16.04.1 LTS
登陆云服务器
通过SSH登录腾讯云服务器,该云服务器是我买来做实验用的,刚买的,洁净如新。
安装Nginx
执行指令
$sudo apt-get install nginx
安装成功之后,可以立即访问云服务器的公网IP地址或者解析到该IP地址的域名,因为我这里还没有将域名绑定到该服务器,所以直接访问我的公网IP地址。
到这里就说明我们的Nginx服务安装成功。一笔带过,Nginx安装好的文件位置如下:
/usr/sbin/nginx:主程序
/etc/nginx/:存放配置文件,后续我们会用到
/usr/share/nginx/:存放Nginx默认指向的静态网页
/var/log/nginx/:存放日志
解析域名到服务器
接下来,我们将域名解析到服务器,比如我这里将demo.2019club.cn解析到云服务器。
登陆腾讯云控制台,进入到域名列表
点击箭头所指的“解析”,跳转到“解析管理”界面
点击“添加记录”
主机记录项输入二级域名,这里我的是demo,记录值项填写云服务器的公网IP地址,然后点击“保存”按钮。
然后我们直接在浏览器里输入二级域名,看是否成功解析到云服务器。
可以看到二级域名也已经可以访问,如果你的访问不了,也可能是因为TTL生效时间没到,可以等会再看。
PS:解析域名到阿里云服务器的步骤也是类似的。
安装包管理工具pip、pip3
执行以下指令
$ sudo apt-get install python-pip python3-pip
从下图可以看到已经安装成功了
安装Virtualenv
执行指令(注意,这里使用的是pip,而不是pip3)
$sudo pip install virtualenv
执行指令
$virtualenv --version
可以看到也安装成功了。
Python3 Flask最小应用
我在目录/home/ubuntu/webroot/demo下新建应用,该目录路径后续会用到。
执行指令
$virtualenv -p python3 venv
$source venv/bin/activate
$pip install flask
$pip install flask_script
执行指令,新建manage.py
$vim manage.py
manage.py文件内容如下
from flask import Flask from flask_script import Manager app = Flask(__name__) manager = Manager(app) @app.route('/') def index(): return 'Hello 玖零大壮' if __name__ == '__main__': manager.run()
执行指令
$python manage.py runserver
可以看到程序运行没有问题。
配置uWSGI生产环境
执行指令
$pip install uwsgi
执行指令
$vim uconfig.ini
uconfig.ini文件内容如下
[uwsgi] # 外部访问地址,这里我使用的是socket,而不是用http # 同时端口号,可以不使用这个9000,也可以使用其他的 socket=127.0.0.1:9000 # 指向项目目录,这里的目录是我们的程序的根目录 chdir=/home/ubuntu/webroot/demo/ # flask启动程序文件 wsgi-file=manage.py # flask在manage.py文件中的app名 callable=app # 处理器数,我的服务器是单核双线程的 # 不知道的话,写1就没问题 processes=1 # 线程数 threads=2
执行指令
$uwsgi uconfig.ini
输出以下内容
(venv) ubuntu@VM-0-3-ubuntu:~/webroot/demo$ uwsgi uconfig.ini [uWSGI] getting INI configuration from uconfig.ini *** Starting uWSGI 2.0.18 (64bit) on [Sat Mar 16 00:57:24 2019] *** compiled with version: 5.4.0 20160609 on 15 March 2019 16:42:36 os: Linux-4.4.0-130-generic #156-Ubuntu SMP Thu Jun 14 08:53:28 UTC 2018 nodename: VM-0-3-ubuntu machine: x86_64 clock source: unix detected number of CPU cores: 1 current working directory: /home/ubuntu/webroot/demo detected binary path: /home/ubuntu/webroot/demo/venv/bin/uwsgi !!! no internal routing support, rebuild with pcre support !!! chdir() to /home/ubuntu/webroot/demo/ *** WARNING: you are running uWSGI without its master process manager *** your processes number limit is 7331 your memory page size is 4096 bytes detected max file descriptor number: 1024 lock engine: pthread robust mutexes thunder lock: disabled (you can enable it with --thunder-lock) uwsgi socket 0 bound to TCP address 127.0.0.1:9000 fd 3 Python version: 3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609] Python main interpreter initialized at 0xed6240 python threads support enabled your server socket listen backlog is limited to 100 connections your mercy for graceful operations on workers is 60 seconds mapped 83344 bytes (81 KB) for 2 cores *** Operational MODE: threaded *** WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0xed6240 pid: 21793 (default app) *** uWSGI is running in multiple interpreter mode *** spawned uWSGI worker 1 (and the only) (pid: 21793, cores: 2)
可以看到配置文件uconfig.ini没有错误
现在可以退出virtualenv的虚拟环境了
执行指令
$deactivate
安装 Supervisor
Supervisor可以同时启动多个应用,最重要的是,当某个应用Crash的时候,Supervisor可以自动重启该应用,保证可用性。
执行指令
$sudo apt-get install supervisor
$vim supervisor_demo.conf
文件supervisor_demo.conf内容如下
[program:demo] # 启动命令入口 # 格式为command=/your/path/uwsgi /your/path/uconfig.ini command=/home/ubuntu/webroot/demo/venv/bin/uwsgi /home/ubuntu/webroot/demo/uconfig.ini # 命令程序所在目录 directory=/home/ubuntu/webroot/demo/ # 运行命令的用户名 user=root autostart=true autorestart=true #日志路径 stdout_logfile=/home/ubuntu/webroot/demo/uwsgi_supervisor.log
Supervisor 的全局的配置文件位置在:/etc/supervisor/supervisor.conf ,正常情况下我们并不需要去对其作出任何的改动,只需要将新建的supervisor_demo.conf 文件放在/etc/supervisor/conf.d/下。
执行指令
$sudo mv supervisor_demo.conf /etc/supervisor/conf.d/
配置Nginx自定义网站根目录
执行指令
$cd /etc/nginx/sites-available/
$sudo vim demo_2019club_cn
文件demo_2019club_cn内容如下
server {
listen 80;
server_name demo.2019club.cn;
location / {
uwsgi_pass127.0.0.1:9000;#和uconfig.ini中的socket地址保持一致
includeuwsgi_params;
uwsgi_param UWSGI_PYHOME /home/ubuntu/webroot/demo/venv;#指向虚拟环境目录
uwsgi_param UWSGI_CHDIR/home/ubuntu/webroot/demo;#指向网站根目录
uwsgi_param UWSGI_SCRIPT manage:app;#指定启动程序
}
}
执行指令
$sudo ln -s /etc/nginx/sites-available/demo_2019club_cn /etc/nginx/sites-enabled/demo_2019club_cn
$sudo service supervisor restart
$sudo service nginx restart
下面可以访问我们的网站了
结语
文章中将步骤详细记录,对其中的概念没有多做解释,如有不懂,可以去搜索相关内容或者留言,谢谢。
//**************************************************************
//转载请将该部分内容复制,否则侵权必究
//禁止【东方头条】转载!!!
//作者:玖零大壮
//头条号@玖零大壮
//公众号@玖零大壮
//原文链接:https://www.toutiao.com/i6668632623864087047/
***************************************************************/
猜你喜欢
- 2024-10-03 不改一行代码!快速部署流行框架到腾讯云 Serverless
- 2024-10-03 Flask 基础理解(flask基础入门)
- 2024-10-03 AI界最危险武器GPT-2使用指南:从Finetune到部署
- 2024-10-03 解决Flask-SocketIO部署遇到的问题
- 2024-10-03 Python Web 部署(pythonweb服务器部署)
- 2024-10-03 Python Flask 大型应用的架构(python的flask案例)
- 2024-10-03 python 解析二维码(ZBar) flask开发 Dockerfile 打包部署
- 2024-10-03 使用Docker部署Python Flask Web应用的最佳实践
- 2024-10-03 带你认识 flask 错误处理(flask errorhandler)
- 2024-10-03 使用 Python 和 Flask 架设网站:入门指南
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)