Linux部署Django遇到的问题

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 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!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
6月前
|
NoSQL 关系型数据库 Linux
ERPNext 搭建教程:Linux 一键部署与维护
ERPNext 是一款开源免费的企业资源计划系统,适用于中小企业信息化管理。基于 Python 和 Frappe 框架开发,支持财务、销售、人力、库存等模块,具备高度可定制性。本文介绍如何通过 Websoft9 在 Linux 下快速部署 ERPNext,并提供环境配置、系统维护等实用建议,适合开发者和企业用户快速上手。
1046 7
ERPNext 搭建教程:Linux 一键部署与维护
|
8月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
2859 57
|
6月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
306 1
|
6月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
667 13
|
6月前
|
关系型数据库 Linux Nacos
Rocky Linux 部署 Docker 和 NACOS 实例
本文介绍在阿里云环境下基于 Rocky Linux 搭建 Docker 并部署 Nacos 的完整流程。涵盖 Docker 安装、镜像加速配置、网络设置及 MySQL 与 Nacos 容器的创建,适用于开发与生产环境。
876 0
|
8月前
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
449 41
|
8月前
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
568 17
|
8月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
184 18
|
8月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
261 10