用python中django创建网页终端直接关闭是什么问题_如何用Python Django创建网站?系列文章03(持续更新...)...
第三篇文章主要介紹的是如何將Django網(wǎng)站部署到阿里云服務(wù)器上,具體的流程如下圖所示:
我們會(huì)按照這張思維導(dǎo)圖的順序逐個(gè)展開(kāi)講解:
Section I, Ubuntu
(1)我們需要在阿里云上租一臺(tái)新的服務(wù)器,選擇系統(tǒng)類(lèi)型;或者將一臺(tái)已經(jīng)租好的服務(wù)器停止運(yùn)行,之后再重裝系統(tǒng)。這次我們的演示用的是公共鏡像 + Ubuntu16.04 64位系統(tǒng) + 自定義密碼。
點(diǎn)擊右下角阿里云的確定按鈕,然后會(huì)彈出一個(gè)小窗口,提示你通過(guò)“點(diǎn)擊獲取”驗(yàn)證碼。一旦你點(diǎn)擊了按鈕之后,驗(yàn)證碼會(huì)在你發(fā)到你手機(jī)上,輸入驗(yàn)證碼之后,點(diǎn)擊確定,就會(huì)提示你返回阿里云控制臺(tái)。一般系統(tǒng)重裝需要一點(diǎn)時(shí)間,控制臺(tái)會(huì)顯示“啟動(dòng)中”,過(guò)一會(huì)就切換成“運(yùn)行中”,代表系統(tǒng)重裝并處于運(yùn)行狀態(tài)。
(2)如何用本地系統(tǒng)的終端的連接阿里云服務(wù)器?
如果你是ubuntu系統(tǒng),嘗試下面的操作:
我專(zhuān)門(mén)準(zhǔn)備了一臺(tái)Thinkpad,將系統(tǒng)重裝為Ubuntu,目的就是為了方便本地連接服務(wù)器。大家也可以安裝虛擬機(jī)來(lái)操作,參考B站小哥的視頻:Linux(Ubuntu)零基礎(chǔ)體驗(yàn)教學(xué)_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili?www.bilibili.com
我們把系統(tǒng)的終端Terminal打開(kāi),輸入下面這行命令:
ssh root@47.95.144.251
結(jié)果它提醒我,Host key verification failed,意思是說(shuō)認(rèn)證失敗了。這是因?yàn)槲抑斑B服務(wù)器的時(shí)候,是有認(rèn)證過(guò)的;但是,因?yàn)槲覀兏铝讼到y(tǒng),老的認(rèn)證就失效了(它會(huì)自動(dòng)認(rèn)證)。我們需要根據(jù)提醒,將就的認(rèn)證先刪除掉:
ssh-keygen -f "/home/psyjt/.ssh/known_hosts" -R "47.95.144.251"
然后再次輸入:
ssh root@47.95.144.251
它會(huì)問(wèn)你:小朋友,要不要更換認(rèn)證啊?Are you sure?
答案當(dāng)然是:yes
然后,阿里云會(huì)要求你輸入密碼,你把剛剛安裝系統(tǒng)的密碼輸進(jìn)去,你就成功從客戶端連接到了阿里云服務(wù)器。
如果你是windows系統(tǒng),嘗試下面這個(gè)視頻中的操作:Windows:使用 putty 遠(yuǎn)程控制服務(wù)器《 阿里云 ECS:Linux 服務(wù)器 》?ninghao.net
(3)了解阿里云服務(wù)器的系統(tǒng)信息和已經(jīng)安裝的Python的版本情況。
當(dāng)你來(lái)到一個(gè)陌生的環(huán)境的時(shí)候,通常要到處走走,探探周邊的情況;同樣的,來(lái)到阿里云服務(wù)器,你要知道這個(gè)系統(tǒng)是不是如你所愿,是Ubuntu16.04 64位系統(tǒng),而且,里邊的Python安裝的版本情況又是怎樣的?
如何獲取系統(tǒng)信息?可以輸入:lsb_release -a
如何獲取Python版本信息呢?
你可以直接輸入Python,它就會(huì)進(jìn)入到Python環(huán)境中,并且會(huì)有提示當(dāng)前是哪個(gè)Python2.x版本。同樣,你也可以輸入Python3,會(huì)提示當(dāng)前屬于Python3.x版本。
補(bǔ)充:退出python環(huán)境出了輸入quit()之外,還可以用快捷鍵ctrl+D
這個(gè)時(shí)候,因?yàn)樽约旱腖inux系統(tǒng)自帶的是Python3.6,和阿里云服務(wù)器系統(tǒng)的版本有點(diǎn)不一樣,所以我們可能會(huì)糾結(jié),到底要不要把Python3.5升級(jí)Python3.6?
我這個(gè)人的特點(diǎn)一貫比較“慫”,不會(huì)輕易冒風(fēng)險(xiǎn),在我不確定Python3.5和Python3.6之間的差異會(huì)必然導(dǎo)致某項(xiàng)功能無(wú)法實(shí)現(xiàn)之前,我選擇不安裝升級(jí)
Section II, 虛擬環(huán)境Virtualenv
在這個(gè)部分,我們需要了解pip的功能,pip和pip3的區(qū)別,安裝pip3,并用pip3安裝虛擬環(huán)境。本來(lái)這一步是單純安裝虛擬環(huán)境的,但是,為了強(qiáng)調(diào)pip和pip3的區(qū)別,很多小伙伴容易把兩者搞混,我就故意把這個(gè)部分分解成四個(gè)問(wèn)題。
·第一個(gè)問(wèn)題,pip是用來(lái)干什么的?
pip是一個(gè)Python包管理工具,提供了對(duì)Python包的查找、下載、安裝和卸載等功能。python安裝包的工具有easy_install,setuptools,pip,以及distribute等。pip是easy_install的替代品。安裝pip之前必須要先安裝setuptools,而安裝setuptools之前,必須要先安裝python。
·第二個(gè)問(wèn)題,pip和pip3的區(qū)別是什么?
如果系統(tǒng)同時(shí)裝有python2和python3,那么pip默認(rèn)給python2用,而pip3指定給python3用。
那是不是說(shuō),安裝了python2的系統(tǒng)包含pip,安裝了python3的系統(tǒng)就自帶pip3?
我們可以用which查找某個(gè)命令是否存在,以及命令存在哪個(gè)位置。
這說(shuō)明安裝python3并不會(huì)自帶pip3。
從網(wǎng)上查到的資料顯示:使用pip install XXX,新安裝的庫(kù)會(huì)放在這個(gè)目錄下面:
python2.x/site-packages
如果使用pip3 install XXX,新安裝的庫(kù)會(huì)放在這個(gè)目錄下面:
python3.x/site-packages
我們可以由第三個(gè)問(wèn)題的解決來(lái)檢驗(yàn)是不是這樣?
·第三個(gè)問(wèn)題,如何安裝pip3?
先更新,apt-get update;再安裝,apt-get install python3-pip。
第四個(gè)問(wèn)題,如何借助pip3安裝虛擬環(huán)境?
在終端中輸入pip3 install virtualenv virtualenvwrapper
結(jié)果報(bào)錯(cuò)了,顯示說(shuō):
locale.Error: unsupported locale setting
這是語(yǔ)言設(shè)置問(wèn)題,只需要在命令窗口中輸入:export LC_ALL=C
這時(shí)候在終端再次輸入pip3 install virtualenv virtualenvwrapper就可以跑了。
虛擬環(huán)境安裝成功!
Section III, uWSGI
pip3 install uwsgi
Section IV, Nginx
sudo apt-get install Nginx
安裝Nginx之后,就可以通過(guò)外網(wǎng)對(duì)網(wǎng)站進(jìn)行訪問(wèn)了。如果是阿里云服務(wù)器,需要注意的是,你需要配置安全組的策略(截圖如下):
點(diǎn)擊安全組,然后右邊有“修改”,“克隆”,“還原規(guī)則”,“管理實(shí)例”,“配置規(guī)則”,和“管理彈性網(wǎng)卡”六個(gè)選項(xiàng),點(diǎn)擊“配置規(guī)則”,就可以配置你的服務(wù)器的訪問(wèn)規(guī)則(分為入方向和出方向)。你要把80端口打開(kāi)才能從外網(wǎng)對(duì)配置在阿里云服務(wù)器上對(duì)網(wǎng)站進(jìn)行訪問(wèn)。具體可以參考下面這張圖中的參數(shù)來(lái)設(shè)置:
設(shè)置好之后點(diǎn)擊確定保存,你在本地計(jì)算機(jī)的瀏覽器中輸入服務(wù)器公網(wǎng)ip地址,就可以看到:
這說(shuō)明nginx安裝成功了!當(dāng)然,我們的目的不止于如此,肯定是要把在本地已經(jīng)編寫(xiě)好的django項(xiàng)目上傳到服務(wù)器,并讓其他用戶能夠通過(guò)網(wǎng)址訪問(wèn)服務(wù)器,才是我們最終的目標(biāo)。
SectionV, Django
(1)進(jìn)入到nginx默認(rèn)創(chuàng)立的www網(wǎng)站的文件夾位置,
cd /var/www/
(2)開(kāi)啟虛擬環(huán)境,然后安裝django,
創(chuàng)建虛擬環(huán)境
virtualenv GoodProject01
激活虛擬環(huán)境
source GoodProject01/bin/activate
進(jìn)入這個(gè)虛擬環(huán)境的文件夾
cd GoodProject01
·安裝requirements.txt中的項(xiàng)目依賴包
重新打開(kāi)一個(gè)端口Terminal,然后把本地的項(xiàng)目文件夾,生成好的requirements.txt,還有數(shù)據(jù)庫(kù)文件db_psyBlog.sql都上傳到服務(wù)器的這個(gè)虛擬環(huán)境文件夾GoodProject01中。
本地的requirements.txt如何生成?
輸入下面這段代碼:
pip freeze > requirements.txt
切記,這個(gè)一定要在虛擬環(huán)境中操作,有同學(xué)如果不是在虛擬環(huán)境中操作,有可能會(huì)引入項(xiàng)目之外的安裝包。通常我們打開(kāi)requirements.txt是這樣的:
Django==1.11.7
pkg-resources==0.0.0
PyMySQL==0.9.3
pytz==2019.3
我們可以把第2項(xiàng)刪掉,只保留3個(gè)項(xiàng)目即可。
利用scp命令,我們可以把本地機(jī)器上的requirements.txt上傳到服務(wù)器上,比如像這樣:
scp requirements.txt root@xx.xx.xx.xx:/var/www/GoodProject01/mBlog/requirements.txt
上傳完畢之后,我們就可以安裝django在python3虛擬環(huán)境下的一系列依賴工具包,執(zhí)行pip3 install -r requirements.txt,讀取文件requirements.txt中的擴(kuò)展庫(kù)信息并在服務(wù)器上的虛擬環(huán)境中進(jìn)行安裝。
·安裝數(shù)據(jù)庫(kù)
接下來(lái)是重點(diǎn),就是要安裝mysql數(shù)據(jù)庫(kù),并且把本地上傳的這個(gè)數(shù)據(jù)庫(kù)文件db_psyBlog想辦法納入到數(shù)據(jù)庫(kù)里邊。
一般我們都是要找一個(gè)安裝數(shù)據(jù)庫(kù)的教程作為參考,我通過(guò)百度找到了一個(gè):Django+Ubuntu WEB部署(超詳細(xì)版)?www.jianshu.com
這里核心的安裝的語(yǔ)句:
sudo apt-get install mysql-server
這一步是要你輸入mysql的密碼的,設(shè)置成你記得住的密碼。然后按回車(chē)?yán)^續(xù)...
可以利用
mysql -uroot -p
輸入密碼,登錄進(jìn)mysql數(shù)據(jù)庫(kù)中。其他數(shù)據(jù)庫(kù)方面的操作與本地?cái)?shù)據(jù)庫(kù)操作是類(lèi)似的。但是,這個(gè)時(shí)候數(shù)據(jù)庫(kù)中并沒(méi)有本地?cái)?shù)據(jù)庫(kù),需要將本地的數(shù)據(jù)庫(kù)遷移到服務(wù)器上。
·遷移數(shù)據(jù)庫(kù)
遷移數(shù)據(jù)庫(kù)的教程也找了一個(gè),而且親測(cè)有效:mysql-數(shù)據(jù)庫(kù)備份與恢復(fù)(Ubuntu16.04)_數(shù)據(jù)庫(kù)_student241的博客-CSDN博客?blog.csdn.net
所以,可以跑到django項(xiàng)目文件夾(就是那個(gè)帶manage.py文件的目錄)中,運(yùn)行
mysqldump -uroot -p db_mBlog > db_mBlog.sql
這樣就可以把數(shù)據(jù)庫(kù)中的db_mBlog數(shù)據(jù)庫(kù)導(dǎo)出。利用scp命令,將 db_mBlog.sql 拷貝到服務(wù)器上的項(xiàng)目文件夾中。
這個(gè)時(shí)候,你先要在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)同名的數(shù)據(jù)庫(kù):
create database db_mBlog charset=utf8;
然后借助下面的命令將.sql數(shù)據(jù)庫(kù)文件導(dǎo)入到數(shù)據(jù)庫(kù)中:
mysql -uroot -p db_mBlog < db_mBlog.sql
因?yàn)?#xff0c;我們已經(jīng)安裝了uwsgi和nginx,我們可以進(jìn)入到配置nginx.conf文件和GoodProject01.ini文件的操作。
·配置nginx.conf文件
在所有這些工作做好之后,可以把本地的Django項(xiàng)目,上傳到服務(wù)器上,需要先遷移一次數(shù)據(jù)庫(kù),運(yùn)行django的項(xiàng)目看看能不能正常運(yùn)行。如果可以,說(shuō)明django項(xiàng)目連接服務(wù)器上的數(shù)據(jù)庫(kù)并且啟動(dòng)項(xiàng)目是可以的。然后,我們開(kāi)始考慮用uwsigi 啟動(dòng)nginx。這里就涉及到如何配置nginx和uwsgi的問(wèn)題:
nginx的配置文件nginx.conf,我們把這個(gè)文件從本地上傳服務(wù)器,打開(kāi)看看配置文件里邊是什么樣子(需要修改):
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
server {
listen 80;
server_name xx.xx.xxx.xxx;
charset utf-8;
location /static {
alias /var/www/GoodProject01/psyBlog/static;
}
location / {
uwsgi_pass 127.0.0.1:8000;
include /etc/nginx/uwsgi_params;
}
}
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
#include /etc/nginx/conf.d/*.conf;
#include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # Using a PHP Script on an Apache Server as the IMAP Auth Backend
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
這里大部分內(nèi)容是不需要修改的,需要調(diào)整的是兩個(gè)地方,第一個(gè)是:
server_name xx.xx.xxx.xxx;
第二個(gè)是:
location /static {
alias /var/www/GoodProject01/psyBlog/static;
}
如果你有用到static文件夾的話,需要修改成項(xiàng)目的static路徑。
·配置uwsgi.ini文件
我們需要自己新建一個(gè)uwsigi的啟動(dòng)文件,然后填入信息,這兩部分的內(nèi)容我都是從網(wǎng)絡(luò)上收集好了的。新建一個(gè)文件我用的是touch命令,然后用vim打開(kāi),再將準(zhǔn)備好的腳本拷貝進(jìn)去(如下所示):
[uwsgi]
chdir =/var/www/GoodProject01/psyBlog
module =psyBlog.wsgi
home =/var/www/GoodProject01
master =true
processes =4
socket =127.0.0.1:8000
chmod-socket = 666
vacuum = true
啟動(dòng)的命令用
uwsgi --ini GoodProject01.ini
這一步需要進(jìn)入nginx文件夾來(lái)執(zhí)行,如果.ini文件是在nginx文件夾下面的話:
cd /etc/nginx/
總結(jié)
以上是生活随笔為你收集整理的用python中django创建网页终端直接关闭是什么问题_如何用Python Django创建网站?系列文章03(持续更新...)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 手机python3_python3 简
- 下一篇: websocket python爬虫_p