Django+nginx+uwsgi部署教程(centos7+ubuntu16.4)


項目部署教程

在線演示

1.1.原理介紹

django

  •  一個基於python的開源web框架

uwsgi

  •  一是一個web服務器,也可以當做中間件

nginx

  • 常用高性能代理服務器

wsgi.py

  • django項目攜帶的一個wsgi接口文件

nginx

Nginx是一個Http和反向代理服務器 
什么是反向代理服務器呢?

正向的就是由瀏覽器主動的想代理服務器發出請求,經代理服務器做出處理后再轉給目標服務器
反向的就是不管瀏覽器同不同意,請求都會經過代理服務器處理再發給目標服務器
這其中的區別就是必須經過Nginx反向代理服務器,這就有了使用Nginx的幾個好處:

安全:不管什么請求都要經過代理服務器,這樣就避免了外部程序直接攻擊web服務器
負載均衡:根據請求情況和服務器負載情況,將請求分配給不同的web服務器,保證服務器性能
提高web服務器的IO性能:這個我也沒看懂,總結來說就是請求從客戶端傳到web服務器是需要時間的,
傳遞多長時間就會讓這個進程阻塞多長時間,而通過反向代理,就可以在反向代理這完整接受請求,然后再
傳給web服務器,從而保證服務器性能,而且有的一些簡單的事情(比如靜態文件)可以直接由反向代理處理,不經過web服務器

流程

首先客戶端請求服務資源,
nginx作為直接對外的服務接口,接收到客戶端發送過來的http請求,會解包、分析,
如果是靜態文件請求就根據nginx配置的靜態文件目錄,返回請求的資源,
如果是動態的請求,nginx就通過配置文件,將請求傳遞給uWSGI;uWSGI 將接收到的包進行處理,並轉發給wsgi,
wsgi根據請求調用django工程的某個文件或函數,處理完后django將返回值交給wsgi,
wsgi將返回值進行打包,轉發給uWSGI,
uWSGI接收后轉發給nginx,nginx最終將返回值返回給客戶端(如瀏覽器)。
*注:不同的組件之間傳遞信息涉及到數據格式和協議的轉換

作用

1. 第一級的nginx並不是必須的,uwsgi完全可以完成整個的和瀏覽器交互的流程; 
2. 在nginx上加上安全性或其他的限制,可以達到保護程序的作用; 
3. uWSGI本身是內網接口,開啟多個work和processes可能也不夠用,而nginx可以代理多台uWSGI完成uWSGI的負載均衡; 
4. django在debug=False下對靜態文件的處理能力不是很好,而用nginx來處理更加高效。

 

centos7的部署

以全新服務器為例:

yum -y update

yum install gcc yum
-y install zlib* yum install openssl-devel -y

1.2.ssh安裝

 yum install openssh-server -y

service sshd restart

#xshell連不上,SSH服務端不允許密碼驗證。
#服務端開啟密碼驗證的方法:

vim /etc/ssh/sshd_config

把PasswordAuthentication項為yes

重啟服務

service sshd restart

 

11.2.mysql安裝

#1.安裝
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-community-server

#2.重啟服務
service mysqld restart

#3. 設置bind-ip

    vim /etc/my.cnf
    在 [mysqld]:
        下面加一行
        bind-address = 0.0.0.0

#4.登錄mysql
mysql -u root

#5. 設置外部ip可以訪問
#mysql中輸入命令:
#后面用navicat連接遠程服務器mysql的用戶名和密碼
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

FLUSH PRIVILEGES;

#6.設置mysql密碼
進入mysql:
set password =password('123456');     #密碼123456
flush privileges;

 

11.3.pip和python3.6的安裝

#安裝pip

wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate sudo python get-pip.py
#安裝python3.6
1. 獲取

wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
tar -xzvf Python-3.6.2.tgz -C  /tmp
cd  /tmp/Python-3.6.2/

2. 把Python3.6安裝到 /usr/local 目錄

./configure --prefix=/usr/local
make
make altinstall

3. 更改/usr/bin/python鏈接

ln -s /usr/local/bin/python3.6 /usr/bin/python3

 

11.4.虛擬環境安裝

yum install python-setuptools python-devel
pip install virtualenvwrapper

#編輯.bashrc文件
vim ~/.bashrc

#添加進去
export WORKON_HOME=$HOME/.virtualenvs
source /usr/bin/virtualenvwrapper.sh

#sudo find / -name virtualenvwrapper.sh      查看你的virtualenvwrapper.sh在什么地方

#重新加載.bashrc文件
source ~/.bashrc

#虛擬環境保存的路徑
cd ~/.virtualenvs/      (創建的虛擬環境都會保存在這個目錄,前面設置的)

#創建指定python版本的虛擬環境方法
mkvirtualenv -p /usr/local/bin/python3.6 MxOnline

workon MxShop
#進虛擬環境安裝依賴包

首先 pip freeze > requirements.txt
將本地的虛擬環境安裝包導出來,上傳到服務器
pip install -r requirements.txt #安裝mysqlclient出問題 centos 7: yum install python-devel mariadb-devel -y ubuntu: sudo apt-get install libmysqlclient-dev 然后: pip install mysqlclient

 

11.5.git安裝

yum install git

git config --global user.name "Your Name"
git config --global user.email "youremail@domain.com"

cd ~/ && ssh-keygen -t rsa -C "你的郵箱"

#提示的信息,直接按enter就行

cd .ssh

把公鑰文件(id_rsa.pub)中的碼復制到github

#就可以開始clone代碼了

git clone git@github.com:derek-zhang123/MxOnline.git

這是我的項目目錄和虛擬環境目錄

  • 項目目錄:          /home/gitpackage/MxOnline
  • 虛擬環境目錄:  /root/.virtualenvs/MxShop

 

11.6.拉取項目靜態文件

#在django的setting文件中,添加下面一行內容:

    STATIC_ROOT = os.path.join(BASE_DIR, "static/")

#運行命令
    python manage.py collectstatic

 

 

 settings中其它需要設置的地方

DEBUG = True

ALLOWED_HOSTS = ['*']   #自己設置可以訪問的域名,‘*’代表所有都可以訪問

 

11.7.uwsgi

(1)安裝

進虛擬環境安裝

workon MxOnline

pip install uwsgi

(2)在項目目錄下新建uwsgi.ini文件

MxOnine/uwsgi.ini

[uwsgi]

socket =127.0.0.1:8000
chdir = /home/gitpackage/MxOnline
module = MxOnline.wsgi
master = true
processes = 4
vacuum = true
virtualenv = /root/.virtualenvs/MxShop
logto = /tmp/mylog.log

注: chdir: 表示需要操作的目錄,也就是項目的目錄 module: wsgi文件的路徑 processes: 進程數 virtualenv:虛擬環境的目錄

11.8.nginx

(1)安裝

這里有安裝方法:https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7

sudo yum install nginx

#可能會用到的命令
service nginx restart
service nginx stop
service nginx start

 

(2)配置文件

在/etc/nginx/conf.d下新建MxOnline.conf

# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server

server {
# the port your site will be served on
listen      80;
# the domain name it will serve for
server_name 180.76.56.222; # substitute your machine's IP address or FQDN
charset     utf-8;

# max upload size
client_max_body_size 75M;   # adjust to taste

# Django media
location /media  {
    alias /home/gitpackage/MxOnline/media;  # 指向django的media目錄
}


location /static {
    alias /home/gitpackage/MxOnline/static; # 指向django的static目錄
}

# Finally, send all non-media requests to the Django server.
location / {
    uwsgi_pass  django;
    include     uwsgi_params; 
}
}

 

 配置好后

nginx -t       #提示success說明沒問題

service nginx restart

 

11.9.navicat數據傳輸

一切都配置好后,把本地數據庫的數據傳到服務器上面

(1)連接你的服務器數據庫

(2)新建項目數據庫

(3)傳輸數據

 

 

 數據傳輸完成,配置也都配置好后,就可以開始訪問了

#創建超級用戶

python manage.py createsuperuser

#
把uswgi服務開啟

uwsgi --ini uwsgi.ini #訪問 http://你的ip地址/

 

 

 

 

ubuntu的基本環境搭建

sudo apt-get update

apt-get install gcc 

apt-get install libssl-dev

sudo apt-get install openssl


apt-get install zlib1g

apt-get install zlib1g.dev

 mysql

sudo apt-get install mysql-server

輸入密碼

mysql -u root -p

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

 bind-address = 0.0.0.0    #添加進去

sudo service mysql restart

#設置遠程訪問

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

flush privileges;

 pip和python3.6

wget https://bootstrap.pypa.io/get-pip.py  --no-check-certificate

sudo python get-pip.py
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz

tar -xzvf Python-3.6.2.tgz -C  /tmp
cd  /tmp/Python-3.6.2/

2. 把Python3.6安裝到 /usr/local 目錄

./configure --prefix=/usr/local
make
make altinstall

3. 更改/usr/bin/python鏈接

ln -s /usr/local/bin/python3.6 /usr/bin/python3

 虛擬環境

pip install virtualenv
pip install virtualenvwrapper

vim ~/.bashrc

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

source ~/.bashrc
mkvirtualenv MxOnline --python=python3.6 worko MxOnline sudo apt
-get install libmysqlclient-dev pip install -r requirements.txt

 git

sudo apt-get update
sudo apt-get install git

git config --global user.name "Your Name"
git config --global user.email "youremail@domain.com"

如果安裝軟件時候報錯

 E: Sub-process /usr/bin/dpkg returned an error code (1)錯誤解決

在用apt-get安裝軟件時出現了類似於
install-info: No dir file specified; try --help for more information.dpkg:處理 gettext (--configure)時出錯: 子進程 post-installation script 返回了錯誤號 1 在處理時有錯誤發生:
findutils
E: Sub-process /usr/bin/dpkg returned an error code (1)
辦法如下:
1.$ sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old //現將info文件夾更名
2.$ sudo mkdir /var/lib/dpkg/info //再新建一個新的info文件夾
3.$ sudo apt-get update,再$sudoapt-get -f install //不用解釋了吧
4.$ sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old //執行完上一步操作后會在新的info文件夾下生成一些文件,現將這些文件全部移到info_old文件夾下
5.$ sudo rm -rf /var/lib/dpkg/info //把自己新建的info文件夾刪掉
6.$ sudo mv /var/lib/dpkg/info_old /var/lib/dpkg/info //把以前的info文件夾重新改回名字
到此問題順利解決

 

github

cd ~/ && ssh-keygen -t rsa -C "你的郵箱"

#提示的信息,直接按enter就行

cd .ssh

把公鑰文件(id_rsa.pub)中的碼復制到github

#就可以開始clone代碼了

git clone git@github.com:derek-zhang123/MxOnline.git

 


免責聲明!

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



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