一、安裝python3.8版本
1. 在 Ubuntu 16.04 中,python3 的默認(rèn)版本為 3.5:
~# python3 -V
Python 3.5.2
2. Ubuntu 官方 apt 庫中還未收錄 python 3.8,這里使用 deadsnakes PPA 庫安裝。
$ sudo apt update
$ sudo apt install software-properties-common
- 添加 deadsnakes PPA 源
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt update
- 安裝python 3.8
$ sudo apt install python3.8
- 檢查是否安裝成功
$ python3.8 -V
Python 3.8.5
二、配置python3.8為系統(tǒng)默認(rèn)python3
1. 將 python 各版本添加到 update-alternatives
$ which python3.8
/usr/bin/python3.8
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
$ which python3.5
/usr/bin/python3.5
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 2
- 配置 python3 默認(rèn)指向 python3.8
sudo update-alternatives --config python3
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3.5 2 auto mode
1 /usr/bin/python3.5 2 manual mode
2 /usr/bin/python3.8 1 manual mode
Press <enter> to keep the current choice[*], or type selection number:
選擇2,回車
以下說明配置成功了
update-alternatives: using /usr/bin/python3.8 to provide /usr/bin/python3 (python3) in manual mode
三、安裝pip
$ sudo apt-get install python3-pip
更新pip版本
$ sudo pip3 install --upgrade pip
四、安裝pipenv
pip3 install pipenv
檢查pipenv
pipenv --version
五、安裝nginx
1. 進(jìn)入usr目錄,創(chuàng)建tengine文件夾
cd /usr
mkdir tengine
2. 進(jìn)入創(chuàng)建的文件夾,下載Tengine 最新版本
cd /usr/tengine
wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
3.解壓下載的文件
tar -xvf tengine-2.3.2.tar.gz
4. 進(jìn)入解壓的目錄(/usr/tengine/tengine-2.3.2),開始安裝
cd tengine-2.3.2/
./configure
報錯了
./configure: error: the HTTP rewrite module requires the PCRE library.
5. 安裝Nginx所需依賴
(1)更新apt-get
apt-get update
(2)解決依賴包openssl安裝
apt-get install openssl libssl-dev
(3)解決依賴包pcre安裝
apt-get install libpcre3 libpcre3-dev
(4)解決依賴包zlib安裝
apt-get install zlib1g-dev
6. 正式安裝Nginx
./configure
make
make install
7.找到Nginx的安裝位置(/usr/local/nginx )
cd /usr/local/nginx
ls
8.開啟nginx(在sbin目錄下)
cd sbin
./nginx
9.打開瀏覽器,輸入ip/域名查看Nginx是否安裝成功
六、配置nginx.conf文件
1.進(jìn)入Nginx安裝目錄
find / -name nginx
cd /usr/local/nginx
cd conf
vim nginx.conf
2. 重新編寫nginx.conf文件
#基礎(chǔ)配置,無需改動,有需要可以深入研究
#user nobody;
worker_processes 1;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
#error_log "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";
#pid logs/nginx.pid;
#基礎(chǔ)配置,無需改動,有需要可以深入研究
events {
use epoll;
worker_connections 1024;
}
http {
#基礎(chǔ)配置,無需改動,有需要可以深入研究
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
#access_log logs/access.log main;
#access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/json image/png image/jpg image/jpeg;
gzip_vary on;
server_tag XUNMA;
server_info off;
server_tokens off;
log_format accesslog '$time_iso8601 | $remote_addr | $status | $request | $request_body | $proxy_add_x_forwarded_for | $upstream_addr | $upstream_response_time | $request_time | $unix_time | $scheme://$host:$server_port | $request_completion ' ;
###################核心配置區(qū)域################
#Nginx配置 http xxx.xxx.com
include server/www-xxx-com.conf;
}
3.生成項目配置文件
mkdir server
具體配置:
server {
listen 80;
server_name xxx.xxx.xxx; #公網(wǎng)地址
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000; # 指向uwsgi 所應(yīng)用的內(nèi)部地址,所有請求將轉(zhuǎn)發(fā)給uwsgi 處理
uwsgi_param UWSGI_PYHOME /root/.local/share/virtualenvs/xxxxx-7bBwEi2q; # 指向虛擬環(huán)境目錄
uwsgi_param UWSGI_CHDIR /usr/xxxxx; # 指向網(wǎng)站根目錄
uwsgi_param UWSGI_SCRIPT main:app; # 指定啟動程序
}
}
- 重啟Nginx
每次修改完文件后,都需要重啟Nginx,重啟后配置即可生效
重啟在 nginx 的 sbin目錄下
./nginx -s reload
七、上傳項目到指定目錄(/usr/muxxx)
排除Pipfile、Pipfile.lock文件
1. 在本地生成requirements.text
pipenv lock -r > requirements.txt
2. 通過requirements.text在服務(wù)器創(chuàng)建虛擬環(huán)境
pipenv install -r requirements.text
八、安裝uswgi
1.在服務(wù)器虛擬環(huán)境安裝uswgi
pipenv shell
pipenv install uswgi
安裝uswgi可能會出現(xiàn)失敗,失敗原因是沒有安裝python3.8-dev
apt-get install python3.8.dev
2. 設(shè)置uswgi配置文件(config.ini)
[uwsgi]
# uwsgi 啟動時所使用的地址與端口
socket = 127.0.0.1:5000
# 指向網(wǎng)站目錄
chdir = /usr/xxxx/
# python 啟動程序文件
wsgi-file = main.py
# python 程序內(nèi)用以啟動的 application 變量名
callable = app
# 處理器數(shù)
processes = 4
# 線程數(shù)
threads = 2
#狀態(tài)檢測地址
stats = 127.0.0.1:9191
存放在項目目錄下
3.啟動uwsgi
uwsgi config.ini
此時已經(jīng)正常啟動 uwsgi 并將 Flask 項目載入其中了,ctrl+c 關(guān)閉程序。但這只是命令啟動形式,要使其隨同服務(wù)器啟動并作為后臺服務(wù)運(yùn)行才是運(yùn)營環(huán)境的實際所需要。因此接下來我們需要安裝另一個工具來引導(dǎo) uwsgi 。
九、安裝并配置Supervisor
1.安裝
sudo apt-get install supervisor
Supervisor 的全局的配置文件位置在:
/etc/supervisor/supervisor.conf
2. 配置文件
正常情況下我們并不需要去對其作出任何的改動,只需要添加一個新的 *.conf 文件放在
/etc/supervisor/conf.d/
下就可以,那么我們就新建立一個用于啟動 muxxx 項目的 uwsgi 的 supervisor 配置 (命名為:muxxx_supervisor.conf):
[program:muxxx]
# 啟動命令入口
command=/root/.local/share/virtualenvs/muxxx-7bBwEi2q/bin/uwsgi /usr/muxxx/config.ini
# 命令程序所在目錄
directory=/usr/muxxx
#運(yùn)行命令的用戶名
user=root
autostart=true
autorestart=true
#日志地址
stdout_logfile=/usr/muxxx/logs/uwsgi_supervisor.log
其中command前目錄地址是該項目虛擬環(huán)境根目錄
通過項目目錄中shell獲取
pipenv shell
pipenv --venv
/root/.local/share/virtualenvs/muxxx-7bBwEi2q
command后目錄為uwsgi配置地址
3.提前創(chuàng)建logs
項目目錄下創(chuàng)建logs目錄、logs/uwsgi_supervisor.log文件
4.操作
supervisord -c /etc/supervisord.conf #啟動項目
supervisorctl -c /etxc/supervisord.conf #重啟項目
supervisorctl update #更新新的配置到supervisord,更新了配置文件后要update 啟動
supervisorctl reload #重新啟動配置中的所有程序
supervisorctl start program_name #啟動某個進(jìn)程(program_name=你配置中寫的程序名稱)
supervisorctl # 查看正在守候的進(jìn)程
pervisorctl stop program_name #停止某一進(jìn)程 (program_name=你配置中寫的程序名稱)
supervisorctl restart program_name # 重啟某一進(jìn)程 (program_name=你配置中寫的程序名稱)
supervisorctl stop all # 停止全部進(jìn)程
參考資料:
http://www.itdecent.cn/p/ce2f559bded6
https://www.cnblogs.com/Ray-liang/p/4173923.html
http://www.itdecent.cn/p/8546b879b10b
http://www.itdecent.cn/p/b3dd2614a2a2