Linux部署Django遇到的问题

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Linux部署Django遇到的问题

7_X%N@)}Z~1)`II617Z`@%L.png

Linux部署Django遇到的问题


安装Python3

Notes:操作系统:CentOS7


wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz
tar -xvf Python-3.6.3.tar.xz
cd Python-3.6.3
./configure
make && make install

然而,报错了!!


各种报错


  • zipimport. ZipImportError: can't decompress data; zlib not available

Solution: 缺少包,下载安装 yum install zli*


  • Error:  Multilib version problems found.

Solution: 发现了多个版本,忽略 yum install -y zlib zlib-devel --setopt=protected_multilib=false

cd Python-3.6.3
./configure
make && make install

成功: Collecting setuptools Collecting pip Installing collected packages: setuptools, pip Successfully installed pip-9.0.1 setuptools-28.8.0

将原来 python 的软链接重命名: mv /usr/bin/python /usr/bin/python.bak

将 python 链接至 python3: ln -s /usr/local/bin/python3 /usr/bin/python


  • pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

该错误在执行 pip install django 时出现。

Solution: 不支持 SSL,安装 openssl-develyum install openssl-devel

装完后,重新编译安装Python cd Python-3.6.3 ./configure --with-ssl make && make install


  • File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:

该错误在执行 yum install openssl-devel 时出现。

cd /usr/bin/ ls -l python*

Solution: yum安装软件时,需要Python的支持,默认为Python2


vim /usr/bin/yum
vim /usr/libexec/urlgrabber-ext-down
将#! /usr/bin/python 改为 #! /usr/bin/python2

  • Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:zlib-1.2.7-18.el7.x86_64 is a duplicate with zlib-1.2.7-13.el7.i686

该错误在执行 yum install mysql-devel gcc gcc-devel python-devel --skip-broken 时出现。

Solution: 版本冲突,列出所有的版本,移除没用的版本


rpm -qa | grep zlib
    zlib-1.2.7-18.el7.x86_64
    zlib-devel-1.2.7-18.el7.x86_64
    zlib-1.2.7-13.el7.i686
yum remove zlib-1.2.7-13.el7.i686

  • OSError: mysql_config not found

该错误在执行 pip install mysqlclient 时出现。

Solution: 主要是仓库里没有mysql的源。。先移除,再安装


yum -y remove mysql57-community-release-el7-7.noarch
[root@rabbitmq yum.repos.d]# cd /etc/yum.repos.d/
[root@rabbitmq yum.repos.d]# ls
CentOS-Base.repo         CentOS-Debuginfo.repo  CentOS-Media.repo
CentOS-Base.repo.rpmnew  CentOS-Epel.repo       CentOS-Sources.repo
CentOS-CR.repo           CentOS-fasttrack.repo  CentOS-Vault.repo
[root@rabbitmq yum.repos.d]# rpm -ivh http://repo.mysql.com/mysql57-community-release-el7-7.noarch.rpm
Retrieving http://repo.mysql.com/mysql57-community-release-el7-7.noarch.rpm
Preparing...################################# [100%]
Updating / installing...
   1:mysql57-community-release-el7-7  ################################# [100%]
[root@rabbitmq yum.repos.d]# ls
CentOS-Base.repo         CentOS-Debuginfo.repo  CentOS-Media.repo    mysql-community.repo
CentOS-Base.repo.rpmnew  CentOS-Epel.repo       CentOS-Sources.repo  mysql-community-source.repo
CentOS-CR.repo           CentOS-fasttrack.repo  CentOS-Vault.repo

终于没有错误了,启动。。


pip install mysqlclient
python manage.py runserver

开发环境方式启动Django,一段时间后应用没响应了。。


上次在线上部署了 Django 项目,原本以为通过 python manage.py runserver 0.0.0.0:8000 启动项目就完成了Django的部署,那可真是太天真了。。

这个项目作为独立的服务,单独部署在另外一台服务器上,过了一段时间,测试反映这个项目访问不到内容,到线上查看服务正常启动,但是就是没有响应,然后就重启了。。经过两三次这样的过程,才意识到部署可能有问题??


Solution


其实将开发环境的启动方式应用到了生产环境,先解决问题。

  • 安装配置 uwsgi

Django的文档这样介绍 uwsgi


uWSGI is a fast, self-healing and developer/sysadmin-friendly application container server coded in pure C.

pip install uwsgi

uwsgi --version

  • 在项目根目录创建 uwsgi.ini

vi uwsgi.ini


[uwsgi]
chdir=/opt/hua #项目目录
http=0.0.0.0:8000
wsgi-file=/opt/hua/hua/wsgi.py #uwsgi路径
processes=4
threads=2
master=true
vacum=true
pidfile=/opt/hua/uwsgi.pid #进程id文件路径,自动生成,可用于控制项目启停
daemonize=/opt/hua/uwsgi.log #日志文件路径
module=hua.wsgi

Notes:


  1. 上述方式配置以http启动,如果以https方式启动项目,需要配置: https=0.0.0.0:8000, /opt/cert/certfile.crt, /opt/cert/keyfile.key
  2. 当然,https访问项目,还需要 django-sslserver
  • 控制项目启停

进入uwsgi.ini所在目录


uwsgi --ini uwsgi.ini # 启动
uwsgi --stop uwsgi.pid # 停止
uwsgi --reload uwsgi.pid # 重启
killall -8 uwsgi # 强制停止

Analysis


那么问题来了,在生产环境可以使用 python manage.py runserver 0.0.0.0:8000 来启动项目吗?

答案:可以用来测试,但不建议,即使以nohup 的方式启动。


References



If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
Ubuntu Linux 测试技术
Linux系统之部署轻量级Markdown文本编辑器
【10月更文挑战第6天】Linux系统之部署轻量级Markdown文本编辑器
84 1
Linux系统之部署轻量级Markdown文本编辑器
|
1月前
|
搜索推荐 Linux 测试技术
Linux系统之部署homer静态主页
【10月更文挑战第11天】Linux系统之部署homer静态主页
76 41
Linux系统之部署homer静态主页
|
22天前
|
运维 监控 Linux
Linux系统之部署Linux管理面板1Panel
【10月更文挑战第20天】Linux系统之部署Linux管理面板1Panel
69 3
Linux系统之部署Linux管理面板1Panel
|
1月前
|
Web App开发 资源调度 网络协议
Linux系统之部署IP工具箱MyIP
【10月更文挑战第5天】使用Docker部署Radicale日历和联系人应用Linux系统之部署IP工具箱MyIP
81 1
Linux系统之部署IP工具箱MyIP
|
1月前
|
Linux Shell 异构计算
在linux上部署yolov5和安装miniconda3
这篇文章介绍了在Linux系统上部署YOLOv5并安装Miniconda3的步骤,包括使用wget命令下载Miniconda安装脚本、安装Miniconda、初始化Conda环境、添加镜像源等。
76 3
在linux上部署yolov5和安装miniconda3
|
19天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
46 2
|
20天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
29 3
|
21天前
|
Java Linux 网络安全
NIFI在Linux服务区上的部署配置过程是什么?
【10月更文挑战第21天】NIFI在Linux服务区上的部署配置过程是什么?
38 2
|
23天前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
191 2
|
1月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
105 0