如何在FreeBSD10.1上使用Apache、mod wsgi和MySQL运行Django站点

来自菜鸟教程
跳转至:导航、​搜索

介绍

本文向您展示如何使用流行的 Python 框架 Django 部署 Web 应用程序。 使用流行的 Web 框架进行开发的美妙之处在于,已经为您完成了大量重复的工作,因此您可以专注于构建您的网站。

无论您是否是开发人员,很高兴知道您在 Droplet 上运行的核心已经过大型开源社区的审查,并且应该不太容易受到大型安全漏洞的影响。

本质上并不简单的一件事是知道如何在您自己的开发或测试环境之外启动和运行这些 Web 框架。 在本文中,我们将向您展示如何做到这一点,使用在 FreeBSD 10.1 之上运行的标准 Apache、mod_wsgi 和 MySQL 堆栈。

目标

  • 为您的 Django 站点安装和配置 Python 虚拟环境
  • 创建和配置示例 Django 站点以进行测试
  • 配置简单安全的 MySQL 服务器
  • 配置一个简单的 Apache 虚拟主机,为您的 Django 站点提供服务
  • 测试新创建的站点是否正常工作

先决条件

在开始本指南之前,您需要以下内容:

  • FreeBSD 10.1 Droplet
  • 按照此 tutorial 访问您的 root 帐户或具有 sudo 权限的帐户
  • 关于如何从命令行编辑文本文件的实用知识
  • Bash shell 环境,因为我们将在本教程后面使用 Virtualenv。 按照 如何开始使用 FreeBSD 10.1 教程的 更改默认 Shell 部分中的说明进行操作。 您可能需要注销并重新登录才能为您的 freebsd 用户获取 Bash shell

第 1 步 — 安装和配置 Python 虚拟环境

首先要做的事; 确保您当前的软件包是最新的。

sudo pkg update && sudo pkg upgrade -y

现在通过运行以下命令并对结果提示说“是”来安装您需要的所有软件包。 您会注意到安装的内容远不止我们键入的内容,因为 pkg 系统会计算并选择所有正确的依赖项。

sudo pkg install bash ap24-mod_wsgi3 py27-virtualenv mysql56-server

您将很快使用的 virtualenv 命令不能很好地与 FreeBSD 中的默认用户 tcsh shell 配合使用。 我们需要 bash 代替。 如果您来自 Linux 环境,您会感到宾至如归。 如果您尚未在先决条件中执行此操作,请立即按照 此处 的说明进行操作。

你现在正在运行 Bash shell 吗? 记得注销并重新登录。 伟大的!

现在让我们开始我们的 Python 环境。

为了便于查找,请通过发出此命令为您的站点创建一个目录。

sudo mkdir -p /www/data/www.example.com

授予您的用户帐户在新项目目录中工作的权限。 命令的 whoami 部分会自动填写您当前的用户名。

sudo chown -R `whoami` /www/data/www.example.com

切换到新创建的目录。

cd /www/data/www.example.com

使用每个站点或每个应用程序的虚拟环境允许自定义您安装的 Python 包和版本,而不是在系统范围级别上安装东西。

现在使用 virtualenv 实用程序创建 python 虚拟环境。

virtualenv venv

激活该环境以确保您在该环境中而不是在系统范围级别安装 Django 站点的要求。

source venv/bin/activate

当您看到以 (venv) 开头的命令提示符时,您将知道您处于正确的环境中。

如果一切正常,请确保 Python 的工具是最新的以完成此步骤。

pip install -U setuptools pip

第 2 步 - 创建和配置示例 Django 站点

现在您可以创建一个 Django 站点的起点。 您将首先安装运行该站点所需的 python 要求。 确保您仍在 /www/data/www.example.com 目录和虚拟环境中。

pip install django mysql-python

安装 Django 和 MySQL 对 Python 的支持后,是时候使用 Django 的 django-admin 实用程序创建项目布局了。

django-admin.py startproject mysite .

使用您喜欢的编辑器,打开 mysite/settings.py 文件。

vi /www/data/www.example.com/mysite/settings.py

DATABASES 部分更改为如下所示。 确保将 password 替换为更安全的内容。

/www/data/www.example.com/mysite/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite',
        'USER': 'mysite',
        'PASSWORD': 'password',
        'HOST': '/tmp/mysql.sock',
    }

保存您的更改。

第 3 步 — 配置简单且安全的 MySQL 服务器

您已经安装了 MySQL,所以现在只需要配置它。

首先,有点家务。 打开 /etc/rc.conf 文件进行编辑。

sudo vi /etc/rc.conf

将这两行添加到文件的底部。 这确保 MySQL 和 Apache 将在服务器启动时启动。

/etc/rc.conf

mysql_enable="YES"
apache24_enable="YES"

我们还没有配置 Apache,但是现在添加这两行更容易,这样您以后就不会忘记。

启动 MySQL 服务器实例。

sudo service mysql-server start

运行此命令以保护您的数据库服务器。

mysql_secure_installation

阅读所有提示(根据您自己的知识),并回答 Y 除了密码选择。 对于密码提示,请将 root MySQL 密码设置为安全的。

使用您刚刚设置的密码登录到您的新的且相当安全的 MySQL 实例。

mysql -u root -p

执行此命令以创建示例站点数据库,名为 mysite

create database mysite character set utf8;

现在使用此命令创建 mysite 数据库用户并授予它对您刚刚创建的数据库的权限。 确保 password 与您之前在 settings.py 文件中设置的内容相匹配。 实际上,您也可以根据需要更改数据库名称和用户名; 只需确保您创建的数据库和用户与 Python 配置文件中的设置相匹配。

grant all privileges on mysite.* to 'mysite'@'localhost' identified by 'password';

如果你没有看到任何错误,你可以像这样退出 MySQL shell:

quit

现在数据库已准备就绪,您将使用 Django manage.py 实用程序使用示例站点的初始数据填充它。 同样,这必须从站点的目录 /www/data/www.example.com 中完成。

./manage.py migrate

(可选)第 4 步 — 测试新的 Django 应用程序

在我们继续之前,让我们确保示例 Django 站点处于正常工作状态。

启动 Django 开发服务器,让它监听你的 Droplet 的公共网络接口。

./manage.py runserver 0.0.0.0:8000

在您的 DigitalOcean Droplet 面板中,找到您的 Droplet 的外部 IP 地址。 现在,在您的浏览器中访问 http://<your ip here>:8000。 您应该会看到新 Django 安装的默认页面。

非常重要 按下键盘上的 CTRL+C 退出 Django 开发服务器,因为它不用于生产。

关于安全的说明

在运行任何站点时,有很多关于安全性和最佳实践的内容可供阅读。 要在生产中运行真实的东西,强烈建议您额外阅读有关如何正确保护面向公众的 Web 服务器和数据库服务器的内容。

随着公共服务公告的结束,是时候配置 Apache 来为我们的 Django 站点提供服务了。

第 5 步 — 为您的 Django 站点配置一个简单的 Apache 虚拟主机

使用您喜欢的编辑器,创建并编辑 /usr/local/etc/apache24/Includes/httpd.conf 文件:

sudo vi /usr/local/etc/apache24/Includes/httpd.conf

添加以下所有配置设置以创建您的虚拟主机。 请用您的网站名称替换 www.example.com 以匹配我们之前创建的目录。

/usr/local/etc/apache24/Includes/httpd.conf

# Settings
ServerName mysite

## Default Overrides
ServerSignature Off
ServerTokens Prod
Timeout 30

## Virtual Hosts
<VirtualHost *:80>

    WSGIDaemonProcess mysite python-path=/www/data/www.example.com:/www/data/www.example.com/venv/lib/python2.7/site-packages/
    WSGIProcessGroup mysite
    WSGIScriptAlias / /www/data/www.example.com/mysite/wsgi.py

    <Directory /www/data/www.example.com/mysite>
        <Files wsgi.py>
        Require all granted
        </Files>
    </Directory>

</VirtualHost>

在这里,您只是告诉 Apache 设置几个合理的默认配置选项,以及在哪里可以找到 Python 代码以使用 Apache 的 mod_wsgi 模块启动 Django 站点。 这篇文章有更多关于Apache虚拟主机的细节,如果你想阅读更多的话。

启动 Apache Web 服务器。

sudo service apache24 restart

测试示例 Django 站点

您现在应该能够从浏览器访问 http://your_server_ip 并查看默认的 Django 页面。 如果您设置了 DNS,您也可以使用您的域。

结论

如您所见,围绕部署即使是最简单的网站和应用程序的主题也有很多东西需要学习。 下一步是部署您的自定义应用程序,而不是我们在教程中使用的演示应用程序。

如果您有任何问题或意见,请在下方留言。

推荐阅读

以下链接可以帮助您了解有关构建和部署简单 Django 站点的更多信息。