Django打造大型企业官网-项目部署
Django打造大型企業(yè)官網(wǎng)-項(xiàng)目部署
?一、準(zhǔn)備工作
1、在開(kāi)發(fā)機(jī)上的準(zhǔn)備工作
1)確認(rèn)項(xiàng)目沒(méi)有bug。
2)打開(kāi)終端,進(jìn)入虛擬環(huán)境,再 cd 到項(xiàng)目根目錄下,執(zhí)行命令:pip freeze > requirements.txt,將當(dāng)前環(huán)境的包導(dǎo)出到`requirements.txt`文件中,方便在部署的時(shí)候安裝。
3)將項(xiàng)目上傳到服務(wù)器上的`/srv`目錄下。這里以`git`的形式為例。
? 我們使用第三方代碼托管平臺(tái) -碼云 Gitee
選擇碼云作為代碼托管平臺(tái)的原因是因?yàn)樵诖a云上傳項(xiàng)目代碼,即使是私有項(xiàng)目也不會(huì)被收費(fèi)。
碼云官網(wǎng):https://gitee.com/
? 將項(xiàng)目上傳到服務(wù)器上:
3.1)在服務(wù)器中新建倉(cāng)庫(kù)/項(xiàng)目:
?
3.2)將本地項(xiàng)目代碼提交到服務(wù)器中:
git 相關(guān)操作:
# 本地項(xiàng)目代碼 → 本地 git 倉(cāng)庫(kù) → 服務(wù)器倉(cāng)庫(kù) git init # 初始化本地倉(cāng)庫(kù) git remote add origin xxx.git # 關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù),xxx.git:分為兩種:SSH跟HTTPS,建議使用第一種方式 git add . # 將本地項(xiàng)目的所有文件都預(yù)集合在一起,類似于打包 git commit -m "first commit !" # 將本地代碼添加到倉(cāng)庫(kù),與 "git add ." 結(jié)合執(zhí)行 git pull origin master --allow-unrelated-histories # 從遠(yuǎn)程(服務(wù)器)的 master 中拉取代碼下來(lái),如果不是第一次拉代碼,可以不用加后面的參數(shù) git push origin master # 確定沒(méi)問(wèn)題后,將本地倉(cāng)庫(kù)代碼上傳到服務(wù)器項(xiàng)目倉(cāng)庫(kù)中 git status # 查看狀態(tài)? 如果在拉取遠(yuǎn)程代碼或提交代碼到遠(yuǎn)程時(shí)報(bào)錯(cuò):
在 git Bash 中執(zhí)行下述命令:
1.輸入命令:git fsck -.-lost-found,可以看到好多“dangling commit” 2.清空他們:git gc # 可以直接執(zhí)行這行代碼?
?
2、在服務(wù)器上的準(zhǔn)備工作
本文介紹的服務(wù)器為 Ubuntu
2.1、?Ubuntu 開(kāi)啟 root 用戶
# 如果是新裝的機(jī)子,開(kāi)啟root用戶采用下述指令 > sudo passwd root > 然后輸入root 用戶密碼# 如果已有 root 用戶 ,直接進(jìn)入 > su - 或 su root 都能進(jìn)入root 用戶2.2、為了方便Xshell 連接服務(wù)器,建議安裝 OpenSSH(一般云服務(wù)器上都已經(jīng)安裝好的)
xshell 連接服務(wù)器方式介紹:https://www.cnblogs.com/Eric15/articles/9459329.html
> sudo apt install openssh-server openssh-client # 安裝 openssh > service ssh restart # 重啟 openssh2.2.1、安裝 vim:
sudo apt install vim
2.3、安裝`MySQL`服務(wù)器和客戶端:
sudo apt install mysql-server mysql-client sudo apt-get install libmysqld-devMySQL 安裝及相關(guān)操作參考鏈接:https://www.cnblogs.com/Eric15/articles/9198777.html
?
MySQL簡(jiǎn)單操作指令:
#linux/ubuntu mysql的啟動(dòng)關(guān)閉# 一、 啟動(dòng)方式 1、使用 service 啟動(dòng):service mysql start 2、使用 mysqld 腳本啟動(dòng):/etc/inint.d/mysql start 3、使用 safe_mysqld 啟動(dòng):safe_mysql&# 二、停止 1、使用 service 啟動(dòng):service mysql stop 2、使用 mysqld 腳本啟動(dòng):/etc/inint.d/mysql stop 3、mysqladmin shutdown# 三、重啟 1、使用 service 啟動(dòng):service mysql restart 2、使用 mysqld 腳本啟動(dòng):/etc/inint.d/mysql restart# 客戶端連接MySQL 服務(wù)端 # 1.遠(yuǎn)程連接: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 默認(rèn)裝有 python2 python3# 安裝python2 、pip: > sudo apt install python > sudo apt install python-pip# 安裝python3 、pip3: > sudo apt install python3 > sudo apt install python3-pip# 設(shè)定python默認(rèn)執(zhí)行版本為python3: sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150# 如果提示 pip 版本過(guò)低,執(zhí)行下述命令更新pip:
pip install --upgrade pip
?
pip 與 pip3 區(qū)別:
pip和pip3的區(qū)別:pip是python的包管理工具,pip和pip3版本不同,都位于Scripts\目錄下: 如果系統(tǒng)中只安裝了Python2,那么就只能使用pip。 如果系統(tǒng)中只安裝了Python3,那么既可以使用pip也可以使用pip3,二者是等價(jià)的。 如果系統(tǒng)中同時(shí)安裝了Python2和Python3,則pip默認(rèn)給Python2用,pip3指定給Python3用?
2.6、安裝虛擬環(huán)境 :virtualenv? 、virutalenvwrapper
虛擬環(huán)境參考博文:https://www.cnblogs.com/Eric15/articles/9517232.html
# 安裝 virtualenv > pip install virtualenv # python2版本的virtualenv > pip3 install virtualenv # python3版本# 使用指定 python 版本創(chuàng)建 virtualenv 虛擬環(huán)境 > virtualenv -p C:\Python36\python.exe virtualenv-name# 安裝 virtualenvwrapper > pip install virtualenvwrapper # python2版本 > pip3 install virtualenvwrapper # python3版本# 使用指定 python 版本創(chuàng)建 virtualenvwrapper虛擬環(huán)境 ,如python2 、python3均存在,創(chuàng)建虛擬環(huán)境時(shí)默認(rèn)使用的解釋器是python2版本,如果要使用python3版本,則需指定python版本 > mkvirtualenv --python==C:\Python36\python.exe virtualenv-name # Windows> mkvirtualenv --python=/usr/bin/python3 py3scrapy # linux/Ubuntu # 注意點(diǎn): # 1. 直接安裝 virtualenvwrapper 時(shí),會(huì)一同安裝 virtualenv # 2.當(dāng)只安裝python2版本 或 python3版本的 virtualenvwrapper時(shí),創(chuàng)建 virtualenvwrapper虛擬環(huán)境 使用的就是對(duì)應(yīng)的python版本
?
配置文件配置:
# 使用 vim 進(jìn)入 /.bashrc 文件中做以下改動(dòng): export WORKON_HOME=$HOME/.envs #虛擬環(huán)境都保存到 .envs文件夾中 VIRTUALENVWRAPPER_PYTHON='/usr/bin/python3' #指定創(chuàng)建 virtualenvwrapper 虛擬環(huán)境時(shí)默認(rèn)采用 python3版本的解釋器 ,針對(duì)使用 pip3 安裝的virtualenvwrapper ,如是pip(python2)安裝的virtualenvwrapper,默認(rèn)是python2解釋器,不需要添加此行代碼 source /usr/local/bin/virtualenvwrapper.sh #啟動(dòng)文件路徑 使用pip/pip3 安裝 virtrualenvwrapper虛擬環(huán)境時(shí),會(huì)生成virtualenvwrapper.sh并放置到python的bin目錄下,找到該路徑下的bin/virtualenvwrapper.sh文件并指定為默認(rèn)的啟動(dòng)文件 # 然后重啟 /.bashrc 文件: > source ~/.bashrc? 如果安裝過(guò)慢,可以采用豆瓣源安裝的方式:
sudo pip install -i http://pypi.douban.com/simple/ virtualenvwrapper?
?
2.7、安裝 git :
sudo apt install git?拉取遠(yuǎn)程代碼到本地:
# Linux/Ubuntu # 目錄:/home/nan/pro_python/xfz > git init # git 初始化xfz文件夾為git倉(cāng)庫(kù) > git remote add origin https://gitee.com/chenjiongnan/xfz.git # 與遠(yuǎn)程倉(cāng)庫(kù)關(guān)聯(lián) > git pull origin master # 將遠(yuǎn)程倉(cāng)庫(kù)的代碼拉取到本地,回車后需要輸入賬號(hào)密碼# 驗(yàn)證通過(guò)后,等待系統(tǒng)將項(xiàng)目代碼拉取到本地就可以了?如果以后開(kāi)發(fā)機(jī)上有修改/更改項(xiàng)目代碼,直接將代碼 push 到遠(yuǎn)程倉(cāng)庫(kù),再在服務(wù)器上 pull 遠(yuǎn)程代碼下來(lái)即可:
git push origin mastergit pull origin master
?
?3、數(shù)據(jù)遷移等準(zhǔn)備?
?3.1、安裝 requirements.txt 中的所有包
進(jìn)入虛擬環(huán)境中,然后進(jìn)入到項(xiàng)目所在目錄,執(zhí)行命令:`pip install -r requirements.txt`,安裝好相應(yīng)的包
pip install -r requirements.txt?
3.2、在 MySQL 數(shù)據(jù)庫(kù)創(chuàng)建相應(yīng)的數(shù)據(jù)庫(kù)
> mysql -uroot -p # 進(jìn)入數(shù)據(jù)庫(kù) > 輸入密碼# 進(jìn)入數(shù)據(jù)庫(kù)后 ,創(chuàng)建我們需要的數(shù)據(jù)庫(kù): create database xfz charset utf8;# 退出 數(shù)據(jù)庫(kù) > exit;?
關(guān)于數(shù)據(jù)庫(kù)數(shù)據(jù)遷移,可參考博文:https://www.cnblogs.com/Eric15/articles/9704522.html
?
3.3、django 表數(shù)據(jù) 文件遷移
進(jìn)入項(xiàng)目主目錄下(有 manage.py文件的目錄下),執(zhí)行`python manage.py migrate`命令,將遷移文件,映射到數(shù)據(jù)庫(kù)中,創(chuàng)建相應(yīng)的表?
python manage.py migrate?
?注意:由于項(xiàng)目部署前,在開(kāi)發(fā)機(jī)上工作時(shí)我們已經(jīng)生成了遷移腳本,因此不需要先運(yùn)行 'python manage.py makemigrations' ,直接運(yùn)行 'python manage.py migrate' 即可
?
3.4、設(shè)置`ALLOW_HOST`為你的域名(服務(wù)器域名),以及ip地址 ,同時(shí)設(shè)置`DEBUG=False`,避免如果你的網(wǎng)站產(chǎn)生錯(cuò)誤,而將錯(cuò)誤信息暴漏給用戶
DEBUG = FalseALLOWED_HOSTS = ["192.168.*.*",] # ALLOWED_HOSTS 填的是服務(wù)器的域名或ip3.5、試啟動(dòng)項(xiàng)目
# 執(zhí)行啟動(dòng)項(xiàng)目命令: python manage.py runserver 0.0.0.0:8000# 在網(wǎng)頁(yè)中輸入 http://服務(wù)器的ip地址:8000/ ,訪問(wèn)該網(wǎng)站 > http://192.168.1.145:8000?3.6、靜態(tài)文件收集
收集靜態(tài)文件是為了將靜態(tài)文件提供給 Nginx ,這樣用戶如果只是請(qǐng)求靜態(tài)文件,就可以從Nginx中獲取,而不需要進(jìn)入服務(wù)端獲取了
在settings.py 中設(shè)置 STATIC_ROOT:
# settings.py STATIC_ROOT = os.path.join(BASE_DIR, "static_dist") # static_dist:新建的文件夾,用于收集靜態(tài)文件# 然后將代碼推到遠(yuǎn)程倉(cāng)庫(kù),再在服務(wù)器中將遠(yuǎn)程代碼拉取下來(lái) # 在服務(wù)端執(zhí)行以下命名,收集所有靜態(tài)文件,也可以在處理Nginx 時(shí)再收集靜態(tài)文件:python manage.py collectstatic?
四、Nginx + uwsgi + Django 項(xiàng)目部署
Nginx + uwsgi + Django 生產(chǎn)部署環(huán)境參考博文:https://www.cnblogs.com/Eric15/articles/9484762.html?
1、Nginx
1.1 Nginx 安裝
nginx是一個(gè)web服務(wù)器,用來(lái)加載靜態(tài)文件和接收http請(qǐng)求的。通過(guò)命令`sudo apt install nginx`即可安裝。
sudo apt install nginx?
1.2 Nginx 常用命令
service nginx start # 啟動(dòng)nginx service nginx stop # 關(guān)閉nginx service nginx restart # 重啟nginx在網(wǎng)頁(yè)訪問(wèn)服務(wù)器ip + 80端口 (http://192.168.1.101:80) , 如果能成功訪問(wèn)則表示Nginx 安裝成功且已啟動(dòng)
1.3 編寫(xiě) Nginx 配置文件
在`/etc/nginx/conf.d`目錄下,新建一個(gè)文件,叫做`xfz.conf`,文件名可以任意取,建議以項(xiàng)目名命名,然后將以下代碼粘貼進(jìn)去保存:
upstream xfz { # 項(xiàng)目名server unix:///home/nan/pro_python/xfz/xfz.sock; # Nginx配置的server路徑要與uwsgi 的server路徑保持一致(位置:項(xiàng)目xfz目錄下的xfz.sock),xfz.sock不需要手動(dòng)創(chuàng)建,但Nginx與uwsgi 通信時(shí)會(huì)自動(dòng)創(chuàng)建 }# 配置服務(wù)器 server {# 監(jiān)聽(tīng)的端口號(hào)listen 80;# 域名server_name 192.168.0.101; # 服務(wù)器ip 、域名等charset utf-8;# 最大的文件上傳尺寸 client_max_body_size 75M; # 靜態(tài)文件訪問(wèn)的urllocation /static {# 靜態(tài)文件地址alias /home/nan/pro_python/xfz/static_dist; # STATIC_ROOT 靜態(tài)文件的路徑 }# 最后,發(fā)送所有非靜態(tài)文件請(qǐng)求到django服務(wù)器location / {uwsgi_pass xfz; # 與上面upstream對(duì)應(yīng)# uwsgi_params文件地址include /etc/nginx/uwsgi_params; } }? 寫(xiě)完配置文件后,為了測(cè)試配置文件是否設(shè)置成功,運(yùn)行命令:`service nginx configtest`,如果不報(bào)錯(cuò),說(shuō)明成功
service nginx configtest?
? 每次修改完了配置文件,都要記得運(yùn)行`service nginx restart`。
service nginx restart?
2、uwsgi
2.1 概述
? uwsgi是一個(gè)應(yīng)用服務(wù)器,非靜態(tài)文件的網(wǎng)絡(luò)請(qǐng)求就必須通過(guò)他完成,他也可以充當(dāng)靜態(tài)文件服務(wù)器,但不是他的強(qiáng)項(xiàng)。uwsgi是使用python編寫(xiě)的,因此通過(guò)`pip install uwsgi`就可以了。(uwsgi建議安裝在系統(tǒng)級(jí)別的Python環(huán)境中,不要安裝到虛擬環(huán)境中) ,如果安裝在虛擬環(huán)境中,則每次啟動(dòng)uwsgi ,必須先要進(jìn)入虛擬環(huán)境,再進(jìn)入項(xiàng)目目錄下,才能啟動(dòng)。
2.2 安裝
# 安裝 pip install uwsgi pip3 install uwsgi?
2.3 啟動(dòng) django 項(xiàng)目
# 啟動(dòng) uwsgi > uwsgi --http :8000 --module xfz.wsgi --vritualenv=/home/.envs/xfz# 服務(wù)器網(wǎng)址為 :http://[服務(wù)器ip]:8000 # xfz.wsgi :前綴為項(xiàng)目名稱 # virtualenv : 后面為項(xiàng)目所在的虛擬環(huán)境文件夾地址輸入網(wǎng)址: http://服務(wù)器地址/news:8000? :訪問(wèn)本項(xiàng)目新聞首頁(yè),如果能訪問(wèn)成功,說(shuō)明uwsgi啟動(dòng)成功
?
2.4 編寫(xiě) uwsgi 配置文件
在項(xiàng)目的根目錄下面,創(chuàng)建一個(gè)文件叫做`xfz_uwsgi.ini`的文件,然后填寫(xiě)以下代碼:
[uwsgi]# Django相關(guān)的配置 # 必須全部為絕對(duì)路徑 # 項(xiàng)目的路徑 chdir = /home/nan/pro_python/xfz # Django的wsgi文件 module = xfz.wsgi # 項(xiàng)目xfz 下的wsgi.py文件 # Python虛擬環(huán)境的路徑 home = /home/nan/.envs/xfz# 進(jìn)程相關(guān)的設(shè)置 # 主進(jìn)程 master = true # 最大數(shù)量的工作進(jìn)程 processes = 10 # socket文件路徑,絕對(duì)路徑 socket = /home/nan/pro_python/xfz/xfz.sock # 與 Nginx server 對(duì)應(yīng) # 設(shè)置socket的權(quán)限 chmod-socket = 666 # 退出的時(shí)候是否清理環(huán)境 vacuum = true寫(xiě)完 uwsgi 的配置文件,以后通過(guò)uwsgi 啟動(dòng) Django項(xiàng)目時(shí),就可以通過(guò)啟動(dòng)uwsgi 配置文件的方式啟動(dòng):
# 進(jìn)入項(xiàng)目根目錄下:/home/nan/pro_python/xfz(根目錄下有xfz_uwsgi.ini 文件),然后執(zhí)行下行命令: uwsgi --ini xfz_uwsgi.ini?
?3、supervisor
3.1 概述
supervisor 可以用來(lái)管理 uwsgi ,在uwsgi發(fā)生意外的情況下,可以自動(dòng)讓其重啟。除了重啟,也可以執(zhí)行其他操作,如關(guān)閉、啟動(dòng)、重新啟動(dòng) uwsgi 等。
3.2 安裝
在系統(tǒng)級(jí)別的python環(huán)境下進(jìn)行安裝:
pip install supervisorpip3 install supervisor?
3.3 編寫(xiě) supervisor 配置文件
在項(xiàng)目的根目錄下創(chuàng)建一個(gè)文件叫做`xfz_supervisor.conf` ,將下述代碼粘貼到里面:
# supervisor的程序名字 ,可任取 [program:xfz] # supervisor執(zhí)行的命令:啟動(dòng)uwsgi command=uwsgi --ini zlkt_uwsgi.ini # 項(xiàng)目的目錄 directory = /home/nan/pro_python/xfz # 開(kāi)始的時(shí)候等待多少秒 startsecs=0 # 停止的時(shí)候等待多少秒 stopwaitsecs=0 # 自動(dòng)開(kāi)始 autostart=true # 程序掛了后自動(dòng)重啟 autorestart=true # 輸出的log文件 , 需要提前先到項(xiàng)目根目錄下新建log 文件夾 ,否則運(yùn)行時(shí)會(huì)報(bào)錯(cuò) stdout_logfile=/home/nan/pro_python/xfz/log/supervisord.log # 輸出的錯(cuò)誤文件 stderr_logfile=/home/nan/pro_python/xfz/log/supervisord.err[supervisord] # log的級(jí)別 loglevel=info[inet_http_server] # supervisor的服務(wù)器 port = :9001 # 用戶名和密碼 username = admin password = 123# 使用supervisorctl的配置 [supervisorctl] # 使用supervisorctl登錄的地址和端口號(hào) 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`運(yùn)行就可以了:
# 在項(xiàng)目根目錄下運(yùn)行 supervisord -c xfz_supervisor.conf使用supervisord 成功運(yùn)行后,以后如果想要啟動(dòng)或關(guān)閉`uwsgi`,就可以通過(guò)命令`supervisorctl -c xfz_supervisor.conf`進(jìn)入到管理控制臺(tái),然后可以執(zhí)行相關(guān)的命令進(jìn)行管理:
# 客戶端操作 supervisor ,相當(dāng)于mysql客戶端操作服務(wù)端一樣 supervisorctl -c xfz_supervisor.conf # 從客戶端啟動(dòng)supervisor ,前提需開(kāi)啟supervisord ,且進(jìn)入項(xiàng)目根目錄下執(zhí)行# 可執(zhí)行的相關(guān)命令:* status # 查看狀態(tài)* start program_name #啟動(dòng)程序 ,即啟動(dòng)uwsgi ,因supervisor 中command配置的就是啟動(dòng)uwsgi 的命令,所以啟動(dòng)supervisor的同時(shí)就是啟動(dòng)uwsgi* restart program_name #重新啟動(dòng)程序* stop program_name # 關(guān)閉程序* reload # 重新加載配置文件,即xfz_supervisor.conf* quit # 退出控制臺(tái),即退出 supervisorctl? 注:program_name:為 supervisor 的程序名:
進(jìn)入到 supervisorctl 時(shí),輸入 'help' ,可查看 supervisor 相關(guān)的一些操作:
3.4 關(guān)系圖
? 使用 supervisor 管理 uwsgi ,而不管理 Nginx 的原因是:Nginx 自身是守護(hù)進(jìn)程,當(dāng)程序掛了會(huì)自動(dòng)重啟 ,而 uwsgi 自身不是守護(hù)進(jìn)程 ,程序掛了就掛了。使用 supervisor 來(lái)管理 uwsgi ,相當(dāng)于給uwsgi 起了個(gè)守護(hù)進(jìn)去,當(dāng) uwsgi 程序掛了會(huì)自動(dòng)給重啟。
* Nginx 與 uwsgi 都安裝及配置好配置文件后,啟動(dòng)項(xiàng)目:
# 1. 沒(méi)有 [supervisor] ,啟動(dòng)步驟 ↓:# 1)啟動(dòng) Nginx service nginx start/restart# 2)啟動(dòng) uwsgi ,項(xiàng)目根目錄下啟動(dòng) uwsgi --ini xfz_uwsgi.ini# =============================================# 2. [supervisor]管理 uwsgi ,啟動(dòng)步驟 ↓:# 1)啟動(dòng) Nginx service nginx start/restart# 2)由 supervisor 啟動(dòng) uwsgi ,項(xiàng)目根目錄下啟動(dòng) supervisord -c xfz_supervisor.conf?
?溫馨提醒:
1、在 copy 或編寫(xiě) Nginx 、uwsgi 、supervisor 配置文件時(shí) ,記得把注釋都刪掉
2、放在服務(wù)器上的開(kāi)發(fā)項(xiàng)目,建議放置在/srv 目錄下(在根目錄'/' 下新建 srv 目錄)
?
轉(zhuǎn)載于:https://www.cnblogs.com/Eric15/articles/11141987.html
總結(jié)
以上是生活随笔為你收集整理的Django打造大型企业官网-项目部署的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 捷信分期不还款后果是什么?后果很严重!
- 下一篇: 捷信分期客服电话是多少?联系方式有哪些?