- 原文地址:Running Flask with an SSH Remote Python Interpreter
- 原文作者:Ernst Haagsman
- 譯文出自:掘金翻譯計劃
- 本文永久連結:github.com/xitu/gold-m…
- 譯者:Starrier
- 校對者:shisaq
許多應用程式中出現 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 連結。
掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。