Django+nginx+uwsgi部署教程


 00-所需工具

xshell:https://www.netsarang.com/zh/downloading/?token=ZlZnVUNsWDJuM0VaZnVPUjZST1dwd0AzYlNteUZwb0dhRlUxRVV4bmNUZ2ZR 

xftp:https://www.netsarang.com/zh/downloading/?token=QlBLQUdldk1mUjliSzVQdzczeTVkQUA3R1RiZDFNcGQxOXFHVFAyaGhhREZn 

01-uwsgi介紹

uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。

要注意 WSGI / uwsgi / uWSGI 這三個概念的區分。

1. WSGI是一種Web服務器網關接口。它是一個Web服務器(如nginx,uWSGI等服務器)與web應用(如用Flask框架寫的程序)通信的一種規范。
2. uwsgi是一種線路協議而不是通信協議,在此常用於在uWSGI服務器與其他網絡服務器的數據通信。
3. 而uWSGI是實現了uwsgi和WSGI兩種協議的Web服務器。
4. uwsgi協議是一個uWSGI服務器自有的協議,它用於定義傳輸信息的類型(type of information),每一個uwsgi packet前4byte為傳輸信息類型描述,它與WSGI相比是兩樣東西。

02-nginx介紹

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

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

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

03-centos7的部署

以全新服務器為例:

yum -y update

yum install gcc

yum -y install zlib*

yum install openssl-devel -y

04-ssh安裝

yum install openssh-server -y

service sshd restart

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

vim /etc/ssh/sshd_config

把PasswordAuthentication項為yes

重啟服務
service sshd restart

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

# 查看是否開機自啟
執行命令:
chkconfig --list | grep mysqld
chkconfig mysqld on

#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;

5.1 卸載MySQL

# 查看是否已安裝mysql
執行命令:yum list installed | grep mysql

#yum方式安裝的mysql:

1、yum remove mysql mysql-server mysql-libs compat-mysql51
2、rm -rf /var/lib/mysql
3、rm /etc/my.cnf

# 刪除mysql相關文件
提示:該命令是查找mysql的相關文件
執行命令:find / -name mysql

執行命令:rm -rf [上面命令查出的結果目錄]
提示:刪除命令執行完之后,可再使用find / -name mysql 確認是否已經全部刪除

可以回到安裝步驟重新安裝mysql了。

5.2 CentOS7 安裝 MariaDB10.3

# 1. 配置repo文件,通過yum安裝:
vi /etc/yum.repos.d/MariaDB.repo

# 2. 添加以下內容:
# MariaDB 10.3 CentOS repository list - created 2018-06-21 09:11 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
# baseurl = http://yum.mariadb.org/10.3/centos7-amd64
# 修改為國內源
baseurl = http://mirrors.aliyun.com/mariadb/yum/10.3/centos7-amd64/
gpgkey =  http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1

# 3. 安裝:
sudo yum install MariaDB-server MariaDB-client

# 4. 修改數據庫文件目錄:
service mysql stop
mkdir -p /data/mysqldb
#拷貝默認數據庫到新的位置,-a表示將文件屬性一起拷貝
cp -a /var/lib/mysql /data/mysqldb

# 5. 修改mysql啟動配置
vim /etc/my.cnf.d/server.cnf

# 6. 找到[mysqld],添加以下內容:
[mysqld]
datadir=/data/mysqldb/mysql
socket=/var/lib/mysql/mysql.sock
#default-character-set=utf8 
character_set_server=utf8 
slow_query_log=on 
slow_query_log_file=/data/mysqldb/slow_query_log.log  
long_query_time=2

# 7. 創建慢查詢日志文件
touch /data/mysqldb/slow_query_log.log
chmod 666 /data/mysqldb/slow_query_log.log

# 8. 啟動MariaDB
service mysql start

# 9. 修改root密碼:
mysqladmin -u root password 'root'

# 10. root原始密碼存在於:/root/.mysql_secret

# 11. 授權ip登錄:
grant all on *.* to 'root'@'%' identified by 'password' with grant option; 

# 12. 啟停命令:
service mysql start
service mysql stop
service mysql restart
service mysql status

06-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

07-虛擬環境的安裝

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 workmanage02

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

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

09-拉取項目靜態文件

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

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

# 運行命令
    python manage.py collectstatic

10-安裝uwsgi

1. 進虛擬環境安裝

workon workmanage02

pip install uwsgi

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

[uwsgi]

socket =127.0.0.1:8000
chdir = /home/workspace/workamange02
module = workamange02.wsgi
master = true
processes = 4
vacuum = true
virtualenv = /root/.virtualenvs/workamange02
logto = /tmp/mylog.log
[uwsgi]
#使用HTTP訪問的端口號, 使用這個端口號是直接訪問了uWSGI, 繞過了Nginx
http = :8010
#與外界連接的端口號, Nginx通過這個端口轉發給uWSGI
socket = 127.0.0.1:8001
#是否使用主線程
master = true
# 項目在服務器中的目錄(絕對路徑)
chdir = /home/workspace/workamange02
# Django's wsgi 文件目錄 wsgi-file = /home/workspace/workamange02/workmanage02/wsgi.py
# 最大進程數 processes = 4 #每個進程的線程數 threads = 2 #狀態監聽端口 stats = 127.0.0.1:9191 # 退出時自動清理環境配置 vacuum = true #目錄下文件改動時自動重啟 touch-reload = /home/workspace/workamange02
#Python文件改動時自動重啟 #py-auto-reload = 1 #后台運行並把日志存到.log文件 daemonize = /home/workspace/workamange02/uWSGI.log

 

11-安裝nginx

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

# 要添加CentOS 7 EPEL存儲庫,請打開終端並使用以下命令:
sudo yum install epel-release
# 安裝nginx
sudo yum install nginx

# Nginx並不是自己開始的。要運行Nginx,請鍵入:
sudo systemctl start nginx

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

11.1 配置文件

在/etc/nginx/conf.d下新workmanage02.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 118.190.208.5; # 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/workspace/workmanage02/media;  # 指向django的media目錄
}


location /static {
    alias /home/workspace/workmanage02/static; # 指向django的static目錄
}

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

配置好后

nginx -t  

service nginx restart

12-MySQL數據庫數據傳輸

12.1 遠程連接服務器數據庫mysql

# 解決方法:
網上一大堆解決方法,都是開放端口、給賬號開放遠程連接權限,但都設置了 可還是不行。
原因應該是:在阿里雲安全組添加3306端口規則,把3306端口添加到入方向規則。成功了! 

 12.2 新建數據庫

 12.3 右鍵 點擊數據傳輸

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

#創建超級用戶

python manage.py createsuperuser

#把uswgi服務開啟

uwsgi --ini uwsgi.ini 

#訪問
http://你的ip地址/

 


免責聲明!

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



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