(一)、安裝python3.6.6
獲取puthon安裝包的方式兩種建瘫,第一種是在linux中使用wget命令下在崭捍,另一種是在window主機(jī)當(dāng)中事前下載好,然后使用WinSCP工具上傳到指定的文件夾然后在進(jìn)行安裝啰脚。
首先在喜歡的目錄中創(chuàng)建一個(gè)文件夾用于放置下載的python安裝包殷蛇,然后使用cd命令進(jìn)入該目錄之下。
第一步:解壓:
tar -zxvf Python-3.6.6.tgz
第二步:編譯:
進(jìn)入加壓后的文件夾 Python-3.6.6,然后執(zhí)行下面的命令:
yum install -y lib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-deve (安裝編譯環(huán)境)
./configure prefix=/usr/local/python3
make && make install
使用prefix指定安裝的目錄橄浓,這里可以自行選擇粒梦,不過(guò)一般都是在user/local之下
如果出現(xiàn)下面的錯(cuò)誤,說(shuō)明你的系統(tǒng)中還沒有安裝gcc編譯器荸实,
configure: error: in `/home/asandemo/software/Python-3.6.6':
configure: error: no acceptable C compiler found in $PATH
此時(shí)使用yum安裝gcc編譯器即可:
yum install gcc* -y
之后在執(zhí)行上面的編譯即可匀们。
安裝好之后執(zhí)行
python -V
顯示的版本還是原來(lái)的版本,是我們沒有安裝成功嗎准给?其實(shí)不是的昼蛀,只是/use/bin中的python沒有被我們新安裝的python替換而已,類似于window中的軟件沒有設(shè)置path圆存,系統(tǒng)還不知道如何去執(zhí)行叼旋,從哪里執(zhí)行python。在linux系統(tǒng)中沦辙,解決方法就是做個(gè)軟鏈即可:
第一步:將原來(lái)的python備份
mv /usr/bin/python /usr/bin/python.back
第二部:做軟鏈
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python
ln -s /usr/local/python/bin/pip3? /usr/bin/pip
這里前面的是你選擇安裝python的路徑夫植,此外,為了使用新版python的pip油讯,我們也需要將pip3連接到舊版的pip上详民,當(dāng)然,你也可將舊版的pip執(zhí)行保存陌兑。
現(xiàn)在運(yùn)行python -V, 發(fā)現(xiàn)已經(jīng)是新版了沈跨。
但是如果此時(shí)使用yum安裝軟件,會(huì)發(fā)現(xiàn)報(bào)錯(cuò)兔综,因?yàn)閜ython的版本已經(jīng)改變饿凛,所以我們要對(duì)yum進(jìn)行一番基操。
vi /usr/bin/yum
把 #!/usr/bin/python 修改為 #!/usr/bin/python2
vi/usr/libexec/urlgrabber-ext-down
把 #!/usr/bin/python 修改為 #!/usr/bin/python2
至此软驰,python3.6.6安裝成功
(二)涧窒、安裝django2.2.13并配置
django與python對(duì)應(yīng)版本對(duì)應(yīng)如下:
先更新pip到最新版本:
pip install --upgrade pip
然后下載django
pip install django==2.2.13
django會(huì)下載在/usr/local/python3/bin的目錄之下,名字為django-admin
想要以后在終端使用django命令創(chuàng)建項(xiàng)目的話還是要做個(gè)軟鏈到/usr/bin/下面:
ln -s /usr/local/python3.6/bin/django-admin /usr/bin/django
django --version
顯示:
2.2.13
說(shuō)明成功锭亏!
接下來(lái)嘗試運(yùn)行django測(cè)試是否成功纠吴。
python manage.py runserver 0.0.0.0:8000
運(yùn)行之后如果出現(xiàn)一大堆字符,并且有
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
這樣的說(shuō)明文字慧瘤,那么就說(shuō)明我們系統(tǒng)中的sqlite版本有點(diǎn)低戴已,而django又需要高于3.8.3版本的sqlite固该。但是如果重新安裝sqlite過(guò)于麻煩,所以我們就修改以下django的配置:
找到/…/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py這個(gè)腳本
然后找到下面的代碼塊糖儡,注釋掉那一行并更改為:
def check_sqlite_version():
? ? #if Database.sqlite_version_info < (3, 8, 3):
? ? if Database.sqlite_version_info < (3, 6, 3):
? ? ? ? raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version)
然后在運(yùn)行
python manage.py runserver 0.0.0.0:8000
如果出現(xiàn)紅字伐坏,不要怕,執(zhí)行數(shù)據(jù)遷徙即可:
python manage.py migrate
其實(shí)到這里休玩,django已經(jīng)可以順利的運(yùn)行了著淆,但是在CentOS 7 minimal 的無(wú)界面環(huán)境之下劫狠,我們沒辦法驗(yàn)證它到底有沒有正常的運(yùn)行八┌獭!所以独泞,此時(shí)騷操作來(lái)了:
firewall-cmd --zone=public --add-port=8000/tcp --permanent
firewall-cmd --reload
開放你的CentOS 7的端口呐矾,之后在宿主機(jī)的瀏覽器中輸入我們配置的靜態(tài)網(wǎng)絡(luò)的ip,如果不記得了懦砂,那么就輸入:
ip addr
或者
ifconfig
那么這個(gè)就是你的ip地址了蜒犯。
在宿主機(jī)瀏覽器中輸入:IP:8000, 例如192.168.1.120:8000荞膘,此時(shí)出現(xiàn)下面的界面罚随,則說(shuō)明你安裝的django已經(jīng)可以正常工作了。
如果沒有出現(xiàn)這個(gè)界面的話羽资,可能原因有并沒有開放訪問(wèn)django的ip淘菩。雖然我們開放了CentOS的端口,但是對(duì)于django內(nèi)在的屠升,授權(quán)訪問(wèn)的主機(jī)ip我們并沒有開放潮改,需要找到django項(xiàng)目同名app之下的setting進(jìn)行修改:
vi ./demo/settings.py
找到下面的代碼并更改。
ALLOWED_HOSTS = []
改為
ALLOWED_HOSTS = ['*']
保存后退出再重新運(yùn)行即可腹暖。
(三)汇在、安裝uwsgi并配置
使用pip命令安裝uwsgi:
pip install uwsgi
安裝好之后做個(gè)軟鏈:
ln -s /usr/local/python3.6/bin/uwsgi /usr/bin/uwsgi
測(cè)試uwsgi可行性:
創(chuàng)建test.py文件,并輸入以下內(nèi)容
def application(env, start_response):
? ? start_response('200 OK', [('Content-Type', 'text/html')])
? ? return [b"hello world"]
之后運(yùn)行:
uwsgi --http :8000 --wsgi-file test.py
注意:http后面有一個(gè)空格脏答,并且":"和8000之間不能有空格糕殉, 否則會(huì)報(bào)錯(cuò)
完事之后,在瀏覽器中就可以看到結(jié)果了
但這并不是我們想要的效果殖告,我們最終的目的是實(shí)現(xiàn)nginx->uwsgi->django糙麦,所以要配置一下uwsgi,在demo項(xiàng)目之下創(chuàng)建uwsgi.ini 文件丛肮,實(shí)際上名字可以任意赡磅,但是后綴要確保是.ini的
vi uwsgi.ini
在文件中按照下面的格式輸入:
[uwsgi]
socket = 0.0.0.0:8000? ?# 套接字,必須要與nginx保持一致宝与!
chdir = /home/hrui/showMaker
module = showMaker.wsgi
master = true? ? ? ? #主進(jìn)程
#vhost = true? ? ? ? #多站模式
#no-site = true? ? ? #多站模式時(shí)不設(shè)置入口模塊和文件
workers = 2? ? ? ? ? #子進(jìn)程數(shù)
reload-mercy = 10
vacuum = true? ? ? ? #退出焚廊、重啟時(shí)清理文件
max-requests = 1000? #同一時(shí)間最大請(qǐng)求數(shù)量
limit-as = 512
buffer-size = 30000
pidfile = /var/run/xxx.pid? ? # pid進(jìn)程文件冶匹,用于關(guān)閉uwsgi服務(wù),
daemonize = /home/asan/xxxx.log? ? #日志文件?
后兩個(gè)文件放在哪里完全看心情咆瘟。
配置完成之后保存并退出嚼隘。讓我們啟動(dòng)一下試一試:
uwsgi --ini uwsgi.ini
ps aux | grep uwsgi
當(dāng)出現(xiàn)如圖所示的界面的時(shí)候就說(shuō)明啟動(dòng)成功了。
此時(shí)在瀏覽器訪問(wèn)是不能成功的袒餐,還需要nginx的配合才行飞蛹,所以我們先關(guān)閉uwsgi的服務(wù):
uwsgi --stop /var/run/demoUwsgi.pid
重啟的命令是:
uwsgi --reload /var/run/demoUwsgi.pid
再執(zhí)行ps命令發(fā)現(xiàn)uwsgi的進(jìn)程已經(jīng)不存在了, 說(shuō)明關(guān)閉成功灸眼。
接下來(lái)安裝并配置nginx
(四)卧檐、安裝并配置nginx
首先需要下載nginx安裝包,或者使用yum安裝焰宣。安裝包點(diǎn)擊這里霉囚,提取碼是:23pu
下載好之后使用winscp工具上傳到你的CentOS系統(tǒng)中,如何上傳百度一下就OK匕积,傳到哪個(gè)目錄可以任意選擇盈罐。
然后我們解壓:
tar -zxvf nginx-1.13.7.tar.gz
編譯:
進(jìn)入解壓后的文件夾,執(zhí)行:
./configure --prefix=/usr/local/nginx
make && make install
做軟鏈:
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
測(cè)試:
nginx
出現(xiàn)如圖所示就代表成功了闪唆!
配置nginx:
vim /usr/local/nginx1.13/conf/nginx.conf
打開后找到并修改為下面的樣式
localtion / {
????include uwsgi_params;??
?????uwsgi_pass 0.0.0.0:8000;? ??#這里要與uwsgi中的socket套接字保持一致盅粪!
?????uwsgi_param CHDIR /home/asandemo/demo;? #這里的demo指的是工程名,而不是內(nèi)層的demo
?????uwsgi_param UWSGI_SCRIPT demo.wsgi;? # demo.wsgi 相當(dāng)于demo/wsgi
}
完事之后保存并退出悄蕾,然后執(zhí)行:
nginx -t?
檢驗(yàn)是否正確票顾。
出現(xiàn)OK,success字眼笼吟,就代表沒問(wèn)題库物,否則再去修改一下即可
然后我們同時(shí)啟動(dòng)uwsgi和nginx
uwsgi --ini? xxx.ini
nginx
之后在瀏覽器輸入IP:80就可以看到了,如果沒有看到贷帮,可能原因之一是沒有開放80端口戚揭,此時(shí)開放即可。
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
之后再次嘗試瀏覽器訪問(wèn)即可撵枢。
(五)民晒、配置django與nginx訪問(wèn)靜態(tài)文件
第一步:使html文件可訪問(wèn)
新建testapp app:
python manage.py startapp testapp
新建 templates模板文件:
sudo mkdir templates
在manage.py所在目錄下運(yùn)行:
vi ./demo/settings.py
添加app和添加templates
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] 在'django.contrib.staticfiles',之后追加'testapp',
逗號(hào)不能少!
找到templates锄禽,下的'DIRS'修改如下:
'DIRS': [os.path.join(BASE_DIR, 'templates')],
然后在新建的app的view中定義一個(gè)index函數(shù):
vi ./testapp/views.py
添加:
def index(request):
return render(request, 'index.html')
然后再到settings.py所在目錄下找到urls.py并添加如下:
from testapp import views? ? # 新加
urlpatterns = [
? ? path('admin/', admin.site.urls),
? ? path('index', views.index),? ? ? # 新加
]
然后在瀏覽器輸入IP:80/index即可看到index.html 的內(nèi)容
第二步:配置靜態(tài)文件
在manage.py目錄下新建static文件
sudo mkdir static
在settings.py 的STATIC_URL下添加:
STATIC_ROOT =?os.path.join(BASE_DIR, 'static')
保存并退出之后執(zhí)行:
python manage.py collectstatic
修改nginx配置文件:
1.在頭部添加或者直接修改:user root潜必,否則訪問(wèn)static的時(shí)候會(huì)拋出403錯(cuò)誤
2.location / {} 之后添加:
location /static/ {
? ? alias /path/to/your/static/;
? ? # alias /home/asandemo/demo/static/;
}
注意:
再index.html中使用的靜態(tài)文件要使用固定的格式:
/static/images/img.xxx
/static/css/css.css
/static/js/js.js
之后就能順利的訪問(wèn)靜態(tài)文件了。
(六)沃但、supervisor篇
安裝:
yum install supervisor
或者:
pip install supervisor
使用pip安裝后可執(zhí)行文件在/usr/local/python3.6/bin/里面
可以先鏈接到/usr/bin/中
ln -s /usr/local/python3.6/bin/supervisorctl /usr/bin/
ln -s?/usr/local/python3.6/bin/supervisord /usr/bin/
通過(guò)echo_supervisord_conf生成配置文件:
/usr/local/python3.6/bin/echo_supervisord_conf > /etc/supervisor/supervisord.conf
配置文件說(shuō)明:
[unix_http_server]
file=/tmp/supervisor.sock ;UNIX socket 文件磁滚,supervisorctl 會(huì)使用?
;chmod=0700 ;socket文件的mode,默認(rèn)是0700
;chown=nobody:nogroup ;socket文件的owner,格式:uid:gid
;[inet_http_server] ;HTTP服務(wù)器垂攘,提供web管理界面
;port=127.0.0.1:9001 ;Web管理后臺(tái)運(yùn)行的IP和端口维雇,如果開放到公網(wǎng),需要注意安全性
;username=user ;登錄管理后臺(tái)的用戶名
;password=123 ;登錄管理后臺(tái)的密碼
[supervisord]
logfile=/tmp/supervisord.log ;日志文件晒他,默認(rèn)是 $CWD/supervisord.log
logfile_maxbytes=50MB ;日志文件大小吱型,超出會(huì)rotate,默認(rèn) 50MB陨仅,如果設(shè)成0津滞,表示不限制大小
logfile_backups=10 ;日志文件保留備份數(shù)量默認(rèn)10,設(shè)為0表示不備份
loglevel=info ;日志級(jí)別灼伤,默認(rèn)info触徐,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false ;是否在前臺(tái)啟動(dòng),默認(rèn)是false饺蔑,即以 daemon 的方式啟動(dòng)
minfds=1024 ;可以打開的文件描述符的最小值锌介,默認(rèn) 1024
minprocs=200 ;可以打開的進(jìn)程數(shù)的最小值嗜诀,默認(rèn) 200?
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通過(guò)UNIX socket連接supervisord猾警,路徑與unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通過(guò)HTTP的方式連接supervisord
; [program:xx]是被管理的進(jìn)程配置參數(shù),xx是進(jìn)程的名稱
[program:xxx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序啟動(dòng)命令?
autostart=true ; 在supervisord啟動(dòng)的時(shí)候也自動(dòng)啟動(dòng)
startsecs=10 ; 啟動(dòng)10秒后沒有異常退出隆敢,就表示進(jìn)程正常啟動(dòng)了发皿,默認(rèn)為1秒
autorestart=true ; 程序退出后自動(dòng)重啟,可選值:[unexpected,true,false],默認(rèn)為unexpected拂蝎,表示進(jìn)程意外殺死后才重啟
startretries=3 ; 啟動(dòng)失敗自動(dòng)重試次數(shù)穴墅,默認(rèn)是3
user=tomcat ; 用哪個(gè)用戶啟動(dòng)進(jìn)程,默認(rèn)是root
priority=999 ; 進(jìn)程啟動(dòng)優(yōu)先級(jí)温自,默認(rèn)999玄货,值小的優(yōu)先啟動(dòng)
redirect_stderr=true ; 把stderr重定向到stdout,默認(rèn)false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小悼泌,默認(rèn)50MB
stdout_logfile_backups = 20 ; stdout 日志文件備份數(shù)松捉,默認(rèn)是10
; stdout 日志文件,需要注意當(dāng)指定目錄不存在時(shí)無(wú)法正常啟動(dòng)馆里,所以需要手動(dòng)創(chuàng)建目錄(supervisord 會(huì)自動(dòng)創(chuàng)建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false ;默認(rèn)為false,進(jìn)程被殺死時(shí)隘世,是否向這個(gè)進(jìn)程組發(fā)送stop信號(hào),包括子進(jìn)程
killasgroup=false ;默認(rèn)為false鸠踪,向進(jìn)程組發(fā)送kill信號(hào)丙者,包括子進(jìn)程
;包含其它配置文件
[include]
files = relative/directory/*.ini ;可以指定一個(gè)或多個(gè)以.ini結(jié)束的配置文件
一個(gè)示例:
[program:super_nginx]
directory=/usr/bin
autorestart=true
autostart=true
command=sudo nginx -c /usr/local/nginx/conf/nginx.conf
user=rootstderr_logfile=/tmp/nginx_stderr.log
stdout_logfile=/tmp/nginx_stdout.log
redirect_stderr=true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
其他的一樣添加就ok了
supervisor常用命令:
supervisord -c /etc/supervisord.conf? ? ?// 啟動(dòng)supervisord,也可以設(shè)置開機(jī)啟動(dòng)
supervisorctl status? ?// 查看當(dāng)前program運(yùn)行狀態(tài)
supervisorctl start program? // 啟動(dòng)設(shè)置的程序营密, 例如上面的super_nginx
supervisorctl stop program? // 關(guān)閉設(shè)置的程序械媒, 例如上面的super_nginx
supervisorctl update? ?// 修改conf文件后更新配置文件
supervisorctl? reload? // 重啟supervisor
Over!