为网站配置免费 SSL 证书

方案一:使用 Cloudflare

这是最简单有效的方案。Cloudflare 是一家优秀的 CDN 服务商,他为用户免费提供基础的 CDN 和 SSL 证书服务,并且提供了高度灵活的配置选项。它能帮你防御 DDOS 攻击,搞定 http 到 https 的重定向以及混合内容自动转换等等一系列问题,你只需要让 Cloudflare 接管你的域名解析服务就可以了。

方案二:使用 Let’s Encrypt

Let’s Encrypt 是一家免费、开放、自动化的证书颁发机构。我们可以使用官方提供的 acme.sh 脚本来申请并配置证书。

经过实测,使用 Let’s Encrypt 的证书后,网站的访问速度比之前慢了一倍,并且证书有效期只有半年,半年后你需要再次使用脚本来申请和部署。

如果你既想免费,又不喜欢折腾的话,还是选择 Cloudflare 吧。

使用 uWSGI 和 Nginx 部署 Flask 应用

Step 0: 准备工作

  • 安装并配置 Nginx,可以参考这篇教程
  • 在 DNS 配置里加入一条 A 记录,将你的域名指向你的 IP,适用于子域名配置;

Step 1: 安装 Pip 包管理器

Setp 2: 创建 Python 虚拟环境

Python 虚拟环境有助于将不同的应用之间的 python 环境隔离;用于创建和管理虚拟环境的模块为 venv

创建项目目录并为其创建虚拟化环境

激活上面创建的虚拟化环境

Step 3: 创建 Flask 应用

安装 wheel 包,以支持 wheel(.whl) 打包格式

然后,再安装 Flask 和 uWSGI

创建 Flask Demo 应用

测试新创建的 Flask 应用

通过浏览器访问 http://server-domain-or-ip:5000 将会看到页面

Flask sample app

在控制台 CTRL-C 可以结束上面的 Server

创建 WSGI 网关

Step 4: 配置 uWSGI

直接使用 python app.py 运行服务的方式只适合本地开发,线上运行时要保证更高的性能和稳定性,需要使用 uwsgi 进行部署。

使用 uwsgi 部署 Flask 只需要换一种命令来启动服务即可

  • –socket 0.0.0.0:5000:指定暴露端口号为 5000
  • –protocol=http:使用 http 协议
  • -w wsgi:app:-w 指明了要启动的模块,wsgi 就是项目启动文件 wsgi.py 去掉扩展名,app 是 wsgi.py 文件中的变量 app,即 Flask 实例

启动完成后,在任意网络连通的机器上打开浏览器,并访问 http://server-domain-or-ip:5000 将再次看到同样结果

Flask sample app

关掉控制台,并退出虚拟环境

创建 uWSGI配置文件

Step 5: 创建 Systemd Service 配置文件

启动上面 uWSGI 服务,并让其开机自动启动

Step 6: 配置 Nginx,反向代理 uWSGI 请求

新创建一个 nginx server 配置项,通过 uwsgi_pass 将请求传递给我们在 app.ini 中配置文件指定创建的 socket

要启用该 server 配置,只要需要将其符号连接到 sites-enabled 目录:

检查新加的 nginx 配置文件是否有语法错误

重启 nginx 服务项

重启完成后,由于 Nginx 本身监听的端口是 80 端口,因此我们可以直接访问域名或者机器 IP 进行访问。

Flask sample app

参考文章

How To Serve Flask Applications with uWSGI and Nginx on Ubuntu 18.04

Google Cloud VM 配置 SSH

创建实例后通过浏览器窗口打开 ssh 连接,为 root 设置密码:

修改实例的 ssh 配置文件 /etc/ssh/sshd_config

找到 PermitRootLogin 和 PasswordAuthentication ,修改如下:

重启 sshd 使配置生效:

在本地生成 ssh 公钥和私钥:

复制公钥(keyfile.pub)内容,进入谷歌云平台页面 -> 计算引擎 -> 元数据 -> SSH 密钥,粘贴保存。

接着便可以通过 ssh 客户端登录 VM 实例了:

Enjoy it~