(一)、安装python3.6.6
获取puthon安装包的方式两种,第一种是在linux中使用wget命令下在,另一种是在window主机当中事前下载好,然后使用WinSCP工具上传到指定的文件夹然后在进行安装。
首先在喜欢的目录中创建一个文件夹用于放置下载的python安装包,然后使用cd命令进入该目录之下。
第一步:解压:
tar -zxvf Python-3.6.6.tgz
第二步:编译:
进入加压后的文件夹 Python-3.6.6,然后执行下面的命令:
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 (安装编译环境)
./configure prefix=/usr/local/python3
make && make install
使用prefix指定安装的目录,这里可以自行选择,不过一般都是在user/local之下
如果出现下面的错误,说明你的系统中还没有安装gcc编译器,
configure: error: in `/home/asandemo/software/Python-3.6.6':
configure: error: no acceptable C compiler found in $PATH
此时使用yum安装gcc编译器即可:
yum install gcc* -y
之后在执行上面的编译即可。
安装好之后执行
python -V
显示的版本还是原来的版本,是我们没有安装成功吗?其实不是的,只是/use/bin中的python没有被我们新安装的python替换而已,类似于window中的软件没有设置path,系统还不知道如何去执行,从哪里执行python。在linux系统中,解决方法就是做个软链即可:
第一步:将原来的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上,当然,你也可将旧版的pip执行保存。
现在运行python -V, 发现已经是新版了。
但是如果此时使用yum安装软件,会发现报错,因为python的版本已经改变,所以我们要对yum进行一番基操。
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对应版本对应如下:
版本关系先更新pip到最新版本:
pip install --upgrade pip
然后下载django
pip install django==2.2.13
django会下载在/usr/local/python3/bin的目录之下,名字为django-admin
想要以后在终端使用django命令创建项目的话还是要做个软链到/usr/bin/下面:
ln -s /usr/local/python3.6/bin/django-admin /usr/bin/django
django --version
显示:
2.2.13
说明成功!
接下来尝试运行django测试是否成功。
python manage.py runserver 0.0.0.0:8000
运行之后如果出现一大堆字符,并且有
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
这样的说明文字,那么就说明我们系统中的sqlite版本有点低,而django又需要高于3.8.3版本的sqlite。但是如果重新安装sqlite过于麻烦,所以我们就修改以下django的配置:
找到/…/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py这个脚本
然后找到下面的代码块,注释掉那一行并更改为:
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)
然后在运行
python manage.py runserver 0.0.0.0:8000
如果出现红字,不要怕,执行数据迁徙即可:
python manage.py migrate
其实到这里,django已经可以顺利的运行了,但是在CentOS 7 minimal 的无界面环境之下,我们没办法验证它到底有没有正常的运行啊!所以,此时骚操作来了:
firewall-cmd --zone=public --add-port=8000/tcp --permanent
firewall-cmd --reload
开放你的CentOS 7的端口,之后在宿主机的浏览器中输入我们配置的静态网络的ip,如果不记得了,那么就输入:
ipip addr
或者
ifconfig
那么这个就是你的ip地址了。
在宿主机浏览器中输入:IP:8000, 例如192.168.1.120:8000,此时出现下面的界面,则说明你安装的django已经可以正常工作了。
django-worked如果没有出现这个界面的话,可能原因有并没有开放访问django的ip。虽然我们开放了CentOS的端口,但是对于django内在的,授权访问的主机ip我们并没有开放,需要找到django项目同名app之下的setting进行修改:
vi ./demo/settings.py
找到下面的代码并更改。
ALLOWED_HOSTS = []
改为
ALLOWED_HOSTS = ['*']
保存后退出再重新运行即可。
(三)、安装uwsgi并配置
使用pip命令安装uwsgi:
pip install uwsgi
安装好之后做个软链:
ln -s /usr/local/python3.6/bin/uwsgi /usr/bin/uwsgi
测试uwsgi可行性:
创建test.py文件,并输入以下内容
def application(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [b"hello world"]
之后运行:
uwsgi --http :8000 --wsgi-file test.py
注意:http后面有一个空格,并且":"和8000之间不能有空格, 否则会报错
完事之后,在浏览器中就可以看到结果了
但这并不是我们想要的效果,我们最终的目的是实现nginx->uwsgi->django,所以要配置一下uwsgi,在demo项目之下创建uwsgi.ini 文件,实际上名字可以任意,但是后缀要确保是.ini的
vi uwsgi.ini
在文件中按照下面的格式输入:
[uwsgi]
socket = 0.0.0.0:8000 # 套接字,必须要与nginx保持一致!
chdir = /home/hrui/showMaker
module = showMaker.wsgi
master = true #主进程
#vhost = true #多站模式
#no-site = true #多站模式时不设置入口模块和文件
workers = 2 #子进程数
reload-mercy = 10
vacuum = true #退出、重启时清理文件
max-requests = 1000 #同一时间最大请求数量
limit-as = 512
buffer-size = 30000
pidfile = /var/run/xxx.pid # pid进程文件,用于关闭uwsgi服务,
daemonize = /home/asan/xxxx.log #日志文件
后两个文件放在哪里完全看心情。
配置完成之后保存并退出。让我们启动一下试一试:
uwsgi --ini uwsgi.ini
ps aux | grep uwsgi
当出现如图所示的界面的时候就说明启动成功了。
uwsgi_pid此时在浏览器访问是不能成功的,还需要nginx的配合才行,所以我们先关闭uwsgi的服务:
uwsgi --stop /var/run/demoUwsgi.pid
重启的命令是:
uwsgi --reload /var/run/demoUwsgi.pid
再执行ps命令发现uwsgi的进程已经不存在了, 说明关闭成功。
接下来安装并配置nginx
(四)、安装并配置nginx
首先需要下载nginx安装包,或者使用yum安装。安装包点击这里,提取码是:23pu
下载好之后使用winscp工具上传到你的CentOS系统中,如何上传百度一下就OK,传到哪个目录可以任意选择。
然后我们解压:
tar -zxvf nginx-1.13.7.tar.gz
编译:
进入解压后的文件夹,执行:
./configure --prefix=/usr/local/nginx
make && make install
做软链:
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
测试:
nginx
出现如图所示就代表成功了!
nginx_success配置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指的是工程名,而不是内层的demo
uwsgi_param UWSGI_SCRIPT demo.wsgi; # demo.wsgi 相当于demo/wsgi
}
完事之后保存并退出,然后执行:
nginx -t
检验是否正确。
出现OK,success字眼,就代表没问题,否则再去修改一下即可
然后我们同时启动uwsgi和nginx
uwsgi --ini xxx.ini
nginx
之后在浏览器输入IP:80就可以看到了,如果没有看到,可能原因之一是没有开放80端口,此时开放即可。
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
之后再次尝试浏览器访问即可。
(五)、配置django与nginx访问静态文件
第一步:使html文件可访问
新建testapp app:
python manage.py startapp testapp
新建 templates模板文件:
sudo mkdir templates
在manage.py所在目录下运行:
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',
逗号不能少!
找到templates,下的'DIRS'修改如下:
'DIRS': [os.path.join(BASE_DIR, 'templates')],
然后在新建的app的view中定义一个index函数:
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 的内容
第二步:配置静态文件
在manage.py目录下新建static文件
sudo mkdir static
在settings.py 的STATIC_URL下添加:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
保存并退出之后执行:
python manage.py collectstatic
修改nginx配置文件:
1.在头部添加或者直接修改:user root,否则访问static的时候会抛出403错误
2.location / {} 之后添加:
location /static/ {
alias /path/to/your/static/;
# alias /home/asandemo/demo/static/;
}
注意:
再index.html中使用的静态文件要使用固定的格式:
/static/images/img.xxx
/static/css/css.css
/static/js/js.js
之后就能顺利的访问静态文件了。
(六)、supervisor篇
安装:
yum install supervisor
或者:
pip install supervisor
使用pip安装后可执行文件在/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/
通过echo_supervisord_conf生成配置文件:
/usr/local/python3.6/bin/echo_supervisord_conf > /etc/supervisor/supervisord.conf
配置文件说明:
[unix_http_server]
file=/tmp/supervisor.sock ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700 ;socket文件的mode,默认是0700
;chown=nobody:nogroup ;socket文件的owner,格式:uid:gid
;[inet_http_server] ;HTTP服务器,提供web管理界面
;port=127.0.0.1:9001 ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
;username=user ;登录管理后台的用户名
;password=123 ;登录管理后台的密码
[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10 ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info ;日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024 ;可以打开的文件描述符的最小值,默认 1024
minprocs=200 ;可以打开的进程数的最小值,默认 200
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord
; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xxx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序启动命令
autostart=true ; 在supervisord启动的时候也自动启动
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 ; 启动失败自动重试次数,默认是3
user=tomcat ; 用哪个用户启动进程,默认是root
priority=999 ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程
;包含其它配置文件
[include]
files = relative/directory/*.ini ;可以指定一个或多个以.ini结束的配置文件
一个示例:
[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 // 启动supervisord,也可以设置开机启动
supervisorctl status // 查看当前program运行状态
supervisorctl start program // 启动设置的程序, 例如上面的super_nginx
supervisorctl stop program // 关闭设置的程序, 例如上面的super_nginx
supervisorctl update // 修改conf文件后更新配置文件
supervisorctl reload // 重启supervisor
Over!
网友评论