树莓派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;
}
完整内容为:
# 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 配置成功!
2. 安装 MySQL 和 phpMyAdmin
sudo apt-get install mariadb-server-10.3 phpmyadmin
中间会出现一个配置 phpMyAdmin 的选项,由于树莓派用的web服务器是 Nginx ,所以这里按ESC退出,不选择。
安装快结束时,又出现了一个配置选项:
Configuring phpmyadmin
│ Otherwise, you should probably choose this option.
│ Configure database for phpmyadmin with dbconfig-common?
点击 Yes 进行配置。之后要求输入一个密码,以注册到 MySQL 服务器上去。
输入密码后点击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
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
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
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 版本。
下载后解压,将服务器上的 config.sampile.inc.php
和解压后的更新包里面的同名文件进行覆盖,然后删除服务器上的 phpMyAdmin 目录下的所有文件,再进行上传,这个上传方式速度很慢,推荐先压缩成zip压缩包再上传,再在服务器进行解压。
ZIP 插件安装:
apt install -y zip
然后将上传的 phpMyAdmin 更新包进行解压:
unzip -o -d 目标文件夹 源压缩包地址
解压后登入 phpMyAdmin 后可以看见右下角的已更新。
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. 参考网页
参考及借用以下网页内容及资源进行整理(不分前后):
- vsftpd安装及配置
- Pi 仪表盘安装
- Nginx自启动脚本
- Nginx,MySQL及phpMyAdmin安装
- Debian下的压缩 (zip) 解压缩 (unzip) 命令
- phpMyAdmin无法缓存模板文件