Flask項目實戰——13—(項目部署到阿里雲服務器和本地服務器)

1、服務器

選擇雲服務器部署的優點:

  • 爲了固定的IP
  • 本地的IP是一個動態分配的IP地址,重啓路由之後可能會變
    在這裏插入圖片描述

注意: 雲服務器剛開始需要創建一個快照:保存當前的狀態,可以利用快照還原到當前正常的狀態。還需要將雲服務器的常用的端口打開(安全組規則部分),常用端口包括:
在這裏插入圖片描述

  • 3306端口是用於數據庫MySQL的連接;
  • 6379是Redis數據庫的連接;
  • 22端口一般是服務器連接的端口;
  • 80端口在默認情況下是WWW服務的端口;
  • 23端口是遠程登錄,入侵者在搜索遠程登錄UNIX的服務。大多數情況下掃描這一端口是爲了找到機器運行的操作系統;
  • 3389端口超級終端;
  • 同時需要開放自己項目中設置的端口號;
    在這裏插入圖片描述

前面這部分是使用阿里雲服務器的前期注意事項,後面的項目部署到阿里雲服務器和本地服務器操作都一樣。

Xshell軟件使用

Xshell 是一個強大的安全終端模擬軟件,它支持 SSH1, SSH2, 以及 Microsoft Windows 平臺的 TELNET 協議。Xshell 通過互聯網到遠程主機的安全連接以及它創新性的設計和特色幫助用戶在複雜的網絡環境中享受他們的工作。主要用於連接服務器。

在這裏插入圖片描述
在這裏插入圖片描述
輸入賬號密碼後連接成功服務器。

2、安裝配置服務器環境

1. 安裝Python3.7(非必須的)

安裝依賴包

# Centos系統服務器安裝命令
yum install opensll-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ opensll-devel libffi-devel python-devel mariadb-devel

# Ubuntu系統服務器安裝命令
apt-get install opensll-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ opensll-devel libffi-devel python-devel mariadb-devel

下載Python源碼並安裝

# Centos系統服務器安裝命令
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz 
tar -xzvf Python-3.7.3.tgz -C /tmp 
cd /tmp/Python-3.7.3

把Python3.7安裝到 /usr/local目錄

# Centos系統服務器
./configure --prefix=/usr/local make make altinstall # 這一步比較耗時

更改/usr/bin/python鏈接

# Centos系統服務器
ln -s /usr/local/bin/python3.7 /usr/bin/python3 ln -s /usr/local/bin/pip3.7 /usr/bin/pip3

Ubuntu系統服務器安裝Python命令

# Ubuntu系統服務器安裝命令
# 1.安裝依賴庫,命令行輸入:
sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
# 創建文件夾
mkdir -p /etc/python3.7
# 進入文件夾
cd /etc/python3.7
# 下載文件
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
# 解壓文件
sudo tar xzf Python-3.7.3.tgz
# 編譯python源
cd Python-3.7.3
sudo ./configure --enable-optimizations --prefix=/etc/python3.7
sudo make altinstall
# 建立python3.7的軟鏈接
ln -s /etc/python3.7/bin/python3.7 /usr/bin/python3.7
ln -s /etc/python3.7/bin/pip3.7 /usr/bin/pip3.7
# 將/etc/python3.7/bin加入PATH
vim ~/.bash_profile
# 進入指定文件後,鍵盤按下 i 進入 insert 模式,添加如下內容,然後鍵盤按下 ESC ,再輸入 ZZ (注意是大寫)
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/etc/python3.7/bin
export PATH

激活配置

# 激活配置
source ~/.bash_profile
# 查看Python的版本:
python3.6
# 檢測pip3是否存在
pip3 -V

2. 安裝MySQL和Redis

1. Centos系統安裝MySQL、Redis

下載 MySQL yum包

wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm

安裝MySQL源

rpm -Uvh mysql57-community-release-el7-10.noarch.rpm

安裝MySQL服務端,需要等待一些時間

yum install -y mysql-community-server

啓動MySQL

# Centos系統服務器
systemctl start mysqld.service

檢查是否啓動成功

# Centos系統服務器
systemctl status mysqld.service

獲取臨時密碼,MySQL5.7爲root用戶隨機生成了一個密碼

# Centos系統服務器
grep 'temporary password' /var/log/mysqld.log

通過臨時密碼登錄MySQL,進行修改密碼操作

mysql -uroot -p

因爲MySQL的密碼規則需要很複雜,我們一般自己設置的不會設置成這樣,所以我們全局修改一下

# Centos系統服務器
mysql> set global validate_password_policy=0; 
mysql> set global validate_password_length=1; 
# 修改密碼 
ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword';

授權其他機器遠程登錄

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION; 
# 刷新權限
FLUSH PRIVILEGES;

設置MySQL的字符集爲UTF-8,令其支持中文

# Centos系統服務器
vim /etc/my.cnf 

[mysql] default-character-set=utf8

重啓MySQL,查看MySQL運行狀態

# 重啓MySQL
systemctl restart mysqld.service
# 查看MySQL運行狀態
ps -aux|grep mysqld

安裝Redis

# Centos系統服務器
# 安裝redis
yum install redis 
# 開啓redis
systemctl start redis

# Ubuntu系統服務器
sudo apt-get install redis 

連接Redis

redis-server
redis-cli

2. Ubuntu 系統安裝MySQL、Redis

安裝MySQL源

Ubuntu系統需要先添加MySQL APT倉庫,參考:[Ubuntu安裝Mysql](https://www.cnblogs.com/zxhyJack/p/8596864.html)
```shell
# Ubuntu系統服務器
先在http://dev.mysql.com/downloads/repo/apt/.下載MySQL APT repository 文件
# 用命令安裝剛纔下載的文件(需要進入文件所在的目錄)
sudo dpkg -i mysql-apt-config_0.8.9-1_all.deb
#在軟件包安裝過程中要選擇MySQL服務器和其他組件的版本,這裏選擇ok即可
sudo apt-get update
sudo apt-get upgrade

安裝MySQL服務端,需要等待一些時間

# Ubuntu系統服務器
sudo apt-get install mysql-server mysql-client

啓動MySQL

# Ubuntu系統服務器
sudo service mysql start

# 查看狀態
sudo service mysql status

登錄MySQL查看狀態

mysql -uroot -p

授權其他機器遠程登錄

# 修改綁定ip
sudo vim /etc/mysql/my.cnf.d/my.cnf
bing  0.0.0.0          # 初始信息綁定的是127.0.0.1

# 授權其他ip
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION; 
# 刷新權限
FLUSH PRIVILEGES;

設置MySQL的字符集爲UTF-8,令其支持中文

# Ubuntu系統服務器
sudo stop mysql
sudo pip install vim
sudo vim /etc/mysql/my.cnf.d/my.cnf

# 【mysqld】在 /etc/mysql/mysql.conf.d/mysqld.cnf
在 【mysqld】下追加:
character-set-server=utf8
# 【mysql】 在 /etc/mysql/conf.d/mysql.cnf
在 【mysql】 下追加:
default-character-set=utf8

重啓MySQL,查看MySQL運行狀態

# 重啓MySQL
service mysql restart
# 查看字符集修改設置
mysql -u root -p
show variables like '%character%';

# 另一種查詢mysql的狀態
ps -aux|grep mysql

安裝Redis

# Ubuntu系統服務器
sudo apt-get install redis 

連接Redis

redis-server
redis-cli

3、安裝項目虛擬環境

# 安裝虛擬環境庫
sudo apt-get install python3-pip
pip3 install pipenv 

# 創建項目的虛擬環境
mkdir flask-project
cd flask-project
pipenv shell

在這裏插入圖片描述

4、FileZilla上傳項目文件

FileZilla是用於從本地項目文件上傳到服務器中的一個可視化工具APP,同樣的也可以使用git工具將項目代碼文件推送到github或者碼雲gitee上面,再使用服務器從github或者gitee上面下載下來。FileZilla相比較來說簡單。

在這裏插入圖片描述
將本地的環境導出,以便在服務器上安裝

# 到導出本地虛擬環境中需要安裝的庫
pip freeze > requirements.txt

在這裏插入圖片描述
使用FileZilla上傳所有項目文件:
在這裏插入圖片描述

1. 本地環境安裝到服務器上

此時requirements.txt文件也已經上傳完成

# 將本地環境安裝到服務器上
pip install -r requirements.txt

會自動執行安裝完成所有虛擬環境中的版本庫

注意此時必須要先進入虛擬環境纔行:
在這裏插入圖片描述

2.創建數據庫demo_bbs,刪除之前存在的映射記錄文件,重新映射

# 創建數據庫demo_bbs
create database demo_bbs charset=utf8;

# 刪除原有的映射文件 
rm -rf migrations/ 


# 重新映射數據庫
python manage.py db init 
python manage.py db migrate 
python manage.py db upgrade

在這裏插入圖片描述
在這裏插入圖片描述
此時映射成功,但是數據庫中沒有數據,可以將測試數據導出到服務器中:
在這裏插入圖片描述
上傳本地數據庫導出的文件bbs.sql
在這裏插入圖片描述

3.導入bbs.sql的文件數據

# 執行導入bbs.sql的文件數據
source /home/jingwan/Documents/bbs.sql

4. 運行項目

# 需要先設置端口和host
vim bbs.py

# 項目啓動
python bbs.py

設置端口和host

# bbs.py
if __name__ == '__main__':
    app.run(debug=True, port=開放端口, host=0.0.0.0)

在這裏插入圖片描述
項目啓動效果如下,正常運行:
在這裏插入圖片描述

5、nginx、uwsgi

目前項目啓動正常運行,但是現在的項目的運行能力太弱,訪問量提升之後就會崩潰,因爲是單線程運行的項目,爲了提高項目的併發能力,此時需要使用到nginx和uwsgi

1. 安裝uwsgi

uwsgi是一個應用服務器,非靜態文件的網絡請求就必須通過他完成, 他也可以充當靜態文件服務器,但不是他的強項。通過

pip3 install uwsgi

安裝就可以了。(uwsgi必須安裝在系統級別的Python環境中,不要安裝到虛擬環境中)。然後創建一個叫做uwsgi.ini的配置文件:
在這裏插入圖片描述
依賴環境:

sudo apt-get install -y gcc* pcre-devel openssl-devel

創建uwsgi.ini文件,即啓動項目文件
路徑:/home/jingwan/Documents/flask_test_project/Flask項目實戰-BBS/ (注意是虛擬環境下)

# 創建uwsgi.ini,此時需要在虛擬環境中創建修改
sudo vim uwsgi.ini


# 將下面內容添加到uwsgi.ini中,下面的配置路徑是我自己項目的路徑,不同項目路徑自己進行修改

[uwsgi] 
# 必須全部爲絕對路徑 
# 項目的路徑 ,pwd指令中顯示的路徑
chdir = /home/jingwan/Documents/flask_test_project/Flask項目實戰-BBS
# flask的wsgi文件 
wsgi-file = /home/jingwan/Documents/flask_test_project/Flask項目實戰-BBS/bbs.py 
# 回調的app對象 
callable = app 
# Python虛擬環境的路徑 , 進入到虛擬環境目錄裏面執行pipenv --venv得到 
home = /home/jingwan/.local/share/virtualenvs/flask_test_project-HkfaWnAB
# 進程相關的設置 
# 主進程 
master = true 
# 最大數量的工作進程 
processes = 10
# 項目中使用的端口 
http = :8886
# 設置socket的權限 最大權限是777
chmod-socket = 666 
# 退出的時候是否清理環境 
vacuum = true

在這裏插入圖片描述
啓動執行uwsgi.ini文件,同時項目也是啓動狀態:

uwsgi --ini uwsgi.ini

在這裏插入圖片描述
安裝運行過程中出現的問題可以參考:https://blog.csdn.net/weixin_42118531/article/details/106505594

2. 安裝nginx

雖然uwsgi可以正常的部署我們的項目了。但我們還是依然要採用nginx來作爲web服務器。使用nginx來作爲web
服務器有以下好處:

  1. uwsgi對靜態文件資源處理並不好,包括響應速度,緩存等。
  2. nginx作爲專業的web服務器,暴露在公網上會比uwsgi更加安全一點。
  3. 運維起來更加方便。比如要將某些IP寫入黑名單,nginx可以非常方便的寫進去。而uwsgi可能還要寫一大段
    代碼才能實現。

安裝
通過sudo apt-get install nginx即可安裝

# nginx簡單操作命令
啓動:sudo systemctl start nginx
關閉:sudo systemctl stop nginx
重啓:sudo systemctl restart nginx

添加配置文件
/etc/nginx/conf.d目錄下,新建一個文件,叫做bbs.conf

sudo vim /etc/nginx/conf.d/bbs.conf

然後將以下代碼粘貼進去:

upstream bbs{ server 127.0.0.1:8886; }
# 配置服務器 
server {
        # 監聽的端口號 
        listen 80;
        # 域名
        server_name 112.95.150.130;
        charset utf-8;
        # 最大的文件上傳尺寸
        client_max_body_size 75M;
        # 靜態文件訪問的url 
        location /static {
        # 靜態文件地址 
        alias /home/jingwan/Documents/flask_test_project/Flask項目實戰-BBS/static;
        }
        # 最後,發送所有非靜態文件請求到flask服務器
        location / {
        uwsgi_pass 127.0.0.1:8886;
        # uwsgi_params文件地址 
        include /etc/nginx/uwsgi_params;
        }
}

sudo nginx -t

在這裏插入圖片描述

如果不報錯,說明成功。 每次修改完了配置文件,都要記得運行

systemctl start nginx

安裝運行過程中出現的問題可以參考:https://blog.csdn.net/weixin_42118531/article/details/106505594

3. 修改所有配置

1----修改uwsgi.ini文件

路徑:/home/jingwan/Documents/flask_test_project/Flask項目實戰-BBS/ (注意是虛擬環境下)

[uwsgi] 
# 必須全部爲絕對路徑 
# 項目的路徑 ,pwd指令中顯示的路徑
chdir = /home/jingwan/Documents/flask_test_project/Flask項目實戰-BBS
# flask的wsgi文件 
wsgi-file = /home/jingwan/Documents/flask_test_project/Flask項目實戰-BBS/bbs.py 
# 回調的app對象 
callable = app 
# Python虛擬環境的路徑 , 進入到虛擬環境目錄裏面執行pipenv --venv得到 
home = /home/jingwan/.local/share/virtualenvs/flask_test_project-HkfaWnAB
# 進程相關的設置 
# 主進程 
master = true 
# 最大數量的工作進程 
processes = 10
# 項目中使用的端口 
# http = :8886
# 使用socket通信
socket  = 127.0.0.1:8886
# 設置socket的權限 最大權限是777
chmod-socket = 666 
# 退出的時候是否清理環境 
vacuum = true

2----修改配置文件/etc/nginx/nginx.conf參數

# /etc/nginx/nginx.conf

sudo vim /etc/nginx/nginx.conf 

# xxx是本機的root權限的用戶名
user xxx;

在這裏插入圖片描述

3----通過nginx運行啓動項目

開啓redis服務,用於驗證碼存儲

# 開啓redis
redis-server

每次修改完了配置文件,都要記得運行

# 重啓nginx
systemctl restart nginx


# 運行項目
uwsgi --ini uwsgi.ini

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章