红联Linux门户
Linux帮助

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

发布时间:2017-05-12 11:03:37来源:linux网站作者:艾希射日
最近学习 Django 框架开发,将项目部署到 Linux 服务器上时遇到了很多坑,在此整理一下以作备忘,同时希望对需要的同学有所帮助。
从 0 开始,在 Linux 上部署 Django 项目共有如下几步:
安装 Python3.5
安装 Apache2.4
安装 wsgi
配置数据库和静态文件
配置 Apache
处理权限问题
下面一步步来进行详细介绍。
 
一.安装 Python3.5
1.安装编译环境
yum groupinstall 'Development Tools'
yum install zlib-devel bzip2-devel  openssl-devel ncurses-devel
2.下载编译 Python3.5 源码包
wget  https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tar.xz
tar Jxvf  Python-3.5.0.tar.xz
cd Python-3.5.0
./configure --prefix=/usr/local/python3 --enable-shared LDFLAGS="-Wl,-rpath=/usr/local/python3"
make && make install
echo 'export PATH=$PATH:/usr/local/python3/bin' >> ~/.bashrc
source ~/.bashrc
prefix 指明了 Python3.5 的安装目录,后面的 –enable-shared LDFLAGS=”-Wl,-rpath=/usr/local/python3” 选项保证了可以正常使用共享库。否则在编译安装后可能会出现以下错误:
python3.5: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory
我自己在完成后执行 Python3.5 的命令时就遇到了。查找了很过解决方案上面在编译时进行 LDFLAGS 配置应该是最简洁有效的方式。另外这个错误在使用 wsgi 时也可能会遇到,其官方文档还特地针对该问题作了介绍。其原因就是无法找到 Python 的共享链接库。解决方法是在找到共享库文件 /etc/ld.so.conf ,这个文件记录了编译时使用的动态链接库的路径,一般默认配置了 /lib 和 /usr/lib ,这里我们需要将安装的 Python3.5 的共享库路径添加进去:
/usr/local/python3/lib
之后运行 ldconfig 使配置生效就可以正常使用了。
安装完 Python3.5 后可以使用 pip 安装 Django 等需要的库。
 
二.安装 Apache 服务器
1.安装 apr apr-util pcre
安装 apr
下载地址: http://apr.apache.org/download.cgi
首先下载 apr,我这里下载的版本是 apr-1.5.2.tar.gz,下载完成后解压编译
tar zxvf apr-1.5.2.tar.gz  
./configure                     
make                         
make install
按照上面步骤执行应该基本没有问题。
安装 apr-util
apr-util 与 pcre 的安装步骤与上面基本相同相同,但是需要配置 apr 选项,如果不进行任何设置
在检测编译选项时会报如下错误,提示我们需要配置 apr 选项
./configure
checking build system type... x86_64-apple-darwin16.1.0
checking host system type... x86_64-apple-darwin16.1.0
checking target system type... x86_64-apple-darwin16.1.0
checking for a BSD-compatible install... /usr/bin/install -c
checking for working mkdir -p... yes
APR-util Version: 1.5.4
...
Applying apr-util hints file rules for x86_64-apple-darwin16.1.0
checking for APR... no
configure: error: APR could not be located. Please use the --with-apr option.
完整配置过程如下:
tar zxvf apr-util-1.5.4.tar.gz                       
./configure --with-apr=/usr/local/apr     
make                                                 
sudo make install
安装 pcre
下载地址: http://pcre.org/
如果系统没有安装 pcre 的话我们还需要手动进行安装,其安装步骤
tar zxvf pcre-8.40.tar.gz   
./configure                      
make                           
make install
2.安装 apache
下载地址:http://httpd.apache.org/download.cgi
我下载的版本是 httpd-2.4.25.tar.gz
下载之后安装官方文档中的介绍进行安装即可
tar xvf  httpd-2.4.25.tar.gz
cd httpd-2.4.25
./configure --prefix=PREFIX  # 这里prefix 指定的是安装路径,默认是 /usr/local/apache2
make
make install
Customize    $ vi PREFIX/conf/httpd.conf  # 自定义配置文件,我的路径是 /usr/local/apache2/conf/httpd.conf
Test    $ PREFIX/bin/apachectl -k start  # 启动
启动时注意一点,需要使用 -f 命令指明根据 /usr/local/apache2 下的 httpd.conf 配置文件进行启动。
 
三.部署 wsgi
wsgi 官网提供了非常详尽的文档来帮我我们进行编译部署,我自己的部署命令如下:
tar xvfz mod_wsgi-4.5.15.tar.gz
./configure --with-apxs=/usr/local/apache2/bin/apxs --with-python=/usr/local/python3/bin/python3.5
make && make install
编译后的文件将会拷贝到apache2/modules文件夹中,我们需要在其 httpd.conf 配置文件中添加
LoadModule wsgi_module modules/mod_wsgi.so
这样就可以是 apache 服务器识别我们的 wsgi 应用了。
在这里我遇到的最大问题还是关于共享库的错误,在上面已经提供了解决方案。
 
四.配置数据库与静态文件
关于 Django 项目的创建和其各个文件的意义这里不再赘述,只介绍配置和遇到的坑以及解决方案。
1.配置数据库
一般我们是在本地开发项目,开发完成后将文件上传到 Linux 服务器。就配置文件而已比较简单可以直接在服务端进行配置。我连接的是阿里云的数据库服务器。其配置如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'my_db',
'USER': 'root',
'PASSWORD': 'rootroot,
'HOST':'abcdefg.mysql.rds.aliyuncs.com',
'PORT':'3306'
}
}
另外,本人使用的是 Django1.10 版本,该版本其默认的数据库连接库是 MySQLdb。因为没有这个库因此连接时会报错,这里我们使用 PyMySQL 进行替代。
安装 PyMySQL
pip3.5 install PyMySQL
注意这里下载下来时要检查版本,最新版是 0.7.10。 如果安装了 0.5 等低版本在连接时会报 ImportError: cannot import name Thing2Literal 错误。
修改 Django mysql 连接配置
安装完 PyMySQL 后就需要修改 Django 的配置文件来替换 MySQLdb 了。找到 /usr/local/python3/lib/python3.5/site-packages/django 目录。不知道路径在哪可以直接运行下面的一小段程序查看即可:
[root@61fhwZ python3.5]# python3.5
Python 3.5.0 (default, Mar 31 2017, 10:41:14)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.__path__
['/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 文件中的静态管理路径:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
2].执行收集命令
在 Linux 上的项目根目录下执行命令:
python3.5 manage.py collectstatic
这样根据我们配置的路径,Django 会将我们的静态文件全部收集到根目录下的 static 文件夹中进行管理
 
五.配置 Apache
上面关于项目的内容都配置完毕后就需要配置 Apache 服务器了,其实就是让 Apache 服务器找到我们的项目。
上面我的服务器安装到了 /usr/local/apache2 目录下,进入该目录打开 conf/httpd.conf 进行配置。
# 使 apache 可以找到静态文件目录, 设置 Require all granted 进行授权访问
Alias /static/ /home/mycount/stream/mysite/static/
<Directory /home/mycount/stream/mysite/static >
Require all granted
</Directory>
# 使 apache 可以找到我们的项目和 wsgi 文件
WSGIScriptAlias / /home/mycount/stream/mysite/mysite/wsgi.py
WSGIPythonPath /home/mycount/stream/mysite/mysite
<Directory /home/mycount/stream/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
另外还可以设置服务器相关的一些内容,其官方文档写的很详细,英文读起来也不难,这里不再赘述
Listen 8089 # 指定 apache 端口
配置完之后启动服务器就可以根据 ip 和端口进行访问了。
apachectl -f /usr/local/apache2/conf/httpd.conf
 
六.权限问题
当我们安装好 apache 服务器启动之后通常可以顺利访问,但是有时候在部署完 Django 项目后再次进行访问时会发生 403 禁止访问的情形,这是由于文件的访问权限问题造成的,解决方法是使用 chmod 命令将项目的每个目录添加权限
chmod 755 /home/myaccount/stream
chmod 755 /home/myaccount/stream/mysite
 
以上就是整个 Django 项目的配置过程,简单来说遇到的最头疼的坑是: wsgi 共享链接库错误、Django 数据库链接问题、访问权限问题。文中都给出了解决方案,希望对需要的同学有所帮助。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/30726.html