如何在Ubuntu14.04上设置没有框架的Apache、MySQL和Python(LAMP)服务器

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

介绍

本文将引导您在没有框架帮助的情况下使用 Python 3、MySQL 和 Apache2 设置服务器。 在本教程结束时,您将完全能够将准系统系统投入生产。

Django 通常是所有 Python 的一站式服务; 它与几乎所有版本的 Python 兼容,预装了自定义服务器,甚至还具有一键安装数据库。 在没有这个强大工具的情况下设置一个普通系统可能会很棘手,但可以让您从头开始对服务器结构进行宝贵的洞察。

本教程仅使用包安装程序,即 apt-get 和 Pip。 包安装程序 是简单的小程序,它们使代码安装更加方便和易于管理。 没有它们,维护库、模块和其他代码位可能会变得非常混乱。

先决条件

要遵循本教程,您将需要:

  • 一个 Ubuntu 14.04 Droplet。
  • 一个sudo非root用户,可以按照本教程进行设置。

第 1 步 — 将 Python 3 设为默认

在这一步中,我们将 Python 3 设置为我们的 python 命令的默认值。

首先,检查您当前的 Python 版本。

python --version

在新的 Ubuntu 14.04 服务器上,这将输出:

Python 2.7.6

我们想让 python 运行 Python 3。 所以首先,让我们删除旧的 2.7 二进制文件。

sudo rm /usr/bin/python

接下来,创建一个指向 Python 3 二进制文件的符号链接。

sudo ln -s /usr/bin/python3 /usr/bin/python

如果再次运行 python --version,您现在将看到 Python 3.4.0

第 2 步 — 安装 Pip

在本节中,我们将安装 Pip,这是 Python 的推荐包安装程序。

首先,更新系统的包索引。 这将确保旧的或过时的软件包不会干扰安装。

sudo apt-get update

Pip 允许我们轻松管理我们想要的任何 Python 3 包。 要安装它,只需运行以下命令:

sudo apt-get install python3-pip

有关 Pip 的概述,您可以阅读本教程

第 3 步 — 安装 MySQL

在本节中,我们将安装和配置 MySQL。

安装 SQL 很简单:

sudo apt-get install mysql-server

提示时为 MySQL root 用户输入一个强密码,并记住它,因为我们稍后会需要它。

MySQL 服务器将在安装完成后启动。 安装后,运行:

mysql_secure_installation

此设置将引导您完成一系列不言自明的步骤。 首先,您需要输入您刚才选择的根密码。 第一个问题会问你是否要更改root密码,但是因为你只是设置了它,所以输入n。 对于所有其他问题,请按 ENTER 接受默认响应。

然而,Python 3 需要一种与 MySQL 连接的方法。 有许多选项,例如 MySQLclient,但为了模块的简单性,本教程将使用 pymysql。 使用 Pip 安装它:

sudo pip3 install pymysql

第 4 步 — 安装 Apache 2

在本节中,我们将安装 Apache 2,并确保它将 Python 文件识别为可执行文件。

使用 apt-get 安装 Apache:

sudo apt-get install apache2

与 MySQL 一样,Apache 服务器将在安装完成后启动。

注意:安装后有几个端口可以上网。 请务必查看本教程的结论以获取有关安全性的资源。

我们希望将我们网站的根目录放在一个安全的位置。 服务器默认为 /var/www/html。 为了保持约定,我们将在同一位置创建一个新目录用于测试,名为 test

sudo mkdir /var/www/test

最后,我们必须向 Apache 注册 Python。 首先,我们禁用多线程进程。

sudo a2dismod mpm_event

然后,我们给予 Apache 运行脚本的明确权限。

sudo a2enmod mpm_prefork cgi

接下来,我们修改实际的 Apache 配置,将 Python 文件显式声明为可运行文件并允许此类可执行文件。 使用 nano 或您喜欢的文本编辑器打开配置文件。

sudo nano /etc/apache2/sites-enabled/000-default.conf

在第一行之后添加以下内容,即 <VirtualHost *:80\>

<Directory /var/www/test>
    Options +ExecCGI
    DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py

确保您的 <Directory> 块嵌套在 <VirtualHost> 块内,就像这样。 确保也使用制表符正确缩进。

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
    <Directory /var/www/test>
        Options +ExecCGI
        DirectoryIndex index.py
    </Directory>
    AddHandler cgi-script .py
    
    ...

这个 Directory 块允许我们指定 Apache 如何处理该目录。 它告诉 Apache /var/www/test 目录包含可执行文件,将 index.py 视为默认文件,然后定义可执行文件。

我们还希望在我们的网站目录中允许可执行文件,因此我们也需要更改 DocumentRoot 的路径。 查找读取 DocumentRoot /var/www/html 的行,在文件顶部的长注释下方几行,并将其修改为改为 /var/www/test

DocumentRoot /var/www/test

您的文件现在应该类似于以下内容。

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
        <Directory /var/www/test>
                Options +ExecCGI
                DirectoryIndex index.py
        </Directory>
        AddHandler cgi-script .py
        
        ...
        
        DocumentRoot /var/www/test
        
        ...

保存并退出文件。 要使这些更改生效,请重新启动 Apache。

sudo service apache2 restart

注意:Apache 2 可能会抛出一个警告,说明服务器的完全限定域名; 这可以忽略,因为此时 ServerName 指令几乎没有应用。 在创建 必要的记录 之后,它们最终用于确定子域托管。

如果输出的最后一行显示为 [ OK ],则 Apache 已成功重启。

第 5 步 — 测试最终产品

在本节中,我们将确认各个组件(Python、MySQL 和 Apache)可以通过创建示例网页和数据库来相互交互。

首先,让我们创建一个数据库。 登录到 MySQL。 您需要输入之前设置的 MySQL 根密码。

mysql -u root -p

添加一个名为 example 的示例数据库。

CREATE DATABASE example;

切换到新数据库。

USE example;

为我们将让 Python 应用程序添加的一些示例数据添加一个表。

CREATE TABLE numbers (num INT, word VARCHAR(20));

CTRL+D 退出。 有关 SQL 的更多背景信息,您可以阅读此 MySQL 教程

现在,为我们的简单 Python 应用程序创建一个新文件。

sudo nano /var/www/test/index.py

复制并粘贴以下代码。 内嵌注释描述了每段代码的作用。 确保将 passwd 值替换为您之前选择的根 MySQL 密码。

#!/usr/bin/python

# Turn on debug mode.
import cgitb
cgitb.enable()

# Print necessary headers.
print("Content-Type: text/html")
print()

# Connect to the database.
import pymysql
conn = pymysql.connect(
    db='example',
    user='root',
    passwd='your_root_mysql_password',
    host='localhost')
c = conn.cursor()

# Insert some example data.
c.execute("INSERT INTO numbers VALUES (1, 'One!')")
c.execute("INSERT INTO numbers VALUES (2, 'Two!')")
c.execute("INSERT INTO numbers VALUES (3, 'Three!')")
conn.commit()

# Print the contents of the database.
c.execute("SELECT * FROM numbers")
print([(r[0], r[1]) for r in c.fetchall()])

保存并退出。

接下来,修复新创建文件的权限。 三位数权限码的更多信息,请参见Linux权限教程。

sudo chmod 755 /var/www/test/index.py

现在,使用您喜欢的浏览器转到 http://your_server_ip 来访问您的服务器。 您应该看到以下内容:

http://<^>your_server_ip<^>

[(1, 'One!'), (2, 'Two!'), (3, 'Three!')]

恭喜! 您的服务器现在在线。

结论

您现在拥有一个可以运行 Python 3 的工作服务器,该服务器具有强大的 SQL 数据库。 该服务器现在还配置为易于维护,通过有据可查和建立的软件包安装程序。

但是,在当前状态下,服务器容易受到外部人员的攻击。 尽管 SSL 加密等元素对于您的服务器功能来说并不是必不可少的,但它们对于可靠、安全的服务器来说却是不可或缺的资源。 通过阅读如何配置Apache如何创建Apache SSL证书如何保护您的Linux服务器来了解更多信息。