相比較學習Django來說,部署應該是在整個環節中比較難的一項,特別是一些自學者,對liunx系統的命令行操作不熟悉,甚至是從來沒有接觸過服務器,這一塊我相信勸退了很多人!當初我自己學習的時候也是如此!
但我仍然覺得自學是一件非常酷的事,雖說可能會走些彎路,但這些彎路何嘗不是一種歷練和積累呢?你看人生的每一步都是這樣,越想走捷徑的人最后都繞了遠路,馬云在成功之前也曾經歷過無數失敗,所以直面困難。
自學習編程,請做到以下這三點:
一、學會總結歸納問題,并養成做筆記的習慣
二、出現問題,學會利用搜索引擎去搜索問題
三、不懂的可以先照貓畫虎,將你的需求實現,然后再去探尋一些概念性以及你不懂的知識點
好了,開始我們今天的正題,部署我們已經用django開發好的博客項目!
注意:以下幾件事都必須在激活虛擬環境下完成
pip3 freeze > requirements.txt
讀取requirements.txt文件,并安裝項目依賴命令!
pip3 install -r requirements.txt
2. 搜集項目的靜態文件
在項目的配置文件settings.py文件中添加添加靜態文件路徑
STATIC_ROOT = '/var/www/django-blog/static/'
這將會把所有的靜態文件拷貝至STATIC_ROOT配置的路徑!
學習階段我們需要買一個云服務器嗎?
我的答案是如果條件允許,建議你買一個初級的!費用也不是很高,一般做活動的話阿里云等這些平臺都會很便宜!但購買服務器不是必須的,我們可以在本地電腦上安裝虛擬機來充當服務器學習,一般安裝系統為ubuntu或centos,虛擬機使用 VMware就可以!
虛擬機VMware哪里有?以及如何在虛擬機安裝liu,nx系統 ?請參照自學編程的第二點,大家自行去解決這兩個問題!
一般我們開發用的系統都是windows 10,至少我是如此,土豪Mac請繞過,那首先必須安裝openssh!
win10 openSSH安裝教程:https://docs.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse
一、安裝擴展Remote Development
vscode本身就支持遠程開發,請安裝下邊這個擴展!
二、添加遠程服務器連接
三、保存服務器配置文件
sudo apt-get install nginx
檢查nginx是否安裝成功:*nginx -v 查看nginx的版本,如果正確顯示格式如這樣 nginx version: nginx/1.18.0 (Ubuntu),那么證明安裝成功!
nginx常用命令:
ubuntu安裝git,請參考這篇文章:http://www.lotdoc.cn/blog/post/28/
一、進入Nginx用來默認放置網站的文件夾
cd /var/www
二、克隆項目到該文件夾
git clone https://gitee.com/qbiancheng/django-blog.git
三、創建虛擬環境
python3 -m venv venv
四、激活虛擬環境
linux: . venv/bin/activate
windows: venv\Scripts\activate
五、安裝依賴
pip3 install -r requirements.txt
linux-ubuntu安裝uwsgi
對于 Python3.x 版本
sudo apt-get install python3-dev
sudo apt-get install python3-pip
sudo pip3 install uwsgi
在項目目錄下創建一個deploy的文件,創建一個uwsgi.ini的文件
cd /var/www/django-blog
makdir deploy
cd deploy
touch uwsgi.ini
使用vim打開uwsgi.ini文件vim uwsgi.ini,復制以下代碼并加以修改
# 配置域應該是uwsgi,記住這個不能丟,否則會報錯
[uwsgi]
# uwsgi監聽的socket,可以為socket文件或ip地址+端口號,用nginx的時候就配socket , 直接運行的時候配 http, http-socket = 127.0.0.1:8080
socket = 127.0.0.1:8001
#指定項目的目錄,在app加載前切換到當前目錄
chdir = /www/wwwroot/django-blog
# Django的wsgi文件,用來加載blog2/wsgi.py這個模塊
module = mysite.wsgi
# Python虛擬環境的路徑
home = /www/wwwroot/django-blog/venv
# master 啟動主進程。
master = true
# 最大數量的工作進程數
processes = 10
# 指定工作進程中的線程數
threads = 2
# 設置socket的權限
chmod-socket = 664
# 退出的時候是否清理環境,自動移除unix Socket 和 Pid 文件
vacuum = true
#日志文件路徑
daemonize = /www/wwwroot/django-blog/deploy/uwsgi.log
進入:cd /etc/nginx/sites-enabled
創建:touch blog
用vim編輯打開剛才創建的blog文件,將下邊的內容填寫進去,具體參考注釋說明:
# 配置文件內容:
# 轉發給哪個服務器,可以通過upstream配置項讓nginx實現負載均衡
upstream django {
server 127.0.0.1:8001; # 這里的端口號必須和uwsgi里的保持一致
server 127.0.1.1:8001;
}
# 設定虛擬主機配置,一個http中可以有多個server。
server {
# 啟動的nginx進程監聽請求的端口
listen 80;
#定義使用域名訪問
server_name 192.168.11.106;
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# location 配置請求靜態文件多媒體文件。
location /media {
alias /www/wwwroot/django-blog/media/;
}
# 靜態文件訪問的url
location /static {
# 指定靜態文件存放的目錄
alias /www/wwwroot/django-blog/static/;
}
# 將所有非媒體請求轉到Django服務器上
location / {
# 包含uwsgi的請求參數,路徑為qmblog_uwsgi_params絕對路徑
include /www/wwwroot/django-blog/deploy/params;
# 轉交請求給uwsgi
# uwsgi_pass 127.0.0.1:8000;
uwsgi_pass django;
#這個django對應開頭出的,對于動態請求,轉發到本機的端口,也就是uwsgi監聽的端口,uwsgi運行的主機和ip,后面我們會在本機的該端口上運行uwsgi進程
# 下面兩個配置意思是如果比如通過http://www.xxx.com直接訪問的是static下的index.html或者index.htm頁面,一般用于將首頁靜態化
#root /root/src/www/CainiaoBlog/static/;
#index index.html index.htm;
}
# 精確匹配不同于上面/,這里http://www.xxx.com會匹配這個,根據這個配置將請求轉發給另外nginx服務器,
# 讓另外服務器提供靜態首頁。同上面的訪問index.html在另外同一臺服務器上同一配置文件中結合。
# location = / {
# proxy_pass http://ip:port;
# }
}
最后,重啟nginx,具體請參考nginx常用命令!
備注:請務必在激活虛擬環境下運行
cd /var/www/django-blog
uwsgi --ini deploy/uwsgi.ini
出現[uWSGI] getting INI configuration from deploy/uwsgi.ini類似這行的命令說明啟動成功,直接去瀏覽器訪問即可!
Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務,通用TCP/UDP代理服務器。最初由Igor Sysoev編寫。長期以來,它已在許多負載較重的俄羅斯站點上運行,包括Yandex,Mail.Ru,VK和Rambler。 根據Netcraft的數據,nginx在2020年2月為最繁忙的站點提供了服務或代理了25.68%。中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。
截至2019年12月,差不多世界上每3個網站中就有1個使用Nginx。
Linux版本:Cent OS764位
Nginx版本: nginx-1.15.9
在安裝nginx前首先要確認系統中安裝了gcc、pcre-devel、zlib-devel、openssl-devel。
1、rpm包安裝的,可以用 rpm -qa 看到,如果要查找某軟件包是否安裝,用 rpm -qa | grep "軟件或者包的名字"
2、以deb包安裝的,可以用 dpkg -l 看到。如果是查找指定軟件包,用 dpkg -l | grep "軟件或者包的名字"
3、yum方法安裝的,可以用 yum list installed 查找,如果是查找指定包,用 yum list installed | grep "軟件名或者包名"
1.依賴環境安裝
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
2.下載Nginx
wget http://nginx.org/download/nginx-1.15.9.tar.gz
3.解壓
tar -zxvf nginx-1.15.9.tar.gz
4./usr/local目錄下創建一個nginx目錄,用來把已經下載好的nginx安裝編譯到此目錄中
cd nginx-1.15.9
./configure --prefix=/usr/local/nginx
make && make install
/usr/local/中生成nginx目錄,nginx安裝完成。
|-- conf #這是Nginx所有配置文件的目錄,極其重要
|-- fastcgi.conf #fastcgi相關參數的配置文件
|-- fastcgi.conf.default #fastcgi.conf的原始備份
|-- fastcgi_params #fastcgi的參數文件
|-- fastcgi_params.default
|-- koi-utf
|-- koi-win
|-- mime.types #媒體類型
|-- mime.types.default
|-- nginx.conf #這是Nginx默認的主配置文件
|-- nginx.conf.default
|-- scgi_params #scgi相關參數文件,一般用不到
|-- scgi_params.default
|-- uwsgi_params #uwsgi相關參數文件,一般用不到
|-- uwsgi_params.default
|-- win-utf
fastcgi_temp #fastcgi臨時數據目錄
|-- html #這是編譯安裝時Nginx的默認站點目錄,類似
Apache的默認站點htdocs目錄
23 | |--50x.html # 錯誤頁面優雅替代顯示文件,例如:出現502錯誤時會調用此頁面
24 # error_page 500502503504 /50x.html;
25 | `-- index.html # 默認的首頁文件,首頁文件名字是在nginx.conf中事先定義好的。
26 |-- logs #這是Nginx默認的日志路徑,包括錯誤日志及訪問日志
27 | |-- access.log # 這是Nginx的默認訪問日志文件,使用tail -f access.log,可以實時觀看網站用戶訪問情況信息
28 | |-- error.log # 這是Nginx的錯誤日志文件,如果Nginx出現啟動故障等問題,一定要看看這個錯誤日志
29 | `-- nginx.pid # Nginx的pid文件,Nginx進程啟動后,會把所有進程的ID號寫到此文件
30 |-- proxy_temp #臨時目錄
31 |-- sbin #這是Nginx命令的目錄,如Nginx的啟動命令nginx
32 | `-- nginx #Nginx的啟動命令nginx
33 |-- scgi_temp #臨時目錄
34 `-- uwsgi_temp #臨時目錄
35 9 directories,21 files
啟動命令
#1
/usr/local/nginx/sbin/nginx
#2
進入 cd /usr/local/nginx/sbin/nginx 目錄后 ./nginx啟動
#3 指定配置文件啟動
./nginx -c /usr/local/nginx/conf/nginx.conf
關閉防火墻,啟動Nginx,在瀏覽器即可訪問。
systemctl stop firewalld.service
/usr/local/nginx/sbin/nginx
停止命令
#1 使用-s stop可以強制停止Nginx服務
/usr/local/nginx/sbin/nginx -s stop 或者 ./nginx -s stop,以下采用./nginx
#2 使用-s quit可以正常地處理完當前所有請求再停止服務
./nginx -s quit
#3 采用kill方式。
#kill -s SIGTERM 主進程號
#主進程號可以通過以下查看
#cat /usr/local/nginx/logs/nginx.pid
#ps -ef | grep nginx
kill -s SIGTERM 15893 #強制停止Nginx服務
kill -s SIGINT 15893 #強制停止Nginx服務
kill -s SIGQUIT 15893 #優雅”地停止服務
重啟命令
#重新加載Nginx配置文件,然后以優雅的方式重啟Nginx
./nginx -s reload
#平滑重啟nginx
kill -HUP 主進程號
其他命令
#檢測配置文件是否有語法錯誤,然后退出
./nginx -t
#查看幫助
./nginx -? 或 ./nginx -h
#顯示版本信息并退出
./nginx -v
#顯示版本和配置選項信息,然后退出
./nginx -V
#檢測配置文件是否有語法錯誤,轉儲并退出
./nginx -T
#在檢測配置文件期間屏蔽非錯誤信息
./nginx -q
#設置前綴路徑(默認是:/usr/share/nginx/)
./nginx -p prefix
停止命令-s參數其實是告訴Nginx程序向正在運行的Nginx服務發送信號量,Nginx程序通過nginx.pid文件中得到master進程的進程ID,再向運行中的master進程發送TERM信號來快速地關閉Nginx服務
vim /usr/local/nginx/conf/nginx.conf
nginx.conf由多個塊組成,最外面的塊是main,main包含events和http,http包含upstream和多個server,server又包含多個location。
main(全局設置)、server(主機設置)、upstream(負載均衡服務器設置)和 location(URL匹配特定位置的設置)。
后面章節繼續介紹Nginx的其他特性與應用。