昨天伺服器開了一個新管理員賬號,用的弱口令,導致被黑了,ssh也不能登入,沒辦法,只能重灌系統,還好沒重要資料,伺服器上只跑了一個公交的api和部落格,早上重灌了系統,環境從新搭建,記錄下。
伺服器是騰訊雲的,系統是ubuntu18.04,自帶python2和python3,我的專案是基於python3的,所以可以直接使用。
1.安裝依賴包
sudo apt install python3-pipsudo apt install build-essential python-dev python-setuptoolssudo apt install build-essential python3-dev python3-setuptools
2.安裝virtualenv
Virtualenv用來建立一個虛擬的python環境,可以為每個Python應用建立獨立的開發環境,使他們互不影響,Virtualenv 能夠做到:
在沒有許可權的情況下安裝新套件不同應用可以使用不同的套件版本套件升級不影響其他應用pip3 install virtualenv
檢視是否安裝成功
安裝成功,接下來就要使用它了,我的專案是個api服務,我把我的專案檔案放在/opt下,檔名為busAPI,我把我的專案檔案都放在裡面
安裝虛擬環境,名字叫venv,必須進入到專案目錄裡,
virtualenv venv
在專案目錄下就會建立一個新的 venv 目錄,裡面就是執行python 的基本環境的工具與指令和包。然後啟用該環境。
source venv/bin/activate
呼叫 activate 指令後命令符前就會出現 (venv) 字樣。可通過 deactivate 退出虛擬環境。
3.安裝專案的依賴(Flask框架)
我的專案檔案已經上傳到目錄裡,但是專案依賴還沒有安裝,安裝依賴,我的依賴檔案
已經放到requirements.txt檔案裡,
pip install -r requirements.txt
這樣安裝依賴檔案比較方便,如果依賴少,可以一個一個安裝。
4.安裝並配置uWSGI
此時我們已經在虛擬環境中,直接安裝uWSGI
pip install uwsgi
在專案根目錄新建config.ini檔案
vim config.ini
檔案內容
[uwsgi]# uwsgi 啟動時所使用的地址與埠socket = 127.0.0.1:8001 # 指向網站目錄chdir = /opt/busAPI/# python 啟動程式檔案wsgi-file = run.py# python 程式內用以啟動的 application 變數名callable = app# 處理器數processes = 4# 執行緒數threads = 2#狀態檢測地址stats = 127.0.0.1:9191
註釋已經很明顯,只解釋下callable=app 這個 app 是 run.py 程式檔案內的一個變數,這個變數的型別是 Flask的 application 類 。
可以執行測試下
uwsgi config.ini
但這只是命令啟動形式,要使其隨同伺服器啟動並作為後臺服務執行才是運營環境的實際所需要。因此接下來我們需要安裝另一個工具來引導 uwsgi 。
5.安裝 Supervisor
sudo apt-get install supervisor
Supervisor 的全域性的配置檔案位置在:
/etc/supervisor/supervisor.conf
正常情況下我們並不需要去對其作出任何的改動,只需要新增一個新的 *.conf 檔案放在/etc/supervisor/conf.d/下就可以,那麼我們就新建立一個用於啟動 busAPI 專案的 uwsgi 的 supervisor 配置 (命名為:busAPI.conf):
[program:busAPI]# 啟動命令入口command=/opt/busAPI/venv/bin/uwsgi /opt/busAPI/config.ini# 命令程式所在目錄directory=/opt/busAPI#執行命令的使用者名稱user=root autostart=trueautorestart=true#日誌地址stdout_logfile=/var/log/uwsgi_supervisor.log
啟動和終止服務
# 啟動服務sudo service supervisor star# 終止服務sudo service supervisor stop# 檢視狀態sudo service supervisor status
6.安裝 Nginx
sudo apt-get install nginx
配置Nginx,我們修改default這個檔案
/etc/nginx/sites-available/default
預設是80埠,這裡我沒有使用80,因為小程式必須要https,所以我配了443埠,重啟下Nginx
sudo service nginx restart
Nginx服務命令
# 啟動sudo service nginx start# 停止sudo service nginx stop# 重啟sudo service nginx restart# 檢視狀態sudo service nginx status
7.總結
記錄下從無到有的過程,中間也遇到不少的坑,但是最終還是執行成功。總結下,方便日後查詢。