如何在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服务器来了解更多信息。