Linux-部署-Django-项目过程与问题总结

优才网 2017-04-12 18:00
 
本篇主要用于记录部署 Django 项目所有踩过的坑。
最近学习 Django 框架开发,将项目部署到 Linux 服务器上时遇到了很多坑,在此整理一下以作备忘,同时希望对有需要的同学有所帮助。
从 0 开始,在 Linux 上部署 Django 项目共有如下几步:
1. 安装 Python3.5
2. 安装 Apache2.4
3. 安装 wsgi
4. 配置数据库和静态文件
5. 配置 Apache
6. 处理权限问题
下面一步步来进行详细介绍:
安装 Python3.5
1.安装编译环境

 
2. 下载编译 Python3.5 源码包

 
prefix 指明了 Python3.5 的安装目录,后面的 --enable-shared LDFLAGS="-Wl,-rpath=/usr/local/python3" 选项保证了可以正常使用共享库,否则在编译安装后可能会出现以下错误:

 
我自己在完成后执行 Python3.5 的命令时就遇到了。查找了很多的解决方案,上面这种在编译时进行LDFLAGS配置应该是最简洁有效的方式。
另外这个错误在使用wsgi时也可能会遇到,其官方文档还特地针对该问题作了【介绍】(http://modwsgi.readthedocs.io/en/develop/user-guides/installation-issues.html)。其原因就是无法找到 Python 的共享链接库。
解决方法是找到共享库文件 /etc/ld.so.conf,这个文件记录了编译时使用的动态链接库的路径,一般默认配置了 /lib 和 /usr/lib ,这里我们需要将安装的 Python3.5 的共享库路径添加进去:之后运行 ldconfig 使配置生效就可以正常使用了。
安装完 Python3.5 后可以使用 pip 安装 Django 等需要的库。
安装 Apache 服务器
1. 安装 apr apr-util pcre
1)安装 apr
下载地址:
首先下载 apr,我这里下载的版本是 apr-1.5.2.tar.gz,下载完成后解压编译:

 
按照上面步骤执行应该基本没有问题。
2) 安装 apr-util
apr-util 与 pcre 的安装步骤与上面基本相同,但是需要配置 apr 选项,如果不进行任何设置,在检测编译选项时会报如下错误,提示我们需要配置 apr 选项:

 
完整配置过程如下:

 
3)安装 pcre
下载地址:
如果系统没有安装 pcre 的话我们还需要手动进行安装,其安装步骤:

 
2. 安装 apache
下载地址:
我下载的版本是 httpd-2.4.25.tar.gz
下载之后按照官方文档中的介绍进行安装即可。

 
启动时注意一点,需要使用-f 命令指明根据 /usr/local/apache2 下的 httpd.conf 配置文件进行启动。
部署 wsgi
wsgi 官网提供了非常详尽的文档来帮我们进行编译部署,我自己的部署命令如下:

 
编译后的文件将会拷贝到apache2/modules文件夹中,我们需要在其 httpd.conf 配置文件中添加这样就可以是 apache 服务器识别我们的 wsgi 应用了。
在这里我遇到的最大问题还是关于共享库的错误,在上面已经提供了解决方案。
配置数据库与静态文件
关于 Django 项目的创建和其各个文件的意义这里不再赘述,只介绍配置和遇到的坑以及解决方案。
1.配置数据库
一般我们是在本地开发项目,开发完成后将文件上传到 Linux 服务器。就配置文件来说比较简单,可以直接在服务端进行配置。我连接的是阿里云的数据库服务器。其配置如下:

 
另外,本人使用的是 Django1.10 版本,该版本其默认的数据库连接库是 MySQLdb。因为没有这个库,所以连接时会报错,这里我们使用 PyMySQL 进行替代。
1)安装 PyMySQL
注意这里下载下来时要检查版本,最新版是 0.7.10。如果安装了 0.5 等低版本,在连接时会报ImportError: cannot import name Thing2Literal错误。
2)修改 Django mysql 连接配置
安装完 PyMySQL 后就需要修改 Django 的配置文件来替换 MySQLdb 了。找到 /usr/local/python3/lib/python3.5/site-packages/django目录。不知道路径在哪可以直接运行下面的一小段程序查看:

 
进入 /django/db/backends/mysql 目录下修改 base.py和introspection.py 文件。将 MySQLdb 全部替换为 pymysql 即可。
2.管理静态文件
诸如 html/css/js 以及图片等静态文件,在开发时我们都是在对应模块下创建 static 目录进行存储的,在部署时需要首先进行静态文件的收集,并进行统一管理。
1) 修改项目配置文件
修改项目的 setting.py 文件中的静态管理路径:

 
2) 执行收集命令
在 Linux 上的项目根目录下执行命令:这样根据我们配置的路径,Django 会将我们的静态文件全部收集到根目录下的 static 文件夹中进行管理。
配置 Apache
上面关于项目的内容都配置完毕后就需要配置 Apache 服务器了,其实就是让 Apache 服务器找到我们的项目。上面我的服务器安装到了 /usr/local/apache2 目录下,进入该目录打开 conf/httpd.conf 进行配置。

 
另外还可以设置服务器相关的一些内容,其官方文档写得很详细,英文读起来也不难,这里不再赘述。配置完之后启动服务器就可以根据 ip 和端口进行访问了。
权限问题
当我们安装好 apache 服务器启动之后,通常可以顺利访问,但是有时候在部署完 Django 项目后再次进行访问时会发生 403 禁止访问的情形,这是由于文件的访问权限问题造成的,解决方法是使用 chmod 命令将项目的每个目录添加权限。

Linux-部署-Django的更多相关文章

  1. Linux部署Django:报错 nohup: ignoring input and appending output to ‘nohup.out’

    一.部署 Django 到远程 Linux 服务器 利用 xshell 通过 ssh 连接到 Linux服务器,常规的启动命令是 python3 manage.py runserver 但是,关闭 x ...

  2. linux ---部署django项目篇

    uWSGI + nginx+ django + virtualenv + supervisor发布web服务器 项目部署步骤 1.项目准备阶段 1.准备项目代码,从本地拷贝 2.将项目上传到linux ...

  3. linux部署django项目流程(全)

    1.python3和python2共存配置 流程在下面网址中 https://www.cnblogs.com/vinic-xxm/p/11358894.html 2.安装依赖包 yum install ...

  4. Linux 部署 Django 系统

    一:安装uwsgi pip3 install uwsgi 二:进入项目目录下,创建uwsgi.ini配置文件 [uwsgi] # 使用nginx连接时使用功能,上线时才使用socket,指定项目执行的 ...

  5. [部署开发环境]部署django的生成环境nginx+uwsgi+django

    #教程 # ubuntu部署django项目 # 部署准备 - ubuntu操作系统 -- vagrant虚拟 - Nginx服务器 -- 安装在ubuntu的web服务器 - uWSGI应用协议服务 ...

  6. Linux 下部署Django项目

    Linux 下部署Django项目   说明:本文所使用的环境为CentOS 6+Python2.7+Django1.11 安装Django.Nginx和uWSGI 1.确定已经安装了2.7版本的Py ...

  7. Linux(CentOS7)系统中部署Django web框架

    1. 概述 部署django和vue架在逻辑上可以分为web层与数据库层:web前端通过实现了WSGI协议的模块对python代码进行解析,而python代码中则通过特定于数据库的操作接口对数据库进行 ...

  8. linux中部署django项目

    通过Nginx部署Django(基于ubuntu) Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器 ...

  9. 【Linux学习笔记1】-centos6.9部署django

    一,centos6.9部署django ​ 部署套件:centos6.9+nginx+mysql+uwsgi+python3+django ​ 首先还是要明白这几个部分之间的关系(自己也是初学者,希望 ...

  10. linux上使用nginx、uwsgi部署django项目

    参考:CentOS7下部署Django项目详细操作步骤 注意事项: 在虚拟环境中操作,虚拟环境中安装nginx.uwsgi,虚拟环境外需安装uwsgi -- 临时关闭防火墙:systemctl sto ...

随机推荐

  1. Future模式的学习以及JDK内置Future模式的源码分析

    并发程序设计之Future模式 一).使用Future模式的原因 当某一段程序提交了一个请求,期待得到一个答复,但服务程序对这个请求的处理可能很慢,在单线程的环境中,调用函数是同步的,必须等到服务程序 ...

  2. 稀疏数组 python描述

    什么是稀疏矩阵? 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵. 作用: 在这种情况下,很多0值无疑是很浪费空间的,当我们要把数组存储在磁盘中 ...

  3. PHP创建对象的6种方式

    创建对象实例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...

  4. Golang 指针理解

    目录 0x00 指针地址和指针类型 0x01 从指针获取指针指向的值 0x02 使用指针修改值 0x03 返回函数中局部变量 0x04 使用 new() 创建指针 0x05 flag包的指针技术 0x ...

  5. day20191006假期作业收尾

    国庆作业:(轻重缓急,重点代码看懂理解了.每天重心就是代码,理解代码,理解,understand the code.花时间花功夫.只要功夫深,铁杵磨成针.) 一.使用DAO设计模式操作数据库CRUD( ...

  6. 记一次MySQL数据库导入错误

    昨天在转数据的时候,控制台报出了下面这个warning: Warning: Data truncated for column '控制距离' at row 1 字面上意思应该是:控制距离这一字段在第一 ...

  7. 【Android - 问题解决】之ScrollView嵌套ListView时总是自动滑动到ListView顶部的问题

    最近做了一个项目,里面有一个ScrollView嵌套ListView的布局. 做出来之后发现,进入这个界面之后,总是自动滑动到ListView的顶部,而ScrollView中位于ListView上面的 ...

  8. Ubuntu中git pull远程仓库时显示403错误

    # 报错内容 fatal: unable to access 'https://git.dev.tencent.com/chendongnan/sfedu_wx.git/': The requeste ...

  9. <算法基础><排序>三种高级排序——快速排序,堆排序,归并排序

    这三种排序算法的性能比较如下: 排序名称 时间复杂度(平均) 时间复杂度(最坏) 辅助空间 稳定性 快速排序 O(nlogn) O(n*n) O(nlogn) 不稳定 堆排序 O(nlogn) O(n ...

  10. mysql 忘记登录密码(修改root密码)

    1.以管理员身份打开cmd,键入net stop mysql,停止mysql 2.切换到mysql的安装目录下(例:S:\mysql\mysql-8.0.18-winx64\mysql-8.0.18- ...