django mysql5.7_GitHub - qiubiteme/DjangoBloger: 一个Django2.0+mysql57,实现的响应式博客
項(xiàng)目背景介紹,這是一個簡單的博客項(xiàng)目,
在windows10環(huán)境下開發(fā)
基于python3.6.5 Django2.0 mysql5.7開發(fā)
計劃后續(xù)開發(fā)為一個前后分離,現(xiàn)在簡單的部署使用
部署環(huán)境 ubuntu16.4 python3.5.2 mysql5.7
1-使用git clone 項(xiàng)目到服務(wù)器
git clone https://github.com/qiubiteme/DjangoBloger.git
1.1- 命令行下進(jìn)入項(xiàng)目目錄
cd DjangoBloger
1.2- 查看python版本
ubuntu下默認(rèn)安裝的是,python2.7,建議安裝雙版本python,
pyhton3查看python的版本,具體安裝python3的方法google搜索
python3
1.3 安裝 virtualenv
pip3 是安裝到python3 的環(huán)境中
pip3 install virtualenv
2- 創(chuàng)建python3的虛擬環(huán)境
創(chuàng)建 名稱為 venv 的虛擬環(huán)境
virtualenv venv
2.1- 進(jìn)入虛擬環(huán)境虛擬環(huán)境
source venv/bin/activate
這是退出虛擬環(huán)境命令
deactivate
2.3- 現(xiàn)在可以安裝項(xiàng)目依賴
在 DjangoBloger 目錄下執(zhí)行,虛擬環(huán)境中
pip install -r requirements.txt
3- 修改配置信息配置
在項(xiàng)目的DjangoBloger/DjangoBloger目錄中創(chuàng)建配置文件,Config.py 添加配置信息
主要配置是,數(shù)據(jù)庫
SECRET_KEY_CONFIG = '這是一段字符串,標(biāo)識,你的項(xiàng)目唯一性'
# DEBUG 是否開啟,生產(chǎn)環(huán)境,建議關(guān)閉
# CONFIG_DEBUG = False
CONFIG_DEBUG = True
# 服務(wù)器配置地址
CONFIG_ALLOWED_HOSTS =['127.0.0.1', 'localhost ', '.qiuyang.date']
# 數(shù)據(jù)庫名字
SQL_NAME = 'bloger'
# 數(shù)據(jù)庫賬號
SQL_USER = 'root'
# 服務(wù)端mysql密碼
# SQL_PASSWORD = ''
# 本地mysql密碼
SQL_PASSWORD = ''
# mysql服務(wù)器
SQL_HOST = '127.0.0.1'
# 端口
SQL_PORT = '3306'
3.1-創(chuàng)建項(xiàng)目需要用的數(shù)據(jù)庫
登錄mysql
mysql -u root -p
創(chuàng)建數(shù)據(jù)庫
create database bloger;
查看數(shù)據(jù)庫是否創(chuàng)建成功
show databases;
3.2-創(chuàng)建數(shù)據(jù)庫表
python manage.py makemigrations
3.3- 生成數(shù)據(jù)庫表
python manage.py migrate
如果默認(rèn)安裝mysql數(shù)據(jù)庫,沒有自定義配置,會遇到一個錯誤,設(shè)置方法參閱,配置mysql數(shù)據(jù)庫默認(rèn)字符集
django.db.utils.InternalError: (1366, "Incorrect string value:
4- 運(yùn)行開發(fā)服務(wù)器,預(yù)覽效果
python manage.py runserver
4.1 創(chuàng)建管理員賬號并輸入兩次密碼
python manage.py createsuperuser
4.2-提示輸入,賬號密碼
Username (leave blank to use 'root'):
Email address:
Password:
Password (again):
Superuser created successfully.
(ven) root@localhost:~/DjangoBloger#
4.3- 收集項(xiàng)目靜態(tài)文件
python manage.py collectstatic
4.4- 安裝 Gunicorn 服務(wù)
pip install Gunicorn
運(yùn)行g(shù)unicorn 服務(wù)器,預(yù)覽效果,通過IP 或者域名訪問8000 端口
gunicorn --bind 0.0.0.0:8000 DjangoBloger.wsgi
5-自動化部署
5.1- 創(chuàng)建Gunicorn systemd服務(wù)
在路徑 etc/systemd/system下創(chuàng)建gunicorn.service
添加如下內(nèi)容
從該[Unit]部分開始,該部分用于指定元數(shù)據(jù)和依賴項(xiàng)。我們將在此處描述我們的服務(wù)并告訴init系統(tǒng)僅在達(dá)到網(wǎng)絡(luò)目標(biāo)后啟動它:
接下來,我們將打開該**[Service]部分**。我們將指定要在其下運(yùn)行的用戶,網(wǎng)上很多教程說添加組,問題,這里不添加,
然后,我們將映射工作目錄并指定用于啟動服務(wù)的命令。在這種情況下,我們必須指定Gunicorn可執(zhí)行文件的完整路徑,該文件安裝在我們的虛擬環(huán)境中。我們將它綁定到項(xiàng)目目錄中的Unix套接字,因?yàn)镹ginx安裝在同一臺計算機(jī)上。這比使用網(wǎng)絡(luò)端口更安全,更快捷。我們還可以在這里指定任何可選的Gunicorn調(diào)整
最后,我們將添加一個**[Install]部分**。如果我們在啟動時啟動它,這將告訴systemd將此服務(wù)鏈接到什么。我們希望在常規(guī)多用戶系統(tǒng)啟動并運(yùn)行時啟動此服務(wù):
[whole]
Description=gunicorn daemon
After=network.target
[Service]
User=root
WorkingDirectory=/home/qiubite/DjangoBloger
ExecStart=/home/qiubite/DjangoBloger/venv/bin/gunicorn --workers 3 --bind unix:/home/qiubite/DjangoBloger/DjangoBloger.sock DjangoBloger.wsgi:application
[Install]
antedBy=multi-user.target
systemd服務(wù)文件就完成了。立即保存并關(guān)閉它
5.2- 啟動服務(wù)
現(xiàn)在可以啟動我們創(chuàng)建的Gunicorn服務(wù)并啟用它以便它在啟動時啟動
修改gunicorn.service 后 執(zhí)行
systemctl daemon-reload
啟動服務(wù)
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
啟動gunicorn 就可以訪問,只是還沒有靜態(tài)文件.靜態(tài)文件資源使用Nginx代理
5.3-檢查Gunicorn套接字文件
檢查進(jìn)程的狀態(tài)以確定它是否能夠啟動:沒有報錯恭喜你,
sudo systemctl status gunicorn
如果有錯誤,仔細(xì)檢查服務(wù)配置,
可以或查看錯誤日志
sudo journalctl -u gunicorn
6-Nginx配置
ubuntu下安裝nginx
apt-get install nginx
將Nginx配置為代理傳遞給Gunicorn
現(xiàn)在Gunicorn已經(jīng)建立,我們需要配置Nginx以將流量傳遞給進(jìn)程。
6.1-在 /etc/nginx 中找到 nginx conf
首先在 http 代碼塊中添加,如下,詳細(xì)解釋如下
首先指定偵聽正常端口80,并且它應(yīng)該響應(yīng)我們服務(wù)器的域名或IP地址:
server_name 后面 有域名寫域名,沒域名寫IP
location = /favicon.ico { access_log off; log_not_found off; }
不響應(yīng),favicon.ico
告訴Nginx在哪里可以找到我們在目錄中收集的靜態(tài)資源。
所有這些文件都有一個標(biāo)準(zhǔn)的URI前綴“/ static”,
因此我們可以創(chuàng)建一個位置塊來匹配這些請求:root /home/DjangoBloger/statict;
此路徑,根據(jù)你自己項(xiàng)目定
創(chuàng)建一個location / {}塊來匹配所有其他請求。在這個位置的內(nèi)部,我們將包含proxy_paramsNginx安裝中包含的標(biāo)準(zhǔn)文件,然后我們將流量傳遞給我們的Gunicorn進(jìn)程創(chuàng)建的套接字
完成后保存并關(guān)閉文件
server {
listen 80;
server_name www.qiuyang.date;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/qiubite/DjangoBloger;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/qiubite/DjangoBloger/DjangoBloger.sock;
}
}
6.2-測試Nginx配置是否存在語法錯誤:
sudo nginx -t
如果沒有報告錯誤,請重新啟動Nginx:
6.3--重新啟動Nginx
sudo systemctl restart nginx
6.4-開啟服務(wù)器端口
最后,我們需要在端口80上打開正常流量的防火墻。
由于我們不再需要訪問開發(fā)服務(wù)器,我們也可以刪除規(guī)則以打開端口8000:
開啟8000端口
sudo ufw delete allow 8000
sudo ufw allow 'Nginx Full'
如果這兩條命令,報 sudo: ufw: command not found 可以需要安裝 ufw,然后再執(zhí)行一遍開啟命令
sudo apt-get install ufw
端口開放完成,就可以查看博客的展示效果,訪問域名,愉快的玩耍吧
計劃分前端和后端模塊,基于Django,主要應(yīng)用有兩個,
Front 和 uadmin 一個前端用戶界面,和一個后端管理
windows 使用mysql有個問題
在 python2 中,使用 pip install mysql-python 進(jìn)行安裝連接MySQL的庫,使用時 import MySQLdb 進(jìn)行使用
在 python3 中,改變了連接庫,改為了 pymysql 庫,使用pip install pymysql 進(jìn)行安裝,直接導(dǎo)入即可使用
但是在 Django 中, 連接數(shù)據(jù)庫時使用的是 MySQLdb 庫,這在與 python3 的合作中就會報以下錯誤了
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'
1
解決方法:在 __init__.py 文件中添加以下代碼即可。
import pymysql
pymysql.install_as_MySQLdb()
1
2
額,找了一下卻沒有找到 install_as_MySQLdb() 這個方法的源碼,不過顧名思義應(yīng)該是讓 Django 把 pymysql 當(dāng)成 MySQLdb 來使用吧
總結(jié)
以上是生活随笔為你收集整理的django mysql5.7_GitHub - qiubiteme/DjangoBloger: 一个Django2.0+mysql57,实现的响应式博客的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 问道手游顿悟养精蓄锐技巧有哪些(问道官方
- 下一篇: 苹果实况怎么拍