2019-06-03 如何把本地的Django項(xiàng)目部署到服務(wù)器

開(kāi)發(fā)環(huán)境
開(kāi)發(fā)語(yǔ)言: Python
后臺(tái)框架:Django
前端框架:bootstrap
web服務(wù)器:nginx
wsgi服務(wù)器:uwsgi
查看本地項(xiàng)目Django和Python版本:
(可以直接安裝Django最新版本就可以了鹃锈,Python版本不能低于3.4)
Django2.0.4
Python3.6.5

首先python3的安裝
[參考鏈接]
linux安裝python3
從零開(kāi)始配置阿里云服務(wù)器centos7.4

首先在官網(wǎng)下載安裝包 python-3.6.5
(直接使用wget命令下載政模,速度也賊快罗侯,下載完成后發(fā)現(xiàn)在根目錄下多了一個(gè)Python-3.6.5.tgz的壓縮包)

安裝相關(guān)包
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

服務(wù)器自帶的python2安裝在usr/bin/目錄中锅减,可以通過(guò)which python命令來(lái)查看python的安裝目錄煞聪。
然后進(jìn)入該目錄鸠澈,用我們熟悉的python -v來(lái)查看python版本卸夕。(其實(shí)直接在根目錄下用python -v也是可以的层释,但which這個(gè)命令是真的可不錯(cuò))

利用 tar xf Python-3.6.5.tgz命令解壓

解壓完成后,(進(jìn)入解壓后的目錄)快集,編輯安裝命令贡羔。./configure –prefix=/usr/local/python3/# 安裝目錄為/usr/local/python3(可以自定義安裝目錄)
make && make install# 編譯并安裝

提示bug: ./configure: No such file or directory

是因?yàn)闆](méi)有進(jìn)入解壓后的目錄,configure是安裝文件里面的配置工具个初。
設(shè)置軟連接
一條命令解決乖寒,再也不用配環(huán)境變量了。linux的軟鏈接相當(dāng)于windows里的快捷方式院溺,快捷方式刪了就刪了楣嘁,原來(lái)文件還是存在的。軟連接后面也有大用。

ln -s /usr/local/python3/bin/python3 /usr/bin/python3.6

即在/usr/bin里面創(chuàng)建一個(gè)快捷方式python3.6逐虚,該快捷方式指向python3的安裝路徑聋溜。
輸入python3.6 -v測(cè)試,成功

可以通過(guò)以下命令查看所有的軟連接:

cd usr/bin/ 
ls -l

可以看到python叭爱,python2撮躁,連接的都是python2.7,而python3.6連接的就是剛安裝的版本 參考鏈接:百度經(jīng)驗(yàn)-怎么修改軟連接
也可以將python3.6直接改為python买雾。
備份原連接為:python -> python2
使用ln -s /usr/local/python3/bin/python3 /usr/bin/python把曼,建立失敗,發(fā)現(xiàn)python已經(jīng)存在凝果。
刪除原連接 rm /python2
再次建立成功祝迂。
安裝各種軟件
安裝數(shù)據(jù)庫(kù)
安裝sqlite,mysql

yum install mysql mysql-devel
yum install sqlite-devel

安裝pip

yum -y install python-pip

報(bào)錯(cuò)

[root@VM_0_12_centos bin]# yum -y install python-pip
File “/usr/bin/yum”, line 30
except KeyboardInterrupt, e:
^
SyntaxError: invalid syntax

先安裝get-pip

wget –no-check-certificate https://bootstrap.pypa.io/get-pip.py

安裝成功器净。再用python命令安裝pip

python get-pip.py

安裝成功型雳,pip版本為:

Successfully installed pip-10.0.1 wheel-0.31.0

但此時(shí)未配置軟連接的情況下,需要使用python -m pip來(lái)使用python3的pip山害。

安裝Django

pip install django

安裝失斁兰蟆:

This version of Django requires Python 3.4, but you’re trying to
install it on Python 2.7.
This may be because you are using a version of pip that doesn't
understand the python_requires classifier. Make sure you
have pip >= 9.0 and setuptools >= 24.2, then try again:
- python -m pip install --upgrade pip setuptools
- python -m pip install django
This will install the latest version of Django which works on your
version of Python. If you can't upgrade your pip (or Python), request
an older version of Django:
- python -m pip install "django<2"

2.0.5版本需要python3.4以上版本

這里因?yàn)槭褂玫氖莗ython2的pip,為了解決這個(gè)問(wèn)題可以修改軟連接浪慌,也可以直接使用python -m pip install django來(lái)指定pip為python3的冤荆。
我這里使用了第二種方法。

安裝mysqlclient(連接器)

python -m pip install mysqlclient

報(bào)錯(cuò):

OSError: mysql_config not found

加入環(huán)境變量:

PATH=”$PATH”:/usr/local/mysql/bin

重新安裝权纤,成功钓简。

版本:mysqlclient-1.3.12

安裝uwsgi

python -m pip install uwsgi

Successfully installed uwsgi-2.0.17

安裝nginx
在線(xiàn)項(xiàng)目部署
在服務(wù)器上創(chuàng)建簡(jiǎn)單Django項(xiàng)目hello,結(jié)合uwsgi+Django+nginx汹想。

測(cè)試uwsgi
測(cè)試uwsgi -version

顯示環(huán)境變量未配置好 -bash: uwsgi: command not found

建立軟連接:(好用的一匹外邓,順便把其他的都配了)

ln -s /usr/local/python3/bin/django-admin.py /usr/bin/django-admin.py 
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi 
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv 
ln -s /usr/local/python3/bin/gunicorn /usr/bin/gunicorn

查看軟連接:

cd /usr/bin 
ls -l

建立好軟連接后,查看uwsgi是否安裝成功:

uwsgi –version

成功,顯示:

[root@VM_0_12_centos projects]# uwsgi –version
2.0.17

繼續(xù)測(cè)試古掏,創(chuàng)建test.py:

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3

使用uwsgi運(yùn)行test.py:

uwsgi –http :8000 –wsgi-file test.py

訪(fǎng)問(wèn)http://127.0.0.1:8000/

訪(fǎng)問(wèn)失斔鸹啊:

localhost拒絕了我們的請(qǐng)求。

有毒槽唾,這些教程是真的有毒丧枪。在本地瀏覽器訪(fǎng)問(wèn)云服務(wù)器的時(shí)候一定要用IP地址或者域名。

訪(fǎng)問(wèn)http://www.zosurn.xyz:8000
訪(fǎng)問(wèn)成功庞萍,但出現(xiàn)的是seafile登錄頁(yè)面拧烦,說(shuō)明該端口被占用了,可以釋放8000端口钝计,也可以換其他的端口屎篱。

修改端口為8002:

uwsgi –http :8002 –wsgi-file test.py 

成功訪(fǎng)問(wèn)到hello world服赎。

創(chuàng)建Django項(xiàng)目hello
在/home/projects/目錄下,使用Django創(chuàng)建一個(gè)簡(jiǎn)單hello項(xiàng)目后交播,配置setting.py中的allowed_host設(shè)置為:

ALLOWED_HOSTS = [‘.zosurn.xyz’, ‘localhost’, ‘127.0.0.1’]

將uwsgi與Django連接:
參考鏈接

uwsgi –http :8008 –chdir /home/projects/hello –wsgi-file hello/wsgi.py –master –processes 4 –threads 2 –stats 127.0.0.1:9192

訪(fǎng)問(wèn)http://www.zosurn.xyz:8008成功重虑,出現(xiàn)Django歡迎頁(yè)面。

參數(shù)太多秦士,可以將其寫(xiě)入ini文件中
在hello項(xiàng)目的目錄下創(chuàng)建uwsgi.ini文件缺厉,寫(xiě)入如下內(nèi)容(采用字典格式):

# hello_uwsgi.ini file
[uwsgi]

# Django-related settings

http = :8008

# the base directory (full path)
chdir           = /home/projects/hello

# Django s wsgi file
module          = hello.wsgi

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

然后使用如下命令啟動(dòng)uwsgi:

uwsgi –ini uwsgi.ini

再次測(cè)試,訪(fǎng)問(wèn)http://www.zosurn.xyz:8008成功隧土。

測(cè)試nginx:
查看nginx是否安裝成功提针,查看nginx的版本:

[root@VM_0_12_centos hello]# nginx -v
nginx version: nginx/1.12.2

在/home/projects目錄下新建一個(gè)test目錄,在里面添加一個(gè)簡(jiǎn)單的html文件曹傀。然后在nginx.conf中簡(jiǎn)單配置:

events{}
http{
    server{
        server_name www.zosurn.xyz;
        root /home/projects/test;
        index index.html;
    }
}

啟動(dòng)該nginx:(啟動(dòng)之前辐脖,要將/usr/local/nginx/mime.types文件復(fù)制到該nginx.conf所在目錄,并且必須使用絕對(duì)路徑)

nginx -c /home/projects/test/nginx.conf

如果端口被占用皆愉,則先釋放該端口,則使用lsof -i :8082查看占用端口進(jìn)程的pid嗜价,并使用kill -9 [pid]關(guān)閉相應(yīng)的進(jìn)程。

在瀏覽器中訪(fǎng)問(wèn)自己的域名http://www.zosurn.xyz幕庐,訪(fǎng)問(wèn)成功久锥。

將nginx和uwsgi以及Django結(jié)合
在hello項(xiàng)目的目錄下創(chuàng)建nginx.conf

vim nginx.conf

添加如下內(nèi)容:

events{}
http{
    server{
        listen 8082;    # 如果不加的話(huà),會(huì)默認(rèn)為80异剥,這里也可以不改
        server_name www.zosurn.xyz;
        root /home/projects/hello;
        index index.html;

        location /{
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8008; # 需要和ini文件中的端口保持一致瑟由,這樣才能實(shí)現(xiàn)兩者的通信。
            uwsgi_read_timeout 2;
        }
    }
}

啟動(dòng)nginx:

nginx -c /home/projects/hello/nginx.conf

啟動(dòng)uwsgi:

uwsgi –ini /home/projects/hello/uwsgi.ini

使用域名訪(fǎng)問(wèn)冤寿,成功訪(fǎng)問(wèn)到該hello項(xiàng)目的Django歡迎頁(yè)面歹苦。

部署本地項(xiàng)目到服務(wù)器
clone本地項(xiàng)目代碼到服務(wù)器/通過(guò)ftp復(fù)制項(xiàng)目到服務(wù)器
在我的項(xiàng)目目錄/home/projects里創(chuàng)建一個(gè)blog目錄,并在里面創(chuàng)建一個(gè)conf目錄督怜,用來(lái)存放配置文件,這樣分離開(kāi)來(lái)暂氯,方便更新維護(hù)項(xiàng)目代碼。

home/ 
projects/ 
blog/ 
conf/ 
nginx.conf
uwsgi.ini
uwsgi.log
mysite/ # 你的Django項(xiàng)目目錄亮蛔,假設(shè)為mysite 
blog/
mysite/ 
urls.py
settings.py
static/
template/
manage.py
…

修改項(xiàng)目代碼
修改settings.py:

DEBUG = False   # Django是否加載靜態(tài)資源
ALLOWED_HOSTS = ['localhost','127.0.0.1','.zosurn.xyz'] # 允許訪(fǎng)問(wèn)的主機(jī)地址

STATIC_ROOT = os.path.join(BASE_DIR, "static/") # 收集Django的靜態(tài)文件到同一個(gè)static中

創(chuàng)建uwsgi.ini和uwsgi.log
uwsgi.ini不變,依舊為:

# myblog uwsgi.ini file
[uwsgi]

socket = 127.0.0.1:8002
# http = :8002 如果不通過(guò)nginx可以直接用http擎厢,但要通過(guò)web服務(wù)器就必須要用socket

# the base directory (full path)
chdir           = /home/projects/blog/mysite

# Django s wsgi file
module          = mysite.wsgi

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# clear environment on exit
vacuum          = true

創(chuàng)建nginx.conf

# worker_rlmit_nofile 65500; # 提升nginx的進(jìn)程文件打開(kāi)數(shù)

events{}

http{
    include       mime.types;
    server{

        listen 80;
        server_name www.zosurn.xyz;
        index index.html ;
        root  /home/projects/blog/mysite;

            location /static {
                alias /home/projects/blog/mysite/static; # your Django project's static files - amend as required
            }

            # Finally, send all non-media requests to the Django server.
            location / {
                include     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
                uwsgi_pass 127.0.0.1:8002;
            }
        }
}

創(chuàng)建數(shù)據(jù)庫(kù)究流、收集靜態(tài)文件

python manage.py migrate 
python manage.py collectstatic

啟動(dòng)服務(wù)
啟動(dòng)nginx

nginx -c /home/projects/blog/conf/nginx.conf

后臺(tái)啟動(dòng)uwsgi

uwsgi /home/projects/blog/conf/uwsgi.ini -d /home/projects/blog/conf/uwsgi.log

如此就可以通過(guò)域名訪(fǎng)問(wèn)自己的Django項(xiàng)目了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末动遭,一起剝皮案震驚了整個(gè)濱河市芬探,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厘惦,老刑警劉巖偷仿,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哩簿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡酝静,警方通過(guò)查閱死者的電腦和手機(jī)节榜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)别智,“玉大人宗苍,你說(shuō)我怎么就攤上這事”¢唬” “怎么了讳窟?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)敞恋。 經(jīng)常有香客問(wèn)我丽啡,道長(zhǎng),這世上最難降的妖魔是什么硬猫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任补箍,我火速辦了婚禮,結(jié)果婚禮上浦徊,老公的妹妹穿的比我還像新娘馏予。我一直安慰自己瞧省,他們只是感情好召川,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著湃鹊,像睡著了一般冕香。 火紅的嫁衣襯著肌膚如雪蛹尝。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天悉尾,我揣著相機(jī)與錄音突那,去河邊找鬼。 笑死构眯,一個(gè)胖子當(dāng)著我的面吹牛愕难,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惫霸,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼猫缭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了壹店?” 一聲冷哼從身側(cè)響起猜丹,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎硅卢,沒(méi)想到半個(gè)月后射窒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體藏杖,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年脉顿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝌麸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弊予,死狀恐怖祥楣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汉柒,我是刑警寧澤误褪,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站碾褂,受9級(jí)特大地震影響兽间,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜正塌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一嘀略、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乓诽,春花似錦帜羊、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至稠集,卻和暖如春奶段,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剥纷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工痹籍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晦鞋。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓蹲缠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親悠垛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子线定,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容