Linux部署Django遇到的问题

本文涉及的产品
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!

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
存储 移动开发 Linux
Linux系统之部署h5ai目录列表程序
【5月更文挑战第3天】Linux系统之部署h5ai目录列表程序
23 1
|
3天前
|
SQL 关系型数据库 MySQL
Linux系统部署Yearning SQL审核平台结合内网穿透实现公网访问
Linux系统部署Yearning SQL审核平台结合内网穿透实现公网访问
|
1天前
|
运维 Linux Docker
ChatGLM3在Docker环境部署,Linux运维免打包多渠道统计如何实现
ChatGLM3在Docker环境部署,Linux运维免打包多渠道统计如何实现
|
1天前
|
运维 Linux Docker
ChatGLM3在Docker环境部署(1),Linux运维电话面试技巧
ChatGLM3在Docker环境部署(1),Linux运维电话面试技巧
|
2天前
|
监控 JavaScript Linux
Linux系统之部署Homepage个人导航页
【5月更文挑战第13天】Linux系统之部署Homepage个人导航页
21 1
|
3天前
|
关系型数据库 MySQL Linux
在Linux系统上实现高效安装与部署环境的全方位指南
在Linux系统上实现高效安装与部署环境的全方位指南
|
3天前
|
Linux 测试技术 网络安全
Linux系统之部署2048网页小游戏
【5月更文挑战第5天】Linux系统之部署2048网页小游戏
30 0
Linux系统之部署2048网页小游戏
|
3天前
|
前端开发 Java Linux
宝塔Linux:部署His医疗项目通过jar包的方式
宝塔Linux:部署His医疗项目通过jar包的方式
|
3天前
|
前端开发 Java 关系型数据库
2023全网最详细的若依开源项目部署,将其部署到Linux操心系统中
2023全网最详细的若依开源项目部署,将其部署到Linux操心系统中
|
3天前
|
运维 监控 Linux
如何在Linux上部署1Panel运维管理面板并远程访问内网进行操作
如何在Linux上部署1Panel运维管理面板并远程访问内网进行操作
29 0
如何在Linux上部署1Panel运维管理面板并远程访问内网进行操作