树莓派zero-w 搭建网页服务器

树莓派zero-w 搭建网页服务器

建议有编程知识及对树莓派有一定了解的创客进行操作,本文只起引导作用

1. 安装 PHP 及 Nginx

依次执行以下命令:

sudo apt-get update
sudo apt-get install nginx php7.3-fpm php7.3-cli php7.3-curl php7.3-gd php7.3-cgi
sudo apt-get install nginx-light
sudo service nginx start
sudo service php7.3-fpm restart

Nginx的配置文件默认位置为:/etc/nginx/nginx.conf,而配置PHP只需修改 /etc/nginx/sites-available/default 文件就可以。

修改 Nginx 配置:

sudo nano /etc/nginx/sites-available/default

修改的地方很少,只需要将内容中的 location ~ \.php$ {......} 的部分内容取消注释并添加两句话,具体如下:

location ~ \.php$ {
#       include snippets/fastcgi-php.conf;
#
#       # With php-fpm (or other unix sockets):
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
#       # With php-cgi (or other tcp sockets):
#       fastcgi_pass 127.0.0.1:9000;
#       #设置脚本文件请求的路径
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#       #引入fastcgi的配置文件 
        include fastcgi_params;
}

树莓派zero-w 搭建网页服务器

完整内容为:

# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html index.php default.html default.htm default.php;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #       #设置脚本文件请求的路径
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #       #引入fastcgi的配置文件 
                include fastcgi_params;
        }
}

Ctrl + O后按Shift保存文件 ,按Ctrl + X退出编辑模式,修改之后重启 Nginx,即可配置好 Nginx 和 PHP:

sudo nginx -s reload

这时可以查看下是否配置成功,在网站根目录下新建一个 index.php 的文件,输入以下内容:

<?php phpinfo(); ?>

保存后退出,在浏览器中打开 http://树莓派ip/index.php,即可看到 phpinfo 信息,说明 PHP 和 Nginx 配置成功!
树莓派zero-w 搭建网页服务器

2. 安装 MySQL 和 phpMyAdmin

sudo apt-get install mariadb-server-10.3 phpmyadmin

中间会出现一个配置 phpMyAdmin 的选项,由于树莓派用的web服务器是 Nginx ,所以这里按ESC退出,不选择。
树莓派zero-w 搭建网页服务器
安装快结束时,又出现了一个配置选项:

Configuring phpmyadmin
│ Otherwise, you should probably choose this option.
│ Configure database for phpmyadmin with dbconfig-common?

树莓派zero-w 搭建网页服务器

点击 Yes 进行配置。之后要求输入一个密码,以注册到 MySQL 服务器上去。
树莓派zero-w 搭建网页服务器

输入密码后点击OK,再次确认。

安装完成后还要把 phpMyAdmin 连接到 Nginx 服务器的 PHP 根目录上,因此建立软连接:

sudo ln -s /usr/share/phpmyadmin /var/www/html

2.1. 修改数据库密码

数据库安装好之后是没有密码的,为了安全,要修改数据库加密方式,并设置密码。

登陆数据库:

sudo mysql -u root -p

不用输入密码,直接回车即可登入。

修改加密方式:

update mysql.user set plugin='mysql_native_password';

修改密码:

update mysql.user set password=PASSWORD("用你的密码代替") where User='root';

刷新权限信息:

flush privileges;

这时再登陆数据库就需要密码了。

3. 安装 FTP(vsftpd)

sudo apt-get install vsftpd vim db-util

3.1. 创建用户数据库

1、创建用户文本文件
先建立用户文本文件 vsftpd_virtualuser.txt,添加两个虚拟帐号,公共帐号 share 及客户帐号 upload。

sudo mkdir /etc/vsftpd
sudo touch /etc/vsftpd/vsftpd_virtualuser.txt
sudo nano /etc/vsftpd/vsftpd_virtualuser.txt

格式:

虚拟帐号 1
密码
虚拟帐号 2
密码

例如:

share
123456
upload
456789

保存退出。
2、生成数据库
保存虚拟帐号和密码的文本文件无法被系统帐号直接调用。我们需要使用 db_load 命令生成 db 数据库文件。

sudo db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt /etc/vsftpd/vsftpd_virtualuser.db

3、修改数据库文件访问权限
数据库文件中保存着虚拟帐号的密码信息,为了防止非法用户盗取,我们可以修改该文件的访问权限。生成的认证文件的权限应设置为只对 root 用户可读可写,即 600。

sudo chmod 600 /etc/vsftpd/vsftpd_virtualuser.db

3.2. 配置 PAM 文件

为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的 PAM 模块.PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM 模块配置文件路径为 /etc/pam.d/ 目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。
修改 vsftpd 对应的 PAM 配置文件 /etc/pam.d/vsftpd,将默认配置使用#全部注释,添加相应字段。

sudo nano /etc/pam.d/vsftpd
auth       required     pam_userdb.so   db=/etc/vsftpd/vsftpd_virtualuser
account    required     pam_userdb.so   db=/etc/vsftpd/vsftpd_virtualuser

树莓派zero-w 搭建网页服务器

3.3. 创建虚拟帐号对应的系统用户

对于公共帐号和客户帐号,因为需要配置不同的权限,所以可以将两个帐号的目录进行隔离,控制用户的文件访问。公共帐号 share 对应系统帐号 ftpshare,并指定其主目录为 /home/pi/ftp/share,而客户帐号 upload 对应系统帐号 ftpupload,指定主目录为 /home/pi/ftp/upload

如果不设置可执行用户登录会报不能更改目录错误。

mkdir /home/pi/ftp
mkdir /home/pi/ftp/share
mkdir /home/pi/ftp/upload

sudo useradd -d /home/pi/ftp/share ftpshare
sudo useradd -d /home/pi/ftp/upload ftpupload
sudo chmod -R 500 /home/pi/ftp/share/
sudo chmod -R 700 /home/pi/ftp/upload/

公共帐号 share 只允许下载,修改 share 目录其他用户权限为 rx 可读可执行。
客户帐号 upload 允许上传和下载,所以对 upload 目录权限设置为 rwx,可读可写可执行。

3.4. 建立配置文件

设置多个虚拟帐号的不同权限,若使用一个配置文件无法实现此功能,需要为每个虚拟帐号建立独立的配置文件,并根据需要进行相应的设置。
1、修改 vsftpd.conf 主配置文件
配置主配置文件 /etc/vsftpd.conf 添加虚拟帐号的共同设置并添加 user_config_dir 字段,定义虚拟帐号的配置文件目录。
禁用匿名用户登录并启用本地用户登录设置:

sudo nano /etc/vsftpd.conf
anonymous_enable=NO
local_enable=YES
# 将所有本地用户限制在家目录中,NO 则不限制
chroot_local_user=YES
# 配置 vsftpd 使用的 PAM 模块为 vsftpd
pam_service_name=vsftpd
# 设置虚拟帐号的主目录为/vuserconfig
user_config_dir=/etc/vsftpd/vuserconfig
# 设置 FTP 服务器最大接入客户端数为 300 个
max_clients=300
# 设置每个 IP 地址最大连接数为 10 个
max_per_ip=10
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=20000

2、建立虚拟帐号配置文件
user_config_dir 指定路径下,建立与虚拟帐号同名的配置文件并添加相应的配置字段。
首先建立公共帐号 share 的配置文件:

sudo mkdir /etc/vsftpd/vuserconfig
sudo nano /etc/vsftpd/vuserconfig/share
# 开启虚拟帐号登录
guest_enable=yes
# 设置 ftp 对应的系统帐号为 ftpshare
guest_username=ftpshare
# 允许匿名用户浏览器整个服务器的文件系统
anon_world_readable_only=no
# 限定传输速率为 500KB/s
anon_max_rate=500000

注意:
vsftpd 对于文件传输速度限制并不是绝对锁定在一个数值上哈,而是在 80%~120%之间变化。比如设置 100KB/s ,则实际是速度在 80KB/s~120KB/s 之间变化。

下面是客户帐号的配置文件 upload:

sudo nano /etc/vsftpd/vuserconfig/upload
# 开启虚拟帐号登录
guest_enable=yes
# 设置 ftp 对应的系统帐号为 ftpupload
guest_username=ftpupload
# 允许匿名用户浏览器整个服务器的文件系统
anon_world_readable_only=no
# 允许在文件系统写入权限
write_enable=yes
# 允许创建文件夹
anon_mkdir_write_enable=yes
# 开启匿名帐号的上传功能
anon_upload_enable=yes
# 限定传输速度为 1000KB/s
anon_max_rate=1000000
如果需要删除权限,可在配置中添加:
anon_other_write_enable=YES

树莓派zero-w 搭建网页服务器

3.5. 设置 vsftpd 自启动

修改 /etc/init.d/nginx 文件

sudo nano /etc/init.d/nginx

替换全部内容为:

#! /bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
  --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/usr/local/nginx/logs/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile \
/usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0

然后依次执行以下以下命令:

chmod +x /etc/init.d/nginx
/usr/sbin/update-rc.d -f nginx defaults
/etc/init.d/nginx start

3.6. 重启 vsftpd 使配置生效

sudo systemctl restart vsftpd
sudo service vsftpd restart

4. 部署 Pi 仪表盘

如果你了解过 GitHub 的基本操作,通过 GitHub 来下载本项目到 Pi 上会相当方便。

sudo apt-get install git
cd /var/www/html
sudo git clone https://github.com/nxez/pi-dashboard.git

即可通过 http://树莓派IP/pi-dashboard 访问部署好了的 Pi Dashboard。

同样如果页面无法显示,可以尝试在树莓派终端给源码添加运行权限,例如你上传之后的路径是 /var/www/html/pi-dashboard,则运行。

cd /var/www/html
sudo chown -R www-data pi-dashboard

树莓派zero-w 搭建网页服务器

5. 报错及及解决方案

5.1. phpMyAdmin 数据库查看详情页面报错

这个错误主要出现在phpMyAdmin的4.6以前的版本中,最新版没有这个报错,你可以直接选择更新,更新操作请看下面。

sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php

然后点击Windows + W输入 (count($analyzed_sql_results['select_expr'] == 1) 按回车进行搜索,修改(count($analyzed_sql_results['select_expr'] == 1)((count($analyzed_sql_results['select_expr']) == 1)

5.2. phpMyAdmin 数据库导入页面报错

这个报错的唯一解决方法就是更新 phpMyAdmin 版本。
树莓派zero-w 搭建网页服务器
树莓派zero-w 搭建网页服务器
下载后解压,将服务器上的 config.sampile.inc.php 和解压后的更新包里面的同名文件进行覆盖,然后删除服务器上的 phpMyAdmin 目录下的所有文件,再进行上传,这个上传方式速度很慢,推荐先压缩成zip压缩包再上传,再在服务器进行解压。

ZIP 插件安装:

apt install -y zip

然后将上传的 phpMyAdmin 更新包进行解压:

unzip -o -d 目标文件夹 源压缩包地址

解压后登入 phpMyAdmin 后可以看见右下角的已更新。
树莓派zero-w 搭建网页服务器

5.3. FTP 自定义路径下上传文件及修改文件无效

这个问题主要是当前目录下只有读取权限,没有写入权限,具体命令如下:

sudo nano chmod -R 777 文件夹路径

然后重启一下 FTP 服务器:

sudo systemctl restart vsftpd
sudo service vsftpd restart

5.4. 上传的网站访问错误403

注意:每次添加网站文件夹都要执行这个命令,否则新创建的网页会403,已执行过的文件夹不用重复执行

这个主要是没有给文件夹运行权限,建议文件夹设置为纯英文及数字,命令如下:

sudo chown -R www-data 该网站文件夹

然后重启一下 Nginx 服务器(直接重启 Nginx):

sudo service nginx restart

或者(重新加载配置文件,不重启 Nginx):

nginx -s reload

6. 结语

因为本人时间有限,所以有些步骤的图片就不能贴出来了。有能力的小伙伴可以把这些纷繁复杂的指令编写成shell可执行文件。

第一次发文章,有什么表达不对的地方请海涵!


7. 参考网页

参考及借用以下网页内容及资源进行整理(不分前后):

  1. vsftpd安装及配置
  2. Pi 仪表盘安装
  3. Nginx自启动脚本
  4. Nginx,MySQL及phpMyAdmin安装
  5. Debian下的压缩 (zip) 解压缩 (unzip) 命令
  6. phpMyAdmin无法缓存模板文件
上一篇:Vsftpd虚拟用户登录


下一篇:vsftpd配置文件详解