Django打造大型企業官網-項目部署


Django打造大型企業官網-項目部署


 一、准備工作

1、在開發機上的准備工作

 1)確認項目沒有bug。
 2)打開終端,進入虛擬環境,再 cd 到項目根目錄下,執行命令:pip freeze > requirements.txt,將當前環境的包導出到`requirements.txt`文件中,方便在部署的時候安裝。

 

 3)將項目上傳到服務器上的`/srv`目錄下。這里以`git`的形式為例。

   我們使用第三方代碼托管平台 -碼雲 Gitee

  

 選擇碼雲作為代碼托管平台的原因是因為在碼雲上傳項目代碼,即使是私有項目也不會被收費。

 碼雲官網:https://gitee.com/

  將項目上傳到服務器上:

  3.1)在服務器中新建倉庫/項目:

    

  3.2)將本地項目代碼提交到服務器中:

   

  git 相關操作:

# 本地項目代碼 → 本地 git 倉庫 → 服務器倉庫

git init    # 初始化本地倉庫

git remote add origin xxx.git   # 關聯遠程倉庫,xxx.git:分為兩種:SSH跟HTTPS,建議使用第一種方式

git add .         # 將本地項目的所有文件都預集合在一起,類似於打包
git commit -m "first commit !"   # 將本地代碼添加到倉庫,與 "git add ." 結合執行

git pull origin master --allow-unrelated-histories   # 從遠程(服務器)的 master 中拉取代碼下來,如果不是第一次拉代碼,可以不用加后面的參數

git push origin master   # 確定沒問題后,將本地倉庫代碼上傳到服務器項目倉庫中

git status  # 查看狀態

  如果在拉取遠程代碼或提交代碼到遠程時報錯:

  

 在 git Bash 中執行下述命令:

1.輸入命令:git fsck -.-lost-found,可以看到好多“dangling commit” 
2.清空他們:git gc   # 可以直接執行這行代碼

 


 

2、在服務器上的准備工作

 本文介紹的服務器為 Ubuntu

 2.1、 Ubuntu 開啟 root 用戶

# 如果是新裝的機子,開啟root用戶采用下述指令
> sudo passwd root
> 然后輸入root 用戶密碼

# 如果已有 root 用戶 ,直接進入
> su -  或 su root  都能進入root 用戶

 2.2、為了方便Xshell 連接服務器,建議安裝 OpenSSH(一般雲服務器上都已經安裝好的)

  xshell 連接服務器方式介紹:https://www.cnblogs.com/Eric15/articles/9459329.html

> sudo apt install openssh-server openssh-client    # 安裝 openssh
> service ssh restart     # 重啟 openssh

  2.2.1、安裝 vim:

sudo apt install vim

 


2.3、安裝`MySQL`服務器和客戶端:

sudo apt install mysql-server mysql-client
sudo apt-get install libmysqld-dev

  MySQL 安裝及相關操作參考鏈接:https://www.cnblogs.com/Eric15/articles/9198777.html

 

 MySQL簡單操作指令:

#linux/ubuntu mysql的啟動關閉

# 一、 啟動方式
1、使用 service 啟動:service mysql start
2、使用 mysqld 腳本啟動:/etc/inint.d/mysql start
3、使用 safe_mysqld 啟動:safe_mysql&

# 二、停止
1、使用 service 啟動:service mysql stop
2、使用 mysqld 腳本啟動:/etc/inint.d/mysql stop
3、mysqladmin shutdown

# 三、重啟
1、使用 service 啟動:service mysql restart
2、使用 mysqld 腳本啟動:/etc/inint.d/mysql restart



# 客戶端連接MySQL 服務端
# 1.遠程連接:
      mysql -h host -u user -p
# 2.本地客戶端連接:
      mysql -uroot -p
 # 回車后輸入密碼即可

 


 

 2.4、安裝 memcached

> sudo apt install memcached

 操作 memcached :

telnet 127.0.0.1 11211

 


 

2.5、安裝 python

# Linux/Ubuntu 默認裝有 python2 python3

# 安裝python2 、pip:
> sudo apt install python
> sudo apt install python-pip

# 安裝python3 、pip3:
> sudo apt install python3
> sudo apt install python3-pip


# 設定python默認執行版本為python3:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150


# 如果提示 pip 版本過低,執行下述命令更新pip:

 pip install --upgrade pip

 

pip 與 pip3 區別:

pip和pip3的區別:

pip是python的包管理工具,pip和pip3版本不同,都位於Scripts\目錄下:
如果系統中只安裝了Python2,那么就只能使用pip。
如果系統中只安裝了Python3,那么既可以使用pip也可以使用pip3,二者是等價的。
如果系統中同時安裝了Python2和Python3,則pip默認給Python2用,pip3指定給Python3用

 

2.6、安裝虛擬環境 :virtualenv  、virutalenvwrapper

 虛擬環境參考博文:https://www.cnblogs.com/Eric15/articles/9517232.html

# 安裝 virtualenv
> pip install virtualenv      # python2版本的virtualenv
> pip3 install virtualenv    # python3版本

# 使用指定 python 版本創建 virtualenv 虛擬環境
> virtualenv -p C:\Python36\python.exe virtualenv-name


# 安裝 virtualenvwrapper
> pip install virtualenvwrapper      # python2版本
> pip3 install virtualenvwrapper    # python3版本

# 使用指定 python 版本創建 virtualenvwrapper虛擬環境 ,如python2 、python3均存在,創建虛擬環境時默認使用的解釋器是python2版本,如果要使用python3版本,則需指定python版本
> mkvirtualenv --python==C:\Python36\python.exe virtualenv-name     # Windows
>
mkvirtualenv --python=/usr/bin/python3 py3scrapy # linux/Ubuntu
# 注意點: # 1. 直接安裝 virtualenvwrapper 時,會一同安裝 virtualenv  # 2.當只安裝python2版本 或 python3版本的 virtualenvwrapper時,創建 virtualenvwrapper虛擬環境 使用的就是對應的python版本  

 

 配置文件配置:

# 使用 vim 進入 /.bashrc 文件中做以下改動:

export WORKON_HOME=$HOME/.envs  #虛擬環境都保存到 .envs文件夾中

VIRTUALENVWRAPPER_PYTHON='/usr/bin/python3'  #指定創建 virtualenvwrapper 虛擬環境時默認采用 python3版本的解釋器 ,針對使用 pip3 安裝的virtualenvwrapper ,如是pip(python2)安裝的virtualenvwrapper,默認是python2解釋器,不需要添加此行代碼   

source /usr/local/bin/virtualenvwrapper.sh  #啟動文件路徑  使用pip/pip3 安裝 virtrualenvwrapper虛擬環境時,會生成virtualenvwrapper.sh並放置到python的bin目錄下,找到該路徑下的bin/virtualenvwrapper.sh文件並指定為默認的啟動文件   


# 然后重啟 /.bashrc 文件:
> source ~/.bashrc

  如果安裝過慢,可以采用豆瓣源安裝的方式:

sudo pip install -i http://pypi.douban.com/simple/ virtualenvwrapper

 


 

2.7、安裝 git :

sudo apt install git

 拉取遠程代碼到本地:

# Linux/Ubuntu 
# 目錄:/home/nan/pro_python/xfz

> git init   # git 初始化xfz文件夾為git倉庫

> git remote add origin https://gitee.com/chenjiongnan/xfz.git     # 與遠程倉庫關聯

> git pull origin master      # 將遠程倉庫的代碼拉取到本地,回車后需要輸入賬號密碼

# 驗證通過后,等待系統將項目代碼拉取到本地就可以了

 如果以后開發機上有修改/更改項目代碼,直接將代碼 push 到遠程倉庫,再在服務器上 pull 遠程代碼下來即可:

git push origin master

git pull origin master 

 


 3、數據遷移等准備 

 3.1、安裝 requirements.txt 中的所有包

 進入虛擬環境中,然后進入到項目所在目錄,執行命令:`pip install -r requirements.txt`,安裝好相應的包

pip install -r requirements.txt

 

3.2、在 MySQL 數據庫創建相應的數據庫

> mysql -uroot -p       # 進入數據庫
> 輸入密碼

# 進入數據庫后 ,創建我們需要的數據庫:
create database xfz charset utf8;

# 退出 數據庫
> exit;

 

關於數據庫數據遷移,可參考博文:https://www.cnblogs.com/Eric15/articles/9704522.html


 

3.3、django 表數據 文件遷移

進入項目主目錄下(有 manage.py文件的目錄下),執行`python manage.py migrate`命令,將遷移文件,映射到數據庫中,創建相應的表 

python manage.py migrate

 

 注意:由於項目部署前,在開發機上工作時我們已經生成了遷移腳本,因此不需要先運行 'python manage.py makemigrations' ,直接運行 'python manage.py migrate' 即可


 

3.4、設置`ALLOW_HOST`為你的域名(服務器域名),以及ip地址 ,同時設置`DEBUG=False`,避免如果你的網站產生錯誤,而將錯誤信息暴漏給用戶

DEBUG = False

ALLOWED_HOSTS = ["192.168.*.*",]    # ALLOWED_HOSTS 填的是服務器的域名或ip

3.5、試啟動項目

# 執行啟動項目命令:
python manage.py runserver 0.0.0.0:8000

# 在網頁中輸入 http://服務器的ip地址:8000/ ,訪問該網站
> http://192.168.1.145:8000

 3.6、靜態文件收集

 收集靜態文件是為了將靜態文件提供給 Nginx ,這樣用戶如果只是請求靜態文件,就可以從Nginx中獲取,而不需要進入服務端獲取了

 在settings.py 中設置 STATIC_ROOT:

# settings.py
 
STATIC_ROOT = os.path.join(BASE_DIR, "static_dist")   # static_dist:新建的文件夾,用於收集靜態文件

# 然后將代碼推到遠程倉庫,再在服務器中將遠程代碼拉取下來
# 在服務端執行以下命名,收集所有靜態文件,也可以在處理Nginx 時再收集靜態文件:
 python manage.py collectstatic

 

四、Nginx + uwsgi + Django 項目部署

 Nginx + uwsgi + Django 生產部署環境參考博文https://www.cnblogs.com/Eric15/articles/9484762.html 

1、Nginx

 1.1 Nginx 安裝

  nginx是一個web服務器,用來加載靜態文件和接收http請求的。通過命令`sudo apt install nginx`即可安裝。

sudo apt install nginx

 

 1.2 Nginx 常用命令

service nginx start     # 啟動nginx
service nginx stop     #  關閉nginx
service nginx restart  # 重啟nginx

 在網頁訪問服務器ip + 80端口 (http://192.168.1.101:80) , 如果能成功訪問則表示Nginx 安裝成功且已啟動

 1.3 編寫 Nginx 配置文件

  在`/etc/nginx/conf.d`目錄下,新建一個文件,叫做`xfz.conf`,文件名可以任意取,建議以項目名命名,然后將以下代碼粘貼進去保存:

upstream xfz {      # 項目名
    server unix:///home/nan/pro_python/xfz/xfz.sock;    # Nginx配置的server路徑要與uwsgi 的server路徑保持一致(位置:項目xfz目錄下的xfz.sock),xfz.sock不需要手動創建,但Nginx與uwsgi 通信時會自動創建 
}

# 配置服務器
server {
    # 監聽的端口號
    listen      80;
    # 域名
    server_name 192.168.0.101;    # 服務器ip 、域名等
    charset     utf-8;

    # 最大的文件上傳尺寸
    client_max_body_size 75M;  

    # 靜態文件訪問的url
    location /static {
        # 靜態文件地址
        alias /home/nan/pro_python/xfz/static_dist;           # STATIC_ROOT 靜態文件的路徑 
    }

    # 最后,發送所有非靜態文件請求到django服務器
    location / {
        uwsgi_pass  xfz;    # 與上面upstream對應
        # uwsgi_params文件地址
        include     /etc/nginx/uwsgi_params; 
    }
}

  寫完配置文件后,為了測試配置文件是否設置成功,運行命令:`service nginx configtest`,如果不報錯,說明成功

service nginx configtest

 

  每次修改完了配置文件,都要記得運行`service nginx restart`。

service nginx restart

 

2、uwsgi

 2.1 概述

  uwsgi是一個應用服務器,非靜態文件的網絡請求就必須通過他完成,他也可以充當靜態文件服務器,但不是他的強項。uwsgi是使用python編寫的,因此通過`pip install uwsgi`就可以了。(uwsgi建議安裝在系統級別的Python環境中,不要安裝到虛擬環境中) ,如果安裝在虛擬環境中,則每次啟動uwsgi ,必須先要進入虛擬環境,再進入項目目錄下,才能啟動。

 2.2 安裝

# 安裝
pip install uwsgi 

pip3 install uwsgi

 

 2.3 啟動 django 項目

# 啟動 uwsgi
> uwsgi --http :8000 --module xfz.wsgi --vritualenv=/home/.envs/xfz


# 服務器網址為 :http://[服務器ip]:8000
# xfz.wsgi :前綴為項目名稱
# virtualenv : 后面為項目所在的虛擬環境文件夾地址

 輸入網址: http://服務器地址/news:8000  :訪問本項目新聞首頁,如果能訪問成功,說明uwsgi啟動成功

 

 2.4 編寫 uwsgi 配置文件

  在項目的根目錄下面,創建一個文件叫做`xfz_uwsgi.ini`的文件,然后填寫以下代碼:

[uwsgi]

# Django相關的配置
# 必須全部為絕對路徑
# 項目的路徑
chdir           = /home/nan/pro_python/xfz
# Django的wsgi文件
module          = xfz.wsgi      # 項目xfz 下的wsgi.py文件
# Python虛擬環境的路徑
home            = /home/nan/.envs/xfz

# 進程相關的設置
# 主進程
master          = true
# 最大數量的工作進程
processes       = 10
# socket文件路徑,絕對路徑
socket          = /home/nan/pro_python/xfz/xfz.sock      # 與 Nginx server 對應
# 設置socket的權限
chmod-socket    = 666
# 退出的時候是否清理環境
vacuum          = true

 寫完 uwsgi 的配置文件,以后通過uwsgi 啟動 Django項目時,就可以通過啟動uwsgi 配置文件的方式啟動:

# 進入項目根目錄下:/home/nan/pro_python/xfz(根目錄下有xfz_uwsgi.ini 文件),然后執行下行命令:

uwsgi --ini xfz_uwsgi.ini

 


 3、supervisor

 3.1 概述

  supervisor 可以用來管理 uwsgi ,在uwsgi發生意外的情況下,可以自動讓其重啟。除了重啟,也可以執行其他操作,如關閉、啟動、重新啟動 uwsgi 等。

 3.2 安裝

  在系統級別的python環境下進行安裝:

pip install supervisor

pip3 install supervisor

 

 3.3 編寫 supervisor 配置文件

  在項目的根目錄下創建一個文件叫做`xfz_supervisor.conf` ,將下述代碼粘貼到里面:

# supervisor的程序名字 ,可任取
[program:xfz]
# supervisor執行的命令:啟動uwsgi
command=uwsgi --ini zlkt_uwsgi.ini
# 項目的目錄
directory = /home/nan/pro_python/xfz
# 開始的時候等待多少秒
startsecs=0
# 停止的時候等待多少秒
stopwaitsecs=0  
# 自動開始
autostart=true
# 程序掛了后自動重啟
autorestart=true
# 輸出的log文件 , 需要提前先到項目根目錄下新建log 文件夾 ,否則運行時會報錯
stdout_logfile=/home/nan/pro_python/xfz/log/supervisord.log
# 輸出的錯誤文件
stderr_logfile=/home/nan/pro_python/xfz/log/supervisord.err

[supervisord]
# log的級別
loglevel=info

[inet_http_server]
# supervisor的服務器
port = :9001
# 用戶名和密碼
username = admin
password = 123

# 使用supervisorctl的配置
[supervisorctl]
# 使用supervisorctl登錄的地址和端口號
serverurl = http://127.0.0.1:9001
# 登錄supervisorctl的用戶名和密碼
username = admin
password = 123


[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

 然后使用命令`supervisord -c xfz_supervisor.conf`運行就可以了:

# 在項目根目錄下運行
supervisord -c xfz_supervisor.conf

 使用supervisord 成功運行后,以后如果想要啟動或關閉`uwsgi`,就可以通過命令`supervisorctl -c xfz_supervisor.conf`進入到管理控制台,然后可以執行相關的命令進行管理:

# 客戶端操作 supervisor  ,相當於mysql客戶端操作服務端一樣
supervisorctl -c xfz_supervisor.conf    # 從客戶端啟動supervisor ,前提需開啟supervisord ,且進入項目根目錄下執行

# 可執行的相關命令:
    * status                # 查看狀態
    * start program_name    #啟動程序 ,即啟動uwsgi ,因supervisor 中command配置的就是啟動uwsgi 的命令,所以啟動supervisor的同時就是啟動uwsgi
    * restart program_name  #重新啟動程序
    * stop program_name     # 關閉程序
    * reload                # 重新加載配置文件,即xfz_supervisor.conf
    * quit                  # 退出控制台,即退出 supervisorctl

  注:program_name:為 supervisor 的程序名:

  

 進入到 supervisorctl 時,輸入 'help' ,可查看 supervisor 相關的一些操作:

  

 3.4 關系圖

   使用 supervisor 管理 uwsgi ,而不管理 Nginx 的原因是:Nginx 自身是守護進程,當程序掛了會自動重啟 ,而 uwsgi 自身不是守護進程 ,程序掛了就掛了。使用 supervisor 來管理 uwsgi ,相當於給uwsgi 起了個守護進去,當 uwsgi 程序掛了會自動給重啟。

  


* Nginx 與 uwsgi 都安裝及配置好配置文件后,啟動項目:

# 1. 沒有 [supervisor] ,啟動步驟 ↓:

# 1)啟動 Nginx
service nginx start/restart

# 2)啟動 uwsgi ,項目根目錄下啟動
uwsgi --ini xfz_uwsgi.ini

# =============================================

# 2. [supervisor]管理 uwsgi ,啟動步驟 ↓:

# 1)啟動 Nginx
service nginx start/restart

# 2)由 supervisor 啟動 uwsgi ,項目根目錄下啟動
supervisord -c xfz_supervisor.conf

 

 溫馨提醒:

 1、在 copy 或編寫 Nginx 、uwsgi 、supervisor 配置文件時 ,記得把注釋都刪掉

 2、放在服務器上的開發項目,建議放置在/srv 目錄下(在根目錄'/' 下新建 srv 目錄)


 


免責聲明!

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



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