整理这次配置及遇到的相关问题
安装:
# 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