記一次django+uwsgi aliyun環(huán)境搭建

主要的安裝流程參考原文地址:https://blog.csdn.net/xing851483876/article/details/84306953

使用XShell工具 上傳和下載文件 安裝

yum -y install lrzsz
或者
apt install lrzsz

如果rz上傳失敗請(qǐng)嘗試

$ rz -are --o-sync

1氯材、虛擬環(huán)境(virtualenv)的安裝

1审丘、安裝virtualenv

sudo pip install virtualenv
sudo pip install virtualenvwrapper #安裝虛擬環(huán)境管理工具

2、在home下創(chuàng)建虛擬環(huán)境安裝目錄

mkdir .virtualenvs

3砚哗、為virtualenv配置環(huán)境變量,打開(kāi).bashrc文件

sudo vim ~/.bashrc
在末尾添加兩行代碼
export WORKON_HOME=$HOME/.virtualenvs  # 所有虛擬環(huán)境存儲(chǔ)的目錄
source /usr/local/bin/virtualenvwrapper.sh

使配置生效

source ~/.bashrc

如果有Python2 Python3兩個(gè)環(huán)境請(qǐng)加入環(huán)境變量

if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then

       export WORKON_HOME=$HOME/.virtualenvs

       export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

       source /usr/local/bin/virtualenvwrapper.sh

fi

如果遇到" command not found: shopt "的 "~/.bashrc" 配置問(wèn)題 說(shuō)明使用的是zsh shell
將所需配置修改寫入~/.zshrc
執(zhí)行 source ~/.zshrc
或者zsh切換bash

chsh -s /bin/bash

bash切換zsh

chsh -s /bin/zsh

4饰及、創(chuàng)建虛擬環(huán)境蔗坯,默認(rèn)命令創(chuàng)建的是python2的虛擬環(huán)境,指定創(chuàng)建python3.6的虛擬環(huán)境可以使用以下命令

mkvirtualenv -p /usr/bin/python3.6 XX #XX是虛擬環(huán)境的名字旋炒,創(chuàng)建python3.5的虛擬環(huán)境

其他命令:
workon xx #進(jìn)入虛擬環(huán)境XX
deactivate #退出虛擬環(huán)境

2步悠、在虛擬環(huán)境中安裝相應(yīng)的工具包

我們?cè)诒镜貙慸jango項(xiàng)目肯定是安裝了一堆相應(yīng)的包,需要把他們移植到阿里云上瘫镇。首先在本地ubuntu進(jìn)入虛擬環(huán)境鼎兽,在項(xiàng)目根目錄下,執(zhí)行以下命令收集安裝的包铣除,就是生成一個(gè)包的清單文件plist.txt谚咬。

pip freeze > requirment.txt

然后用xftp把這個(gè)requirment.txt文件上傳到阿里云項(xiàng)目的根目錄,然后進(jìn)入虛擬環(huán)境test(test是我新建的虛擬環(huán)境的名字)

workon test    #進(jìn)入虛擬環(huán)境test
 
cd到plist.txt所在目錄
pip install -r requirment.txt  #安裝txt文件上的包

3尚粘、Mysql數(shù)據(jù)庫(kù)的安裝和數(shù)據(jù)的遷移
安裝Mysql:輸入以下命令择卦,安裝過(guò)程會(huì)設(shè)置密碼,設(shè)置成和原來(lái)本地一樣的郎嫁,就不用在setting中修改了秉继。

sudo apt-get update
sudo apt-get install mysql-server 
sudo apt-get install mysql-client

創(chuàng)建數(shù)據(jù)庫(kù):先登錄數(shù)據(jù)庫(kù), 然后創(chuàng)建數(shù)據(jù)庫(kù)v1泽铛,數(shù)據(jù)庫(kù)名字也創(chuàng)建成和原來(lái)本地一樣的尚辑,我的叫v1。

create database v1盔腔;

數(shù)據(jù)的遷移:把本地?cái)?shù)據(jù)庫(kù)中的數(shù)據(jù)復(fù)制到阿里云上的數(shù)據(jù)庫(kù)中杠茬。先在本地生成備份文件月褥,v1是要備份的數(shù)據(jù)庫(kù),v1.sql是生成的備份文件瓢喉。然后用Xftp把v1.sql文件上傳到阿里云宁赤。

mysqldump -u root -p v1 >v1.sql

數(shù)據(jù)還原:阿里云終端 cd到v1.sql所在目錄,輸入以下命令

mysql -u root -p v1<v1.sql

mysql配置:找到mysqld.cnf文件注釋掉bind-address這一行

/etc/mysql/mysql.conf.d/mysqld.cnf   #配置文件路徑
 
#bind-address       = 127.0.0.1   #注釋掉這一行

4栓票、修改django的setting文件:

DEBUG = False
ALLOW_HOSTS=['XXXXXX'] #改成阿里云的公網(wǎng)IP

USWGI配置
三决左、nginx、uWSGI的安裝

在安裝前先了解下這幾個(gè)是什么東西:WSGI逗载、uWSGI哆窿、nginx。

WSGI:PythonWeb服務(wù)器網(wǎng)關(guān)接口(Python Web Server Gateway Interface)厉斟,這是一種協(xié)議規(guī)范挚躯,用于規(guī)范web server(比如uWSGI)和web application(Flask、Django等)之間的通信方式擦秽。這種協(xié)議其實(shí)是將我們和更加底層的HTTP码荔、TCP等協(xié)議分隔開(kāi)來(lái),使我們?cè)陂_(kāi)發(fā)的時(shí)候可以不用自己去實(shí)現(xiàn)這些協(xié)議的處理感挥,只關(guān)注于更高層次的邏輯處理缩搅,實(shí)現(xiàn)面向?qū)ο蟮木幊獭?/p>

uWSGI:uWSGI是一個(gè)Web服務(wù)器,它實(shí)現(xiàn)了WSGI協(xié)議触幼、uwsgi硼瓣、http等協(xié)議。它本身可以作為一個(gè)服務(wù)器單獨(dú)使用置谦,但是也可以和nginx組合使用堂鲤。一般Django部署都是用的nginx+uWSGI,可以理解為這種組合性能更優(yōu)媒峡。

nginx:這是一個(gè)高性能的web服務(wù)器/反向代理瘟栖,類似Apache。什么叫反向代理谅阿,客戶端通過(guò)一個(gè)代理去訪問(wèn)服務(wù)器半哟,這樣的代理叫正向代理;同樣的服務(wù)器前加一個(gè)代理和客戶端通信签餐,這樣的代理叫反向代理寓涨。nginx就是用來(lái)放在uWSGI前做反向代理。

image.png

我們?cè)诒镜亻_(kāi)發(fā)的時(shí)候沒(méi)有安裝過(guò)以上服務(wù)器氯檐,但是也可以python manage.py runserver運(yùn)行項(xiàng)目缅茉,那是因?yàn)镈jango等框架自帶了WSGI服務(wù)器,性能不強(qiáng)男摧,可以用于調(diào)試蔬墩。
轉(zhuǎn)自:https://blog.csdn.net/xing851483876/article/details/84306953

nginx安裝:

sudo apt-get update
sudo apt-get install nginx

安裝成功后,用瀏覽器訪問(wèn)你的阿里云IP地址耗拓,可以看到以下提示 :
nginx常用命令:

service nginx start   #啟動(dòng)
service nginx stop    #停止
service nginx reload  #重啟

nginx配置:打開(kāi)配置文件default拇颅,路徑/etc/nginx/sites-available/default,設(shè)置以下內(nèi)容乔询。一個(gè)是server_name后面換成你的阿里云公網(wǎng)IP樟插,有的文章說(shuō)不換也行。關(guān)鍵是下面2個(gè)location竿刁,第一個(gè)location是設(shè)置的和uWSGI的關(guān)聯(lián)黄锤。第二個(gè)location /static是設(shè)置的靜態(tài)文件的路徑。如果你的項(xiàng)目還有media文件夾食拜,那還要加一個(gè)location /media鸵熟,把路徑設(shè)置上。注意:location 和alias后面有空格负甸。

server_name 47.106.84.245;
        
        location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        # try_files $uri $uri/ =404;
        include  uwsgi_params;
                uwsgi_pass  127.0.0.1:8000;  
    }
        location /static {
               alias /home/myweb/static;
}

上面nginx配置靜態(tài)文件有一個(gè)問(wèn)題流强,就是上面的目錄/root/xxx/xxx/static只是我們自己的靜態(tài)文件的目錄,你登錄admin后發(fā)現(xiàn)admin頁(yè)面的樣式都丟失了呻待。因?yàn)閐jango自帶的admin的靜態(tài)文件路徑?jīng)]有導(dǎo)入打月。所以就需要新建一個(gè)文件夾,我的是/root/xxx/xxx/nginx/static蚕捉,然后執(zhí)行命令把整個(gè)項(xiàng)目的所有靜態(tài)文件都收集到這個(gè)目錄下奏篙,再修改下上面的配置。
第一步:新建文件夾 /root/xxx/xxx/nginx/static
第二步:修改setting.py文件迫淹,增加STATIC_ROOT

STATIC_ROOT='/home/myweb/nginx/static/'    #添加收集靜態(tài)文件的目錄
STATIC_URL = '/static/'
STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),   

第三步:執(zhí)行以下代碼收集靜態(tài)文件

python manage.py collectstatic

第四步:修改nginx的配置

 location /static {
               alias /root/xxx/xxx/nginx/static;
}

uWSGI安裝:

這個(gè)是安裝在虛擬環(huán)境中秘通,先workon test進(jìn)入虛擬環(huán)境,安裝uWSGI前需要先安裝依賴千绪,輸入以下命令完成安裝

apt-get install build-essential python
apt-get install python-dev
pip install uwsgi

這里遇到問(wèn)題uwsgi安裝失敗 異常棧信息忘了復(fù)制了 主要原因是python3還是pip3軟連接出錯(cuò)
我是寫在python3重新安裝才發(fā)現(xiàn)的應(yīng)該安裝沒(méi)問(wèn)題可以直接設(shè)置軟連接
Python3.6安裝
安裝python3.6可能使用的依賴
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

下載python3.6編譯安裝


# wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
# tar -xzvf Python-3.6.5.tgz -C  /tmp
# cd  /tmp/Python-3.6.5/
把Python3.6安裝到 /usr/local 目錄
# ./configure --prefix=/usr/local
# make
# make install

python3.6程序的執(zhí)行文件:/usr/local/bin/python3.6
python3.6應(yīng)用程序目錄:/usr/local/lib/python3.6
pip3的執(zhí)行文件:/usr/local/bin/pip3.6


更改/usr/bin/python鏈接
# ln -s /usr/local/bin/python3.6 /usr/bin/python 此步驟忽略
# ln -s /usr/local/bin/python3.6 /usr/bin/python3
# ln -s /usr/local/bin/pip3.6   /usr/bin/pip3

配置uWSGI:在django項(xiàng)目的根目錄下充易,新建兩個(gè)文件,uwsgi.ini和run.log 荸型。第一個(gè)是uWSGI的配置文件盹靴,第二個(gè)是日志記錄文件。設(shè)置uwsgi.ini文件如下:

[uwsgi]
#使用nginx連接時(shí)使用瑞妇,Django程序所在服務(wù)器地址
socket=127.0.0.1:9002
#項(xiàng)目目錄
chdir=/root/xxx/xxx/xxx/xxx
#項(xiàng)目中wsgi.py文件的目錄稿静,相對(duì)于項(xiàng)目目錄
wsgi-file=wsgi.py
# 進(jìn)程數(shù)
processes=4
# 線程數(shù)
threads=2
# uwsgi服務(wù)器的角色
master=True
# 存放進(jìn)程編號(hào)的文件
pidfile=uwsgi.pid
# 日志文件,因?yàn)閡wsgi可以脫離終端在后臺(tái)運(yùn)行辕狰,日志看不見(jiàn)改备。我們以前的runserver是依賴終端的
daemonize=run.log

chdir是django項(xiàng)目所在目錄,socket后面的地址是和上面nginx配置文件中的地址uwsgi_pass 127.0.0.1:8000對(duì)應(yīng)的蔓倍,規(guī)定nginx和uWSGI之間的通信端口悬钳。daemonize就是日志文件的路徑盐捷。disable-logging = true 表示不記錄正常信息,只記錄錯(cuò)誤信息默勾。wsgi-file是你django項(xiàng)目根目錄下項(xiàng)目同名目錄中有一個(gè)wsgi.py文件的路徑碉渡。pidfile是uwsgi.pid文件的路徑,這個(gè)文件是uWSGI運(yùn)行后自動(dòng)生成的母剥,里面記錄了uWSGI的進(jìn)程號(hào)滞诺,可以用來(lái)重啟uWSGI。但是我的uwsgi.pid文件記錄的進(jìn)程號(hào)老是不對(duì)环疼,用不了习霹。
————————————————
版權(quán)聲明:本文為CSDN博主「Mars_DD」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議炫隶,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明淋叶。
原文鏈接:https://blog.csdn.net/xing851483876/article/details/84306953

uWSGI基本命令:

啟動(dòng):uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid
重啟:uwsgi --reload uwsgi.pid

注:uwsgi啟動(dòng)命令在自己構(gòu)建的虛擬環(huán)境中啟動(dòng)

然后再外部重啟uwsgi服務(wù) 這樣我們就可以看到啟動(dòng)的進(jìn)程了

root      8754  0.0  1.8 131516 37820 ?        S    Sep22   0:03 /root/.virtualenvs/xx/bin/uwsgi --iniuwsgi.ini
root      8956  0.0  2.4 224040 49292 ?        Sl   Sep22   0:01 /root/.virtualenvs/xx/bin/uwsgi --iniuwsgi.ini
root      8957  0.0  2.2 221896 46744 ?        Sl   Sep22   0:00 /root/.virtualenvs/xx/bin/uwsgi --iniuwsgi.ini
root      8958  0.0  2.3 222400 47404 ?        Sl   Sep22   0:00 /root/.virtualenvs/xx/bin/uwsgi --iniuwsgi.ini
root      8959  0.0  1.5 205248 31108 ?        Sl   Sep22   0:00 /root/.virtualenvs/xx/bin/uwsgi --iniuwsgi.ini

通過(guò)外網(wǎng)訪問(wèn)阿里云地址就可以看到nginx代理成功

如果遇到mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
參考https://blog.csdn.net/lmss82/article/details/4414178

 1.#ps -A|grep mysql
   顯示類似:
  1829 ?        00:00:00 mysqld_safe
   1876 ?        00:00:31 mysqld
  2.#kill -9 1829
  3.#kill -9 1876
  4.#/etc/init.d/mysql restart
  5.#mysql -u root -p

uwsgi是運(yùn)行的virtualenvs 虛擬環(huán)境中的程序如果啟動(dòng)在系統(tǒng)中如/user/local/bin是訪問(wèn)不到服務(wù)的所以要kill 掉錯(cuò)誤的uwsgi進(jìn)程重新啟動(dòng)虛擬環(huán)境中的uwsgi


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市等限,隨后出現(xiàn)的幾起案子爸吮,更是在濱河造成了極大的恐慌,老刑警劉巖望门,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件形娇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡筹误,警方通過(guò)查閱死者的電腦和手機(jī)桐早,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)厨剪,“玉大人哄酝,你說(shuō)我怎么就攤上這事〉簧牛” “怎么了陶衅?”我有些...
    開(kāi)封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)直晨。 經(jīng)常有香客問(wèn)我搀军,道長(zhǎng),這世上最難降的妖魔是什么勇皇? 我笑而不...
    開(kāi)封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任罩句,我火速辦了婚禮,結(jié)果婚禮上敛摘,老公的妹妹穿的比我還像新娘门烂。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布屯远。 她就那樣靜靜地躺著蔓姚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慨丐。 梳的紋絲不亂的頭發(fā)上赂乐,一...
    開(kāi)封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音咖气,去河邊找鬼。 笑死挖滤,一個(gè)胖子當(dāng)著我的面吹牛崩溪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斩松,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伶唯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了惧盹?” 一聲冷哼從身側(cè)響起乳幸,我...
    開(kāi)封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钧椰,沒(méi)想到半個(gè)月后粹断,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嫡霞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年瓶埋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诊沪。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡养筒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出端姚,到底是詐尸還是另有隱情晕粪,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布渐裸,位于F島的核電站巫湘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏橄仆。R本人自食惡果不足惜剩膘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盆顾。 院中可真熱鬧怠褐,春花似錦、人聲如沸您宪。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至磷杏,卻和暖如春溜畅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背极祸。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工慈格, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遥金。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓浴捆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親稿械。 傳聞我的和親對(duì)象是個(gè)殘疾皇子选泻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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