最新消息:欢迎光临 魔力 • Python!大家可以点开导航菜单中的【学习目录】,这个目录类似图书目录,更加方便学习!

Django2:Web项目开发入门笔记(13)

Django教程 小楼一夜听春语 15644浏览 0评论

这一篇教程,我们一起来了解如何在Ubuntu系统中将Django2的Web项目部署到Apache服务器。

这里环境搭建的内容包括:

  • 操作系统:Ubuntu16.04:
  • Web服务器:Apache2.4
  • 解释器:Python3.6
  • 框架:Django2.0.3

在进行正式操作之前,我先做下总结。

就这样一个组合,整整虐待了我三天半的时间,大大小小的坑层出不穷。

不过,正是因为有坑才能学到本领。

想学会跑,就不能怕摔倒,而且还要有勇气爬起来。

在这三天半的时间里,我参照网上的各种相关资料,几乎没有一个行得通。

不是使用的Python或Django版本较低,就是缺乏实践验证的抄袭之作。

特别是有些错误,根本没有资料可查,全靠自己分析。

在接下来的教程中,我会对各种坑给出说明,希望能够为初学者以及开发人员提供帮助。

好了!接下来,进入正题。

首先,我们先来看一下使用的系统以及相关的软件程序。

在上图中,包含了我们要安装的所有系统支持程序和应用程序。

注意:橘黄色线段指出的是安装顺序,不按照顺序安装就会掉到坑里。

然后,我们分五个步骤来完成Django的部署。

  • 添加系统支持
  • 添加软件包支持
  • 创建配置文件
  • 使用虚拟环境
  • 权限设置

提示:我会边做边写,所以可以保证这篇教程的有效性!

这一篇教程,我们先完成前两个步骤。

一、添加系统支持

1、安装系统

关于如何安装系统,这里省略,大家可以参考网上的一些资料,基本上都能安装完成。

安装系统有几种方式:

  • 直接安装在电脑上。(应该很少有人这么干)
  • 使用VMware或者VirtualBox安装在虚拟机中。(这个不错)
  • 使用阿里云或者腾讯云的云主机(云服务器)。(有钱可以用这种,比如我,主要是重装系统省心省时间)

提示:腾讯云和阿里云都提供了面向个人用户的免费体验云主机(有时限)。

我用的是腾讯云服务器,安装完系统就能够进入命令行模式的界面了。

2、基本命令

既然是命令行模式,我们就要掌握一些基本命令:

  • sudo:系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。
  • sudo -i:获取root权限。
  • rm -f [文件路径]:删除文件指令。
  • rm -r [目录路径]:删除非空文件夹指令。
  • mv [文件路径] [目标路径]:移动文件命令。
  • cp [文件路径] [目标路径]:复制文件指令。
  • cd [目标路径]:进入目标文件夹指令。
  • cd /:返回根目录指令。(注意空格)
  • cd ..:进入上级目录。(注意空格)
  • cd -:返回最近一次打开的目录。(注意空格)

了解了这些基础的操作指令,对于我们完成任务已经够用了。

3、安装启动程序

安装命令:
sudo apt install xinit

命令中的apt是指高级软件包工具(Advanced Package Tool),本身集成了大量软件程序,能够快速帮助我们完成软件程序的安装。(也可以使用apt-get代替apt,但是不建议这样做,apt是友好版的apt-get,提供进度条和彩色字符等功能)

而安装的“Xinit”通常用在启动 X (图形架构)时执行窗口管理器 和其他程序。

第1个坑:这个如果不安装,后面的有些程序会安装失败。

4、安装图形界面

有些操作还是在图形界面中比较方便。

这里我选择安装的是Xubuntu-desktop。

这个桌面环境基于桌面环境Xfce,主要面向旧式电脑的用户和寻求更快捷的桌面环境的用户。

因为毕竟是服务器,图形界面会带来大量的资源消耗,没有必要使用比较华丽的界面。

另外,Ubuntu16.04集成了LightDM(桌面显示管理器),可以很好的支持Xubuntu-desktop,所以就省略了安装与之对应的桌面显示管理器XDM。

安装命令:
sudo apt-get install xubuntu-desktop

安装过程中会提示:Do you want to continue? [Y/n]

输入“y”并按下回车键继续安装程序。

提示:很多安装程序都会出现这个提示,照此操作就可以了,后文不再赘述。

等到命令行再次出现光标闪烁,安装过程就结束了。

5、安装远程登录

安装远程登录是想通过Windows的远程桌面连接工具连接云主机,方便进行一些图形界面下的操作,如果是本机或虚拟机中安装的Ubuntu系统可以略过此步骤。

第2个坑:这里最好不要用“apt”,会出现“Sub-process /usr/bin/dpkg returned an error code (1)”错误。

安装命令:
sudo apt-get install xrdp
sudo apt-get install vnc4server tightvncserver
完成安装之后,就可以打开Windows的远程桌面连接工具,输入云服务器的公网IP进行远程连接了。

第3个坑:如果远程登录输入密码后提示“xrdp_mm_process_login_response: login failed”,可以通过命令“sudo service xrdp restart”尝试重新启动xrdp来解决。

在打开的连接界面中,输入Ubuntu系统的用户名和密码,就进入到了云服务器主机的桌面中。

因为是第一次登录图形界面,会有一个提示,点击蓝色的按钮(使用默认配置)即可,另外一个按钮是创建一个空界面。

假如还有另外一个错误提示,不用管它,取消勾选后,点继续按钮即可。

图形界面支持中文,在桌面左上角所有应用程序【Applications】的设置【Settings】中,找到语言支持【Language Support】选项,此时会提示安装语言,点击安装按钮(Install),输入系统密码后,按回车键进行安装。安装后即可在设置界面中安装/卸载语言【Install/Remove Languages】,右侧列表中找到简体中文【Chinese(simplified)】后勾选,并点击应用【Apply】。

此时,又会提示输入系统密码,输入密码并生效按钮【Authenticate】后,开始应用过程,简体中文语言名称【汉语(中国)】就会出现在语言列表中,用鼠标指针点住名称,拖动到默认的英文【English】上方后松开,然后点击应用到系统【Apply System-Wide】。

最后,在所有应用程序【Applications】菜单中选择注销【Log Out】,再选择重启系统【Restart】就能够使用中文图形界面了。

当然,也可以使用命令行重启。

执行命令:
sudo reboot

6、更新高级软件包工具

提示:如果使用的云主机,接下来的操作建议在远程连接界面中使用命令行终端执行(桌面下方有命令行终端的图标)。

高级软件包工具包含了很多常用的软件程序,但是很多都已经不是新版本,或者有些我们需要的程序不在其中。

所以,我们要进行更新操作。

不过,我们后面再需要使用到的Python3.6-dev并不在已集成的程序中,所以我们需要添加软件更新源的地址。

执行命令:
sudo vi /etc/apt/sources.list

此时会在命令行终端通过vi编辑器打开文件“sources.list”,我们按“i”键(注意别按多了)进入编辑模式,在文件的开始我们添加一行软件源的地址:deb http://cz.archive.ubuntu.com/ubuntu bionic main

第4个坑:添加这个软件源地址,是因为这个软件源中包含我们需要的软件包“python3.6-dev”,系统中没有集成,自带软件源中也没有,所以要添加这个软件源并同步更新高级软件包工具。

添加完毕后,按“ESC”键退出编辑模式,然后输入“:wq”(屏幕左下角会出现输入的内容)保存退出。

如果编辑错了,或者不想保留编辑的内容,想要退出的话可以输入“:q!”强制退出。

如果只是查看即关闭的话,命令是“:q”。

完成了软件更新源的设置,我们升级高级软件包工具。

第5个坑:这里最好不要用“apt”,会出现一个Python3-aptdaemon不完整程序包的错误,还是使用“apt-get”比较稳妥。

先同步一下更新源。

执行命令:
sudo apt-get update

然后进行程序更新。

执行命令:
sudo apt-get upgrade

提示:安装过程漫长,但不要离开,因为有些选项提示需要输入“y”或者“n”或者提示中的其他字母或数字。

第6个坑:在执行上方命令过程中,如果意外退出命令行终端,可能会导致执行其它apt执行命令无效,提示被锁定以及其他进程正在使用。

解决办法:

  • 查询进程:sudo ps -A | grep apt
  • 杀死进程:sudo kill [进程数字编号]
  • 继续执行:sudo dpkg --configure -a

到这里需要的系统支持就操作完成了。

二、添加软件包支持

1、安装依赖文件
sudo apt install openssl
sudo apt install libssl.dev
sudo apt install zlib*
第7个坑:如果不安装“openssl”和“libssl.dev”,在线安装一些第三方库(例如Django)时,“https://”开头的下载地址无法连接,提示“SSL”相关的错误。

第8个坑:如果不安装“zlib*”,在安装之后的一些软件包时,软件包中的一些文件无法解压释放,导致安装失败。

2、安装Sqlite3和依赖

第9个坑:如果不先安装Sqlite3,而是先安装Python3.6,会导致找不到“_sqlite3”模块的错误。

安装命令:
sudo apt install sqlite3
sudo apt install libsqlite3-dev
第10个坑:如果不安装Sqlite3的依赖包“libsqlite3-dev”,在Python代码中导入“sqlite3”模块,会出现错误“ModuleNotFoundError: No module named ‘_sqlite3’”。特别注意软件包名称是“libsqlite3-dev”不是“libsqlite-dev”,后者也能安装,但不支持Python3.6。

3、安装Apache2.4和依赖

安装命令:
sudo apt install apache2
sudo apt install apache2-dev
第11个坑:如果不安装Apache2的依赖包“apache2-dev”,后面安装“mod_wsgi”时会出现“apxs: not found”的错误。

4、安装Python3.6和依赖

首先,下载Python3.6的安装包(这里是Python-3.6.5rc1.tgz),这里是放在/home/ubuntu/Downloads/目录中。

如果是远程连接云主机,可以在本地下载后,使用软件WinSCP上传到云主机的/home/ubuntu/Downloads/目录下。

如果是在图形界面中,可以在安装包上点击右键,选择解压缩到当前文件夹(Extract Here)。

也使用命令行。

执行命令:
cd /home/ubuntu/Downloads/
sudo tar xfz Python-3.6.5rc1.tgz
这里使用xfz命令,因为使用-xvzf命令释放的文件夹需要root权限才可以更改或者删除。

释放完成后,进入解压后的文件夹。

执行命令:
cd /home/ubuntu/Downloads/Python-3.6.5rc1
然后,就能进行安装了。

首先,进行安装配置。

执行命令:
sudo ./configure --enable-shared --with-ssl=openssl
第12个坑:此命令后面的参数一定要带上,如果不带“--enable-shared”参数,将导致“mod_wsgi”安装失败,如果不带“--with-ssl=openssl”,会导致使用pip命令在线安装下载地址为“https://”开头的第三方库时,无法连接的错误(SSL错误)。

然后,创建安装文件。

执行命令:
sudo make

第13个坑:如果之前已经进行过安装过程,这里可能会提示错误,可以通过执行“sudo make clean”先清空之前的安装残留,再执行“sudo make”命令。

最后,开始执行安装。

执行命令:
sudo make install

接下来,安装依赖。

执行命令:
sudo apt install python3.6-dev
第14个坑:如果没有安装这个依赖,下一步安装“mod_wdgi”,会出现“src/server/wsgi_python.h:24:20: fatal error: Python.h: No such file or directory”的错误。

5、安装mod_wdgi建立python与apache的连接

第15个坑:不能用pip命令安装mod_wdgi,原因见下一个坑。

下载安装包mod_wsgi-4.6.2.tar.gz,这个版本支持Python3.6,解压后进入文件夹。

执行命令:
cd /home/ubuntu/Downloads/mod_wsgi-4.6.2
然后,进行安装配置。

执行命令:
sudo ./configure --with-python=python3.6
第16个坑:如果不加参数“--with-python=python3.6”,后果就是wsgi会连接系统默认的python2.7,导致错误,错误提示中有“include python2.7”的内容。这是最大的一个坑,网上很难查到资料,我是尝试使用“./configure --with-python3.6”产生的帮助提示中找到的答案。

接下来,创建安装文件并进行安装。

执行命令:
sudo make
sudo make install
也可以写成:
sudo make && sudo make install
第17个坑:这样写有时候会执行会出错,特别注意第二个“sudo”别漏写。

6、安装Django2

可以使用pip命令安装。

第18个坑:不能直接执行pip命令,因为系统中自带Python2.7和Python3.5分别占用了“python”和“python3”这两个命令,如果想给Python3.6安装Django(也只有Python3.6才能装Django2),必须先进入Python3.6的“site-packages”目录。

执行命令:
cd /usr/local/lib/python3.6/site-packages/
pip install django
在线安装有些复杂,其实我们也可以通过安装包进行安装。

下载安装包Django-2.0.3.tar.gz,解压后进入文件夹。

执行命令:
cd /home/ubuntu/Downloads/Django-2.0.3
sudo python3.6 setup.py install
第19个坑:pytz是Django的依赖,在执行Django的安装时也会自动在线安装,但是有可能导致安装停止。可以参考在线安装的方法,先安装pytz。

再次:为Python3.6安装第三方库,一定要先进入“/usr/local/lib/python3.6/site-packages/”目录,再执行pip安装命令。

最后,我们做一下测试,看一下是否一切正常。

执行命令:
python3.6
>>>import django
>>>import sqlite3

如果没有任何错误出现,我们就完成了所需软件包的安装。

转载请注明:魔力Python » Django2:Web项目开发入门笔记(13)

头像
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网站 (可选)