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

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

 

須要學習的地方css

nginx+uwsgi部署flask應用html

一 nginx配置:python

server {mysql

    listen 80;linux

    server_name 192.168.0.114; # 公網IP或域名nginx

    location / {git

        include uwsgi_params;github

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

        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

1、更新系統

# yum install epel-release

# yum update

# yum install vim wget

2、安裝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

3、獲取應用源碼

# 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 # 程序源碼

4、配置虛擬環境

說明:不配置虛擬環境也能夠,直接使用上述安裝的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

5、安裝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

6、安裝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

7、安裝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

8、項目配置

一、二、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'

9、程序運行相關

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;

10、啓動uwsgi

1.啓動uwsgi

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

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

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

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

11、使用說明

後臺登陸

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

 

默認的外鏈域名爲:

 

空間名是我的建立的倉庫名。

 

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

相關文章
相關標籤/搜索