Flask(3): 在Linux系統上部署項目

? ? ? ? 1 前言

????????說實話,我并不想接觸linux系統,要記住太多的命令。我更習慣windows系統,鼠標點點,只要記住少量的命令就可以了。

? ? ? ? 但是我選擇了python,就注定無法逃避linux系統。雖然python也能在windows上很好的運行,但根據我的觀察,python更適合在linux系統上運行(在windows上,跟C#這類語言比,感覺python就像外人)。

? ? ? ? 既然躲不過,那就開干。就像我不想學JavaScript一樣,但涉及前端就躲不開它。誰讓咱是全(guang)棧(gan)開(si)發(ling)呢😂?

? ? ? ? 我決定從流行的ubuntu開始(雖然樹莓派的官方系統之前用過,不過不是當服務器用的,而且也多用的是圖形界面)。

????????正好我要參加一個考試,給了一個pdf題庫,只要背題就可以了。作為程序員怎么可能直接在pdf里面背題呢??做個答題系統不香嗎?我決定先用ai做個簡易答題系統,在ubuntu?server上部署,先用起來再說。

????????2?準備部署環境

????????2.1?更新服務器

????????確保目標服務器上的軟件是最新的,使用如下命令來更新Ubuntu服務器:

sudo apt update
sudo apt upgrade

????????2.2?安裝python和pip

????????Flask需要Python環境。確保目標服務器上安裝了Python 3和pip。

sudo apt install python3 python3-pip

????????一般情況下系統已經自帶,無需安裝。

????????2.3?安裝虛擬環境組件,并建立虛擬環境

? ? ? ? 使用如下命令安裝組件:

sudo apt install python3-venv

????????定位到項目部署目錄,執行如下命令:

python3 -m venv myprojectenv

????????注意:這里的“myprojectenv”是虛擬環境所在文件夾名稱,可以根據自己的需要換成其他名稱。

????????2.4?激活虛擬環境

????????運行如下命令來激活虛擬環境:

source myprojectenv/bin/activate

? ? ? ? 注意:?這里的“myprojectenv”是自定義的虛擬環境目錄名稱

????????3?安裝項目依賴的模塊

? ? ? ? 將項目代碼上傳到服務器的部署目錄下,記得先在開發環境使用“pip freeze > requirements.txt”命令生成requirements.txt文件

? ? ? ? 在服務器上已經激活的虛擬環境里安裝依賴:

pip install -r requirements.txt

????????4?使用tornado作為wsgi

? ? ? ? ????????在項目中使用tornado模塊來創建,示例如下:

? ? ? ? app.py的內容

from flask import Flaskapp = Flask(__name__)@app.route("/")
def hello():return "Hello, World!"

run.py的內容

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from app import app  # 導入你的Flask應用http_server = HTTPServer(WSGIContainer(app))
http_server.listen(8000)  # 定義監聽的端口
IOLoop.current().start()  # 啟動事件循環

????????5?運行項目

????????用上面的例子,在已經激活的虛擬環境中執行如下命令來運行項目:

python run.py

????????這時可以使用? ?http://ip地址:8000/? 來訪問。不過該方法的缺點是退出終端窗口后,程序也退出運行。要在后臺運行,可以使用nohup命令:

nohup python run.py &

? ? ? ? 我的答題系統運行界面如下,真的很簡易:

????????6?使用nginx作為反向代理

? ? ? ? 還可以再在外面加一層反向代理,應該可以讓系統更穩定可靠吧。我用的是nginx。

? ? ? ? 6.1?安裝nginx

sudo apt install nginx

? ? ? ? 6.2?配置nginx

?????????創建Nginx配置文件?,為該項目創建一個單獨的Nginx服務器配置文件。

sudo nano /etc/nginx/sites-available/myapp

????????這里的“myapp”是自定義的配置文件名稱。添加的內容示例:

server {listen 80;  #監聽端口server_name localhost;server_name 0.0.0.0;  #對外網開放location / {proxy_pass http://127.0.0.1:8000;  #轉發的網址,即wsgi訪問的地址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/ {alias /path/to/your/app/static/;}
}

????????proxy_set_header用來將原始請求的頭部信息傳遞給后端,確保應用能獲取正確的客戶端ip和主機名?

????????location /static/ 定義了如何處理靜態文件的請求。

????????alias /path/to/your/app/static/; 表示靜態文件的路徑。需要將 /path/to/your/app/static/ 替換為你的應用靜態文件的實際路徑,例如 /home/user/myapp/static/。?這樣靜態文件的請求就直接在這里發給前端,無需經過后端,減小后端的壓力。

????????6.3?激活nginx配置

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx

????????以上的路徑要根據實際情況替換,命令解釋如下:

sudo ln -s ...? 這個命令創建了一個符號鏈接,將你的配置文件從 sites-available 目錄鏈接到 sites-enabled 目錄,從而啟用該配置。

sudo nginx -t? 這個命令用于測試 Nginx 配置文件的語法是否正確。如果沒有錯誤,它會輸出 syntax is oktest is successful

sudo systemctl restart nginx? 這個命令重啟 Nginx 服務,使新的配置生效。

? ? ? ? 6.4 給nginx分配訪問文件的權限

????????查看 Nginx 運行用戶

ps aux | grep nginx

????????通常 Nginx 的工作用戶是 www-datanginx

????????修改文件夾權限

????????將 static 文件夾及其內容的所有者設置為 Nginx 用戶,并確保文件夾有讀取權限:

sudo chown -R www-data:www-data /path/to/your/static
sudo chmod -R 755 /path/to/your/static

????????如果使用的是 nginx 用戶,將上述命令中的 www-data 替換為 nginx

????????檢查父目錄權限

????????確保所有父目錄(如 /path/to/your/)對 Nginx 用戶開放執行權限:

sudo chmod o+x /path/to/your

????????6.5?nginx的維護

一般情況下nginx服務已經運行了。可以使用“sudo systemctl restart nginx”?重啟服務,還可以使用“tail -f /var/log/nginx/error.log”查看錯誤日志,了解運行情況。

7?后記

? ? ? ? 雖然目前并沒有使用linux系統的需求,但作為技術儲備也好,發覺linux的未來發展前景也罷,總要學習一點的。

? ? ? ? 現在部署的答題系統設計的非常簡易,代碼很少,基本是ai給出的,沒有用戶管理只支持一個人答題。計劃等考完繼續升級,不但支持多用戶,還要能使用小程序在手機上打開,再在gitcode上開源發布。趁著這個項目,既熟悉linux系統,又能學習小程序開發和發布開源項目,可謂一舉多得。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79805.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79805.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79805.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WIN10重啟開機不用登錄,直接進入桌面

我們個人機不需要登錄。 步驟1 置,帳戶,登錄選項,密碼。 輸入當前密碼后,直接下一步。 再次重啟,就會發現不需要密碼了。

idea中導入從GitHub上克隆下來的springboot項目解決找不到主類的問題

第一步:刪除目錄下的.idea和target,然后用idea打開 第二步:如果有需要,idea更換jdk版本 原文鏈接:https://blog.csdn.net/m0_74036731/article/details/146779040 解決方法(idea中解決)&#…

數字友好戰略視域下數字安全核心要素的理論解構與實踐路徑

本論文聚焦數字友好戰略框架下的數字安全核心要素,系統闡述數字安全的理論內涵、戰略價值與實踐路徑。通過多維度分析數字安全在個人、企業與國家層面的作用機制,結合國際法規標準與前沿技術實踐,揭示數字安全對構建可持續數字生態的關鍵支撐…

管理與維護samba服務器

允許 Linux、Unix 系統與 Windows 系統之間進行文件和打印機共享,使得不同操作系統的用戶能夠方便地訪問和共享資源,就像在同一局域網中的 Windows 計算機之間共享資源一樣。 server01安裝Samba服務器 [rootserver ~]# rpm -qa | grep samba [rootserver…

前端面試每日三題 - Day 8

這是我為準備前端/全棧開發工程師面試整理的第八天每日三題練習,涵蓋 JavaScript 閉包與執行上下文、React 性能優化與虛擬 DOM、以及高可用消息隊列架構設計。 ? 題目 1:深入理解 JavaScript 中的閉包與執行上下文 📘 解析: 閉…

996引擎-拓展變量:物品變量

996引擎-拓展變量:物品變量 測試代碼參考資料對于Lua來說,只有能保存數據庫的變量才有意義。 至于臨時變量,不像TXT那么束手束腳,通常使用Lua變量就能完成。 測試代碼 -- 存:物品拓展strfunction (player)local where =

現代Web應用中的高級模糊搜索實現:多條件組合查詢與性能優化

搜索功能是現代Web應用中提升用戶體驗的核心組件。本文將深入探討如何實現一個高效、靈活的前端模糊搜索解決方案,支持多條件組合查詢、精確匹配、模糊匹配以及時間范圍篩選。 需求分析與設計目標 核心需求場景 多字段模糊搜索:支持在多個字段中同時搜…

Selenium 實現自動化分頁處理與信息提取

Selenium 實現自動化分頁處理與信息提取 在 Web 自動化測試或數據抓取場景中,分頁處理是一個常見的需求。通過 Selenium,我們可以實現對多頁面內容的自動遍歷,并從中提取所需的信息。本文將詳細介紹如何利用 Selenium 進行自動化分頁處理和信…

VS qt 聯合開發環境下的多國語言翻譯

添加Linguist 文件方法,如同添加類文件的方式,那樣: 其他跟QT的一樣的流程,另外在main函數里要注冊一下, QTextCodec::setCodecForLocale(textCodec); QTranslator translator5; QString trans5 fi…

第十七節:高頻開放題-React未來發展趨勢

服務端組件(RSC)普及 React Compiler對開發模式的影響 React 未來發展趨勢深度解析:服務端組件與編譯器的革命性變革 一、服務端組件(RSC)的全面普及與生態重構 1. RSC 的核心理念與技術優勢 React Server Component…

Python爬蟲實戰:獲取B站查詢數據

一、引言 1.1 研究背景 隨著互聯網的迅猛發展,視頻分享平臺積累了海量的數據資源。以 B 站為例,其豐富的視頻內容和活躍的用戶群體蘊含著巨大的價值。對 B 站搜索數據進行爬取和分析,有助于洞察用戶興趣、市場趨勢以及內容創作方向,為市場調研、用戶行為分析和內容推薦系…

【Rust 精進之路之第3篇-變量觀】`let`, `mut` 與 Shadowing:理解 Rust 的變量綁定哲學

系列: Rust 精進之路:構建可靠、高效軟件的底層邏輯 作者: 碼覺客 發布日期: 2025-04-20 引言:為數據命名,Rust 的第一道“安全閥” 在上一篇文章中,我們成功搭建了 Rust 開發環境&#xff0c…

stm32(IO口的最高速度)

如果我們寫入速度 快到一種程度 肯定就不能完全按理想的來了 當我們寫01快起來 中間的保持時間就會越來越少 就逐漸往下面變化 所以其實 我們如果改變上升時間 和 下降時間 還是能將最后的波形 變成為正常的波形的。 不用追求高速 ,滿足要求下 選低速的即可。 因…

String +memset字符串類題型【C++】

tips: 1、尋找最大公共子串時,如果字符串可以旋轉但是不能反轉,考慮在每個字符串后重復一次自身,如 "abcd" 變為 "abcdabcd",這樣在用dp就可以了。 如何變環拆環為鏈: cin>>n&…

基于論文的大模型應用:基于SmartETL的arXiv論文數據接入與預處理(三)

上一篇 介紹了數據接入處理的整體方案設計。本篇介紹基于SmartETL框架的流程實現。 5. 流程開發 5.1.簡單采集流程 從指定時間(yy年 mm月)開始,持續采集arXiv論文。基于月份和順序號,構造論文ID,進而下載論文PDF文件…

[Swift]Xcode模擬器無法請求http接口問題

1.以前偷懶一直是這樣設置 <key>NSAppTransportSecurity</key> <dict><key>NSAllowsArbitraryLoads</key><true/><key>NSAllowsArbitraryLoadsInWebContent</key><true/> </dict> 現在我在Xcode16.3上&#xff…

Python基礎總結(八)之循環語句

文章目錄 一、for循環1.1 for循環格式1.2 for ...else1.3 for...break1.4 for...continue 二、while循環2.1 while循環格式2.2 while...break2.3 while...continue2.4 while ...else 循環語句就如其名&#xff0c;就是重復的執行一段代碼&#xff0c;直到滿足退出條件時&#x…

vuex實現同一頁面radio-group點擊不同按鈕顯示不同表單

本文實現的是點擊單一規格和多規格兩個按鈕會在頁面顯示不同的表單 方法一 <!-- 單規格和多規格的切換 --> <el-form label-width"80px" class"text-align-left"><el-form-item label"商品規格"><!-- 監聽skus_type的改…

AI編寫的“黑科技風格、自動刷新”的看板頁面

以下的 index.html 、 script.js 和 styles.css 文件&#xff0c;實現一個具有黑科技風格、自動刷新的能源管理系統實時監控看板。 html頁面 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name&q…

Vim使用完全指南:從基礎到高效編輯

Vim使用完全指南&#xff1a;從基礎到高效編輯 一、Vim簡介與基本概念 Vim&#xff08;Vi IMproved&#xff09;是從vi發展出來的一個功能強大的文本編輯器&#xff0c;以其高效性和靈活性著稱&#xff0c;特別適合程序開發和系統管理任務。與常規文本編輯器不同&#xff0c;…