Django服务器搭建

问题1:关于weget “无法建立SSL连接”的解决方法
image.png
解决:

1:开通外网权限
2:在确定有网络的情况下,直接把https修改为http地址就行了

问题2: [已安装成功Django,import时依然提示ImportError: No module named Django。查询问题思路]
解决:

python下help('modules'),显示可import模块是否有django:


image.png

又经查询,怀疑可能是pip安装的python版本与当前版本不匹配,于是查看:


image.png

使用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/’

image.png

1:创建文件夹,将项目从Windows系统中导入

  (-1):`pip freeze > requirements.txt`   //将项目中的安装包以及版本导入文件中
  (0):将项目压缩成 ****.zip      
  (1):`mkdir tdms_jun`
  (2):`cd tdms_jun`
  (3):`rz`
  (4):在弹出框中选中压缩包
  (5):`unzip ***.zip`   //解压缩
安装报错.png

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

image.png

(1):pip3 install uwsgi //下载uwsgi
(2):创建uwsgi配置文件( 在项目根目录(与项目名称同级目录/tdms_jun/tdms/script)创建script文件夹在文件夹里面建立uwsgi配置文件)

image.png

# 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服务

image.png

(4):开放端口
如果没有对端口进行开发,服务器是拒绝外部访问的,

  1. systemctl status firewalld :查看防火墙的状态

    • running 状态即防火墙已经开启
    • dead 状态即防火墙未开启
  2. systemctl start firewalld : 开启防火墙(建议开启)

  3. systemctl stop firewalld : 停止防火墙

  4. firewall-cmd --query-port=8000/tcp :查看端口是否开放(8000代表端口)

    • yes表示已开通
    • no表示未开通
  5. firewall-cmd --add-port=8000/tcp --permanent : 开放端口(8000代表端口)

    • success表示成功
  6. firewall-cmd --reload : 重载配置

    • 要使配置生效一定要重新载入配置

(4):http://你服务器ip:8080/admin/ //8080为配置文件中http指定端口

image.png

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

然后 在浏览器中访问你的服务器地址


*congratulations*

(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: ""

image.png

表示nginx没有权限调用uwsgi.sock文件,对于权限肯定就知道是跟用户角色有关了,重新编辑nginx.conf,如下图:将user 改为与uwsgi.ini中的一致或者管理员,结果发现还是不行 哈哈哈哈,上网继续调查,发现还有一个原因可能引起这个问题,那就是selinux,执行下面命令:
setsebool -P httpd_can_network_connect 1
然后重新访问浏览器,发现可以打开页面了。如果还不行就彻底一些,关闭selinux:
setenforce 0
image.png

image.png

你可能感兴趣的:(Django服务器搭建)