如何设置没有框架的Apache,MySQL和和Python(LAMP)服务器在Ubuntu 14.04

本文将引导您完成使用Python 3,MySQL和的Apache2,SAN中的一个框架的帮助下建立一个服务器。在本教程的最后,你将完全有能力推出准系统投入生产。

介绍

本文将向您介绍如何使用Python 3,MySQL和Apache2设置服务器,而不需要框架的帮助。 在本教程结束时,您将完全能够将准系统启动到生产环境中。

Django通常是所有Python的一站式停止; 它与几乎所有版本的Python兼容,预先包装了自定义服务器,甚至具有一键安装数据库。 在没有这个强大的工具的情况下设置一个vanilla系统可能很棘手,但从根本上获得了对服务器结构的宝贵的洞察力。

本教程仅使用软件包安装程序,即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

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

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

sudo apt-get update

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

sudo apt-get install python3-pip

画中画的概述,你可以阅读本教程

第3步 - 安装MySQL

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

安装SQL非常简单:

sudo apt-get install mysql-server

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

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

mysql_secure_installation

此设置将带您通过一系列自我说明的步骤。 首先,您需要输入您刚才选择的根密码。 第一个问题会问,如果你想改变root密码,而是因为你刚才设置它,请输入n。 对于所有其他问题,按ENTER键接受默认响应。

Python 3需要一种与MySQL连接的方法。 有许多选择,像的mysql,但是对于模块的简单起见,本教程将使用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文件显式声明为runnable文件,并允许这样的可执行文件。 使用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

    ...

这个目录块允许我们指定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 root密码。

mysql -u root -p

添加一个名为例如一个例子数据库。

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的root密码值。

#!/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用你喜欢的浏览器。 您应该看到以下内容:

your_server_ip'>的http:// your_server_ip
[(1, 'One!'), (2, 'Two!'), (3, 'Three!')]

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

结论

你现在有一个工作的服务器,可以运行Python 3与一个健壮的SQL数据库。 该服务器现在还配置为便于维护,通过完善的文档和已建立的包安装程序。

然而,在当前状态下,服务器容易受到外部人的攻击。 尽管SSL加密等元素对于您的服务器功能并不重要,但它们是可靠,安全的服务器不可或缺的资源。 通过阅读详细了解如何配置Apache如何建立一个Apache SSL证书以及如何保护你的Linux服务器