Flask 教程 第十七章:Linux上的部署
本文翻譯自The Flask Mega-Tutorial Part XVII: Deployment on Linux
這是Flask Mega-Tutorial系列的第十七部分,我將把Microblog部署到Linux伺服器。
在本章中,我將談到Microblog應用生命週期中的一個里程碑,因為我將討論如何將應用部署到生產伺服器上,以便真實使用者可以訪問它。
部署的主題非常廣泛,因此不可能在這裡涵蓋所有範疇。 本章致力於探討傳統託管方式,包括Ubuntu發行版的Linux伺服器和流行的樹莓派微機。 我將在後面的章節中介紹其他選項,例如雲和容器部署。
本章的GitHub連結為:Browse, Zip, Diff.
傳統託管
當提到“傳統託管”時,意思是應用是手動或通過原始伺服器機器上的指令碼安裝部署的。 該過程涉及安裝應用程式、其依賴項和生產規模的Web伺服器,並配置系統以確保其安全。
當你要部署自己的專案時,要問的第一個問題是在哪找伺服器。 目前有很多經濟的託管服務。 只需每月5美元,Digital Ocean,Linode或Amazon Lightsail就可以租借一臺虛擬化Linux伺服器(Linode和Digital Ocean為其入門級伺服器提供1GB RAM,而亞馬遜僅提供512MB)給你執行部署實驗。 如果你一分錢都不願意花,那麼Vagrant和VirtualBox組合而成的工具,可以讓你在自己的計算機上建立一個與付費伺服器類似的虛擬伺服器。
就技術角度而言,該應用可以部署在任何主流作業系統上,包括各種開放原始碼的Linux和BSD發行版以及商用的OS X(OS X是一個開源和商業的混種,因為它基於開源BSD衍生產品Darwin)和Microsoft Windows。
由於OS X和Windows是的桌面作業系統,不是作為伺服器的最佳選擇,因此不是首選。 Linux或BSD作業系統之間的選擇很大程度上取決於愛好,所以我將選擇其中更受歡迎的Linux。 而Linux發行版中,我將再次選擇受歡迎的Ubuntu。
建立Ubuntu伺服器
如果你有興趣與我一起部署,那麼就需要一臺伺服器才能開始工作。 為你推薦兩種選擇,一種是付費的,另一種是免費的。 如果你願意花一點錢,可以在Digital Ocean,Linode或Amazon Lightsail上註冊一個賬戶,並建立一個Ubuntu 16.04映象的虛擬伺服器。 你應該使用最低配置的伺服器,在我寫這篇文章的時候,三家的最低配置都是每月5美元。 開銷是按照伺服器啟動的小時數進行比例計算的,因此,如果你建立伺服器後,使用幾個小時然後刪除它,那麼有可能你只需支付美分級別的費用。
免費的方案基於你的計算機上可以執行虛擬機器。 要使用此選項,請在你的機器上安裝Vagrant和VirtualBox,然後建立一個名為Vagrantfile的檔案並用以下內容來描述虛擬機器的規格:
Vagrantfile:Vagrant配置。
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
end
該檔案配置了一個帶有1GB RAM的Ubuntu 16.04伺服器,你可以用其IP地址192.168.33.10來訪問該伺服器。 要建立伺服器,請執行以下命令:
$ vagrant up
請參閱Vagrant 命令列文件瞭解其他管理虛擬伺服器的選項。
使用SSH客戶端
你的伺服器處於後端,所以不需要像個人計算機上那樣擁有桌面。 你可以通過SSH客戶端連線到伺服器,並執行命令列進行互動。 如果你使用的是Linux或Mac OS X,則可能已經安裝了OpenSSH。 如果你使用Microsoft Windows,Cygwin,Git和Windows Subsystem for Linux提供OpenSSH,因此你可以安裝這些選項中的任何一個。
如果你正在使用來自第三方提供商的虛擬伺服器,則在建立伺服器時,會為其分配IP地址。 你可以使用以下命令開啟終端會話來連線到該伺服器:
$ ssh root@<server-ip-address>
系統會提示你輸入密碼。密碼已在建立伺服器後自動生成並顯示給你,或者你自己指定了密碼。
如果你使用的是Vagrant VM,則可以使用以下命令開啟終端會話:
$ vagrant ssh
如果你使用的是Windows並且擁有Vagrant虛擬機器,請注意你需要從可以呼叫ssh
命令的shell執行上述命令。
免密登入
如果你使用的是Vagrant虛擬機器,那麼可以跳過本節,因為你的虛擬機器已正確配置為使用名為ubuntu
的非root帳戶,Vagrant不用輸入密碼就可以自動登入。
要是你使用的是虛擬伺服器,則建議建立一個常規使用者來完成你的部署工作,並配置此帳戶以便在不使用密碼的情況下登入,這麼做最初看起來似乎是一個糟糕的主意, 之後你會發現它不僅更方便,而且更安全。
我將建立一個名為ubuntu
的使用者帳戶(如果你願意,可以使用其他名稱)。 要建立這個使用者,請使用前一節中的ssh
指令登入到你的伺服器的root帳戶,然後鍵入以下命令來建立使用者,給它sudo
許可權並最終切換到它:
$ adduser --gecos "" ubuntu
$ usermod -aG sudo ubuntu
$ su ubuntu
現在我要配置這個新的ubuntu
帳戶來使用public key認證,以便你可以免密登入。
先不管伺服器上開啟的終端會話,然後在本地計算機上啟動第二個終端。 如果你使用的是Windows,這需要是可以訪問ssh
命令的終端,所以它可能是一個bash
或者類似的提示符的終端,而不是本地的Windows終端。 在該終端會話中,檢查~/.ssh目錄的內容:
$ ls ~/.ssh
id_rsa id_rsa.pub
如果目錄列表顯示如上所述的名為id_rsa和id_rsa.pub的檔案,那麼你已經有一個金鑰。 如果沒有這兩個檔案,或者根本沒有~/.ssh目錄,則你需要執行以下命令(也是OpenSSH工具集的一部分)來建立SSH金鑰對:
$ ssh-keygen
此應用程式將提示你輸入一些內容,為此我建議你在所有提示中按Enter以接受預設設定。 你當然也可以做一些設定,如果你知道這麼做意味著什麼的話。
執行此命令後,應該有上面列出的兩個檔案了。 檔案id_rsa.pub是你的公鑰,這是一個你將提供給第三方的檔案,用於識別你的身份。 id_rsa檔案是你的私鑰,不應與任何人共享。
你現在需要將公鑰配置為伺服器中的授權主機。 在你自己的計算機上開啟的終端上,將公鑰列印到螢幕上:
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjw....F8Xv4f/0+7WT miguel@miguelspc
這將是一個非常長的字元序列,顯示時可能跨越多行(但實際上只有一行)。 你需要將此資料複製到剪貼簿,然後切換回遠端伺服器上的終端,你將在其中執行以下命令來儲存公鑰:
$ echo <paste-your-key-here> >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
免密登入現在應該可以工作了。 背後邏輯是,你機器上的ssh
會用私鑰執行加密操作來向伺服器標識自己。 然後伺服器使用你的公鑰驗證操作是否有效。
你現在可以登出ubuntu
會話,然後登出root
會話,然後嘗試直接登入到ubuntu
帳戶:
$ ssh ubuntu@<server-ip-address>
這一次不用輸入密碼就登入了!
保護你的伺服器
為了最大限度地降低伺服器受到攻擊的風險,你可以採取一些措施來關閉攻擊者可能訪問的大量潛在漏洞。
我要做的第一個更改是禁用root使用者通過SSH登入。 你現在可以無密碼地訪問ubuntu
帳戶,並且可以通過sudo
從該帳戶執行管理員命令,因此實際上不需要暴露root帳戶。 要禁用root登入,你需要編輯伺服器上的/etc/ssh/sshd_config檔案。 你可能在你的伺服器上安裝了vi
和nano
文字編輯器,你可以用它來編輯檔案(如果你不熟悉這兩種檔案編輯器,可以首先嚐試nano
)。 由於SSH配置對普通使用者是不可訪問的,所以你需要在編輯器命令前新增sudo
(即sudo vi /etc/ssh/sshd_config
)。 你需要更改此檔案中的單行:
/etc/ssh/sshd_config:禁止root登入。
PermitRootLogin no
請注意,要進行此更改,你需要找到以PermitRootLogin
開頭的行(找不到就新建一行)並將該值更改為no
。
下一個更改在同一個檔案中。 現在我要為所有帳戶禁用密碼登入。 你有一個無密碼的登入設定,所以沒有必要允許密碼。 如果你對完全禁用密碼感到緊張,可以跳過此更改,但對於生產伺服器來說,這是一個非常好的主意,因為攻擊者經常在所有伺服器上嘗試隨機帳戶名和密碼並希望能中獎。 要禁用密碼登入,請在/etc/ssh/sshd_config中更改以下行:
/etc/ssh/sshd_config:禁用密碼登入。
PasswordAuthentication no
完成編輯SSH配置後,需要重新啟動ssh服務以使更改生效:
$ sudo service ssh restart
我要做的第三個改變是安裝防火牆。 這是一個阻止在任何未明確啟用的埠上訪問伺服器的軟體:
$ sudo apt-get install -y ufw
$ sudo ufw allow ssh
$ sudo ufw allow http
$ sudo ufw allow 443/tcp
$ sudo ufw --force enable
$ sudo ufw status
這些命令會安裝ufw(簡單防火牆),並將其配置為僅允許埠22(ssh),80(http)和443(https)上的外部通訊。 任何其他埠將不被允許。
安裝基礎依賴
如果你遵循了我的建議並配置了Ubuntu 16.04發行版的伺服器,那麼你的系統完全支援Python 3.5,因此這是我將用於部署的Python版本。
基礎的Python直譯器可能已經預先安裝在你的伺服器上,但有一些額外的軟體包可能卻沒有,而且Python之外還有一些其他軟體包可用於建立健壯的生產環境部署。 對於資料庫伺服器,我將從SQLite切換到MySQL。 Postfix包是一個郵件傳輸代理,我將用它來傳送電子郵件。 Supervisor工具將監視Flask伺服器程式,並在其崩潰時自動重啟,並當Supervisor服務重啟後自動啟動其監視的服務。 Nginx伺服器將接受來自外部世界的所有請求,並將它們轉發給應用程式。 最後,我將使用git來從git倉庫下載應用程式。
$ sudo apt-get -y update
$ sudo apt-get -y install python3 python3-venv python3-dev
$ sudo apt-get -y install mysql-server postfix supervisor nginx git
這些安裝大部分是無人值守的,但是在執行第三條安裝語句到一定進度時,系統會提示你為MySQL服務選擇一個root密碼,並且還會詢問關於安裝postfix軟體包的一些問題,你可以接受他們的預設答案。
請注意,對於此部署,我選擇不安裝Elasticsearch。 這項服務需要大量的RAM,所以只有擁有超過2GB記憶體的大型伺服器時才可以考慮。 為了避免伺服器記憶體不足的問題,我將停用搜尋功能。 如果你有高配的伺服器,可以從Elasticsearch站點下載官方的.deb軟體包,並按照其安裝說明將其新增到你的伺服器。 請注意,Ubuntu 16.04軟體包儲存庫中提供的Elasticsearch軟體包太舊,無法執行,你需要6.x或更高版本。
我還注意到,預設安裝的postfix可能不足以在生產環境中傳送電子郵件。 為了避免垃圾郵件和惡意郵件,很多伺服器都要求發件人伺服器通過安全擴充套件標識自己,這意味著至少你必須擁有與你的伺服器相關聯的域名。 如果你想了解如何完全配置電子郵件伺服器以使其通過標準安全測試,請參閱以下Digital Ocean的指南:
安裝應用
現在我要使用git
從我的GitHub程式碼庫下載Microblog原始碼。 如果你不熟悉git原始碼控制,我建議你閱讀git for beginners。
要將應用下載到伺服器,請確保你位於ubuntu
使用者的主目錄中,然後執行:
$ git clone https://github.com/miguelgrinberg/microblog
$ cd microblog
$ git checkout v0.17
這會將程式碼克隆到你的伺服器上,並將其同步到本章的內容。 如果你在學習本教程的過程中維護了自己的git程式碼庫,則可以將程式碼庫URL更改為你的URL,在這種情況下,你可以跳過git checkout
命令。
現在我需要建立一個虛擬環境並使用所有的包依賴項來填充它,在第十五章中,我已將依賴包的列表儲存到requirements.txt檔案中:
$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install -r requirements.txt
除了requirements.txt中的包之外,我還將使用此生產部署指定的兩個包,因此它們不包含在requirements.txt檔案中。 gunicorn
軟體包是Python應用程式的生產Web伺服器。 pymysql
軟體包包含MySQL驅動程式,它使SQLAlchemy能夠與MySQL資料庫一起工作:
(venv) $ pip install gunicorn pymysql
我需要建立一個.env檔案,其中包含所有需要的環境變數:
/home/ubuntu/microblog/.env:環境配置。
SECRET_KEY=52cb883e323b48d78a0a36e8e951ba4a
MAIL_SERVER=localhost
MAIL_PORT=25
DATABASE_URL=mysql+pymysql://microblog:<db-password>@localhost:3306/microblog
MS_TRANSLATOR_KEY=<your-translator-key-here>
這個.env檔案與我在第十五章展示的非常類似,但是我為SECRET_KEY使用了一個隨機字串。 為了生成這個隨機字串,我使用了下面的命令:
python3 -c "import uuid; print(uuid.uuid4().hex)
對於DATABASE_URL
變數,我定義了一個MySQL URL。 我將在下一節中向你介紹如何配置資料庫。
我需要將FLASK_APP
環境變數設定為應用程式的入口點以啟用flask
命令,但在解析.env檔案之前需要此變數,因此需要手動設定。 為避免每次都設定它,我把它新增到ubuntu
帳戶的~/.profile檔案的底部,以便每次登入時自動設定它:
$ echo "export FLASK_APP=microblog.py" >> ~/.profile
如果你登出並重新登入,現在FLASK_APP
就已經設定好了。 你可以通過執行flask --help
來確認它是否已經設定好了。 如果幫助資訊顯示應用程式已新增的translate
命令,那麼你就知道應用程式已被找到。
現在flask
命令是有效的,我可以編譯語言翻譯:
(venv) $ flask translate compile
設定MySQL
我在開發過程中使用過的sqlite資料庫非常適合簡單的應用程式,但是當部署可能需要一次處理多個請求的健壯Web伺服器時,最好使用更強大的資料庫。 出於這個原因,我要建立一個名為’microblog’的MySQL資料庫。
要管理資料庫伺服器,我將使用mysql
命令,該命令應該已經安裝在你的伺服器上:
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.19-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
請注意,你需要鍵入你在安裝MySQL時選擇的MySQL root密碼才能訪問MySQL命令提示符。
這些是建立名為microblog
的新資料庫的命令,以及具有完全訪問許可權的同名使用者:
mysql> create database microblog character set utf8 collate utf8_bin;
mysql> create user 'microblog'@'localhost' identified by '<db-password>';
mysql> grant all privileges on microblog.* to 'microblog'@'localhost';
mysql> flush privileges;
mysql> quit;
你將需要用你選擇的密碼來替換<db-password>
。 這將是microblog
資料庫使用者的密碼,所以不要使用你已為root使用者選擇的密碼。 microblog
使用者的密碼需要與你包含在.env檔案中的DATABASE_URL
變數中的密碼相匹配。
如果你的資料庫配置是正確的,你現在應該能夠執行資料庫遷移以建立所有的表:
(venv) $ flask db upgrade
繼續下一步之前,確保上述命令成功完成且不會產生任何錯誤。
設定Gunicorn和Supervisor
當你使用flask run
執行伺服器時,正在使用的是Flask附帶的Web伺服器。 該伺服器在開發過程中非常有用,但它不適合用於生產伺服器,因為它不考慮效能和穩健性。 取而代之,我決定使用gunicorn,它是一個純粹的Python Web伺服器,但與Flask不同,它是一個支援高併發的強大生產伺服器,同時它也非常容易使用。
要在gunicorn下啟動Microblog,你可以使用以下命令:
(venv) $ gunicorn -b localhost:8000 -w 4 microblog:app
-b
選項告訴gunicorn在哪裡監聽請求,我在8000埠上監聽了內部網路介面。 在沒有外部訪問的情況下執行Python Web應用程式通常是一個好主意,然後還需要一個非常快速的Web伺服器,它可以優化來自客戶端的所有靜態檔案的請求。 這個快速的Web伺服器將直接提供靜態檔案,並將用於應用程式的任何請求轉發到內部伺服器。 我將在下一節中向你展示如何將nginx設定為面向公眾的伺服器。
-w
選項配置gunicorn將執行多少worker。 擁有四個程式可以讓應用程式同時處理多達四個客戶端,這對於Web應用程式通常足以處理大量客戶端請求,因為並非所有客戶端都在不斷請求內容。 根據伺服器的RAM大小,你可能需要調整worker數量,以免記憶體不足。
microblog:app
引數告訴gunicorn如何載入應用程式例項。 冒號前的名稱是包含應用程式的模組,冒號後面的名稱是此應用程式的名稱。
雖然gunicorn的設定非常簡單,但從命令列執行伺服器在生產伺服器實際上不是一個恰當的方案。 我想要做的是讓伺服器在後臺執行,並持續監視,因為如果由於某種原因導致伺服器崩潰並退出,我想確保新的伺服器自動啟動以取代它。 而且我還想確保如果機器重新啟動,伺服器在啟動時自動執行,而無需人工登入和啟動。 我將使用上面安裝的supervisor包來執行此操作。
Supervisor使用配置檔案定義它要監視什麼程式以及如何在必要時重新啟動它們。 配置檔案必須儲存在/etc/supervisor/conf.d中。 這是Microblog的配置檔案,我將其稱為microblog.conf:
/etc/supervisor/conf.d/microblog.conf:Supervisor配置。
[program:microblog]
command=/home/ubuntu/microblog/venv/bin/gunicorn -b localhost:8000 -w 4 microblog:app
directory=/home/ubuntu/microblog
user=ubuntu
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
command
,directory
和user
設定告訴supervisor如何執行應用程式。 如果計算機啟動或崩潰,autostart
和autorestart
設定會使microblog自動重新啟動。 stopasgroup
和killasgroup
選項確保當supervisor需要停止應用程式來重新啟動它時,它仍然會排程成頂級gunicorn程式的子程式。
編寫此配置檔案後,必須過載supervisor服務的配置才能匯入它:
$ sudo supervisorctl reload
像這樣,這個gunicorn web伺服器就已經啟動和執行,並處於監控之中!
設定Nginx
由gunicorn啟動的microblog應用伺服器現在執行在本地埠8000。 我現在需要做的是將應用程式暴露給外部世界,為了使面向公眾的web伺服器能夠被訪問,我在防火牆上開啟了兩個埠(80和443)來處理應用程式的Web通訊。
我希望這是一個安全的部署,所以我要配置埠80將所有流量轉發到將要加密的埠443。 我將首先建立一個SSL證照。建立一個自簽名SSL證照,這對於測試是可以的,但對於真正的部署不太好,因為Web瀏覽器會警告使用者,證照不是由可信證照頒發機構頒發的。 建立microblog的SSL證照的命令是:
$ mkdir certs
$ openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
-keyout certs/key.pem -out certs/cert.pem
該命令將要求你提供關於應用程式和你自己的一些資訊。 這些資訊將包含在SSL證照中,如果使用者請求檢視它,Web瀏覽器則會向使用者顯示它們。上述命令的結果將是名為key.pem和cert.pem的兩個檔案,我將其放置在Microblog根目錄的certs子目錄中。
要有一個由nginx服務的網站,你需要為它編寫配置檔案。 在大多數nginx安裝中,這個檔案需要位於/etc/nginx/sites-enabled目錄中。Nginx在這個位置安裝了一個我不需要的測試站點,所以我將首先刪除它:
$ sudo rm /etc/nginx/sites-enabled/default
下面你可以看到Microblog的nginx配置檔案,它在/etc/nginx/sites-enabled/microblog中:
/etc/nginx/sites-enabled/microblog:Nginx配置。
server {
# listen on port 80 (http)
listen 80;
server_name _;
location / {
# redirect any requests to the same URL but on https
return 301 https://$host$request_uri;
}
}
server {
# listen on port 443 (https)
listen 443 ssl;
server_name _;
# location of the self-signed SSL certificate
ssl_certificate /home/ubuntu/microblog/certs/cert.pem;
ssl_certificate_key /home/ubuntu/microblog/certs/key.pem;
# write access and error logs to /var/log
access_log /var/log/microblog_access.log;
error_log /var/log/microblog_error.log;
location / {
# forward application requests to the gunicorn server
proxy_pass http://localhost:8000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static {
# handle static files directly, without forwarding to the application
alias /home/ubuntu/microblog/static;
expires 30d;
}
}
Nginx的配置不易理解,但我新增了一些註釋,至少你可以知道每個部分的功能。 如果你想獲得關於特定指令的資訊,請參閱nginx官方文件。
新增此檔案後,你需要告訴nginx重新載入配置以啟用它:
$ sudo service nginx reload
現在應用程式應該部署成功了。 在你的Web瀏覽器中,可以鍵入伺服器的IP地址(如果使用的是Vagrant VM,則為192.168.33.10),然後該伺服器將連線到應用程式。 由於你使用的是自簽名證照,因此將收到來自Web瀏覽器的警告,你必須解除該警告。
使用上述說明為自己的專案完成部署之後,我強烈建議你將自簽名證照替換為真實的證照,以便瀏覽器不會在使用者訪問你的網站時發出警告。 為此,你首先需要購買域名並將其配置為指向你的伺服器的IP地址。 一旦你有一個域名,你可以申請一個免費的Let’s Encrypt SSL證照。 我在部落格上寫了一篇關於如何通過HTTPS執行你的Flask應用程式的詳細文章。
部署應用更新
我想討論的基於Linux的部署的最後一個主題是如何處理應用程式升級。 應用程式原始碼通過git
安裝在伺服器中,因此,無論何時想要將應用程式升級到最新版本,都可以執行git pull
來下載自上次部署以來的新提交。
當然,下載新版本的程式碼不會導致升級。 當前正在執行的伺服器程式將繼續執行,舊程式碼已被讀取並儲存在記憶體中。 要觸發升級,你必須停止當前的伺服器並啟動一個新的伺服器,以強制重新讀取所有程式碼。
進行升級通常比重新啟動伺服器更為複雜。 你可能需要應用資料庫遷移或編譯新的語言翻譯,因此實際上,執行升級的過程涉及一系列命令:
(venv) $ git pull # download the new version
(venv) $ sudo supervisorctl stop microblog # stop the current server
(venv) $ flask db upgrade # upgrade the database
(venv) $ flask translate compile # upgrade the translations
(venv) $ sudo supervisorctl start microblog # start a new server
樹莓派託管
樹莓派是一款革命性低成本的小型Linux計算機,功耗非常低,因此它是託管家庭線上伺服器的理想裝置,可以全天候線上而無需捆綁你的臺式電腦或膝上型電腦。 有幾個Linux發行版可以在樹莓派上執行。 我的選擇是Raspbian,這是樹莓派基金會的官方發行版。
為了準備樹莓派的環境,我要安裝一個新的Raspbian版本。 我將使用2017年9月版的Raspbian Stretch Lite,但在閱讀本文時,可能會有更新的版本,請檢視官方下載頁面獲得最新版本。
Raspbian映象需要安裝在SD卡上,然後插入樹莓派,以便它啟動時可以識別到。 在樹莓派站點上可以檢視到從Windows,Mac OS X和Linux將Raspbian映象複製到SD卡的方法。
當你第一次啟動樹莓派時,請在連線到鍵盤和顯示器時進行操作,以便你可以進行設定。 至少應該啟用SSH,以便你可以從計算機登入並方便地執行部署任務。
和Ubuntu一樣,Raspbian也是Debian的衍生產品,所以上面針對的Ubuntu Linux的說明,大部分都可以在樹莓派上生效。 但是,如果你計劃在家庭網路上執行小型應用程式而無需外部訪問時,則可以跳過某些步驟。 例如,你可能不需要防火牆或無密碼登入。 你可能想在這樣一臺小型的計算機上使用SQLite而不是MySQL。 你可以選擇不使用nginx,並且讓gunicorn伺服器直接監聽來自客戶端的請求。 你可能只想要一個gunicorn worker程式。 Supervisor服務對於確保應用程式始終處於執行狀態非常有用,因此我建議你仍然在樹莓派上使用它。
相關文章
- 《Flask 入門教程》 第 2 章:Hello, Flask!Flask
- 第43篇 Linux上使用docker部署.net8專案詳細教程LinuxDocker
- Flask——Linux+Nginx+Uwsgi+Supervisor 部署FlaskLinuxNginx
- 《Flask 入門教程》第 3 章:模板Flask
- flask筆記:部署flaskFlask筆記
- 《Flask 入門教程》第 6 章:模板優化Flask優化
- Kettle 在 linux 上的部署Linux
- 教程帖:使用TensorFlow服務和Flask部署Keras模型!FlaskKeras模型
- 教程 Redis+ flask+vue 線上聊天RedisFlaskVue
- 《Flask 入門教程》第 4 章:使用靜態檔案Flask
- 【Flask】線上部署Flask
- Flask系列教程(26)——Flask-ScriptFlask
- 給小白的 PostgreSQL 容器化部署教程(上)SQL
- Flask 應用如何部署Flask
- CentOS 部署 flask專案CentOSFlask
- Python Flask Web教程001:Flask簡介PythonFlaskWeb
- flask入門教程Flask
- Flask環境github部署(十三)FlaskGithub
- docker-compose部署redis,flaskDockerRedisFlask
- Flask web專案 gunicorn部署FlaskWeb
- [python][flask] Flask 圖片上傳與下載例子(支援漂亮的拖拽上傳)PythonFlask
- Ubuntu16.04 flask + nginx + uWSGI 部署UbuntuFlaskNginx
- [譯]Flask教程–請求物件Flask物件
- Linux系統DolphinScheduler3.1.5安裝部署教程。Linux
- .Net 6.0 部署Linux+Nginx +PM2教程LinuxNginx
- Linux 環境下如何安裝部署 RocketMQ 教程LinuxMQ
- Python教程系列之Flask框架的學習PythonFlask框架
- Flask——檔案上傳Flask
- 用uWSGI和Nginx部署Flask專案NginxFlask
- 10RMB/月不到部署FLASK網站專案(flask+gunicorn+nginx)Flask網站Nginx
- 教程|雲幫手部署Linux公有云管理系統Linux
- Flask教程第十四章:AjaxFlask
- Flask教程第十一章:美化Flask
- 將 java 專案部署到 linux 上的具體步驟JavaLinux
- Flask 生產環境部署(Falsk + uWSGI + nginx)FlaskNginx
- 如何使用flask將模型部署為服務Flask模型
- 在linux伺服器上搭建slurm叢集部署Linux伺服器
- [譯]Flask教程–重定向與錯誤Flask