内容简介:本文来自于州的先生在线教程《七天实战入门Django》第七天的课程,更多原创在线教程点击此处进行学习:州的先生在线教程在本地机器上完成Django项目的开发之后,我们就需要将其部署到服务器上。今天我们就来学习一下如何将 Django 网站部署在 Ubuntu 服务器上。
本文来自于州的先生在线教程《七天实战入门Django》第七天的课程,更多原创在线教程点击此处进行学习:州的先生在线教程
在本地机器上完成Django项目的开发之后,我们就需要将其部署到服务器上。
今天我们就来学习一下如何将 Django 网站部署在 Ubuntu 服务器上。
考虑到很多人没有云服务或者是本地服务器,在此我们在本地计算机通过 VirtualBox 安装 Ubuntu 虚拟机来模拟实现一个远程服务器。
文章目录
- 一、安装 Ubuntu 虚拟机
- 二、安装基本软件和服务
- 安装 Ubuntu 的 SSH 服务
- 使用 Xshell 连接虚拟机
- 安装 Python 和 Django
- 将项目文件上传到虚拟机
- 四、使用进程守护管理工具——Supervisor
- 生成 Supervisord 配置文件
- 添加程序信息到 Supervisord 配置文件中
一、安装 Ubuntu 虚拟机
将 VirtualBox 安装好之后,从 163 的开源镜像站上下载 Ubuntu 16.04 的服务器版本 iOS 镜像文件,如下图所示:
下载完成之后,打开 VirtualBox 软件,新建一个虚拟机,如下图所示:
新建完成之后,在虚拟机的设置中添加下载好的 iOS 镜像文件,如下图所示:
然后启动虚拟机,如下图所示:
选择第一项进行 Ubuntu 的安装,接下来根据提示选择和等待安装完成,如下图所示:
设置主机名,如下图所示:
设置用户名,如下图所示:
设置用户密码,如下图所示:
等待安装完成,如下图所示:
安装完成,如下图所示:
重启之后,我们的 Ubuntu 就启动了,如下图所示:
输入用户名和密码就进入了系统界面,如下图所示:
二、安装基本软件和服务
为了便于本地与虚拟机之间的通信,我们使用 Xshell 和 Xftp 软件作为远程连接 Ubuntu 虚拟机的工具。
安装 Xshell 和 Xftp
在官网下载并按照好 Xshell 和 Xftp。
安装 Ubuntu 的 SSH 服务
在启动的虚拟机终端下,使用 apt-get 安装 SSH 服务:
sudo apt-get install openssh-server
然后启动 SSH 服务:
sudo /etc/init.d/ssh start
这样,我们的 Ubuntu 虚拟主机就能够通过 SSH 供其他计算机进行访问了。
查看一下虚拟机的 IP 地址:
ifconfig
结果显示,如下图所示:
我们就可以使用这个 IP 地址通过 Xshell 来连接 Ubuntu 虚拟机。
使用 Xshell 连接虚拟机
打开 Xshell 软件,新建一个连接,选择 SSH 协议,主机填写为虚拟机的 IP 地址,端口号填写为 22,如下图所示:
然后切换到用户身份验证栏,填写虚拟机的用户名和密码,如下图所示:
确认之后,单击连接,就可以通过 SSH 连接上虚拟机,如下图所示:
同时可以单击菜单栏的 Xftp 按钮进入到文件传输界面,如下图所示:
安装 Python 和 Django
在 Ubuntu 16 这个版本中,默认集成了 Python 3.5 的环境,在终端输入“python3”,可以进入到 Python 3 的 Shell 中,如下图所示:
但是我们发现,Python 下便捷的包管理工具 pip 并没有自带安装,如下图所示:
所以我们使用 apt-get 对其进行安装,以方便安装其他的第三方模块:
sudo apt-get install python-pip3
在安装好 Python 的包管理工具——pip 3 之后,我们就可以快速地按照 Django 模块了:
pip3 install django
接着安装用于处理图片验证码的 Pillow 模块:
pip3 install Pillow
安装好两个模块之后,就可以来处理我们的项目文件了。
将项目文件上传到虚拟机
在上一小节介绍了可以通过 Xftp 进入到文件传输界面进行文件的上传和下载,在这里,我们就借助这个功能将项目文件上传全部到虚拟机上,以进行测试和部署,如下图所示:
在项目文件全部上传到虚拟机之后,我们进入到项目目录,运行 Django 的测试服务器,看看网站运行是否正常:
python3 manage.py runserver 0.0.0.0:8000
启动之后,我们在本机浏览器访问虚拟机的地址,最后出现的网页和在本地计算机运行的网页是一样的,如下图所示:
这说明 Django 项目在 Ubuntu 上也是测试运行成功的。
如果出现静态文件 404
如果项目运行之后,很多图片和视频不显示,打开发现这个文件都报 404 的错误,那么可能是文件名编码导致的。
在 Windows 下,中文文件名基本上都是 gb2312 编码格式,而 Ubuntu 上默认为 UTF-8 编码格式,所以如果遇到这种情况,我们需要将文件名的编码转换为 UTF-8:
首先,安装 Convmv 工具:
sudo apt-get install convmv
安装完成之后,运行如下命令:
convmv -f GB2312 -t UTF-8 -r --notest /home/ubuntu/videolearn/
其中,/home/ubuntu/videolearn/ 是 Django 项目的文件夹路径,按照自己的项目位置进行改动。
这样运行之后,就不会出现中文文件报 404 错误了。
三、安装 Uwsgi
在上一节 Django 网站在 Ubuntu 虚拟机上测试运行成功,但是我们却不可能使用 Django 自带的测试服务器来运行我们的网站,因为其性能实在是太差了。
在此选用 Uwsgi 作为 Django 项目运行的服务器。
安装 Uwsgi
首先,使用 pip 命令安装 Uwsgi:
pip3 install uwsgi
结果如下图所示
配置 Uwsgi 文件
Uwsgi 可以通过命令行进行启动 Web 应用也可以通过调用配置文件来启动 Web 应用,为了便于部署,我们使用配置文件。
首先我们在 videolearn 目录下新建一个名为 video_uwsgi.ini
的文件,如下图所示:
然后打开文件,将一下代码写入进去:
# video_uwsgi.ini file [uwsgi] # Django-related settings http = :8001 # the base directory (full path) chdir = /home/ubuntu/videolearn # Django s wsgi file module = videolearn.wsgi master = true processes = 1 threads = 2 python-autoreload = 1
在上述代码中,我们通过:
- socket 参数指定了项目运行在 8000 端口上;
- chdir 参数指定了项目的位置;
- module 参数指定了项目的 wsgi 服务接口文件;
- processes 参数指定了为项目分配一个进程;
- threads 参数指定了为项目分配两个线程;
- python-autoreload 参数指定项目文件有改动时自动重启。
然后我们就可以使用 Uwsgi 命令来启动 Django 项目了,在终端运行以下代码:
uwsgi --ini /home/ubuntu/videolearn/video_uwsgi.ini
结果如下图所示:
Uwsgi 启动 Django 项目后,打开 http://192.168.56.102:8001/,也是访问正常的,如下图所示:
四、使用进程守护管理工具——Supervisor
在上一节中,使用 Uwsgi 命令直接通过 Uwsgi 配置文件来运行我们的网站。这在测试环节中是可行的,但是在正式的部署环节中却不能这样做,一方面之前的命令是显式地通过控制台来运行这个 Uwsgi 进程,一旦退出 Uwsgi 的控制台,相应的网站也就关闭了;另一方面如果隐式地在后台运行 Uwsgi,一旦我们的服务出现异常,导致网站启动或运行失败,我们也不能方便的对网站进行关闭或重启。
因此,需要一个能够守护 Uwsgi 进程的工具,用来管理 Uwsgi 进程,进而管理我们的网站运行。
在这里,我们使用 Python 下著名的 Linux/Unix 进程守护工具——Supervisor 来实现这一需求。
安装 Supervisor
因为 Supervisor 只支持 Python 2,而我们安装的 Ubuntu 16 中没有默认安装 Python 2 ,所以首先在 Ubuntu 中安装 Python 2 :
sudo apt-get install python-minimal
接着安装 Python 2 的 pip 工具:
sudo apt-get install python-pip
最后,使用 pip 安装 Supervisor:
sudo pip install supervisor
生成 Supervisord 配置文件
Supervisor 安装完成之后,默认是没有配置文件的,但是我们也不需要向 Uwsgi 一样自己创建配置文件。使用 echo_supervisord_conf
命令就可以生成一个 Supervisor 的配置文件:
echo_supervisord_conf > /home/ubuntu/supervisord.conf
在此,我在 /home/ubuntu/ 路径下生成了一个名为 supervisord.conf 的配置文件。
添加程序信息到 Supervisord 配置文件中
Supervisor 配置文件中必须包含一个或多个 program 的配置信息,以便 Supervisor 知道应该启动和控制哪些程序,但是默认生成的 Supervisor 配置文件中并没有 program 的内容,我们需要按需自行添加。
打开 supervisord.conf 文件,在文件的最后添加以下语句并保存:
[program:video] command=uwsgi --ini /home/ubuntu/videolearn/video_uwsgi.ini directory=/home/ubuntu/videolearn startsecs=0 stopwaitsecs=0 autostart=true autorestart=true
其中,
- 第一行表示设置一个名为 video 的 program,可以通过这个名称来控制这个 program;
- 第二行表示程序运行的命令,在这里我们设置的是 Uwsgi 通过 Uwsgi 配置文件启动 Django 项目的命令;
- 第三行表示程序的目录;
- 第四行表示程序在启动后需要保持的秒数,设置为 0 表示不需要保持;
- 第五行表示在指示程序停止运行后,需要等待的秒数,设置为 0 表示不需要等待;
- 第六行表示当 Supervisord 启动时,该程序自动启动;
- 第七行表示当 Supervisord 为运行状态时,程序自动重启。
运行 Supervisor
在编写好 supervisord.cof 配置文件后,我们就可以通过 Supervisor 来管理通过 Uwsgi 启动的 Django 项目了。
首先,通过 supervisord 命令启动 Supervisor:
sudo supervisord
出现下面的提示,表示启动成功,如下图所示:
然后再通过 supervisorctl 调用配置文件启动程序:
sudo supervisorctl -c /home/ubuntu/supervisord.conf
出现如下图所示内容,表示程序运行成功:
我们打开网站,也是正常显示状态。
同时,还有更多的命令选项 supervisorctl 供我们使用,比如:
查看程序状态:
sudo supervisorctl -c /home/ubuntu/supervisord.conf status
其会显示 supervisord.conf 中所有程序的状态,如下图所示:
重启程序
sudo supervisorctl -c /home/ubuntu/supervisord.conf restart video
使用 restart 选项后接程序名,也可以使用 restart all 重启所有程序,如下图所示:
停止程序:
sudo supervisorctl -c /home/ubuntu/supervisord.conf stop video
使用 stop 后接程序名,也可以使用 stop all 停止所有程序,如下图所示:
五、使用 Nginx
如果我们的机器上只有一个服务,那么到上一节止,Django 项目的部署就完成了。
但是如果我们的机器上部署了多个 Web 服务,每个 Web 服务都需要使用 80 端口;或者我们的 Web 服务需要进行负载均衡等功能的配置,那么就还需要使用到反向代理服务器 Nginx。
在此,我们使用 Nginx 的端口代理转发功能,来简单介绍 Nginx 的使用。
安装 Nginx
首先,使用 apt 工具在 Ubuntu 虚拟机中安装上 Nginx:
sudo apt-get install nginx
启动 Nginx
Nginx 安装完成之后,就可以通过 service 命令进行启动了:
sudo service nginx start
如果启动成功,不会有任何提示,这时候,我们可以在浏览器输入虚拟机的 IP 地址进行访问,可以看到默认的 Nginx 欢迎页面,如下图所示:
这说明 Nginx 运行成功了。
创建 uwsgi_params
在设置 Nginx 之前,我们先在 Django 项目的 manage.py 同级目录下创建一个名为 uwsgi_params
文件,文件的内容为:
uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param REQUEST_SCHEME $scheme; uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;
这个文件的作用在于 Nginx 可以匹配 uwsgi_params
文件中的变量名,将接受到的相关请求交由 Uwsgi 来处理。
创建站点的 Nginx 配置文件
为了便利管理,我们不在 Nginx 默认的站点配置文件中添加站点的配置信息,而是在 manage.py 文件同级目录下新建一个名为 video_nginx.conf
的 Nginx 配置文件,将以下配置信息写入文件中:
server { listen 80 ; server_name localhost; charset UTF-8; access_log /var/log/nginx/myweb_access.log; error_log /var/log/nginx/myweb_error.log; client_max_body_size 75M; location / { include /home/ubuntu/videolearn/uwsgi_params; uwsgi_pass 127.0.0.1:8001; uwsgi_read_timeout 60; } location /static { expires 30d; autoindex on; add_header Cache-Control private; alias /home/ubuntu/videolearn/static; } location /media { alias /home/ubuntu/videolearn/media; } }
将站点 Nginx 配置文件链接到 Nginx 服务中
video_nginx.conf
文件编辑好之后,我们将这个文件通过软链接的形式添加到 Nginx 的 sites-enables 目录下,在命令行中运行一下命令:
sudo ln -s /home/ubuntu/videolearn/video_nginx.conf /etc/nginx/sites-enabled/video_nginx.conf
如此一来,Nginx 的启用的站点就有两个了:默认的欢迎页面和 Django 站点。
我们将默认的欢迎页面删除,进入到 Nginx 的 sites-enabled 路径下:
cd /etc/nginx/sites-enabled/
然后使用 rm 命令删除默认站点:
sudo rm -f default
修改 Uwsgi 配置文件
之前为了方便运行,我们的 Uwsgi 配置文件中是直接使用 Http 的方式指定端口进行运行的,但是如果使用 Nginx 进行代理转发,就得修改一下。将 video_uwsgi.ini
文件中的:
http = :8001
修改为:
socket = :8001
完成这一步,再重启 Supervisor 中的 Video 应用和 Nginx 服务:
sudo supervisorctl -c /home/ubuntu/supervisord.conf restart video
sudo service nginx restart
刷新刚刚的页面,可以发现页面呈现的就是我们的 Django 网站了,如下图所示:
这样,我们的网站就完成了 Uwsgi + Nginx 的部署,并借助supervisor实现了进程守护。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Zabbix实战部署
- R语言实战之模型部署
- 「实战篇」开源项目docker化运维部署-后端java部署(七)
- jenkins自动化项目部署实战
- 「实战篇」开源项目docker化运维部署-借助dockerSwarm搭建集群部署(九)
- Hadoop集群部署实战(cdh发行版)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高效前端:Web高效编程与优化实践
李银城 著 / 机械工业出版社 / 2018-3-15 / 89.00元
这不是一本单纯讲解前端编程技巧的书,而是一本注重思想提升和内功修炼的书。 全书以问题为导向,精选了前端开发中的34个疑难问题,从分析问题的原因入手,逐步给出解决方案,并分析各种方案的优劣,最后针对每个问题总结出高效编程的最佳实践和各种性能优化的方法。 全书共7章,内容从逻辑上大致可以分为两大类: 第一类,偏向实践,围绕HTML、CSS、JavaScript等传统前端技术,以及PW......一起来看看 《高效前端:Web高效编程与优化实践》 这本书的介绍吧!