Linux

CentOS7从零零零开始配置python+django+nig

2020-12-25  本文已影响0人  忘忧_ffs

(一)、安装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,如果不记得了,那么就输入:

ip addr

或者

ifconfig

ip

那么这个就是你的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!

上一篇下一篇

猜你喜欢

热点阅读