[译] 通过 SSH 远程使用 Python 解释器来运行 Flask

许多应用程序中出现 bug 的普遍原因是开发环境和生产环境不同。虽然在大多数情况下不可能为开发提供生产环境中的精确副本,但追求生产-开发的均衡是值得的。

大多数应用程序会被部署到某种类型的 Linux 虚拟机中。或许你正在使用的是传统的 web 主机,即所谓的 VPS 主机。

如果我们想在一个类似于我们生产环境的环境中进行开发,那我们如何才能做到这一点呢?最好的方法就是为了开发目的而设置第二个虚拟机。让我们看看 PyCharm 是如何连接到 VPS 环境。

我们的应用程序

我太懒了,所以我将使用自己去年做的一款 web-app 作为示例。该应用程序是一个非常简单的老式留言系统。在去年的博客中,我使用 Dockeer Compose 来描述了一个包含 Python 服务和 PostgreSQL 数据库的环境。

首先克隆仓库,然后切换到 ‘with-database’ 分支。打开项目之后,我们需要配置服务器。我使用 AWS EC2 实例,但是你也可以使用任何其他的 Linux 环境(包括树莓派)。

想要配置解释器,请打开设置/项目设置,并使用齿轮图标添加解释器:

在左边选择 SSH。如果你没有看到 SSH,首先要确保自己使用的是 PyCharm Professional 2018 或者更高版本。然后,按照指示链接到 SSH 框即可:

在本教程中,我们将主要使用默认值。唯一的例外是你的 Linux 环境只安装了 Python 3,而且并没有将 /usr/bin/python 连接到该版本。考虑到 AWS 的当前版本 Ubuntu 16.04 AMI,我们将确保会更改解释器路径:

我们配置好解释器后,就可以开始运行代码了。比如,打开 Python 控制台,就可以在远程控制台上运行代码了:

在我们可以运行我们 Flask 脚本之前,还有一些事情需要我们处理。

配置我们的环境

Docker Compose 非常方便,因为它允许我们以非常简洁的方式指定和配置服务器。如果我们想要在常规 Linux 机器上工作,我们需要自己处理这个配置。因此,我们先开始下载 PostgreSQL。

打开 SSH 会话,也可以转到工具/SSH 会话,或者使用 Ctrl+Shift+A 查找 ‘Start SSH session’ 操作:

现在,我们可以运行 sudo apt-get install postgresql。如果你正在树莓派上实验,也是如此。如果我们正在开发一个应用程序,那么记录我们正在做的事情,可以确保我们以后正确重现环境。

一款配置 Linux 机器的优秀软件是 Ansible。使用 Ansible,我们可以通过 YAML 文件来描述 Linux 服务器的所需状态,然后使用 Ansible 工具来应用所需的配置。

用 Ansible 安装 PostgreSQL,如下所示:

- hosts: localhost
  become: yes
  tasks:
   - name: Install PostgreSQL
     apt:
       name: postgresql-9.5
复制代码

如果我们使用这些内容新建一个 setup.yml 文件,PyCharm 会自动将其上传到我们在项目配置期间配置的位置。默认情况下,这是 /tmp/ 的子文件夹。因此,我们先安装 Ansible,导航到这个文件夹,运行这个文件(在 Ansible 术语中称为 playbook)。你可以通过在服务器上运行这些命令(使用你之前启动的 SSH 会话)来实现这一点:

sudo apt update && sudo apt install -y ansible
cd /tmp/pycharm*
ansible-playbook ./setup.yml
复制代码

看下这个,PostgreSQL 已经安装了:

我们可以使用 Ansible 做一些更酷的事情,比如配置虚拟环境:

- name: Install pip
  apt:
    name: python3-pip

- name: Copy requirements
  copy:
    src: requirements.txt
    dest: /tmp/requirements.txt

- name: Install virtualenv
  pip:
    name: virtualenv
    executable: pip3

- name: Set up virtualenv
  become: false
  pip:
    requirements: /tmp/requirements.txt
    virtualenv: /home/ubuntu/venv
    virtualenv_python: python3
复制代码

我们将这些任务添加到 playbook(setup.yml)并重新运行之后,就可以重新配置 PyCharm 来使用远程 venv 而不是我们环境的系统解释器。为此,请返回到设置解释器的界面。使用齿轮图标选择“显示所有”,然后单击铅笔编辑解释器。更改虚拟环境 (/home/ubuntu/venv/bin/python)中 Python 可执行文件的路径:

既然我们已经准备妥当,我们可以运行 Flask 来运行配置。让我们先编辑它,这样它就可以从外界获取。我们需要提供 host=0.0.0.0 作为 Flask 的附加选项:

如果你在 AWS 或类似的提供者上运行此代码,则可能需要在防火墙中打开端口 5000。在 AWS 上,你需要向安全组添加一个新规则,允许 TCP 端口 5000 上的入站流量从 0.0.0.0/0 开始。

现在点击 debug 按钮来运行 Flask:

让我们访问下我们的页面!

用 Butters Stotch 的话来说:oh hamburgers。如果我们回顾一下 PyCharm,就会在调试窗口看到堆栈的跟踪信息,这表明我们仍然需要完成数据库连接。

在 Flask 应用程序中,为了用于 Docker Compose 配置,数据库主机被设置为 ‘db’。我们将其改为 127.0.0.1

g.db = psycopg2.connect(dbname='flaskapp',
                       user='flaskapp',
                       password='hunter2',
                       host='127.0.0.1')
复制代码

我们实际上还需要创建数据库和表。感谢我们的朋友 Ansible 可以帮助我们!为了保证这篇博客更短一些,我会跳过一些细节。切换到 ‘ansible’ 分支。然后运行以下 SSH 命令:

cd /tmp/pycharm*
ansible-playbook setup.yml
ansible-playbook clean-db.yml
复制代码

第一个剧本会配置 PostgreSQL 用户账户。第二个剧本会删除已存在的数据库,然后创建一个干净的数据库。在这个数据库中,运行 schema.sql 文件来创建这个应用程序所需要的表。

你还可以使用 PyCharm 来运行 SQL 命令并检查数据库。 阅读我们关于在树莓派上运行代码的文章来了解更多内容

The Finish Line

在设置数据库后,我们应该可以使用调试配置再次启动 Flask,并查看我们的炫酷的留言系统:

当然,如果我们要在代码中添加一个断点,我们现在就可以选中它了。尝试一下,然后告诉我们它的进展!

如果你对 DevOps 感兴趣,而且想了解更多信息:阅读我们的 AWS 高级教程、我们的树莓派教程或者我们的 Docker Compose 教程。如果你还有其他想了解的内容,请在评论中告诉我们!

如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值