问题1:关于weget “无法建立SSL连接”的解决方法
解决:
1:开通外网权限
2:在确定有网络的情况下,直接把https修改为http地址就行了
问题2: [已安装成功Django,import时依然提示ImportError: No module named Django。查询问题思路]
解决:
python下help('modules'),显示可import模块是否有django:
又经查询,怀疑可能是pip安装的python版本与当前版本不匹配,于是查看:
使用python3下载的django 而当前python版本为python2,所以我们应该使用python3进入,在调用django。
问题3:如何将Windows系统环境编写的Django项目部署到Linux项目中。
解决:
******************——————分割线————————************************************
操作
工具:xshell
0: 安装python需要的版本,我这里安装python3.6.5
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
找到下载的安装包:tar xf Python-3.6.5.tgz
进入安装包中的目录:cd Python-3.6.5
解压缩后进入到源码目录,进行编译安装(通常用户安装的应用程序是放在/usr/local目录下的,
这里我们将python3.6.4安装在/usr/local/python3目录下):
yum install -y libffi-devel #需要安装该插件不然会报错
yum install -y zlib* #由于centos 7.6 安装Python3.6.5报错如下图:
# 如果没有配置openssl,后面pip会用不了,建议在此步骤之前执行 sudo yum install openssl 和 sudo yuminstall libssl-dev
./configure --prefix=/usr/local/python3 --with-ssl
make && make install
# 配置全局变量
# linux环境下需要我们手动添加,添加方法如下:
cd /etc/profile.d
echo 'export PATH=$PATH:/usr/local/python3/bin/' > python3.sh
# 重登录后,输入Python3,会显示如下:
Python 3.6.5 (default, Aug 9 2019, 08:47:55)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
说明:
1.通常在添加环境变量的时候是单独为该程序在/etc/profile.d目录创建一个文件去修改环境变量,这样是方便以后查找和取消添加的环境变量。
2.添加到PATH环境变量的路径为Python安装路径下的bin目录。
3.执行上面的命令添加环境变量后并不是立即生效的,需要退出登录后重新登录才会生效(这个方法是永久有效的重启服务器后也能生效)。如果想要立即生效就执行命令‘export PATH=$PATH:/usr/local/python3/bin/’
1:创建文件夹,将项目从Windows系统中导入
(-1):`pip freeze > requirements.txt` //将项目中的安装包以及版本导入文件中
(0):将项目压缩成 ****.zip
(1):`mkdir tdms_jun`
(2):`cd tdms_jun`
(3):`rz`
(4):在弹出框中选中压缩包
(5):`unzip ***.zip` //解压缩
2:安装项目所需的应用
(1):`vim requirement.txt` //打开 1中(-1)生成的文件,将`pypiwin32`,`pywin32`两个应用删除(这是因为`pywin32`是绝大部分windows上第三方`python`模块库的前提,而我们是`linux`所以不需要)
(1.5):`pip3 install -r requirements.txt `
(1.7):`python3 manage.py runserver` 你服务器ip:8000
(2):如果提示`django.db.utils.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so: cannot open shared object file: No such file or directory"`则见如下:
(2.2):[下载oracle链接](https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html)下载对应oracle数据库版本,红框为我下载的版本,下载完后`linux`执行`rz`,将下载好的压缩包上传到`linux`服务器中,然后解压`unzip `
(2.2.1):mkdir -p /opt/oracle
(2.2.2):cd /opt/oracle
(2.2.3):unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
libaio使用sudo或root用户安装软件包。例如:
(2.2.4):sudo yum install libaio
在某些Linux发行版上,会调用此包libaio1。
如果计算机上没有其他Oracle软件会受到影响,请将Instant Client永久添加到运行时链接路径。例如,使用sudo或root用户:
(2.2.5):sudo sh -c "echo /opt/oracle/instantclient_12_2 > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
3:运行你的项目:
python3 manage.py runserver
你服务器ip:8000
你可以访问http://你服务器ip:8000/admin/
4:uwsgi配置
(0):我项目的路径:/tdms_jun/tdms/tdms
(1):pip3 install uwsgi
//下载uwsgi
(2):创建uwsgi配置文件( 在项目根目录(与项目名称同级目录/tdms_jun/tdms/script
)创建script文件夹在文件夹里面建立uwsgi配置文件)
# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/tdms_jun/tdms/tdms/
# 指定项目的application
module=tdms.wsgi:application
# 指定sock的文件路径
socket=/tdms_jun/tdms/script/uwsgi.sock
# 进程个数
workers=5 # 一般为 CPU 核数 * 2
# 线程个数
threads = 2 # 线程比进程开销更小一点。如果没有使用 threads 那么 thread 直接不工作的,必须使用 enable_threads。
max-requests = 100000 # 处理过多少个请求后重启进程,目的是防止内存泄露
master = true # 使用 max-requests 必须采用这个选项
listen = 65536 # 每个进程排队的请求数量,默认为 100 太小了。并发数 = procsses * threads * listen,发现uwsgi启动不了,可以查看uwsgi.log可能是listen设置太大
buffer-size = 65536 # header 的 buffer 大小,默认是 4 k
thunder-lock = true # 避免惊群效应
harakiri=30 # 所有进程在 30s 没有响应后中断
log-slow=3000 # 记录满于 3000 毫秒的请求
post-buffering = 8192000 # 请求体缓存大小
socket-timeout = 120 #连接时长
pidfile=/tdms_jun/tdms/script/uwsgi.pid
# 指定IP端口
http=你服务器的ip:8080
# 指定静态文件
static-map=/static=/tdms_jun/tdms/tdms/static
# 如果有虚拟环境
home=虚拟环境地址
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=/tdms_jun/tdms/tdms/tdms/wsgi.py
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置日志目录
daemonize=/tdms_jun/tdms/script/uwsgi.log
(3):/usr/local/python36/bin/uwsgi --ini uwsgi.ini
使用uwsgi运行配置文件,托管django服务
(4):开放端口
如果没有对端口进行开发,服务器是拒绝外部访问的,
-
systemctl status firewalld
:查看防火墙的状态- running 状态即防火墙已经开启
- dead 状态即防火墙未开启
systemctl start firewalld
: 开启防火墙(建议开启)systemctl stop firewalld
: 停止防火墙-
firewall-cmd --query-port=8000/tcp
:查看端口是否开放(8000代表端口)- yes表示已开通
- no表示未开通
-
firewall-cmd --add-port=8000/tcp --permanent
: 开放端口(8000代表端口)- success表示成功
-
firewall-cmd --reload
: 重载配置- 要使配置生效一定要重新载入配置
(4):http://你服务器ip:8080/admin/
//8080为配置文件中http指定端口
5:Nginx配置(使用nginx的的作用主要包括负载均衡,反向代理)
(1):使用yum install 安装(我选择的)
yum install -y nginx
(2):使用下载安装包进行安装
cd /usr/local
wget http://nginx.org/download/nginx-1.11.5.tar.gz #下载
tar -zxvf nginx-1.11.5.tar.gz #解压
cd /usr/local/nginx-1.11.5/
./configure #安装
(3) 测试nginx是否安装成功
# 启动
systemctl start nginx.service
# 停止
systemctl stop nginx.service
# 重启
systemctl restart nginx.service
然后 在浏览器中访问你的服务器地址
(4)在/etc/nginx/conf.d/目录下建立nginx配置文件tdms.conf(如果存在没有conf.d该文件夹,可以自己创建,我就没有该文件夹)
server {
# 这个server标识我要配置了
listen 80;
# 我要监听那个端口
server_name ;
# 你访问的路径前面的url名称
access_log /var/log/nginx/access.log main;
# Nginx日志配置
charset utf-8;
# Nginx编码
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
# 支持压缩的类型
error_page 404 /404.html;
# 错误页面
error_page 500 502 503 504 /50x.html;
# 错误页面
# 指定项目路径uwsgi
location / {
# 这个location就和咱们Django的url(r'^admin/', admin.site.urls),
include uwsgi_params;
# 导入一个Nginx模块他是用来和uWSGI进行通讯的
uwsgi_connect_timeout 30;
# 设置连接uWSGI超时时间
uwsgi_pass unix:/tdms_jun/tdms/script/uwsgi.sock;
# 指定uwsgi的sock文件所有动态请求就会直接丢给他
}
# 指定静态文件路径
location /static/ {
alias /tdms_jun/tdms/tdms/static/;
index index.html index.htm;
}
}
(5) 重新启动nginx
systemctl restart nginx.service
(6)启动uwsgi
/usr/local/python36/bin/uwsgi --ini /tdms_jun/tdms/script/uwsgi.ini
(7)验证环境是否搭建成功
浏览器中访问 http://你服务器ip/admin/
引用网址1
引用网址2
不清楚可以提问哦!!!
(8)如果出现 502 Bad Gateway,查看nginx日志
error.log:connect() to unix:/etc/uwsgi/lims/uwsgi.sock failed (13: Permission denied) while connecting to upstream,
2019/08/09 18:26:49 [crit] 900#0: *1 connect() to unix:/etc/uwsgi/lims/uwsgi.sock failed (13: Permission denied) while connecting to upstream, client: server: , request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/etc/uwsgi/lims/uwsgi.sock:", host: ""
2019/08/09 18:26:50 [crit] 900#0: *1 connect() to unix:/etc/uwsgi/lims/uwsgi.sock failed (13: Permission denied) while connecting to upstream, client: , server: , request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/etc/uwsgi/lims/uwsgi.sock:", host: ""
2019/08/09 18:26:50 [crit] 900#0: *1 connect() to unix:/etc/uwsgi/lims/uwsgi.sock failed (13: Permission denied) while connecting to upstream, client: , server: , request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/etc/uwsgi/lims/uwsgi.sock:", host: ""
表示nginx没有权限调用uwsgi.sock文件,对于权限肯定就知道是跟用户角色有关了,重新编辑
nginx.conf
,如下图:将user 改为与uwsgi.ini中的一致或者管理员,结果发现还是不行 哈哈哈哈,上网继续调查,发现还有一个原因可能引起这个问题,那就是selinux,执行下面命令:
setsebool -P httpd_can_network_connect 1
然后重新访问浏览器,发现可以打开页面了。如果还不行就彻底一些,关闭selinux:
setenforce 0