Python3.8+Django2.2+uwsgi+supervisor+nginx 配置安装

整理这次配置及遇到的相关问题

安装:
    # yum install libffi-devel gcc gcc-c++ zlib zlib-devel readline-devel openssl-devel bzip2-devel sqlite-devel
    # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-de
    # yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ openssl-devel
    
    openssl 安装
    # wget http://www.openssl.org/source/openssl-1.1.1.tar.gz
    # tar -zxvf openssl-1.1.1.tar.gz
    # cd openssl-1.1.1
    # ./config --prefix=/usr/local/ssl shared zlib
    # make && make install
    # echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib" >> /usr/local/.bash_profile
    # source /usr/local/.bash_profile
    

    Python 源码安装安装
    资源下载:
        https://www.python.org/downloads/release/python-381/
    # tar -zxvf Python-3.8.1.tgz
    # cd Python-3.8.1
    # ./configure --enable-optimizations --enable-loadable-sqlite-extensions    --with-openssl=/usr/local/ssl/
    # make && make install
    # python3 -V
    # pip3 -V
    # pip3 install Django
    # python3
    >>> import django    查看使用模块,是否报错
    >>> django.get_version()
    
    # pip3 install supervisor
    # pip3 install uwsgi --upgrade


本来是想要指定目录安装,不过后来出现了许多的问题
./configure --prefix=/usr/local/Python38/ --enable-optimizations --enable-loadable-sqlite-extensions

安装异常:
    
   异常:
   ModuleNotFoundError: No module named '_ssl'    
   ssl 安装,异常修改安装源文件
    vi /usr/local/Python38/Modules/Setup
        #修改结果如下:
        # Socket module helper for socket(2)
        _socket socketmodule.c timemodule.c

        # Socket module helper for SSL support; you must comment out the other
        # socket line above, and possibly edit the SSL variable:
        SSL=/usr/local/ssl
        _ssl _ssl.c \
        -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
        -L$(SSL)/lib -lssl -lcrypto
        
        当前修改,再编译安装是成功了,下次测试可以不修改文档,再编译测试是否能安装成功,问题再次排除一下。
    

   错误:
    ./python: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
    这是由于openssl库的位置不正确造成的。
        解决方法:
            ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
            ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

  错误:ModuleNotFoundError: No module named '_sqlite3'
  解决方法: 
      http://www.mamicode.com/info-detail-2090766.html
    
  错误: dynamic module does not define module export function (PyInit__sqlite3)
    https://www.cnblogs.com/i1991/p/9497259.html

  错误: ModuleNotFoundError: No module named '_ctypes'的解决办法
    https://blog.csdn.net/qq_42353939/article/details/94609591

  错误: uwsgi: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
     # uwsgi   启动异常
     处理方式
    # find / -name libpcre.so.*
    再不同目录下在找到
    /usr/local/lib/libpcre.so.1.2.10
    /usr/local/lib/libpcre.so.1
    /lib64/libpcre.so.0.0.1
    /lib64/libpcre.so.0
    # ln -s /usr/local/lib/libpcre.so.1 /usr/lib/libpcre.so.1
    # uwsgi --version  测试还是异常    

    看到一篇文章
                https://blog.csdn.net/perfer258/article/details/81283656
    决定用 lib64 目录下的文档,可能是我安装 nginx 时使用的
    # ln -s /lib64/libpcre.so.0.0.1 /lib64/libpcre.so.1    
    # uwsgi --version

常用命令:
    # ./configure --prefix=/tmp/to_remove && make install 编译 卸载
    # uwsgi --version    查看版本
    # netstat -nltp        查看使用端口
    # ps -ef | grep uwsgi
    # pip show six
    

创建项目:
    # django-admin startproject Test
    创建 Test 项目
    # cd Test
    # python3 manage.py startapp AppTest
    # python3 manage.py runserver        开启测试服务器
    指定端口测试
    python3 manage.py runserver 0.0.0.0:8000
    
    
配置 Nginx + uwsgi + Django
    前提是安装好 nginx/1.12.2
    # uwsgi --socket 127.0.0.1:9090 --chdir /home/PDev/Test/ --module Test.wsgi
    # uwsgi --socket 127.0.0.1:9091 --chdir /home/PDev/Test2/ --module Test2.wsgi
    
    Nginx 配置
    server {
        listen  8088;
        #listen  443 default ssl;
        #server_name  www.prestashop171.test.test;

        charset UTF-8;

        error_log /var/log/nginx/test.log;
        #root  /home/Dev/proxy_ESM/public;
        error_page 404 /404.html;


        location / {
                include     /usr/local/nginx/conf/uwsgi_params;
                uwsgi_pass  127.0.0.1:9090;
                uwsgi_param UWSGI_SCRIPT Test.wsgi;
                uwsgi_param UWSGI_CHDIR /home/PDev/Test;

        }
    }
    # service nginxd restart
    
    uwsgi 改用文档配置方式
    # cd /home/PDev/Test
    # touch uwsgi.ini
    [uwsgi]
    socket = 127.0.0.1:9090
    chdir = /home/PDev/Test
    module = Test.wsgi
    master = true
    vacuum = true
    pidfile = /var/run/uwsgi9090.pid
    daemonize = /data/logs/uwsgi9090.log
    
    以上是 uwsgi.ini 的配置内容
    https://blog.csdn.net/gocuber/article/details/80625140
    
    
    
访问异常:
192.168.1.66:8088
DisallowedHost at / Invalid HTTP_HOST header: '192.168.1.66:8088'. You may need to add '192.168.1.66 ...
    https://www.cnblogs.com/xiaodangshan/p/7450152.html
    
    
配置 supervisor 管理进程
    # echo_supervisord_conf > /etc/supervisord.conf
    # supervisord -c /etc/supervisord.conf                    启动 supervisor
    配置 supervisord.conf ,在最底部添加
    [program:Test]
    command=uwsgi --ini /home/PDev/Test/uwsgi.ini
    ;command=uwsgi --http :8001 --chdir /home/PDev/Test --module Test.wsgi
    directory=/home/PDev/Test
    startsecs=0
    stopwaitsecs=0
    autostart=true
    autorestart=true
    
    [program:Test2]
    command=uwsgi --ini /home/PDev/Test2/uwsgi.ini
    directory=/home/PDev/Test2
    startsecs=0
    stopwaitsecs=0
    autostart=true
    autorestart=true
    
    # supervisorctl -c /etc/supervisord.conf restart Test            重启 Test 程序(项目)
    # supervisorctl -c /etc/supervisord.conf restart Test2
    
说明:
    uwsgi,是一种应用程与Web服务器通信息的接口或者是说协议
        https://blog.csdn.net/ys_1991/article/details/97794965
    
    supervisor 守护进程工具
        https://www.jianshu.com/p/39b476e808d8
        
    注意:
        很奇怪的是,使用 supervisorctl 可以启动应用程序,但是关闭应用程确是无效
        supervisorctl -c /etc/supervisord.conf stop all
    


 

你可能感兴趣的:(Python)