[譯] 經過 SSH 遠程使用 Python 解釋器來運行 Flask

許多應用程序中出現 bug 的廣泛緣由是開發環境和生產環境不一樣。雖然在大多數狀況下不可能爲開發提供生產環境中的精確副本,但追求生產-開發的均衡是值得的。html

大多數應用程序會被部署到某種類型的 Linux 虛擬機中。或許你正在使用的是傳統的 web 主機,即所謂的 VPS 主機。前端

若是咱們想在一個相似於咱們生產環境的環境中進行開發,那咱們如何才能作到這一點呢?最好的方法就是爲了開發目的而設置第二個虛擬機。讓咱們看看 PyCharm 是如何鏈接到 VPS 環境。python

咱們的應用程序

我太懶了,因此我將使用本身去年作的一款 web-app 做爲示例。該應用程序是一個很是簡單的老式留言系統。在去年的博客中,我使用 Dockeer Compose 來描述了一個包含 Python 服務和 PostgreSQL 數據庫的環境。android

首先克隆倉庫,而後切換到 ‘with-database’ 分支。打開項目以後,咱們須要配置服務器。我使用 AWS EC2 實例,可是你也可使用任何其餘的 Linux 環境(包括樹莓派)。ios

想要配置解釋器,請打開設置/項目設置,並使用齒輪圖標添加解釋器:git

添加解釋器

在左邊選擇 SSH。若是你沒有看到 SSH,首先要確保本身使用的是 PyCharm Professional 2018 或者更高版本。而後,按照指示連接到 SSH 框便可:github

鏈接到 SSH

在本教程中,咱們將主要使用默認值。惟一的例外是你的 Linux 環境只安裝了 Python 3,並且並無將 /usr/bin/python 鏈接到該版本。考慮到 AWS 的當前版本 Ubuntu 16.04 AMI,咱們將確保會更改解釋器路徑:web

添加 SSH 解釋器 —— 第二步

咱們配置好解釋器後,就能夠開始運行代碼了。好比,打開 Python 控制檯,就能夠在遠程控制檯上運行代碼了:sql

Python 遠程控制檯

在咱們能夠運行咱們 Flask 腳本以前,還有一些事情須要咱們處理。docker

配置咱們的環境

Docker Compose 很是方便,由於它容許咱們以很是簡潔的方式指定和配置服務器。若是咱們想要在常規 Linux 機器上工做,咱們須要本身處理這個配置。所以,咱們先開始下載 PostgreSQL。

打開 SSH 會話,也能夠轉到工具/SSH 會話,或者使用 Ctrl+Shift+A 查找 ‘Start SSH session’ 操做:

開啓 SSH 會話

如今,咱們能夠運行 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 Output

咱們可使用 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 的附加選項:

Flask Run Configuration

若是你在 AWS 或相似的提供者上運行此代碼,則可能須要在防火牆中打開端口 5000。在 AWS 上,你須要向安全組添加一個新規則,容許 TCP 端口 5000 上的入站流量從 0.0.0.0/0 開始。

如今點擊 debug 按鈕來運行 Flask:

Flask Starts

讓咱們訪問下咱們的頁面!

500 Error

用 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,並查看咱們的炫酷的留言系統:

Results

固然,若是咱們要在代碼中添加一個斷點,咱們如今就能夠選中它了。嘗試一下,而後告訴咱們它的進展!

若是你對 DevOps 感興趣,並且想了解更多信息:閱讀咱們的 AWS 高級教程、咱們的樹莓派教程或者咱們的 Docker Compose 教程。若是你還有其餘想了解的內容,請在評論中告訴咱們!

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索