zoukankan      html  css  js  c++  java
  • django+nginx+uwsgi+django

    本地开发一个新闻站的数据分析平台,花三天时间终于成功部署在linux平台上。

    几年前,实施过linux的web服务器,对linux的操作只了解一些皮毛,这次部署也是按部就班、战战兢兢,参考了许多网友大牛的技术资料,也踩过了好多坑,现在整理一下。

    基础条件:centos7.8

    1.系统更新,安装基础环境

    yum update -y
    yum -y groupinstall "Development tools"
    yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

    2.安装python3.6 (和开发环境保持一致)

    cd /usr/local
    wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
    如报错可能还需要
    yum install gcc
    ./configure --prefix=/usr/local/python3 ./configure --enable-optimizations make make install

    3.建立虚拟目录和应用目录

    mkdir -p /data/env
    mkdir -p /data/wwwroot

    4.激活虚拟环境

    pip3 install virtualenv

    virtualenv --python=/usr/local/bin/python3 itda2
    cn /data/env/itda2/bin/
    source activate

    5.虚拟环境中安装django和uwsgi

    pip3 install django (安装了最新版,3.0.8)
    pip3 install uwsgi
    留意:uwsgi要安装两次,先在系统里安装一次,然后进入对应的虚拟环境安装一次。

    6.建立django的测试环境会出现

    raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' %Database.sqlite_version)

    解决办法:https://www.cnblogs.com/hszstudypy/p/11512244.html

    cd /usr/local
    wget https://www.sqlite.org/2020/sqlite-autoconf-3320300.tar.gz tar zxvf sqlite-autoconf-3250300.tar.gz
    cd sqlite
    -autoconf-3250300 sudo ./configure sudo make && make install

    更改全局的sqlite版本并验证

    ## 查看有哪几个 sqlite3
     find /usr/ -name sqlite3 
    ## 查看旧版本Centos7自带的sqlite3版本
     /usr/bin/sqlite3 -version
    3.7.17 2013-05-20 00:56:22 
    ## 最新安装的sqlite3版本
    /usr/local/bin/sqlite3 -version
    3.27.2 2019-02-25 16:06:06  
    # 备份旧的sqlite3
    mv /usr/bin/sqlite3  /usr/bin/sqlite3_old 
    # 软链接将新的sqlite3设置到/usr/bin目录下
     ln -s /usr/local/bin/sqlite3   /usr/bin/sqlite3 
    # 查看当前全局sqlite3的版本
    sqlite3 --version
    3.27.2 2019-02-25 16:06:06  
    #将路径传递给共享库
    # 设置开机自启动执行,可以将下面的export语句写入 ~/.bashrc 文件中,如果如果你想立即生效,可以执行source ~/.bashrc 将在每次启动终端时执行
     export LD_LIBRARY_PATH="/usr/local/lib" 
    # 查看python环境中sqlite3 是否已经更新
    [root@localhost]# python3
    >>> import sqlite3
    >>> sqlite3.sqlite_version
    '3.27.2'

    或者在django中的settings.py是注释掉sqlite部分也可以正常启动,如果你不计划用sqlite的话。

    7.安装nginx

    cd /usr/local
    wget http://nginx.org/download/nginx-1.19.0.tar.gz
    tar -zxvf nginx-1.13.7.tar.gz
    mv nginx-1.13.7 nginx
    cd nginx
    ./configure
    make
    make install

    在/usr/local/nginx/conf/中先备份一下nginx.conf文件,以防意外。

    cp nginx.conf nginx.conf.bak

    然后打开nginx.conf,把原来的内容删除,直接加入以下内容,完全参考网友建议,但有一个坑

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        server {
            listen       80;
            server_name  www.django.cn;
            charset utf-8;
            location / {
               include uwsgi_params;
               uwsgi_pass 127.0.0.1:8997;
               uwsgi_param UWSGI_SCRIPT mysite.wsgi;
               uwsgi_param UWSGI_CHDIR /data/wwwroot/mysite;
               
            }
            location /static/ {
            alias /data/wwwroot/mysite/static/;    #应该是完整路径,data前应该用/,我原先参考的资料中没有
            }
        }
    }

    其实原来的conf也可以使用,只需要修改几个关键地方即可,其实的基本都被注释了

    进入/usr/local/nginx/sbin/目录,启动nginx

    ./nginx

    8.迁移数据平台和爬虫程序

    在本地将依赖生成文本

    pip freeze > requirements.txt

    本地分别打包平台和程序的rar,并上传到/data/wwwroot

    系统中安装rarlinux-x64-5.3.0

    在/data/wwwroot中

    rar x itda.rar

    rar x syxw.rar

    9.修改配置

    程序中修改原来win方式的路径

    在/data/wwwroot/itda2/itda2/setting.py中增加,方便以后nginx对静态资源的支持

    STATIC_ROOT = '/data/wwwroot/itda2/static/'
    在/data/wwwroot/itda2/itda2.xml中创建
    <uwsgi>
       <socket>127.0.0.1:8997</socket><!-- 内部端口,自定义 -->
       <chdir>/data/wwwroot/itda2/</chdir><!-- 项目路径 -->
       <module>itda2.wsgi</module>
       <processes>4</processes> <!-- 进程数 -->
       <daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
       <home>/data/env/itda2</home>  #这是另外一个坑,使得uwsgi -x itda2.xml
    </uwsgi>

    其中的home项是后面加的,网上大多数是用ini的方式来支持,我想xml方式应该也是可以,实践证明,两个是同理的,只是书写的调用的方式不同,都是用来定义应用的虚拟环境路径

    10.测试程序

    利用python3 manage.py runserver 0.0.0.0:81

    报错不能装postsql的库psycopg2

    只能二进制装

    https://pypi.org/project/psycopg2-binary/#files

    下载2.8.5 寻找对应的python版本号

    psycopg2_binary-2.8.5-cp36-cp36m-manylinux1_x86_64.whl (2.9 MB)

    在虚拟环境中安装

    pip install psycopg2_binary-2.8.2-cp37-cp37m-manylinux1_x86_64.whl

    问题解决

    11.安装mongodb(爬虫数据保存)

    参考:https://www.jianshu.com/p/994bc7b19b26

    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-4.2.8.tgz

    下载了最新版

    $ tar zxvf mongodb-linux-x86_64-rhel62-4.2.8.tar.gz
    $ mv mongodb-linux-x86_64-rhel62-4.2.8 mongodb 

    vi /etc/profile

    在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下内容:  

    #Set Mongodb
    export PATH=/usr/mongodb/bin:$PATH

    保存后,使配置生效

    $ cd ~
    $ source /etc/profile
    $ cd /usr/local/mongodb
    $ touch mongodb.conf
    $ mkdir db
    $ mkdir log
    $ cd log
    $ touch mongodb.log

    配置mongodb

    vim /usr/mongodb/mongodb.conf

    添加以下内容

    port=27017 #端口
    dbpath= /usr/mongodb/db #数据库存文件存放目录
    logpath= /usr/mongodb/log/mongodb.log #日志文件存放路径
    logappend=true #使用追加的方式写日志
    fork=true #以守护进程的方式运行,创建服务器进程
    maxConns=100 #最大同时连接数
    noauth=true #不启用验证
    journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
    #即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
    storageEngine=wiredTiger  #存储引擎有mmapv1、wiretiger、mongorocks
    bind_ip = 0.0.0.0  #这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB

    设置权限

    $ cd /usr/local/mongodb
    $ chmod 777 db
    $ chmod 777 log

    启动

    $ cd ~
    $ mongod -f /usr/local/mongodb/mongodb.conf

    本地使用MongoDB Compass,远程连接并创建新数据库,一切顺利,舒服

    在远程使用过程 中,可以临时将系统防火墙关闭,减少干扰,后期再调整,风险自己把握

    12.安装redis(分布式爬虫使用)

    You need tcl 8.5 or newer in order to run the Redis test
    

     安装redis6.0.5 版本太新的了,报错,gcc版本低不匹配

    https://blog.csdn.net/zhangchaoyang/article/details/104456978

    查看gcc版本,果然低

    gcc -v
    wget http://mirror.centos.org/centos/7/os/x86_64/Packages/tcl-8.5.13-8.el7.x86_64.rpm
    
    rpm -ivh tcl-8.5.13-8.el7.x86_64.rpm

    make && make test 过程挺慢的

    13.django的样式问题

    1、在settings.py尾部:

    STATIC_ROOT = '/data/wwwroot/itda2/static'  #设置一个目录,把后台CSS样式放到这个目录里

    2、收集CSS样式,在终端输入:

    python manage.py collectstatic

    运行这个命令之后,就会自动把后台CSS样式收集到/static/目录下。

    3、重启服务,成功。

    14.启动

    uwsgi

    cd /data/wwwroot/itda2

    uwsgi -x itda2.xml

    nginx

    cd /usr/local/nginx/sbin/

    ./nginx

    redis

     cd /usr/local/redis/bin

    ./redis-server redis.conf

    mongodb

    cd /usr/local/mongodb

    ./mongod -f /usr/local/mongodb/mongodb.conf

    大致的安装过程记录如上

    在实际操作中,环境都安装好之后,需要反复启动程序,观察uwsgi.log,nginx/error.log,日志文件往往可以给你很好的提示信息。

     

    pip install psycopg2_binary-2.8.2-cp37-cp37m-manylinux1_x86_64.whl

  • 相关阅读:
    通过w3c方式 读取xml内容
    ssm项目 maven 项目pon.xml 配置
    myeclipse 2014新建maven web 项目步骤
    Maven学习
    常用正则学习
    Maven 那点事儿
    Chrome 里的请求报错 " Provisional headers are shown"
    php框架thinkphp3.2.3 配置文件bug
    $_GET $_POST $_REQUEST
    php检测函数
  • 原文地址:https://www.cnblogs.com/spidernyp/p/13357425.html
Copyright © 2011-2022 走看看