使用Flask+uWsgi的方式部署一個blog網站


本文參考以下文章:https://www.yukunweb.com/2017/12/ubuntu-nginx-uwsgi-flask-app/

 

需要學習的地方

nginx+uwsgi部署flask應用

一 nginx配置:

server {

    listen 80;

    server_name 192.168.0.114; # 公網IP或域名

    location / {

        include uwsgi_params;

        uwsgi_pass 127.0.0.1:5000; #指向uwsgi 所應用的內部地址

        uwsgi_param UWSGI_PYHOME /home/project/YuBlog-master/venv; #虛擬環境目錄
        uwsgi_param UWSGI_CHDIR /home/project/YuBlog-master/source; # 應用根目錄
        uwsgi_param UWSGI_SCRIPT manage:app; # 啟動程序

        uwsgi_read_timeout 100;

    }

}

 

二 uwsgi配置:

[uwsgi]
master = true
socket = :5000
wsgi-file = manage.py
callable = app
processes = 4
threads = 2
buffer-size = 32768

 

說明

1.使用的系統是Cent OS 7.5 64位

2. YuBlog GitHub地址: https://github.com/Blackyukun/YuBlog

一、更新系統

# yum install epel-release

# yum update

# yum install vim wget

二、安裝python3.7

1.安裝依賴包

# yum -y install gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel

2.下載並安裝python3.7

# wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz

# tar -zxvf Python-3.7.2.tgz

# mkdir /usr/local/python3

# cd Python-3.7.0

# ./configure --prefix=/usr/local/python3

# make && make install

3.設置軟鏈接

# ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3

# ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3

4.檢查安裝是否成功

# python3 -V

# pip3 –V

注:若不設置第三步或者第三步設置未成功,也不礙事,可以直接還是用絕對路徑的方式操作:

/usr/local/python3/bin/python3

/usr/local/python3/bin/pip3

三、獲取應用源碼

# mkdir –p /home/project && cd /home/project

# wget https://github.com/Blackyukun/YuBlog/archive/master.zip

# yum install unzip

# unzip master.zip

得到一個YuBlog-master的文件夾,里面有如下目錄或文件:

certbot # 設置https證書使用

docker-compose.yml # docker使用

mysql  # 數據庫文件,可以用來作參考

nginx  # nginx文件,可以用來作參考

README.md # 說明

source # 程序源碼

四、配置虛擬環境

說明:不配置虛擬環境也可以,直接使用上述安裝的python3.7環境,不過還是建議使用虛擬環境

1.安裝virtualenv

# /usr/local/python3/bin/pip3 install virtualenv

2.創建虛擬環境

創建在YuBlog-master目錄下,跟source源碼同目錄,也就是在/home/project/YuBlog-master目錄下操作.

需要注意的是,如果直接virtualenv venv命令,創建的將會是Python2的虛擬環境。如果想要創建Python3的環境,需要指定Python3的目錄:

# /usr/local/python3/bin/virtualenv  -p /usr/local/python3/bin/python3 venv

如果成功,項目目錄下會生成一個venv目錄,那里就是我們的python3虛擬環境了。接下來激活虛擬環境:

# source venv/bin/activate

激活成功后會出現(venv)

退出虛擬環境命令是:# deactivate

3.安裝依賴包

# /usr/local/python3/bin/pip3 install  -r /home/project/YuBlog-master/source/requirements.txt

五、安裝MySQL5.6數據庫

1.下載 MySQL Yum Repository

# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

2.添加 MySQL Yum Repository

# rpm -ivh mysql-community-release-el7-5.noarch.rpm

3.驗證下是否添加成功

# yum repolist enabled | grep "mysql.*-community.*"

4.選擇要啟用 MySQL 版本

查看 MySQL 版本,執行yum repolist all | grep mysql

可以看到 5.5, 5.7 版本是默認禁用的,因為現在最新的穩定版是 5.6

可以通過類似下面的語句來啟動某些版本

yum-config-manager --disable mysql56-community

yum-config-manager --enable mysql57-community-dmr

或者通過修改 /etc/yum.repos.d/mysql-community.repo 文件

# Enable to use MySQL 5.6

[mysql56-community]

name=MySQL 5.6 Community Server

baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/

enabled=1

gpgcheck=1

gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

其中 enabled=0 是指禁用,enabled=1 指啟用。

注意: 任何時候,只能啟用一個版本。

5.通過 Yum 來安裝 MySQL

yum install mysql-community-server

6.設置root密碼

# 啟動 service mysqld start

# 登錄,默認密碼為空

mysql -uroot -p

use mysql;

SET PASSWORD = PASSWORD(' password ');

FLUSH PRIVILEGES;

7.編輯MySQL的配置文件

把數據庫默認的編碼全部改為UTF-8

MySQL的配置文件默認存放在/etc/my.cnf或者/etc/mysql/my.cnf:

vim /etc/mysql/my.cnf

[client]

default-character-set = utf8

 

[mysqld]

default-storage-engine = INNODB

character-set-server = utf8

collation-server = utf8_general_ci

指令查看編碼是否設置正確。如果看到utf8就表示正確。

show variables like '%char%';

8.創建數據庫

create database mydb;

數據庫操作總結:

用戶名:root,密碼: password,數據庫名:mydb

六、安裝Nginx服務器

1.安裝並啟動nginx

# yum install nginx
默認安裝目錄/etc/nginx/
# service nginx start

2.配置nginx

(1)nginx.conf文件中user nginx;修改成user root;

也就是以root用戶啟動nginx,否則會報錯: 13: Permission denied

(2)nginx.conf文件中server{}塊注釋掉

(3)在conf.d目錄中新建yunblog.conf文件,添加如下內容

server {

    listen 80;

    server_name 192.168.0.114; # 公網IP或域名

    location / {

        include uwsgi_params;

        uwsgi_pass 127.0.0.1:5000; #指向uwsgi 所應用的內部地址

        uwsgi_param UWSGI_PYHOME /home/project/YuBlog-master/venv; #虛擬環境目錄
        uwsgi_param UWSGI_CHDIR /home/project/YuBlog-master/source; # 應用根目錄
        uwsgi_param UWSGI_SCRIPT manage:app; # 啟動程序

        uwsgi_read_timeout 100;

    }

}

說明:(2)和(3)可以合成一步,也就是說把(2)中的server{}塊內容換成(3)中的內容.或者參考/home/project/YuBlog-master/nginx目錄下的nginx.conf文件

3.重啟nginx

# service nginx restart

七、安裝uWSGI

1.在虛擬環境中安裝uwsgi

# /usr/local/python3/bin/pip3 install uwsgi

2.配置uwsgi

在項目的根目錄下,創建配置文件config.ini,篇日志如下內容:

[uwsgi]

master = true

socket = :5000   #跟 nginx配置文件中的端口號保持一致

wsgi-file = manage.py # 主程序文件

callable = app  # 應用

processes = 4

threads = 2

buffer-size = 32768

八、項目配置

1、2、3為必須配置的,其余保持默認即可

1. 配置數據庫信息

博客運行前需要在config.py中配置必須信息。YuBlog 采用mysql存儲,redis做部分緩存,需配置數據庫信息。

mysql的配置需根據使用場景選擇配置,

開發場景配置DevelopmentConfig類中的SQLALCHEMY_DATABASE_URI的信息。

生產環境的配置在ProductionConfig類的SQLALCHEMY_DATABASE_URI信息。

其中默認的root:passworduser:password

@localhost:3306/db@<host>:<port>/<db-name>

2.配置redis信息

安裝redis: yum install redis

啟動redis: service redis start

redis的配置為:

# 配置類型,可選`simple`不使用 redis 數據庫(不推薦)

CACHE_TYPE = 'redis'

CACHE_REDIS_HOST = '127.0.0.1'

CACHE_REDIS_PORT = 6379

CACHE_REDIS_DB = os.getenv('CACHE_REDIS_DB') or ''

CHCHE_REDIS_PASSWORD = os.getenv('CHCHE_REDIS_PASSWORD') or ''

其中私密信息建議使用環境變量的形式配置,如CHCHE_REDIS_PASSWORD

os.getenv()表示是從.env中獲取配置信息

3. .env文件內容

MYSQL_PASSWORD= password

ADMIN_PASSWORD=password  # 管理員登陸密碼

MAIL_USERNAME=example@email.com  # 發送郵件郵箱

MAIL_PASSWORD=password  # 發送郵件郵箱的第三方客戶端登陸密碼

ADMIN_MAIL=example@email.com  # 接受通知郵件郵箱

QN_ACCESS_KEY=''  # 如使用七牛圖床,需要配置,否則默認空就行

QN_SECRET_KEY=''

4. 防止csrf攻擊配置

CSRF_ENABLED = True
# 密鑰
SECRET_KEY = 'you-guess'

5. 分頁條數配置

# 每頁顯示文章條數
POSTS_PER_PAGE = 10
# 管理文章頁,每頁顯示條數
ADMIN_POSTS_PER_PAGE = 20
# 歸檔頁文章條數
ACHIVES_POSTS_PER_PAGE = 20
# 搜索結果頁每頁條數
SEARCH_POSTS_PER_PAGE = 15
# 文章評論分頁,每頁條數
COMMENTS_PER_PAGE = 10
# 管理評論,每頁條數
ADMIN_COMMENTS_PER_PAGE = 50

6. 管理員初始設置

# 管理員姓名
ADMIN_NAME = 'kyu'
# 管理員登錄信息
ADMIN_LOGIN_NAME = 'login-name'
# 登錄密碼
ADMIN_PASSWORD = os.getenv('ADMIN_PASSWORD') or 'password'
# 博客名
SITE_NAME = '意外'
# 博客標題
SITE_TITLE = '我的博客'
# 管理員簡介
ADMIN_PROFILE = '克制力,執行力'

同樣的ADMIN_PASSWORD配置建議使用環境變量,初始設置除了登錄名和登錄密碼,可以直接選擇默認,可以在管理頁面修改。

7. 站點配置

rss 配置
# 站點協議
WEB_PROTOCOL = 'http/https'
# 站點域名
WEB_URL = 'domain name'
# 站點創建時間
WEB_START_TIME = '2018-08-18'
# 顯示條數
RSS_COUNTS = 10

 

# 發送郵件用戶登錄
MAIL_USERNAME = os.getenv('MAIL_USERNAME')
# 客戶端登錄密碼非正常登錄密碼
MAIL_PASSWORD = os.getenv('MAIL_PASSWORD')
MAIL_SERVER = os.getenv('MAIL_SERVER') or 'smtp.qq.com'
MAIL_PORT = os.getenv('MAIL_PORT') or '465'
 
ADMIN_MAIL_SUBJECT_PREFIX = 'blog'
ADMIN_MAIL_SENDER = 'admin.com'
# 接收郵件通知的郵箱
ADMIN_MAIL = os.getenv('ADMIN_MAIL')
 
# 站點搜索的最小字節
WHOOSHEE_MIN_STRING_LEN = 1
# 專題保密文章的密碼,建議設置環境變量
ARTICLE_PASSWORD = os.getenv('ARTICLE_PASSWORD') or 'password'

8. 七牛圖床配置

默認不開啟。如需使用可將NEED_PIC_BED配置為True

# 七牛雲存儲配置
NEED_PIC_BED = False
QN_ACCESS_KEY = os.getenv('QN_ACCESS_KEY') or ''
QN_SECRET_KEY = os.getenv('QN_SECRET_KEY') or ''
# 七牛空間名
QN_PIC_BUCKET = 'bucket-name'
# 七牛外鏈域名
QN_PIC_DOMAIN = 'domain-url'

九、程序運行相關

1. 配置環境變量為生產環境

windows配置: set CONFIG=production

linux配置: export CONFIG=production

2.遷移數據庫等信息

使用前確認是否開啟了mysql,配置了相關信息

  • 創建遷移倉庫:python manage.py db init;
  • 創建遷移腳本:python manage.py db migrate -m "v1.0";
  • 更新倉庫:python manage.py db upgrade;
  • 創建管理員信息:python manage.py add_admin;

十、啟動uwsgi

1.啟動uwsgi

# uwsgi config.ini (在虛擬環境目錄中執行)

報錯: no app loaded. going in full dynamic mode

配置plugin = python或者啟動uwsgi命令:uwsgi config.ini --plugin python

2.訪問網站(80端口放行)

十一、使用說明

后台登錄

http://ip/admin

賬號和密碼需要在配置文件中查看

編輯文章

后文對網站的編輯操作,只允許有管理員權限的用戶操作。

YuBlog支持markdown語法,上傳圖片可使用七牛圖床進行上傳獲取外鏈。填寫說明:

 

分類:技術   # 限制只能寫一個分類
標簽:docker,nginx  # 標簽不限制個數,每個標簽之間使用英文的逗號隔開
鏈接:nginx-and-docker  # 文章的URL,自己可以隨意指定,建議有些意義
日期:2018-08-18  # 年月日間需使用-連接
 
標題:nginx和docker  # 文章標題

可以選擇保存草稿,待下次編輯,也可以直接發布,當然后續更改也很方便。

管理文章

可以對所有發布過的文章進行更新或者刪除操作,刪除需進一步確認,以防誤刪。

 

審核評論

為了防止垃圾評論污染,用戶的評論一律需要自己審核通過還是刪除。

管理鏈接

博客支持添加友情鏈接和社交鏈接,他們展示在不同的地方。不要搞錯了:

 

添加專題

博客支持系列專題功能,專欄一般是一類文章的聚合,比如系列教程或者日記啥的,文章可以自行選擇加密或者不加密。由於之前的偷懶,文章密碼是設置在環境變量的,未來會改進。

 

側欄插件

博客支持自定義的側欄box插件:

 

如果想要保持側欄固定頂部,需要勾選廣告選項。插件支持原生的html,css,js語法。但要保持寬度不得超過父元素,建議不超過230px。

<a href="https://www.yukunweb.com/static/upload/wenwen.png" target="_blank">
    <img src="https://www.yukunweb.com/static/upload/wenwen.png" alt="wenwen" style="width:230px;">
</a>

更多的玩法有待考慮。

上傳文件

由於是個人使用,沒有對上傳的文件做進一步的過濾操作。建議大家不要隨意上傳.php.sh.py的文件。上傳的文件位於靜態目錄:app/static/upload下,可以使用http://<server-name>/static/upload/<filename>訪問。

七牛圖床

如需使用七牛圖床,需要配置好七牛圖床的信息。包括個人的AccessKey/SecretKey

 

默認的外鏈域名為:

 

空間名是個人創建的倉庫名。

 

七牛圖床主要是為了更方便的管理上傳於七牛雲的圖片,目前支持上傳,更名,刪除等操作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM