- 原文地址:Running Flask with an SSH Remote Python Interpreter
- 原文做者:Ernst Haagsman
- 譯文出自:掘金翻譯計劃
- 本文永久連接:github.com/xitu/gold-m…
- 譯者:Starrier
- 校對者:shisaq
許多應用程序中出現 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
在本教程中,咱們將主要使用默認值。惟一的例外是你的 Linux 環境只安裝了 Python 3,並且並無將 /usr/bin/python 鏈接到該版本。考慮到 AWS 的當前版本 Ubuntu 16.04 AMI,咱們將確保會更改解釋器路徑:web
咱們配置好解釋器後,就能夠開始運行代碼了。好比,打開 Python 控制檯,就能夠在遠程控制檯上運行代碼了:sql
在咱們能夠運行咱們 Flask 腳本以前,還有一些事情須要咱們處理。docker
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 命令並檢查數據庫。 閱讀咱們關於在樹莓派上運行代碼的文章來了解更多內容。
在設置數據庫後,咱們應該可使用調試配置再次啓動 Flask,並查看咱們的炫酷的留言系統:
固然,若是咱們要在代碼中添加一個斷點,咱們如今就能夠選中它了。嘗試一下,而後告訴咱們它的進展!
若是你對 DevOps 感興趣,並且想了解更多信息:閱讀咱們的 AWS 高級教程、咱們的樹莓派教程或者咱們的 Docker Compose 教程。若是你還有其餘想了解的內容,請在評論中告訴咱們!
若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。
掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。