慧捣鼓IT
首发于慧捣鼓IT
如何给树莓派搭建WEB开发运行环境之LAMP篇

如何给树莓派搭建WEB开发运行环境之LAMP篇

你也许感受到了她是慢热型,找不到速度与激情般的快感,不妨把她漂亮的外套脱掉,来的更尽兴一点。关掉她的Desktop,启动CLI模式,来一次WEB之旅吧。只需要5个步骤:

  • 设置以CLI模式启动
  • 安装和配置LAMP环境
  • 写个Hello PHP!
  • 再写个Hello Python!
  • 测试一下性能

设置以CLI模式启动

除非你确定要把树莓派当桌面PC来用,你才需要打开Desktop模式,也就是图形化界面。一般来讲,只要把她设置为默认启动CLI(命令行界面)就可以了,这样能够将桌面所占用的计算资源省出来提供给你的核心应用,比如web环境。

我们可以先对比一下分别在Desktop和CLI模式下系统资源占用情况(下图红框部分):

Desktop模式系统资源占用情况
CLI模式系统资源占用情况

两者的区别还是比较明显的,CLI模式占用系统资源更少。所以不要犹豫了,把那个华而不实的桌面关掉吧。

进行下面操作的前提是你已经按照《树莓派初次启动后的设置》一文的介绍,完成了“VNC/SSH远程访问设置”,并确定你的树莓派能够通过VNC和ssh远程访问。或者你全程通过外接显示器和键盘鼠标的方式来使用树莓派。

在树莓派桌面里打开终端输入下面的命令:

$ sudo raspi-config

按回车键,终端内会打开树莓派的软件配置工具:

raspi-config树莓派软件配置工具

用上下方向键选择【3 Boot Options】,按回车键进入启动选项设置菜单:

Boot Options 启动选项设置菜单

选择【B1 Desktop / CLI】,进入如下菜单:

桌面/命令行模式选择菜单

选择【B1 Console】,按回车键确认,系统将返回配置工具主菜单。

raspi-config软件配置工具主菜单

使用 Tab 键选择【Finish】,按回车键,系统提示是否重新启动。

重新启动提示

按回车键重新启动,以后树莓派每次启动都会自动进入CLI模式。

如果你想回到以Desktop桌面模式启动树莓派,可以再次使用 sudo raspi-config 命令,将启动设置修改为Desktop。

<!--
以上通过 raspi-config 命令修改启动设置是永久有效,如果你只是想临时关闭或启用桌面系统,可以使用 init 或 startx 命令修改系统运行模式:
$ sudo init 3 //此命令进入CLI模式
$ sudo init 5 //此命令进入Desktop模式
$ sudo startx //此命令进入Desktop模式
使用上述命令修改运行模式即刻生效,无需重新启动系统。当系统重新启动时,将恢复原来的运行模式。
-->

然后,在你常用的电脑上,通过ssh连接到树莓派以进行下面的操作,具体方法可见《树莓派初次启动后的设置》。

安装和配置LAMP环境

树莓派的Raspbian是基于Debian的发行版,使用 apt-get 软件包管理工具,接下来各种软件的安装都要用到它。

① 更新Raspbian系统

在安装之前,要先对系统进行更新,依次执行下面两个命令:

$ sudo apt-get update

$ sudo apt-get upgrade

第一个命令是更新所有包库列表,执行时间较短。

第二个命令是将系统所有的软件(包括系统内核)更新到最新版本,执行过程中需要你按 y 进行确认。如果你是第一次执行,或者在此之前很久没有执行过这个命令的话,你可能需要灯、等灯、等灯、等灯……

当然,你也可以尝试不执行系统升级命令,也许不会对接下来的安装有什么影响。

② 安装所需软件包

我们所需要安装的软件包主要有Apache Http服务器、Mysql/Mariadb数据库、PHP7/Python3开发语言环境、vim编辑器,以及他们所依赖的各种包。依次执行以下命令:

$ sudo apt install apache2

$ sudo apt install mariadb-server

$ sudo apt install php

$ sudo apt install python3

$ sudo apt install vim

apt install 会自动检查要安装软件所依赖的包清单,然后询问是否安装,输入 y 然后按回车键即可。也可以在上述命令后面加上 -y 参数,终端将不再询问确认,直接安装。

<!--
Mariadb是Mysql被甲骨文收购之后,其缔造者重新创建的一个分支,目前其使用方法、命令与mysql相同,在目前流行的Linux发行版中,多数包管理工具默认安装Mariadb。
你会发现在安装python3时终端会提示你已经是最新版本,作为天生支持python的派,当然要自带python。
vim是linux和mac下比较流行的编辑器,下一步修改配置文件和编程都会用到它,vim被誉为“编辑器之神”,当然你也可以选择被誉为“神之编辑器“的emacs,她们都是非常优秀的编辑器。
我不喜欢探讨诸如”XX的XX是XX比XX的XX更XX“之类的话题,我只坚持”做“,努力把XX用好。
-->

③ 启动Apache Http Server

通过以下命令启动apache http server:

$ sudo service apache2 start

然后打开浏览器,在地址栏输入http://树莓派的IP地址,看到以下界面说明apache启动成功。

Apache2 默认主页

下面两个命令分别是停止和重新启动apache服务:

$ sudo service apache2 stop

$ sudo service apache2 restart

<!--
聪明的树莓派在安装apache之后会将其设置为开机自动启动,你也可以通过以下两个命令修改这个设置:
开机自启动
$ sudo systemctl enable apache2.service
关闭开机自启动
$ sudo systemctl disable apache2.service
-->

Apache Http Server的默认端口号是80,如果你想修改为别的端口号,可以使用vim打开配置文件:

$ sudo vim /etc/apache2/ports.conf

Apache2 端口配置文件

将键盘设置为小写状态,使用 j 键将光标移动到 Listen 80 所在的行,再使用 l 键将光标移动到8上,按两次 x 键将80删除,然后按 a 键,这样就可以输入你想要的端口号,比如8080。输入完成后,按键盘左上角的 Esc 键,输入 :wq ,按回车键返回终端,重新启动apache服务即可。

修改端口号之后,你需要在访问地址后面加上 :8080 才可以。

④ 配置和启动MariaDB

MariaDB安装之后还需要进行一系列配置。

首先,执行安全设置命令。

$ sudo mysql_secure_installation

终端里会打印出以下注意信息:

注意信息及输入当前密码

大致意思是在用于生产系统的MariaDB服务器上务必要执行这个步骤。同时,为了保障数据库的安全,需要你输入root用户的密码。如果你是刚刚完成MariaDB的安装,还没有设置root密码,那么直接按回车键即可。

按回车键,进入下一步设置root密码:

设置MariaDB的root密码

在这里设置你的root账户密码,需要两次输入同样的密码,设置成功后终端会提示 Success! 然后询问是否删除匿名用户(anonymous user):

删除匿名用户

按 y 键然后回车,终端提示Success后询问是否禁止root用户远程登录:

禁止root用户远程登录

按 y 键然后回车,这样数据库的root账户就只能在本地以操作系统root用户的身份登录 。接着终端继续询问是否删除测试数据库 test:

删除测试test数据库

按 y 键然后回车。最后询问是保存并使上述所有操作立即生效:

重新加载权限并使其生效

按 y 键然后回车。终端提示 All done,并感谢你使用MariaDB:

完成MariaDB安全设置

至此完成MariaDB的安全设置。

然后,登陆MariaDB。

如果你在安全设置中,最后一步选择了 y ,那么所有的设置会立即生效,你不需要重新启动MariaDB数据库,聪明的树莓派也已默认开机自动启动MariaDB,现在你可以直接使用以下命令登陆你的数据库:

$ sudo mysql -u root -p

<!--
使用数据库的root账户登录前面一定要加sudo,因为我们在安全设置中禁止了root用户远程登录,只能以操作系统root用户身份在终端里直接登录。
-->

然后输入你在安全设置第一步里面设置的root账户密码,按回车键,就可以看到MariaDB的命令提示符:

MariaDB命令提示符

现在你可以输入 show databases; 命令(注意后面有个英文的分号),查看当前有哪些数据库:

查看数据库清单

最后,创建普通用户。

你不能总是以root登录,之前我们说过,只有菜鸟才总是以root登录,况且就算是菜鸟也要装作专业不是。

依次执行下面的命令可以创建一个新的用户,并进行对数据库操作的授权,注意每条命令都以英文分号结束。

// 选择mysql数据库

use mysql;

// 新建普通用户pi并设置密码

create user 'pi'@'localhost' identified by 'password';

// 更新权限(使上述操作生效)

flush privileges;

// 新建一个数据库pidb

create database pidb;

// 为用户pi授予操作pidb数据库的全部权限

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

// 更新权限

flush privileges;

// 退出MariaDB

exit;

退出后再以刚才新建的pi用户登录:

$ mysql -u pi -p

以上就完成了MariaDB的基本设置。

我们在刚刚创建的pidb数据库中创建一张数据表,以供下面的php来调用,在MariaDB中依次执行以下命令:

// 选择pidb

use pidb;

// 创建表 hello,仅有一个varchar型字段message

create table hello (`message` varchar(100) not null);

<!--
注意上面命令message两侧的”引号“不是普通的单引号,而是键盘左上角Esc下面的键,在英文状态下输入的内容 `。
-->

// 查看当前库里的表清单

show tables;

// 往hello表里写入一条数据

insert into hello(message) value('Hello MariaDB');

// 查询hello表里的内容

select * from hello;

如果上述命令全部执行成功,你将看到hello表里有一条刚刚插入的数据”Hello MariaDB“:

查询hello表内容

写个Hello PHP!

刚才说过聪明的树莓派会自动安装所依赖的包清单,当你安装了apache2和php7之后,相关的模块也会一起安装。你不需要做任何配置就可以在apache中执行php文件。

apache默认的站点主目录为 /var/www/html,现在你可以用vim命令在这个目录下创建一个php文件:

$ sudo vim /var/www/html/index.php

按 i 键进入输入模式,在index.php文件中输入以下内容:

<?php
    echo("<center><h2>Hello PHP!<h2></center>");
    phpinfo();
?>

然后按 Esc 健进入普通模式,输入 :wq 按回车键保存退出。

这时你在浏览器输入 http://树莓派的IP地址/index.php,如果看到以下内容就说明你的php已经成功运行了。

PHP执行成功界面

如果你需要从MariaDB中读取一些数据,还需要安装php-mysql,在终端输入以下命令:

$ sudo apt install php-mysql

你会看到系统同时安装了php-mysql和php7.0-mysql两个包,安装完成后要重新启动apache2以使新安装的包被apache2加载:

$ sudo service apache2 restart

然后用vim修改index.php文件,修改后的代码如下:

<?php
    echo("<center><h2>Hello PHP!</h2></center>");
    $mysqli = new mysqli('127.0.0.1', 'pi', 'password', 'pidb');
    if($mysqli->connect_error) {
        die("Database Connect Error!" . $mysqli->connect_error);
    }
    $sql = "select * from hello";
    $rs = $mysqli->query($sql);
    while($row = $rs->fetch_assoc()) {
        echo("<center><h2>" . $row["message"] . "</h2></center>");
    }
    phpinfo();
?>

在回到浏览器刷新你的页面,你就会看到我们之前在MariaDB里写入的一条数据:Hello MariaDB。

再写个Hello Python!

用Python开发web应用当然首选Django框架,但仅仅跟她打个招呼,我可以使用cgi,在树莓派下面只要简单做一些配置即可。

① 启用Apache2的cgi支持

用下面的命令建立一个软连接即可:

$ sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/

聪明的你一定看明白了,就是把cgi.load从available放到enabled。

② 设置python web的主目录

使用vim修改apache2的serve-cgi-bin.conf配置文件:

$ sudo vim /etc/apache2/conf-available/serve-cgi-bin.conf

apache2的cgi-bin配置文件

我们可以把python文件都放在 /var/www/html/python_web下,将上图红色圆圈内的两行修改为:

ScriptAlias /python_web/ /var/www/html/python_web/

<Directory "/var/www/html/python_web">

注意有三个python_web务必要一致。

<!--
vim的用法是按 j 键跳到下一行,按 k 键将光标向右移动,按 x 键删除光标所在处的字符,按 i 键进入编辑模式可在光标处输入字符,按 Esc 键返回普通模式,在普通模式下分别通过 k、j、h、l 四个键对光标上下左右移动。所有工作完成后按 Esc 键回到普通模式,输入 :wq 命令按回车键即可保存退出。
-->

③ 创建hello_python.py文件

依次执行以下命令:

$ cd /var/www/hmtl

$ sudo mkdir python_web

$ cd python_web

$ sudo vim hello_python.py

在vim编辑器内输入以下代码(按 i 键可进入编辑模式):

#!/usr/bin/python3
import cgi;
import cgitb;
cgitb.enable()
print ("Content-Type:text/html\n\n")
print ("<b>Hello Python3</b>")

输入完成后保存并返回终端,将 hello_python.py 设置为可执行文件:

$ sudo chmod +x hello_python.py

④ 重新启动apache2

使用以下命令重新启动apache2

$ sudo service apache2 restart

重启完成后在浏览器输入如下地址:

http://树莓派的IP地址/python_web/hello_python.py

你将看到浏览器页面上打印出 Hello Python3 字符串。

测试一下性能

我们可以来做一个简单的性能测试,拿树莓派和某云最基础的云主机做个比较,当然树莓派肯定会被某云秒杀,但慢也得慢个清清楚楚,看看到底有多大差距😁。

测试代码如下:

<?php
    echo("<center><h2>Test Raspberry Pi</h2></center>");
    $mysqli = new mysqli('127.0.0.1', 'pi', 'password', 'pidb');
    if($mysqli->connect_error) {
        die("Database Connect Error!" . $mysqli->connect_error);
    }
    $t1 = microtime(true);
    for($i = 0; $i < 10; $i ++) {
        $sql = "truncate table hello";
        $mysqli->query($sql);
        
        $sql = "insert into hello(message) value('Hello MariaDB')";
        for($j = 0; $j < 1000; $j ++) {
            $mysqli->query($sql);
        }
        
        $sql = "select * from hello";
        $rs = $mysqli->query($sql);
        for($j = 0; $row = $rs->fetch_assoc(); $j ++) {
            echo( $j . $row["message"] );
        }
        echo ("<br />");
    }
    $t2 = microtime(true);
    echo ("<br />");
    echo (($t2 - $t1) * 1000 / 10 . "ms");
?>

上述代码是往一张表里写入1000条同样的字符串,然后再全部读出来打印到页面上,这样的动作重复10次,最后计算每次的平均值是多少毫秒。

我在树莓派3 Model B+上执行了5次,结果分别如下:

2366.4216041565ms

2415.2886152267ms

2367.5347089767ms

2393.0011034012ms

2271.2961196899ms

在某云基础云主机(1核/2GB/CentOS7-64bit)上执行5次的结果如下:

72.20938205719ms

74.326992034912ms

85.471296310425ms

76.066398620605ms

63.712000846863ms

性能差距还是比较明显,但对于一块不到300RMB的小板子来说貌似也没啥丢人的,毕竟不能指望她像几千块的东西那样性感。


关联文章推荐:

如何给树莓派安装操作系统zhuanlan.zhihu.com图标树莓派初次启动后的设置zhuanlan.zhihu.com图标树莓派入门必会的20个Linux命令zhuanlan.zhihu.com图标如何给树莓派搭建WEB开发运行环境之JAVA篇zhuanlan.zhihu.com图标

编辑于 2019-04-03

文章被以下专栏收录