Ubuntu下部署Django應用
很高興我大半個月來做的dlpucsdn.com已經能正常訪問了,源碼在Github, 經過好幾天的研究,也可以在服務器端運行了,以下所有代碼中的操作都需要在命令行運行
安裝mysql
apt-get update apt-get install mysql-server mysql-client
根據提示設置MySQL root用戶密碼
MySQL設置中文utf8格式
一般在/etc/mysql下
[client]下添加default-character-set=utf8
[mysqld]下添加character-set-server=utf8
[mysql]下添加default-character-set=utf8
重啟MySQL
service mysql restart
進入MySQL查看編碼
show variables like 'char%';
為MySQL建立遠程連接
由于修改數據庫時不可能頻繁的登服務器在命令行下修改,遠程用workbench連接MySQL服務器是更方便的選擇,先登入MySQL,授權一個可以遠程連接這個數據庫的用戶名和密碼
>>GRANT ALL PRIVILEGES ON *.* TO myuser@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; >>FLUSH PRIVILEGES;
有的MySQL沒有開放遠程連接的端口,只允許本地連接,你需要查看my.conf之類的文件,我的在/etc/mysql/my.conf把
bind-address:127.0.0.1
那行注釋掉即可
安裝pip
apt-get install python-pip
安裝django1.7
pip install Django==1.7
python進入python2.7解釋器
>>import django >>
不出錯說明安裝成功
安裝mysql-python
安裝mysql-python注意需要配置mysql_config我的在(/usr/bin目錄下,其他的類似也在bin目錄下,視不同系統不同版本而定)如果/usr/bin目錄下沒有mysql_config,需要安裝mysql開發包
apt-get install python-setuptools apt-get install libmysqld-dev apt-get install libmysqlclient-dev apt-get install python-dev
wget 'url'
解壓zip文件,首先安裝unzip
apt-get install unzip unzip mysql-python.zip cd mysql-python vi site.cfg
把mysql_config路徑那行取消注釋,路徑為/usr/bin/mysql_config
cd .. python setup.py build python setup.py install
進去python解釋器
>>import MySQLdb >>
不報錯說明安裝成功
MySQLdb不支持python3,可以試試pymysql,同時在Python3的項目中,需要在__init__.py中添加
import pymysql pymysql.install_as_MySQLdb()
這是由于Django調用MySQL的接口問題,在setting.py文件中具體為'ENGINE': 'django.db.backends.mysql',,仔細查看這句代碼就會發現Django默認調用的是MySQLdb,雖然它只支持Python2.0。
配置nginx
最重要的就是nginx的配置
我的配置目錄在/etc/nginx/nginx.conf和/etc/nginx/sites-enable/*后者可以在前者文件中設置,先查看配置文件/etc/nginx/sites-enable/django
根據自己的應用修改配置文件中static路徑,server_name,root等。修改完畢注意要service nginx reload
關于靜態文件的地址配置還是需要多說一句,nginx中的/static目錄對應的是setting.py文件中的STATIC_ROOT目錄,兩個寫一樣的,執行python manage.py collectstatic收集的文件是admin后臺模塊的靜態樣式文件,執行完后這些靜態文件就被復制在你設置的STATIC_ROOT目錄了。
部署代碼
因為我的代碼在github,先安裝git
apt-get install git git clone https://github.com/tcitry/dlpucsdn.git
部署以后注意修改數據庫密碼,郵件服務器密碼,debug模式False,template_debug模式為False。
virtualenv
pip install virtualenv
根據網上現有的教程簡單看看virtualenv的使用很容易理解,在項目依賴的相關程序配置過程中需要始終開著virtualenv。
配置Gunicorn
查看這個教程修改為自己的應用參數
service gunicorn restart
當部署一個應用時可以將配置文件放在/etc/init.d/gunicorn.conf文件里面。但同時部署多個文件的時候,可以使用supervisor+gunicorn+virtualenv的部署方式,這樣可以在每個不同的項目目錄利用virtualenv為每個應用配置不同的環境,同時可以使服務器的環境更加易于管理。
先在項目的根目錄測試一下,確保gunicorn安裝正確,
../bin/gunicorn myapp.wsgi:application
不出錯就說明正確了,出錯一般是提示沒有那個module名,檢查一下django是否安裝,執行命令的文件目錄是否正確。
supervisor的使用
apt-get install supervisor sudo vim /etc/supervisord.conf
編輯的內容如下,請自行修改項目和目錄名。
[program:classroom] command = sh /home/projects/classroom/classroom/gunicorn_start user = root redirect_stderr = true autorestart = true
配置這個gunicorn_start.sh
cd /home/projects/classroom/classroom ../bin/gunicorn classroom.wsgi:application -w 4 -b :8000
啟動supervisor
/etc/init.d/supervisord start
其他方式
supervisorctl start <name> supervisorctl stop <name>
安裝七牛云SDK
由于網站的靜態存儲要用七牛云,在運行程序前要安裝否則報錯沒有qiniu SDK的方法。
pip install qiniu
七牛云安裝前注意安裝的版本,我被坑過一次,寫程序時是6.0版本,部署時都7.0了,接口全都不一樣。
還有
還有不推薦cloudflare等國外CDN加速,親身體驗。
還有推薦下這篇來自digitalocean的部署實例
來自: