踩了一天半的坑,终于爬出坑了!
不得不说现在博客真是天下一大抄,翻遍了 Google, 不是翻译的国外博文,就是抄国内原创博文, 连项目名,代码都不改.
废话不多说, 上文章!
有任何问题可直接评论,看到后会回复.
首先声明配置信息:
服务器依旧为 Ubuntu 17.10 (网上其他部署博文使用的大部分为14.04, 或者16.04.
此篇文章选择因为17.10版本以下的 Ubuntu Python3的版本通过 apt-get update 更新的版本号是3.4.3
而 17.10 直接更新为 Python3.6.3)
云提供商为 Google Cloud (各大提供商没有什么区别,随意选)
步骤
- 1.链接服务器
- 2.更新系统,为了安全
- 3.安装 pip3
- 4.安装 virtualenv
- 5.激活虚拟环境
- 6.创建 flask 项目, 配置项目, 安装所需库
- 7.安装并配置 gunicorn
- 8.安装并配置 Supervisor
- 9.安装并配置 Nginx
- 10.大功告成!
开始动手
一、链接服务器
链接服务器一般选用 ssh
, 如果是 Windows
可以考虑 xshell
MacOS
强烈推荐 iTerm2
, 配合 oh-my-zsh
爽翻天
二、更新系统,为了安全
#使用以下命令更新补丁,还有好多的 lib
sudo apt-get update
sudo apt-get dist-upgrade
三、安装 pip3
#如果你选择用 python2 就把下面命令的3去掉就可以了
sudo apt-get install python3-pip
四、安装 virtualenv
#安装虚拟环境, 在这个环境里并不会影响真实系统的环境
sudo pip3 install virtualenv
五、激活虚拟环境
#前进到 你的工程文件目录, 我的工程目录为/home/yaotiancheng/mysite
cd /home/yaotiancheng/mysite
#创建虚拟环境
virtualenv ENV
#进入虚拟环境
source ENV/bin/activate
#退出虚拟环境(只是让你记住啊..先别执行此句, 会告诉你合适退出虚拟环境)
deactivate
六、创建 flask 项目, 配置项目, 安装所需库
从最简单的项目上手
vi app.py
# 将以下代码放到 app.py 里,如果你有更完整的 flask 项目, 那就使用你自己的
# -*- coding: utf-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8000)
接下来安装所需 lib
# 这里执行的所有操作都在虚拟环境中,并没有退出
# 如果你有 flask 项目 直接从 requirment.txt 安装即可,然后可以略过该步骤里的所有东西
pip install -r requirment.txt
# 如果你是一个新手, 跟着我接下来走
pip install flask
pip freeze > requirment.txt
#执行到这里,基本的库文件已经装好了, 而且该目录内会生成一个 requirement.txt 记录着你项目安装的库文件以及版本
cat requirment.txt
#这是可以测试项目是否可以运行
python app.py
#如果不出意外(PS :这个地方一般也没啥意外) ,打开你的 ip:8000就可以看到你的网页或者一个简单的 Hello World
# 退出此次进程运行
Ctrl + C
七、安装并配置 gunicorn
#安装 gunicorn (还是在虚拟环境中,并没有退出)
pip install gunicorn
接下来提供另外一个文件 wsgi.py, 放置位置为工作目录的根目录 也就是我的 /home/yaotiancheng/mysite
# -*- coding: utf-8 -*-
import sys
from os.path import abspath, dirname
sys.path.insert(0, abspath(dirname(__file__)))
# 这个 app 就是上面的 app.py
import app
# 必须有一个叫 application 的变量
# gunicorn 就要这个变量
# 没有为什么,必须要这个文件..
# app.app 就是 app.py 里的 flask 的实例对象
application = app.app
# 用 gunicorn 运行 flask
gunicorn wsgi --bind 0.0.0.0:2000
# 不出意外, 应该和单独运行 `python app.py` 一样, 也可以看到网站跑起来了,接下来配置自动运行
八、安装并配置 Supervisor
在这里可以退出虚拟环境!!!!不退出也没什么关系!!!!!
sudo apt-get install surpervisor
# 开始编辑项目的配置文件 xxx 随意定
vi /etc/supervisor/conf.d/xxx.conf
# 以下为该配置文件的内容
# 进程名
[program:mysite]
# 需要执行的命令 (一定要指定虚拟环境的 gunicorn 来执行) pid 那个就是套路,就是要写,没为什么.
command=/home/yaotiancheng/mysite/ENV/bin/gunicorn wsgi --bind 0.0.0.0:2000 --pid /tmp/mysite.pid
# 工作目录路径
directory=/home/yaotiancheng/mysite
# 自动运行 肯定是 true 啦
autostart=true
接下来启动该进程(命令中的 status 只是为了让你看到 supervisor 的状态变化,因为现在执行 restart并不会提示你 suepervisor 的状态变更信息, 用 status 来确认自己每一步都有效果
# 查看一下 supervisor 的状态
service supervisor status
# 关闭 supervisor
service supervisor stop
# 再查看一下 supervisor 的状态
service supervisor status
# 启动 supervisor
service supervisor start
# 再查看一下 supervisor 的状态,确定supervisor是启动的
service supervisor status
# 另外可以通过 supervisorctl 来控制进程的启动, mysite 为你配置文件的 program 后面的名字
supervisorctl restart mysite
到目前为止你已经可以通过IP:端口号
来访问你的网站了,重启服务器也没有问题.
接下来是配置 Nginx
九、安装并配置 Nginx
# 安装 Nginx
sudo apt-get install nginx
可以直接访问 IP
看到 Nginx 的欢迎页面了,接下来配置转发.
提供配置文件 xx.conf( xx 为任意英文/数字字符)
server {
listen 80;
server_name 这里为你的IP 地址/ 域名;
#符号表
charset utf-8;
# 最大上传文件
client_max_body_size 75M;
#静态文件路径
location /static {
alias /home/yaotiancheng/mysite/static;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
# 这里的地址要与你在 supervisor 里面相同
proxy_pass http://127.0.0.1:2000;
}
}
这个配置文件可以放在工程目录内,想 Nginx 配置文件做软连接即可
更改为,重启 Nginx 或者 重新读取一遍 Nginx 配置文件即可.
十、大功告成!
到这里一般你的网站就已经布置好了,有什么问题块可以留言. 踩了无数的坑终于把网站部署好了...
感谢以下文章提供的帮助:
Nginx配置文件(nginx.conf)配置详解
感谢萧井陌大神提供的学习路线.