開(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)目了。