網站開發(週日):項目部署上線(實戰)

前言:項目部署採用Django+Nginx+Uwsgi+SQLite3架構,而Django處理數據的架構爲MVC。html

第1、安裝最新版本Ubuntu Desktop 18.04.1 LTS(特別繁瑣,大神略過)(大神可選Ubuntu Server 18.04.1 LTSpython

 一、建立新虛擬機。mysql

二、設置登陸用戶(隨便設置,記住密碼,後期咱們切換到root用戶登陸,纔有權限)。nginx

三、分給Ubuntu默認資源。git

四、Ubuntu自動開機(超級久,建議泡壺茶慢慢等)。web

五、以Root權限登陸Ubuntu。正則表達式

 第2、更新操做系統和安裝依賴包(所有root權限操做)sql

#更新操做系統軟件庫
sudo apt-get update
sudo apt-get upgrade

#安裝上傳rz、下載sz工具
sudo apt-get install lrzsz

#安裝gcc g++的依賴庫
sudo apt-get install build-essential
sudo apt-get install libtool

#安裝 pcre依賴庫
sudo apt-get install libpcre3 libpcre3-dev

#安裝 pcre依賴庫
sudo apt-get install zlib1g-dev

#安裝 ssl依賴庫
sudo apt-get install openssl
#安裝Python3和PIP3 sudo apt install python3 sudo apt install python3
-pip
#安裝virtualenv
sudo pip3 install virtualenv

#建立空文件夾
sudo mkdir -p /data/env #  放虛擬環境
sudo midir -p /data/www # 放本地項目
 

第3、本地項目部署到Ubuntu服務器數據庫

一、導出本地數據庫文件。django

python3.7 manage.py dumpdata > data.json

二、導出本地環境依賴包到requirements.txt文件。

pip3 freeze > requirements.txt

三、把項目源碼壓縮打包並上傳到碼雲

wudeMacBook-Pro:~ Wubz$ cd /Users/Wubz/PycharmProjects/mysite2019  # cd到本地項目目錄下
wudeMacBook-Pro:mysite2019 Wubz$ git init          #本地項目初始化git項目,git須要本身安裝(本機虛擬機各類安裝一次)
wudeMacBook-Pro:mysite2019 Wubz$ git remote add origin https://gitee.com/wubz/mysite2019.git
#將初始化的git項目與碼雲平臺的我的帳戶關聯,準備上傳本地項目到碼雲

wudeMacBook-Pro:mysite2019 Wubz$ git pull origin master #提交項目4步驟
wudeMacBook-Pro:mysite2019 Wubz$ git add .
wudeMacBook-Pro:mysite2019 Wubz$ git commit -m "第一次提交"
wudeMacBook-Pro:mysite2019 Wubz$ git push origin master
wudeMacBook-Pro:mysite2019 Wubz$ git push -u origin master -f #強制提交併覆蓋原有分支
 

四、碼雲平臺查看本身提交的項目。

五、將碼雲平臺的項目下載到Ubumtu服務器中(假設Ubuntu服務器地理位置在浙江杭州,因此才須要上傳&下載,這般折騰)。

 root@ubuntu:/data/env# sudo apt-get install git   #安裝git

 root@ubuntu:~# cd /data/www

root@ubuntu:/data/www# git clone https://gitee.com/wubz/mysite2019.git
Cloning into 'mysite2019'...
Username for 'https://gitee.com': 982240803@qq.com
Password for 'https://982240803@qq.com@gitee.com': ***********      #項目代碼,暫不公佈,需者私聯
....
.....
root@ubuntu:/data/www# cd mysite2019
root@ubuntu:/data/www/mysite2019# ls #下載完成
blog data.json db.sqlite3 DjangoUeditor manage.py media mysite2019 mysite2019env __pycache__ README.md requirements.txt static templates

 六、安裝項目依賴包並啓動項目。

root@ubuntu:/data/www/mysite2019#cd /data/env
root@ubuntu:/data/env# sudo virtualenv -p /usr/bin/python3 web   #建立虛擬環境包

root@ubuntu:/data/env# source /data/env/web/bin/activate #啓動虛擬環境

(web) root@ubuntu:/data/env# #進入到虛擬環境中

(web) root@ubuntu:/data/env# cd /data/www/mysite2019

(web) root@ubuntu:/data/www/mysite2019#
sudo pip3 install -r requirements.txt

(web) root@ubuntu:/data/www/mysite2019#
python3 manage.py runserver 127.0.0.1:80 #啓動項目,失敗,按照提示安裝依賴包

 (web) root@ubuntu:/data/www/mysite2019# pip3 install django

 (web) root@ubuntu:/data/www/mysite2019# pip3 install pymysql

 (web) root@ubuntu:/data/www/mysite2019# pip3 install pillow

(web) root@ubuntu:/data/www/mysite2019# python3 manage.py runserver 127.0.0.1:80    #再次啓動項目,成功!

Performing system checks...
System check identified no issues (0 silenced).
January 29, 2019 - 00:20:03
Django version 2.1.5, using settings 'mysite2019.settings'
Starting development server at http://127.0.0.1:8080/
Quit the server with CONTROL-C.

七、安裝Uwsgi應用服務器(處理動態請求,例如音視頻流) 。

root@ubuntu:~# pip3 install uwsgi     #系統級別下安裝一次Uwsgi
root@ubuntu:~# source /data/env/web/bin/activate  #進入虛擬環境env目錄下再安裝一次
(web) root@ubuntu:/data/env# pip3 install uwsgi

安裝成功以後,咱們進入項目根目錄cd /data/www/mysite2019/新建一個 uwsgi.xml文件,編寫代碼

<uwsgi>
   <socket>127.0.0.1:8080</socket><!-- 內部端口,自定義 --> 
   <chdir>/data/www/mysite2019/</chdir><!-- 項目路徑 -->            
   <module>mysite2019.wsgi</module><!-- mysite2019爲wsgi.py文件所在目錄--> 
  <processes>4</processes> <!-- 進程數 -->
  <daemonize>uwsgi.log</daemonize><!-- 日誌文件 -->
</uwsgi>

八、安裝並配置Nginx應用服務器。

(web) root@ubuntu:/usr/local# wget http://nginx.org/download/nginx-1.13.7.tar.gz #下載nginx源碼
(web) root@ubuntu:/usr/local# tar -zxvf nginx-1.13.7.tar.gz  #解壓
(web) root@ubuntu:/usr/local# cd nginx-1.13.7
(web) root@ubuntu:/usr/local/nginx-1.13.7# sudo ./configure 
(web) root@ubuntu:/usr/local/nginx-1.13.7# sudo make 
(web) root@ubuntu:/usr/local/nginx-1.13.7# sudo make install
(web) root@ubuntu:/usr/local/nginx-1.13.7# cd /usr/local/nginx/conf/
(web) root@ubuntu:/usr/local/nginx/conf# sudo cp nginx.conf nginx.conf.bak
(web) root@ubuntu:/usr/local/nginx/conf# nano nginx.conf  
打開nginx.conf文件,把裏面的內容所有刪除,輸入下面代碼: events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 4443; server_name www.hackers.free.idcfengye.com charset utf-8; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8080; uwsgi_param UWSGI_SCRIPT mysite2019.wsgi; uwsgi_param UWSGI_CHDIR /data/www/mysite2019/; #項目路徑 } location /static/ { alias /data/www/mysite2019/static/; #靜態資源路徑 } } } (web) root@ubuntu:/usr/local/nginx/conf# cd /usr/local/nginx/sbin/ (web) root@ubuntu:/usr/local/nginx/sbin# ./nginx -t
(web) root@ubuntu:/usr/local/nginx/sbin# ./nginx #終端沒有任何提示就證實nginx啓動成功。

(web) root@ubuntu:/usr/local/nginx/sbin# cd /data/www/mysite2019
(web) root@ubuntu:/data/www/mysite2019# uwsgi -x uwsgi.xml
(web) root@ubuntu:/data/www/mysite2019# cd /usr/local/nginx/sbin/
(web) root@ubuntu:/usr/local/nginx/sbin# ./nginx -s reload #平滑重啓nginx。
 

第4、內網穿透,項目部署到公網

一、 租用境外服務器,開通隧道(有免費,不穩定)。

二、在Ubuntu服務器開啓ngrok隧道,實現內網流量轉發。

三、在Ubuntu上開啓Nginx應用服務器(虛擬環境內root權限開啓)。

四、在Ubuntu上運行項目(虛擬環境內root權限運行)。

五、在MacBookPro Safari瀏覽器中瀏覽咱們上線到公網上的「Hacker學院」網站(須要訪問網站者,請評論「訪問網站」,我將開啓隧道服務,屆時瀏覽器打開http://hackers.vipgz1.idcfengye.com)。

六、在iPad瀏覽器訪問「Hacker學院」網站(圖片加載異常緩慢)。

七、在華爲Mate8手機瀏覽器訪問「Hacker學院」網站(接受不了圖片加載龜速慢者,可付費租用Ngrok境外服務器)。

第5、網站安全防禦(根據本站作安全分析,主要存在3點安全漏洞:DDOS攻擊、SQL注入、後臺弱口令)

一、DDOS攻擊與防護。

A distributed denial of service (DDoS) attack is a malicious attempt to disrupt the normal flow of a target server, service, or network through a large amount of Internet traffic overwhelming the target or its surrounding infrastructure. DDoS attacks are effective by leveraging multiple compromised computer systems as a source of attack traffic. Machines that are utilized may include computers and other network resources, such as IoT devices. At a high level, DDoS attacks are like traffic jams that block highways, preventing regular traffic from reaching its desired destination.
分佈式拒絕服務(DDoS)攻擊是一種惡意企圖,經過大量互聯網流量壓倒目標或其周圍的基礎架構來破壞目標服務器,服務或網絡的正常流量。DDoS攻擊經過利用多個受損計算機系統做爲攻擊流量來源來實現有效性。被利用的機器能夠包括計算機和其餘網絡資源,例如物聯網設備。從高層次來看,DDoS攻擊就像堵塞高速公路的交通堵塞,阻止了常規交通到達其所需的目的地。

主要防護手段:

(1) 減小公開暴露。對於企業而言, 減小沒必要要的分開曝光是十分有效的防護DDoS攻擊的一種方式, 及時關閉沒必要要的服務, 設置安全羣組和私有網絡, 禁止對主機的非開放服務, 限制打開最大SYN鏈接數, 限制特定IP地址的訪問。經過這些方式能夠減小受到攻擊的可能性。

(2) 報文過濾。針對源地址進行欺騙的DDoS攻擊, 能夠經過對報文源IP地址進行檢測, 根據IP地址的真假對報文進行過濾防護。入口過濾在攻擊源端的邊界路由上起做用, 當數據包進入到網絡時, 檢查報文IP地址是否符合通告的網絡標準, 若是不知足就丟棄這個數據包。

(3) 提高網絡帶寬保證能力。網絡帶寬直接決定抗DDoS攻擊的能力, 若是帶寬僅僅只能10M的話, 不管如何都不能抵禦DDoS攻擊。理論上講網絡帶寬越大越好, 可是考慮到經濟緣由, 不可能無限制地將網絡帶寬提升, 要在經濟能力容許的範圍內儘可能提升網絡帶寬的保證能力。

(4) 分佈式資源共享服務器。將數據和程序分佈在多個服務器上, 創建分佈式資源共享服務器。分佈式資源共享服務器有利於協調整個系統共同解決問題, 進行更加優化的資源分配。可以克服傳統的資源緊張與響應瓶頸的缺陷, 分佈式規模越大, 防護攻擊也就更加容易。

(5) 監控系統性能。對系統性能進行監控也是預防DDoS攻擊的一種重要方式, 不合理的服務器配置會使得系統容易被DDoS攻擊, 對API、CDN和DNS等第三方服務進行監控, 對網絡節點進行監視, 及時發現並清理可能出現的漏洞。當這些性能出現異常後, 及時進行維護。對網絡日誌進行按期查閱, 看是否有異常入侵, 及時作好防範工做。

(6)IP地址溯源。在攻擊過程當中, 能夠根據攻擊來源來設定過濾, 將攻擊來源處的流量進行過濾達到下降攻擊強度的效果;另外, 還能夠將收集到的信息做爲法律證據對攻擊者進行法律制裁。IP地址溯源技術主要有:鏈接測試、隨機採樣、登陸分析等。

(7)Anycast DDoS流量清洗。橫跨全球的分佈式數據中心擁有超過4Tbps的防護帶寬,利用知道創宇全球Anycast流量攻擊清洗機制,能夠完美防護SYN Flood、ACK Flood、ICMP Flood、UDP Flood、NTP Flood 、SSDP Flood、DNS Flood、HTTP Flood、CC(ChallengeCollapsar)攻擊。

二、SQL注入攻擊與防護。

SQL injection is to insert SQL commands into the Web form and submit them to the page request (query string), in order to spoof the server to execute malicious SQL commands.
It uses existing applications, inserts SQL statements into the database, and executes SQL statements that are not in accordance with the designer's intent.
SQL注入就是把SQL命令插入到Web表單而後提交到所在頁面請求(查詢字符串),從而達到欺騙服務器執行惡意的SQL命令。它是利用如今已有的應用程序,將SQL語句插入到數據庫中執行,執行一些並不是按照設計者意圖的SQL語句。

主要防護手段: 

(1) 不信任用戶輸入。對用戶的輸入進行校驗,經過正則表達式,或限制長度;對單引號和雙"-"進行轉換等,在客戶端和服務端都進行惡意代碼檢測。

(2) 關閉網頁的異常提示。使用自定義的錯誤信息對原始錯誤信息進行包裝或不顯示,避免黑客利用錯誤分析數據庫名、表名、列名。

(3) 禁止使用管理員權限的數據庫鏈接。爲每一個應用使用單獨的權限有限的數據庫鏈接,嚴格受權。若是數據庫是SQL Server,就能夠用有名字的參數了,格式是「@」字符加上參數。

(4) 用戶帳戶密碼等敏感信息加密儲存。切勿把機密信息明文存儲,加密敏感信息或者hash掉密碼。 

三、後臺弱口令(可參考此前文章:Hydra&Metasploit暴力破解SSH登陸口令)。

 

至此,網站開發部署上線完畢!

謝謝觀看,㊗️君新春快樂!

相關文章
相關標籤/搜索