Flask入门小项目 - 搭建极简博客(7)
用Nginx+gunicorn部署到阿里云并实现外网访问
零、效果
域名的话要等它备案完才能访问...
一、一些准备工作
1.购买云服务器(这里用的是阿里云的Ubuntu)
2.改服务器登录密码(做不做都行)
3.远程连接到服务器(用putty或者阿里云自带的远程连接,建议用阿里云自带的)
4.新建一个用户,赋予sudo权限,然后用这个用户登录,就不用root用户了(做不做都行)具体操作点这
5.设置默认python为python3 具体操作点这
6.安装MySQL,设置密码,新建一个schema叫blog(或者你取的其他名字) 具体操作点这
7.改pip源、升级pip、apt-get install upgrade等等七七八八的操作
8.将之前的工程文件拷到服务器中(可以用git或者其他传文件的东西)
二、虚拟环境virtualenv
pip install virtualenv # 安装virtualenv
cd /home/xxx/code/Simple-Flask-Blog # 进入工程文件夹中
virtualenv venv # 在此文件夹中创建虚拟环境venv
然后文件夹中就多了个venv文件夹,接着
source venv/bin/activate # 激活虚拟环境
三、安装依赖
pip install -r requirements.txt
四、数据库迁移
(要先在服务器中装好MySQL数据库并建一个同名的schema)
python manage.py db migrate
python manage.py db upgrate
看看数据库中是否发生变化:
sudo mysql -u root -p
输密码
show databases;
use blog; # 或 use 你的schema名称
show tables;
ctrl+D退出
五、试运行一下
python app.py
没问题,ctrl+C退出
六、gunicorn
pip install gunicorn
然后就能用gunicorn运行程序了:
gunicorn -w worker数量 -b ip:端口号 运行文件名:flask实例名
例:
gunicorn -w 3 -b 127.0.0.1:5000 app:app
注: app:app中,前面的app是app.py,后面的app是app = Flask(name)
七、外网访问
在阿里云服务器管理控制台中,左边那一栏中找到网络与安全-安全组
添加安全组规则:
https://help.aliyun.com/document_detail/25475.html?spm=5176.2020520101.0.0.25b84df5shveJP#allowHttp
改这三个地方就行
授权对象改0.0.0.0/0,端口范围改你想开放的端口
其中,80端口是HTTP端口,访问xxx.xxx.xxx.xxx:80 = 访问http://xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx是公网ip)
然后在服务器终端中
gunicorn -w 3 -b 0.0.0.0:8080 app:app
这样就能在外网,比如自己手机上,访问xxx.xxx.xxx.xxx:8080了
其他端口同理
八、Nginx
sudo apt-get install nginx # 安装nginx
sudo rm /etc/nginx/sites-available/default # 删掉原来的配置文件
sudo vim /etc/nginx/sites-available/default # 编辑新配置文件
然后输入
server {
listen 80; # 80端口是http端口
server_name xxx.xxx.xxx.xxx; # 公网ip
location /{
proxy_pass http://127.0.0.1:5000; }
}
保存退出
:wq
这样当执行
gunicorn -w 3 -b 127.0.0.1:5000 main:app
的时候,也能通过访问xxx.xxx.xxx.xxx(公网ip)来访问网站
九、绑定域名
买了域名后,域名解析下就行
域名解析中记录值填服务器公网ip
接着访问域名就跟访问公网ip效果一样了
接着就会发现没有备案不让你访问啦
接着就是漫长的等备案
原文地址:https://www.cnblogs.com/holaworld/p/12681239.html
- 1578: [Usaco2009 Feb]Stock Market 股票市场
- webp图片实践之路
- 3522: [Poi2014]Hotel
- 3299: [USACO2011 Open]Corn Maze玉米迷宫
- 2272: [Usaco2011 Feb]Cowlphabet 奶牛文字
- 1632: [Usaco2007 Feb]Lilypad Pond
- 1630/2023: [Usaco2005 Nov]Ant Counting 数蚂蚁
- Java设计模式(七)Decorate装饰器模式
- 1623: [Usaco2008 Open]Cow Cars 奶牛飞车
- 1622: [Usaco2008 Open]Word Power 名字的能量
- 3297: [USACO2011 Open]forgot
- 1740: [Usaco2005 mar]Yogurt factory 奶酪工厂
- 1741: [Usaco2005 nov]Asteroids 穿越小行星群
- 3298: [USACO 2011Open]cow checkers
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【python-leetcode480-双堆】滑动窗口的中位数
- 虚拟机--python环境配置
- 利用装饰器计算函数运行的时间
- 【猫狗数据集】谷歌colab之使用pytorch读取自己数据集(猫狗数据集)
- python wraps的作用
- paddlepaddle中文词法分析LAC
- python *args,**kwargs参数
- (一)django创建
- PaddleHub提供的ERNIE进行文本分类
- (二)django--带APP的网站
- Spring Boot 自定義 HttpMessageConverter 解決 String 類型返回JSON對象問題
- spring之为级联集合属性进行赋值
- springmvc之HiddenHttpMethodFilter配置使用POST、GET、DELETE、PUT请求
- springmvc之使用@RequestParam绑定请求参数
- hadoop完全分布式之集群分发脚本