美文网首页Linux
CentOS7从零零零开始配置python+django+nig

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

作者: 忘忧_ffs | 来源:发表于2020-12-25 17:24 被阅读0次

    (一)、安装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!

    相关文章

      网友评论

        本文标题:CentOS7从零零零开始配置python+django+nig

        本文链接:https://www.haomeiwen.com/subject/zuapnktx.html