本文參考如下文章: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
# yum install epel-release
# yum update
# yum install vim wget
# 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
# 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
# ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
# ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
# 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環境,不過仍是建議使用虛擬環境
# /usr/local/python3/bin/pip3 install virtualenv
建立在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
# /usr/local/python3/bin/pip3 install -r /home/project/YuBlog-master/source/requirements.txt
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum repolist enabled | grep "mysql.*-community.*"
查看 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 指啓用。
注意: 任什麼時候候,只能啓用一個版本。
yum install mysql-community-server
# 啓動 service mysqld start
# 登陸,默認密碼爲空
mysql -uroot -p
use mysql;
SET PASSWORD = PASSWORD(' password ');
FLUSH PRIVILEGES;
把數據庫默認的編碼所有改成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%';
create database mydb;
數據庫操做總結:
用戶名:root,密碼: password,數據庫名:mydb
# yum install nginx
默認安裝目錄/etc/nginx/
# service nginx start
(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文件
# service nginx restart
# /usr/local/python3/bin/pip3 install uwsgi
在項目的根目錄下,建立配置文件config.ini,
篇日誌以下內容:
[uwsgi]
master = true
socket = :5000 #跟 nginx配置文件中的端口號保持一致
wsgi-file = manage.py # 主程序文件
callable = app # 應用
processes = 4
threads = 2
buffer-size = 32768
一、二、3爲必須配置的,其他保持默認便可
博客運行前須要在config.py中配置必須信息。YuBlog 採用mysql存儲,redis作部分緩存,需配置數據庫信息。
mysql
的配置需根據使用場景選擇配置,
開發場景配置DevelopmentConfig
類中的SQLALCHEMY_DATABASE_URI
的信息。
生產環境的配置在ProductionConfig
類的SQLALCHEMY_DATABASE_URI
信息。
其中默認的root:password
爲user
: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中獲取配置信息
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=''
CSRF_ENABLED = True
# 密鑰
SECRET_KEY = 'you-guess'
# 每頁顯示文章條數
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
# 管理員姓名
ADMIN_NAME = 'kyu'
# 管理員登陸信息
ADMIN_LOGIN_NAME = 'login-name'
# 登陸密碼
ADMIN_PASSWORD = os.getenv('ADMIN_PASSWORD') or 'password'
# 博客名
SITE_NAME = '意外'
# 博客標題
SITE_TITLE = '個人博客'
# 管理員簡介
ADMIN_PROFILE = '剋制力,執行力'
一樣的ADMIN_PASSWORD
配置建議使用環境變量,初始設置除了登陸名和登陸密碼,能夠直接選擇默認,能夠在管理頁面修改。
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'
默認不開啓。如需使用可將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'
windows
配置: set CONFIG=production
linux配置: export CONFIG=production
2.
遷移數據庫等信息
使用前確認是否開啓了mysql,配置了相關信息
# uwsgi config.ini (
在虛擬環境目錄中執行)
報錯:
no app loaded. going in full dynamic mode
配置plugin = python或者啓動uwsgi命令:uwsgi config.ini --plugin python
帳號和密碼須要在配置文件中查看
後文對網站的編輯操做,只容許有管理員權限的用戶操做。
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
:
默認的外鏈域名爲:
空間名是我的建立的倉庫名。
七牛圖牀主要是爲了更方便的管理上傳於七牛雲的圖片,目前支持上傳,改名,刪除等操做。