操作系统为Ubuntu16.04
添加到安全组中的端口才可以被外界访问。这里需要开放80端口和5000端口。(有的80端口可能已经默认开放,检查安全组中有没有,如果没有,添加之)
依次点击 实例ID/名称 -> 本实例安全组 ->创建安全组
按下图添加
pip、apt是Python、Ubuntu的一个包管理工具,存在国外源下载速度慢的问题(这两个源阿里服务器应该都改过了,这里确保万一,且如果以后使用虚拟机,这两个源也是必须要改的)
点击 视图->文件树 查看root文件夹,如果里面有一个 .pip 文件夹,.pip文件夹里有 pip.conf文件,则已经改源,跳过(2)步骤,如果没有,进行以下(2)步骤。
依次键入
mkdir ~/.pip
cd ~/.pip
touch pip.conf
vim pip.conf
写入以下内容
[global]
index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/
[install]
trusted-host=mirrors.cloud.aliyuncs.com
wq
保存退出即可
键入
pip install numpy
可以看到pip的源已经是阿里源。注意,此时numpy可能会安装失败,暂时不用管,这里只是检查一下pip,待会会解决这个问题。
键入
apt-get update
如果显示阿里的源,如下图,则跳过(2)步骤,反之,执行(2)步骤
找到并打开 /etc/apt/sources.list 文件
清空并写入以下内容(这里只适合Ubuntu16.04版本,其他版本的系统需写入对应版本的源)
deb http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial main
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial main
deb http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial-updates main
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial-updates main
deb http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial universe
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial universe
deb http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial-updates universe
deb http://mirrors.cloud.aliyuncs.com/ubuntu xenial-security main
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu xenial-security main
deb http://mirrors.cloud.aliyuncs.com/ubuntu xenial-security universe
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu xenial-security universe
保存退出即可
键入apt-get update
如(1)中图所示,即改源成功。
Ubuntu中安装了两个版本的python,python2和python3,如果直接pip则调用的是python2的pip,而我们使用的是python3
依次键入
apt install python3-pip
pip3 install --upgrade pip
即可,因为我们都是使用的python3,以后安装包的时候使用pip3 install xxx即可
在用户目录下创建.virtualenvs文件夹:
mkdir ~/.virtualenvs
pip3 安装依赖:
pip3 install virtualenv
pip3 install virtualenvwrapper
键入
vim ~/.bashrc
开头添加以下内容
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
source /usr/local/bin/virtualenvwrapper.sh
保存退出
键入
vim /usr/local/bin/virtualenvwrapper.sh
修改
第50行附近的
VIRTUALENVWRAPPER_PYTHON="$(command \which python)"
为:
VIRTUALENVWRAPPER_PYTHON="$(command \which python3)"
保存退出
键入
vim /etc/profile
在末尾添加
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
保存退出
键入source ~/.bashrc
使之生效即可
例如在这里创建名叫 py3_flask 的虚拟环境
键入
mkvirtualenv -p python3 py3_flask
(退出虚拟环境键入:deactivate
,进入虚拟环境键入:workon py3_flask
,前方出现括号即为在虚拟环境中)
自此以后的操作均为在py3_flask 虚拟环境中
sudo apt-get install nginx
键入:
vim /etc/nginx/sites-available/default
删除所有内容并写入以下内容
upstream flask {
server 127.0.0.1:5000;
}
server {
# 监听80端口
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# 请求转发到gunicorn服务器
proxy_pass http://127.0.0.1:5000;
# 请求转发到多个gunicorn服务器
# proxy_pass http://flask;
# 设置请求头,并将头信息传递给服务器端
proxy_set_header Host $host;
# 设置请求头,传递原始请求ip给 gunicorn 服务器
proxy_set_header X-Real-IP $remote_addr;
}
}
保存退出
niginx的运行及停止命令为:
/etc/init.d/nginx start #启动
/etc/init.d/nginx stop #停止
这里启动nginx,键入
/etc/init.d/nginx start
输入服务器公网IP,如果出现下面两种情况中的任何一种均为正常
键入
pip3 install gunicorn
pip3 install flask
mkdir ~/flask_test
cd ~/flask_test
touch test.py
vim test.py
写入
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "hello word"
if __name__ == "__main__":
app.run()
保存退出
键入
gunicorn -w 2 -b 127.0.0.1:5000 test:app
-w代表进程数
-b 代表运行的IP及端口号
test为.py文件名
app为Flask实例名
此时访问公网IP可能不能看到flask程序的运行结果,可关闭页面并重启服务器
点击管理->重启,等待服务器重启
之后访问公网IP,如果出现hello world则为正常,如果出现以下结果
进行以下操作:
重新登录服务器
进入虚拟环境
workon py3_flask
进入工作目录
cd flask_test
查看进程树,键入
pstree -ap|grep gunicorn
gunicorn -w 2 -b 127.0.0.1:5000 test:app
如果有多个进程,如图
则杀死父进程,kill -9 进程号
,在这里为
Kill -9 1997
等待几秒,再次键入
pstree -ap|grep gunicorn
发现只剩下一条,此时启动服务即可
gunicorn -w 2 -b 127.0.0.1:5000 test:app
一般情况,都是在自己电脑上写好应用,然后到部署到服务器上,在这里可以使用WinSCP(之前在群里已经发过)上传文件。(安装的时候需选择页面风格,这里我选择了单个窗口,左侧本机,右侧服务器的页面,这个根据个人喜好即可)
点击新建站点
主机名填写服务器公网IP,其他默认,点击登录,用户名输入root,密码输入服务器密码即可
将本机的flask文件拖到服务器工作目录
上传到工作目录后,与上述test.app的运行方式相同,在这里不再赘述