标签 树莓派 下的文章

文章更新

20190107 初次成文(第一版)
20190305 更新固件 更新和优化了树状功能图(文章底部) 并做一些补充说明
20190306 加入 IPV6 支持(实验性)(第二版)
20190317 正式支持 IPV6 并添加 IPV6 使用说明,增加64位固件,并做固件升级说明(第三版)
20190321 修复重启后板载网卡不工作的问题,增加了若干功能(第四版)
20190416 暂停 64 位固件更新,日常跟进更新并再做一些补充说明(第五版)
20190521 日常跟进更新(第六版)
20190620 日常跟进更新(第七版)

写在前面

OpenWrt 是适合于嵌入式设备的一个 Linux 发行版,今天小苏为大家带来的是自己编译的 OpenWrt 固件,为了满足大家的各种需求,小苏为大家提供两种固件,其中 IPV4 Only 固件适用于 不需要连通 IPV6 网络的情况(如果你没有连通 IPV6 的需求,IPV4 Only 固件也是小苏的推荐选择),IPV4+IPV6 固件适用于需要连通 IPV6 网络的使用情况。

固件仅支持树莓派 2B/3B/3B+,不支持上述树莓派型号以外的其他设备;
包括但不限于 x86 平台、斐讯 N1、OrangePi、NanoPi、Newifi 等设备。
(换句话说除了树莓派以外的其他设备都不支持,望周知)

编译 OpenWrt 采用的源码来自 Lean 大的 Openwrt 项目:

https://github.com/coolsnowwolf/lede

在此特别感谢 Lean 大~

固件更新日志

第七版固件更新日志

固件版本更新: R9.5.6 -> R9.6.19 ;
Linux 内核更新: 4.14.118 -> 4.14.127;
以下是源码更新主要内容:
新增软件包 解锁网易云灰色歌曲、天翼家庭云/天翼云盘提速、V2ray 服务器;

第六版固件更新日志

固件版本更新: R9.4.6 -> R9.5.6 ;
Linux 内核更新: 4.14.111 -> 4.14.118;
以下是源码更新主要内容:
加入 HAProxy 实现对 SSR 的负载均衡和高可用;
为 ShandowsocksR Plus+ 加入 V2ray 订阅;
加入可道云支持;
在以后的版本中 ShandowsocksR Plus+ 不会受到影响。

第五版固件更新日志

固件版本更新: R9.3.17 -> R9.4.6 ;
Linux 内核更新: 4.14.104 -> 4.14.111;
[实验性] 加入 MentoHUST (锐捷校园网拨号客户端) 及 luci-app-mentohust (MentoHUST 控制面板) 支持,因为小苏这边没有校园网网络环境,所以请大家帮忙测试~
[实验性] 加入 LXC 容器支持 (建议科学上网使用);
加入更多小工具( file grep htop lrzsz lsusb lscpu mc tree whereis 等);
因 64 位版本固件问题较多,暂停 64 位版本更新,敬请谅解。

第四版固件更新日志

紧急修复了由于 autosamba 导致的重启后板载网卡不工作的问题;
加入了open-ssh-serverNFS文件系统支持,添加了遗漏的 fdisk ;
实验性增加了博通的 debug 无线驱动 (不知道有没有用);
固件进一步细分,将固件分为 IPV4 Only 和 IPV4+IPV6 两类,如果对连通 IPV6 有要求,可以直接选择 IPV4+IPV6 固件(但需要进一步设置),当然,如果你对 IPV6 没有需求,强烈推荐选择 IPV4 Only 固件;
由于冲突的原因,此次编译了 V2ray Pro 但未集成进固件内,可以在 “Packages (ipk)” 文件夹找到所有软件包的 ipk 压缩包解压后搜索 luci-app-v2ray-pro_1.0-11_all.ipk自行安装;
3B 上安装 64 位固件依然会存在 CPU 负载高,网络性能变差的问题,所以如果你的设备是 3B,尽量还是选择 32 位固件。但目前 在 3B+ 上好像没有这些问题
此次编译好像漏掉了 htop ,下次补上吧~

第三版固件更新日志

由 2019.03.17 再次拉取 Lean 大最新源码进行编译,发布第三版固件:
固件版本更新: R9.2.14 -> R9.3.17;
Linux 内核更新: 4.14.103 ->4.14.104 ;
新增 aarch64 架构 (64 位) 固件,但目前发现 64 位固件在 3B 上工作不稳定,如 CPU 负载异常增高,网络性能变差等,请谨慎刷入。原 arm 架构固件在树莓派 3B / 3B+ 设备上仍然适用。
应大家要求加回 wachcat 功能 ;
新增 sysupgrade 格式升级专用固件,降低升级成本 (详见下文)。

第二版固件更新日志

由 2019.03.05 拉取 Lean 大最新源码进行编译,发布第二版固件,更新内容如下:
(我只负责拉取源码 & 编译发布,不负责固件开发,固件更新内容与 OpenWrt 项目和 Lean 大项目有关)
固件版本更新: R9.1.1 -> R9.2.14;
Linux 内核更新: 4.14.90 -> 4.14.103;
为提高稳定性和兼容性砍掉了一些基本不用的功能,常用功能不受影响 (文章底部的树状功能图为最新版固件带有的功能);
重磅: 尽最大程度加入了若干无线网卡支持,目前 OpenWrt 源码中支持的 95% 的无线网卡,90% 的无线网卡应该无需单独安装驱动;
[实验性] 支持 IPV6 (固件文件名前带有 [IPV6] 标识),感谢评论区 @wgedu实验性增加 ip6tables & ip6tables_mod_nat 特性。

补充说明(重要):

目前已经可以确定固件在 RaspberryPi 3B+ 设备上基本运行正常,但是在 3B+ 设备上会出现树莓派的板载 WIFI 网卡在 2.4Ghz 频段下无法工作在 N 模式的 Bug ,(2.4Ghz 频段下的 Legacy 模式与 5GHz 频段下没有这个问题)。感谢评论区 :) 的测试反馈~
在设置树莓派 3B+ 的板载无线网卡时,请优先设置 radio0 接口,在设置树莓派 3B 的板载无线网卡时,请优先设置 radio2 接口(点此跳转详情)。

从第四版固件开始,文件夹名为 “IPV4+IPV6”内固件已支持连通 IPV6,但默认情况下,需要做一些设置才可正常连通 IPV6 网络 (点此跳转详情)。如果你不需要接入 IPV6,强烈建议选择文件夹 “IPV4 Only” 内只支持 IPV4 的固件。
同时,因为与 IPV6 网络存在冲突的原因,支持 IPV6 的固件中未集成 “负载均衡”“多线多拨”“mwan3 分流助手”这些功能,IPV4 Only 固件默认集成这些功能,不受影响。

如果你想从我编译的旧版固件升级到新版固件,可以直接在 Luci 控制面板中刷入 sysupgrade 格式固件,此操作可仅升级系统分区(需打钩“保留配置”),用户数据不受影响 (点此跳转详情)。

从第三版开始新增适配于树莓派 3B / 3B+ 设备的 64 位固件,但此 64 位固件在 “系统 - 概览”中存在显示 Bug,表现为 “架构”项显示为 “?”,大家可以在 SSH 或者 TTYD 终端中使用 uname -a命令查看固件的真实架构。
64 位固件中 Adbyby Plus + 无法正常运行。
64 位固件目前暂时不支持 kcptun,原因是 kcptun 目前暂无适配于 aarch64 架构的官方编译版本。详见:https://github.com/coolsnowwolf/lede/issues/1107

OpenWrt 编译教程会出的,并且我的教程要比别人的教程简单哦(敬请期待)~

固件说明

由于树莓派的性能要比普通的路由器高很多,并且树莓派采用 SD 卡作为存储介质,所以在编译时不必过多考虑固件大小及插件对设备造成的影响 ,为了更有效地利用树莓派“优秀”的硬件性能(当然是相对于普通路由器而言),小苏在编译时采用了比较“激进”的方式:尽可能编译“更多”插件以满足使用者各种各样的需求。

同时默认支持板载网卡,如果插入网卡后出现不兼容的情况(在“网络 - 接口 - 添加新接口”界面没有出现新网卡)请自行谷歌并安装适用于此网卡的驱动(前提是此网卡有驱动,小苏的绿联有线网卡,芯片 AX88772 完美支持)。

为了方便使用者配置和使用,固件在编译时加入了一些常用工具,比如 adb, bzip, gzip, htop, nano, resize2fs, tmux, unzip, vim,固件原生支持 exfat, ext4, f2fs, fat32, ntfs, squashfs, fuse 等文件系统。并且加入了 automount 支持,即外部可存储设备插入 USB 接口时,若文件系统支持,可以自动挂载设备。

为了满足使用者的各种需求,小苏为大家提供了两种格式的固件:ext4 格式和 squashfs 格式。这两种固件的区别是,ext4 格式的固件更适合熟悉 Linux 系统的用户使用,可以比较方便地调整 ext4 分区的大小,而 squashfs 格式的固件适用于“不折腾”的用户,其优点是可以比较方便地进行系统还原(你没听错,在控制面板里面点击一下“恢复出厂设置”按钮就可以回到刚刷入固件时的状态了,就像长按路由器后面的 Reset 按钮的效果一样),哪怕你一不小心玩坏固件,只要还能进入控制面板,就可以很方便地进行“系统还原操作”。相应的,在编译固件时小苏为 ext4 或 squashfs 根分区留出了 500M 的空间,一般来说这 500M 根分区空间足够你各种折腾了(毕竟固件本身才不到 100M),SD卡 剩余的空闲空间可以在 Windows 下使用 DiskGenius 新建一个分区继续折腾。当然,如果 500M 的根分区空间还是不够你折腾,你也可以选用 ext4 格式的固件刷入 SD卡 然后使用 fdisk(需要 opkg install fdisk 安装) e2fsck 和 resize2fs 命令来扩展根分区(方法详见参考资料最后一项)。

初始设置

刷入固件通电开机后,稍等 30秒 你将可以搜索到一个 SSID 为: Openwrt 的 WIFI 热点,连接此热点,在浏览器地址栏输入:

http://192.168.1.1

即可进入 Luci 控制面板。同时你也可以选择用网线连接树莓派和电脑,在浏览器输入相同的地址来进入控制面板。登陆控制面板时用户名默认为 root,密码默认为 password。登陆面板时,你会发现控制面板采用 https 作为连接协议,这可能会导致浏览器弹出“https证书不被信任”的提示,为了解决这个问题,你可以在“系统 - WEB 管理”中进行如下设置,保存并应用,清除浏览器缓存后即可使用默认的 http 协议访问控制面板:

WEB 管理页面

网口设置

刷入固件后树莓派的网口默认为 Lan 口,如果你有拨号需求或者需要将树莓派设置为子路由的话,需要将树莓派的网口改为 Wan 口,配置方法如下:

以下内容每做完一步后必须点击“保存”而不是“保存&应用”,做完全部步骤之后才可点击右上角的 “未保存的配置”应用所有修改,否则可能会造成在设置过程中无法连接到树莓派的情况发生。

进入“网络 - 接口”,点击“添加新接口”:

添加新接口

在“新接口的名称” 中填入 wan(小写),“新接口的协议”依据具体情况而定,如果要将树莓派的作拨号用,则选择PPPOE,如果想要用网线与上一设备 (如路由器) 的 Lan 口相连的话则选择DHCP客户端,在接口选项中,选择以太网适配器 "eth0",选择完成后,点击右下角的“提交”。

配置新接口

之后在 Lan 接口的 “物理设置”中修改取消勾选eth0,点击下方的“保存”而不是“保存&应用”

取消 Lan 口绑定的 eth0 接口

最后点击右上角的 “未保存的配置”应用所有修改即可。

值得一提的是,如果你是使用网线方式连接电脑和树莓派的话,当你把树莓派的网口改为 Wan 口后,你将无法通过浏览器进入 Luci 控制面板,但是使用无线方式连接到树莓派还是可以正常进入控制面板的,所以当你发现电脑无法进入控制面板后,不要惊慌,拔掉网线连接树莓派的无线热点即可正常进入控制面板~

无线设置(板载网卡)

在设置树莓派 3B+ 的板载无线网卡时,请优先设置 radio0 接口;
在设置树莓派 3B 的板载无线网卡时,请优先设置 radio2 接口;
如果你的设备是树莓派 3B+,板载网卡将无法工作在 2.4Ghz 频段的 Legacy 模式下。

目前已知
在树莓派 3B+ 下, 5Ghz 频段工作正常,2.4Ghz 频段下 Legacy 模式工作正常 (radio0 接口)。
树莓派 3B 下, 2.4Ghz 频段下 Legacy 模式和 N 模式工作正常 (radio2 接口)。

IPV6

从第四版固件开始,文件名带有 “IPV4+IPV6”的固件已支持连通 IPV6,但我们需要在 “网络 - 接口”中将 “IPv6 ULA 前缀”框中的内容清空 (如果此项本身为空可忽略此步),重启后才可正常连通 IPV6 网络,否则 IPV6 默认不可用。如果你不需要接入 IPV6 可以忽略此项。

清空"IPv6 ULA 前缀"

IPV6 连通成功

重启即可连通 IPV6 网络~

查看 IPV6 是否连通可以在这里测试:http://test-ipv6.hkg.vr.org/

IPV6 测试成功

开启神秘功能

本固件自带 ShadowSocksR 客户端,但是因为蜜汁原因,刷好固件后 ShadowSocksR 的控制面板默认隐藏,我们可以在 SSH 或者 TTYD 终端中执行以下命令开启这个十分重要的功能(来自:https://github.com/coolsnowwolf/lede/issues/881#issuecomment-444450163

echo 0xDEADBEEF > /etc/config/google_fu_mode

ShadowSocksR控制面板

功能展示

看到这里,你可能会说:小苏你自卖自夸了这么长时间,这个固件究竟有哪些功能呢?别着急,有图有真相:

控制面板首页

控制面板首页

软件包控制面板

软件包控制面板

ShadowSocksR Plus+

ShadowSocksR Plus+ (同时支持 V2Ray 和 SS)

Adbyby Plus+

Adbyby Plus+ 去广告程序

Frpc 内网穿透客户端

Frpc 内网穿透客户端

MentoHUST(锐捷校园网拨号客户端)

MentoHUST

LXC 容器

LXC 容器

Aria2

Aria2 配置

Aria2 Web-UI

Aria2 Web-UI

Samba

Samba 4.0

Transmission

Transmission

Transmission Web 界面

Transmission Web Interface

SSR Python 服务器

SSR Python 服务器

Turbo ACC 网络加速

Turbo ACC 网络加速(支持 BBR 加速)

多线多拨

多线多拨

负载均衡

负载均衡

统计图表

统计图表

固件功能列表

OpenWrt
├── 状态
│├── 概况
│├── 防火墙
│├── 路由表
│├── 系统日志
│├── 内核日志
│├── 进程
│├── 实时信息
│├── VNStat 流量监控
│├── WireGuard 状态
│├── 负载均衡
│└── 释放内存
├── 系统
│├── 系统
│├── Web 管理
│├── 管理权
│├── 软件包
│├── TTYD 终端
│├── 启动项
│├── 计划任务
│├── 时间同步
│├── 挂载点
│├── LED 配置
│├── 备份/升级
│├── 自定义命令
│├── 定时重启
│├── 文件传输
│├── 双分区启动切换
│└── 重启
├── 服务
│├── MentoHUST
│├── ShadowSocksR Plus+
│├── 广告屏蔽大师 Plus+
│├── Adblock
│├── 上网时间控制
│├── 动态 DNS
│├── WiFi 计划
│├── LXC Containers
│├── WatchCat
│├── 网络唤醒
│├── Tinyproxy
│├── UPnP
│├── Frp 内网穿透
│├── KMS 服务器
│├── HAProxy
│├── Shairplay
│├── 迅雷快鸟
│└── MWAN3 分流助手 (IPV4+IPV6 固件不可用)
├── 网络存储
│├── 可道云
│├── USB打印服务器
│├── 硬盘休眠
│├── 网络共享
│├── aMule 设置
│├── Aria2 配置
│├── miniDLNA
│├── MJPG-streamer
│├── Transmission
│└── FTP服务器
├── VPN
│├── SSR Python 服务器
│├── N2N v2 VPN
│├── OpenVPN 服务器
│├── PPTP VPN 服务器
│└── ZeroTier
├── 网络
│├── 接口
│├── 无线
│├── 访客网络
│├── DHCP/DNS
│├── 主机名
│├── IP/MAC 绑定
│├── 静态路由
│├── 防火墙
│├── 诊断
│├── SQM QoS
│├── 动态 DNSPOD
│├── Turbo ACC 网络加速
│├── 多线多拨 (IPV4+IPV6 固件不可用)
│└── 负载均衡 (IPV4+IPV6 固件不可用)
├── 带宽监控
│├── 显示
│├── 配置
│├── 备份
│└── 实时流量监测
└── 统计
├── 图表
└── 设置

安装和升级

安装

带有 factory 字样的文件为安装固件,下载固件到本地并解压即可得到 factory 格式的 img 镜像文件。其中,文件名中带有 ext4 字样的为 ext4 固件,文件名中带有 squashfs 字样的为 squashfs 格式固件,即使固件格式不同,但是它们刷入 SD卡 的方法是一样的,在 Windows 下你可以使用 Win32 Disk Imager或者 Etcher 将 img 固件写入 SD卡,在 Linux 下你可以使用 dd命令写入。

升级

带有 sysupgrade 字样的文件为升级固件,下载固件到本地并解压即可得到 sysupgrade 格式的 img 镜像文件,如果你想从我编译的旧版固件升级到新版固件,可以直接在 Luci 控制面板中刷入 sysupgrade 格式的 img 镜像固件 (可免去在电脑端刷写固件的麻烦),此操作只会升级系统分区,如果打钩“保留配置”,那么用户数据将不受影响。

如果卡中的固件不是我编译的 OpenWrt 固件 ,包括但不限于其他发行版固件 (如 Raspbian,Arch Linux Arm 等) 或其他人编译的 OpenWrt 固件,都需要刷入带有 factory 字样的固件

固件升级

固件下载

蓝奏云 (只提供最新版下载):

32位 (适用于 2/3B/3B+):
IPV4 Only:
https://www.lanzous.com/b791329
IPV4+IPV6:
https://www.lanzous.com/b791330
ipk 软件包 (IPV4 / IPV6 通用):
https://www.lanzous.com/b791331

Oneindex 文件镜像(包含当前版本及所有历史版本):

http://netdisk.club/OpenWrt/

百度网盘(包含当前版本及所有历史版本):

链接: https://pan.baidu.com/s/1DqhSb9WtYpPnBterziObTA
密码: vemw

参考资料

OpenWrt By Lean · coolsnowwolf/lede - GitHub:
https://github.com/coolsnowwolf/lede

不显示S-SR-plus · Issue #881 · coolsnowwolf/lede - GitHub:
https://github.com/coolsnowwolf/lede/issues/881#issuecomment-444450163

MentoHUST OpenWrt ipk · KyleRicardo/MentoHUST-OpenWrt-ipk - Github:
https://github.com/KyleRicardo/MentoHUST-OpenWrt-ipk

OpenWrt/LEDE LuCI for MentoHUST BoringCat/luci-app-mentohust - Github:
https://github.com/BoringCat/luci-app-mentohust

树莓派 3(Raspberry Pi 3)安装 Openwrt + shadowsocks + ChinaDNS - 简单
http://www.wzero.net/?p=137

树莓派 3 做路由并负载 SSR - 瓜地
https://ljkgpxs.xyz/2018/01/24/raspberry3b-router-run-shadowsocksr/

Resize the root partition - Banoffee Pi Server:
http://banoffeepiserver.com/resize-the-root-file-system-partition.html

文章更新

20170606 初次成文

问题提出

在之前的文章中:

FolderSync:文件夹同步&备份利器

小苏介绍过使用FolderSync在设备间同步文件的方法,同样的,FolderSync也适用于树莓派,比如你可以采用FTP方式或者SFTP方式在树莓派和局域网设备之间同步文件。但这两种方式有一个最大的缺点,就是"速度慢"。在一般情况下,在局域网中使用FTP或者SFTP的传输方式只能达到3m/s左右的速度(树莓派的网口为100Mbps),因此FTP/SFTP方式显然不能满足我们对于文件同步的需求,所以,我们需要一种更快的的方式来完成树莓派与各设备间的文件同步工作,Syncthing就是方案之一,使用Syncthing在局域网各设备之间同步文件,可以达到6m/s的速度。

解决方案

Syncthing是一个跨平台,开源且免费的基于P2P的文件同步解决方案,支持Windows,Mac,Linux,Android。有些遗憾的是,目前Syncthing暂不支持iOS平台。

Github项目:
https://github.com/syncthing/syncthing
Release页面:
https://github.com/syncthing/syncthing/releases

接下来小苏为大家介绍一下如何在树莓派上安装和启用Syncthing:

因为树莓派的CPU是ARM架构,所以我们需要在Release页面获取到编译好的且适用于ARM架构的程序文件压缩包地址:

进入Release页面,找到文件名形如syncthing-linux-arm-xxxxx.tar.gz的最新版本("xxxxx"代表版本号),并获取该版本对应的链接。

例如截至发稿前,Syncthing的最新版本为v0.14.30-rc.1,在Release页面内,ARM架构的程序文件压缩包名称为syncthing-linux-arm-v0.14.30-rc.1.tar.gz,所以我们可以得到此压缩包的下载地址为:https://github.com/syncthing/syncthing/releases/download/v0.14.30-rc.1/syncthing-linux-arm-v0.14.30-rc.1.tar.gz

获取到下载链接后,登录树莓派的SSH,因为官方不推荐以Root用户运行Syncthing,所以以下内容在pi用户下操作(命令中未提到sudo则无需加sudo)。

cd ~ #定位到pi用户的家目录
wget https://github.com/syncthing/syncthing/releases/download/v0.14.30-rc.1/syncthing-linux-arm-v0.14.30-rc.1.tar.gz #下载二进制文件压缩包至pi用户家目录
tar -zxvf syncthing-linux-arm-v0.14.30-rc.1.tar.gz #解压下载好的压缩包

解压完成后,执行ls命令,我们会发现从压缩文档中解压出了一个名为syncthing-linux-arm-v0.14.30-rc.1的目录,为了方便以后的操作,我们将此文件夹重命名为:.syncthing:

mv syncthing-linux-arm-v0.14.30-rc.1 .syncthing #重命名文件夹为
cd .syncthing
chmod +x syncthing #将Syncthing的程序文件赋予可执行权限

接着,我们执行程序尝试启动Syncthing服务(./syncthing文件夹下的syncthing文件为Syncthing的程序文件):

~/.syncthing/syncthing

此时程序将在屏幕上输出一些信息,比如程序监听的端口,WEB页面的地址等等。等待程序无输出后,不要执行任何操作,使用同一局域网下其他设备的浏览器访问"http://树莓派的在局域网中的IP地址:8384"查看是否能成功打开Syncthing的WEBUI(网页管理界面)。若不能正常打开,则进入下一步,如果可以成功打开,下一步可以忽略。不论是否能打开,测试完毕后,我们先使用"Ctrl+C"终止Syncthing程序。

若未能打开树莓派的WEBUI,我们需要对Syncthing的配置文件做出一些修改:

vim ~/.config/syncthing/config.xml #编辑Syncthing的配置文件

在config.xml中,我们可以找到以下代码:

<address>127.0.0.1:8384</address>

其中,我们需要将127.0.0.1修改为0.0.0.0,如果你想要自定义Syncthing的WEBUI端口,可以将8384修改为其他端口如7777

修改完的结果如下(将WEBUI端口修改为"7777",因为好记):

<address>0.0.0.0:7777</address>

修改完毕后,保存文件,并且再次尝试启动Syncthing服务:

~/.syncthing/syncthing

这时使用同一局域网下其他设备的浏览器访问"http://树莓派的在局域网中的IP地址:7777"应该可以打开Syncthing的WEBUI了。

使用这种方法启动Syncthing时,需要一直保持SSH连接,一旦使用"Ctrl+C"结束Syncthing进程或是退出终端,Syncthing的服务就会停止。如果你想让Syncthing在退出终端后也保持在后台运行,可以执行以下命令:

(~/.syncthing/syncthing &) #记得把加上括号执行哦~

  

参考资料

使用SYNCTHING在树莓派上替代BT SYNC - 无聊小博

文章更新

20170525 初次成文

问题提出

在实际网络环境中,树莓派常常处于内网环境下,由于内外网相互隔离的原因,我们无法在外网访问处于内网中的树莓派。为了解决这个问题,"内网穿透"技术应运而生。

FRP是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https协议。在这篇文章中,小苏将为大家介绍FRP服务端和客户端的配置,通过FRP,让树莓派穿透内网,使大家在外网环境下也能轻松访问处于内网中的树莓派~

本篇文章只做抛砖引玉目的 ,请大家在看完文章之后再仔细阅读一下FRP官方文档以了解详情~

解决方案

FRP是一个免费开源的项目,其代码托管在Github上:

FRP项目:
https://github.com/fatedier/frp/
FRP官方中文说明文档:
https://github.com/fatedier/frp/blob/master/README_zh.md
Release页面:
https://github.com/fatedier/frp/releases

FRP分为客户端程序和服务端程序两部分,其中,我们需要一台拥有公网IP的机器作为服务端。在Release页面,我们可以下载到已经编译好的适用于不同架构/平台的程序压缩包,每个程序压缩包中包含此架构/平台下的客户端和服务端。

截至本文发稿前,FRP的最近版本为0.10.0,这是一个包含了很多改动的版本,如果你使用的是旧版的frp程序,需要将客户端和服务端同时升级并重新配置。

由于树莓派的CPU是arm架构,所以我们需要下载frp_0.10.0_linux_arm.tar.gz,解压此文件后将得到:

frp_0.10.0_linux_arm
 ├─ LICENSE#版权许可
 ├─ frpc#arm架构的frp客户端程序
 ├─ frpc.ini#frp客户端配置说明文件
 ├─ frpc_min.ini#frp客户端最小化配置文件
 ├─ frps#arm架构的frp服务端程序
 ├─ frps.ini#frp服务端配置说明文件
 └─ frps_min.ini#frp客户端最小化配置文件

由于我们只需要arm架构的客户端程序,所以我们只需要其中的frpc这个文件,至于客户端配置文件,之后小苏会提供。

相似的,我们还需要获取FRP服务端程序,在此次配置过程中,小苏使用一台Debian系统,64位CPU的vps作为服务端载体,所以小苏需要在Release页面下载frp_0.10.0_linux_amd64.tar.gz,解压文件后得到:

frp_0.10.0_linux_amd64
 ├─ LICENSE#版权许可
 ├─ frpc#amd64架构的frp客户端程序
 ├─ frpc.ini#frp客户端配置说明文件
 ├─ frpc_min.ini#frp客户端最小化配置文件
 ├─ frps#amd64架构的frp服务端程序
 ├─ frps.ini#frp服务端配置说明文件
 └─ frps_min.ini#frp客户端最小化配置文件

相应的,frps这个文件是我们所需要的,其配置文件小苏之后会提供。

客户端(frpc)配置

得到所需文件后,我们开始配置frp的客户端程序:

使用SFTP连接到树莓派,将frpc传到树莓派的/bin目录,并且登入SSH,执行以下命令:

sudo chmod +x /bin/frpc
sudo touch /bin/frpc.ini
sudo vim /bin/frpc.ini

将以下内容粘贴进frpc.ini中,依实际情况修改后并保存(文末也提供单独的ini配置文件供大家使用):

[common]
server_addr = 123.123.123.123    #服务器公网IP
server_port = 7000    #frp服务端口,需与frps.ini相同
privilege_token = 123456      #特权模式密钥,需与frps.ini相同

log_file = /bin/frpc.log    #日志文件存储路径
log_level = info    #日志记录级别
log_max_days = 3    #日志最大存储天数
pool_count = 5
tcp_mux = true

[ssh]    #服务名称,可自定义
type = tcp    #协议类型(tcp)
local_ip = 127.0.0.1
local_port = 22    #本地SSH服务端口
remote_port = 2200    #穿透后SSH服务访问端口

[web]    #服务名称,可自定义
type = http    #协议类型(http)
local_ip = 127.0.0.1
local_port = 80    #本地web服务端口
use_encryption = false
use_compression = true
subdomain = web    #二级域名,建议与此项的服务名称"web"设置为相同
custom_domains = web.frp.com    #自定义域名

服务端(frps)配置

相似的,将frps文件上传到服务器的/bin目录下,登陆SSH,执行以下命令(命令基本相同,只不过上面是frpc这里是frps):

sudo chmod +x /bin/frpc
sudo touch /bin/frps.ini
sudo vim /bin/frps.ini

将以下内容粘贴到frps.ini中,依实际情况修改后保存(文末提供单独的ini配置文件供大家使用):

[common]
bind_addr = 0.0.0.0
bind_port = 7000    #frp服务端口,需与frpc.ini相同
vhost_http_port = 80    #http服务端口
vhost_https_port = 443    #https服务端口
dashboard_port = 7500    #控制台端口
privilege_token = 123456    #特权模式密钥,需与frpc.ini相同

log_file = /bin/frps.log    #日志文件存储路径
log_level = info    #日志记录级别
log_max_days = 3    #日志最大存储天数
max_pool_count = 5
authentication_timeout = 900

subdomain_host = frp.com    #服务端绑定域名
tcp_mux = true

值得说明的是,frps.ini中subdomain_host的域名需要泛解析到服务器的公网IP(比如*.frp.com),这个时候,如果客户端frpc.ini文件中的subdomain属性有定义(如web),则此服务绑定的域名为web.frp.com。

如果frpc.ini中定义了custom_domains属性,那么可以将custom_domains中提到的自定义域名解析到服务器所在的公网IP,方可正常使用该自定义域名访问此项服务。

在frps.ini中,vhost_http_port的值一旦被指定(如80),那么所有客户端中web服务映射到服务器中的端口都相同(都为80,比如http://web.frp.com:80),vhost_https_port同理。

dashboard_port属性指定了服务器的控制台端口(以7500为例),访问服务器ip:该端口(如http://123.123.123.123:7500),即可进入控制面板来查看frp服务的状态信息(默认用户名和密码都为admin)。

frpc.ini和frps.ini中注释未提到的内容可以在官方文档或压缩包中自带的配置说明文件frpc.ini/frps.ini中找到,未提到的内容大多为官方推荐配置,可直接应用。为节省篇幅,这里不再赘述。

测试frps服务(服务端)

配置文件配置完毕后,我们可以尝试在服务器端执行以下命令以启动frps服务:

(sudo) /bin/frps -c /bin/frps.ini

执行完毕后,frps服务将会在前台启动,且终端应该不会有输出(若终端有输出,可能在启动过程中出现了某些错误)。这时候我们使用Ctrl+C终止程序,执行cat命令查看日志文件:

(sudo) cat /bin/frps.log

如果日志文件中没有错误信息,那么说明frps服务端配置且启动正常。
Screenshot_20170525-215330~01.png

测试frpc服务(客户端)

类似的,在客户端(树莓派)中我们需要执行以下命令启动frpc服务:

sudo /bin/frpc -c /bin/frpc.ini

同理,执行完毕后,终端应该不会有输出,使用Ctrl+C终止程序,执行cat命令查看日志文件:

sudo cat /bin/frpc.log

若未出现错误信息,则说明frpc客户端配置且启动正常。
Screenshot_20170525-215015~01.png

启动FRP服务

将启动脚本(文末提供)startfrpc.sh传到客户端(树莓派)的/bin中,将启动脚本startfrps.sh传到服务端的/bin中,并且使用以下命令赋予这两个脚本可执行权限。

值得注意的是,在启动脚本中需要用到curl程序,## 若客户端/服务端中未安装curl,则应先安装curl## 。

sudo chmod +x /bin/startfrpc.sh #在客户端中执行
sudo chmod +x /bin/startfrps.sh #在服务端中执行

赋予可执行权限之后,在终端执行以下命令即可启动FRP:

sudo startfrpc.sh #客户端启动脚本
(sudo) startfrps.sh #服务端启动脚本

  

开机自启FRP服务

接下来,我们将让frps/frpc服务开机启动:

编辑客户端(树莓派)/etc/rc.local文件,在exit 0之前添加以下代码行:

# Start Frpc
/bin/startfrpc.sh >> /dev/null 2>&1

编辑服务端/etc/rc.local,在文件末尾添加以下代码行(如果文件末行为exit 0,则应该将以下内容添加到exit 0之前):

# Start Frps
/bin/startfrps.sh >> /dev/null 2>&1

这时,关机并重新启动客户端和服务端,待开机后,在客户端或者服务端中执行以下命令:

ps -A | grep frp

若返回类似结果则证明frps/frpc服务启动成功:

客户端:

1920 ?        00:00:00 startfrpc.sh
1925 ?        00:00:15 frpc

服务端:

1920 ?        00:00:00 startfrps.sh
1925 ?        00:00:15 frps

停止FRP服务

我们可以使用相同的命令查看FRP服务的PID,比如在服务端中执行:

ps -A | grep frp

例如终端返回:

1920 ?        00:00:00 startfrps.sh
1925 ?        00:00:15 frps

可以得到这两个进程的PID为1920和1925,我们可以使用kill命令杀掉这两个进程来停止FRP服务:

(sudo) kill 1920 1925

  
客户端停止流程同理。

资源下载

FRP.zip

解压此压缩包将会得到以下文件,对文件按需修改后按文章内容操作即可:

FRP
├─ frpc
│ ├── frpc.ini#未添加注释的示例frpc.ini
│ ├── frpc_note.ini#添加注释的示例frpc.ini
│ └── startfrpc.sh#frpc启动脚本
└─ frps
├── frps.ini#未添加注释的示例frps.ini
├── frps_note.ini#添加注释的示例frps.ini
└── startfrps.sh#frps启动脚本

文章更新

20170328 初次成文
20170417 更正了有关Autojump的内容

问题提出

今天小苏要为大家介绍的是如何在树莓派上安装和配置zsh,zsh和系统默认的bash一样,都是Linux系统的一种Shell。相对于默认的bash来说,zsh的长处在于自定义与可扩展程度强,人性化程度高。在写这篇文章之前,小苏拿"树莓派 zsh"做关键词在Google上搜索了一下,搜索结果中似乎没有文章能比较系统地介绍如何在树莓派上安装和配置树莓派,所以干脆自己写一篇喽~

正文开始(以下内容默认针对于树莓派的默认用户pi):

安装zsh

首先我们执行以下命令查看一下系统对各Shell的支持情况:

cat /etc/shells

在终端返回的结果中,可能会看到/bin/zsh/usr/bin/zsh的字样,如果没有看到也没关系,我们可以接着进行下一步:

sudo apt-get update #更新软件源索引
sudo apt-get install zsh #安装zsh

zsh安装完成后,再次执行:

cat /etc/shells

不出意外的话,终端应该会返回包含/bin/zsh`0或/usr/bin/zsh字样的结果了。

基础配置

下面我们使用oh-my-zsh来配置zsh,oh-my-zsh是一个快速&自动化配置zsh的项目,项目地址:https://github.com/robbyrussell/oh-my-zsh

cd ~
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh #下载并执行oh-my-zsh自动配置脚本

执行此命令后,脚本将会下载zsh所需的资源和配置文件至~/oh-my-zsh/目录,并将根据你的系统环境变量完成对zsh的配置。

接着,我们可以执行以下命令将zsh切换为此用户的默认Shell(可能需要pi用户的密码):

chsh -s /bin/zsh #无需加sudo

退出终端并再次登录终端,这时命令指示符应该有变化了,说明zsh的基础配置完成。

进阶配置

接着我们对zsh进行"进阶配置"(这里先说配置,之后会对这些配置进行解释):

我们通过更改~/.zshrc文件来对zsh进行进一步的配置:

cd ~
vim .zshrc #编辑zsh配置文件

根据小苏的习惯,对此文件的更改如下(以下内容已包含在原文件中,我们仅需要对其进行修改即可):

ZSH_THEME="blinks"    #将zsh的主题更改为blinks
ENABLE_CORRECTION="true"    #(去掉ENABLE前的"#")打开zsh的自动纠错功能
plugins=(git sudo)    #为zsh添加git和sudo插件

将以下内容添加到文件的末尾以重定向默认命令或添加自定义命令:

# Alias Settings
alias ll='ls -all'
alias vi='vim'
alias ps='ps -A'
alias ifconfig='sudo ifconfig'

其中,alias ifconfig='sudo ifconfig'这一句比较重要,如果不加此内容,在pi用户下可能会出现无法执行ifconfig命令的情况。

我们还可以安装Autojump插件,以实现快捷定位常用目录(需要在安装之前配置Python环境):

cd ~
git clone git://github.com/joelthelion/autojump.git #从Github克隆Autojump项目
cd autojump
sudo chmod 755 install.py
./install.py #执行安装脚本,安装Autojump

在脚本执行结果的末尾,你将会看到类似这样的内容(实际内容可能不一样):

[[ -s /home/pi/.autojump/etc/profile.d/autojump.sh ]] && source /home/pi/.autojump/etc/profile.d/autojump.sh
autoload -U compinit && compinit -u

复制终端中这段内容,添加到~/.zshrc文件末尾即可启用Autojump。接着,我们可以执行以下命令重载.zshrc文件以更新zsh配置:

source .zshrc #重载zsh配置文件

关于"进阶配置"的解释

1.开启自动纠错:

当纠错功能开启后,当你键入的命令被zsh判定为"可能错误的命令"时,将会提示你是否将此命令重定向为"zsh认为可能正确的命令",比如键入iconfig命令时,zsh将会返回以下提示:

zsh: correct 'iconfig' to 'ifconfig' [nyae]?

键入 y 即可将刚刚输入的iconfig命令重定向到ifconfig命令:

2017-03-28_6_21_49_下午.jpg

2.开启sudo插件:

开启sudo插件后,如果遇到上一条命令因为未在命令头部添加sudo命令而保存的情况时,只需要双击"Esc"键,即可自动为刚才键入的最后一条命令补全sudo。

3.重定向默认命令或添加自定义命令:

在.zshrc文件中添加alias字段即可重定向默认命令或添加自定义命令,如在终端中执行ll命令,相当于执行ls -all文件,执行ps命令则相当于执行ps -A命令:

2017-03-28_6_22_11_下午.jpg

4.添加并启用Autojump插件:

启用Autojump插件后,插件将记录你经常定位的目录,存储到数据库中,当之后想要访问此目录时,只需要键入:

j <目录简称>

即可快速定位。比如/var/www/html是我经常定位的目录。如果我想快捷访问此目录,只需要键入:

j html

即可快速定位。

Screenshot_20170417-101520.png

参考资料

oh-my-zsh配置你的zsh提高shell逼格终极选择:
http://yijiebuyi.com/blog/b9b5e1ebb719f22475c38c4819ab8151.html

高效Linux之autojump的安装、配置与使用:
http://www.linuxdiyf.com/linux/13711.html

文章更新

20170221 初次成文
20170418 修改"SSH配置"内容

不务正业的小苏又来了~

这些日子小苏入了一款适用于树莓派的Dac扩展板,可以将音频文件解码为模拟信号通过3.5mm插孔或者通过双莲花插口输出。相应的,需要专用的系统Volumio2来驱动这块Dac扩展板。

为什么要专门写这篇文章呢?因为在可被百度搜索到的中文网页中,有关Volumio配置的中文文章少之又少,不得已,小苏只好把目光转向了谷歌。在爬了若干英文资料后,小苏终于解决了一个又一个的坑,成功配置好了Volumio2。

在这篇文章中,小苏使用的扩展板型号是PiFi Dac+ V2.0,Volumio版本为发文时的最新版Volumio2.041 (2016-12-12)。

折腾记录

1.系统烧写:

烧写Volumio的步骤和烧写Raspbain的步骤是一样的。在Windows下可以使用win32diskimager烧写镜像至SD卡,在Linux下可以使用dd命令烧写镜像。Windows下烧写镜像的文章有很多,如果你想在Linux下烧写镜像,可以参考这篇文章:

Linux命令行烧录树莓派镜像至SD卡 - 树莓派实验室

稍稍告诉你,如果你有两张SD卡,并且其中的一张安装了Rasbain或者其他适配于树莓派的Linux系统时,也可以在树莓派上使用dd命令,将镜像烧写到另一张SD卡。

Volumio的镜像文件可以在这里下载到:

https://github.com/volumio/Volumio2/releases

2.上电开机:

将Volumio镜像烧写到SD卡后,将SD卡插入树莓派,将Dac扩展板下的插槽插入树莓派的GPIO引脚后,就可以上电开机了。上电后,Dac扩展板上的红色指示灯(电源指示灯)会亮起,代表扩展板通电正常。初次开机花费的时间比较长,可能需要5分钟左右的时间,在这段时间内,Volumio会自动执行系统初始化,扩展SD卡分区等工作。等待这些工作进行完毕后,Volumio会开启一个名为"Volumio",密码为"volumio2"(注意大小写,密码中的"v"为小写,热点名称中的"V"为大写)的热点方便用户配置。这个热点的开启也标志着Volumio开机成功。

3.语言配置:

连接此热点后,我们可以通过在浏览器地址栏中输入:http://volumio.local或者http://192.168.211.1/来登陆Volumio的WebUI。由于Volumio的WebUI语言默认为英文,所以我们需要依次点击"齿轮图标" - APPEARANCE - Select Language - 简体中文 来将WebUI的语言设置为简体中文(下图为语言变更前的截图,点击"Save"按钮后语言就会被更改为中文了~)。

Screenshot_20170220-223357.png

4.Dac设置:

直插Dac扩展板之后是不能直接播放声音的。还需要在"播放选项"中对Dac进行一番设置。小苏的设置图如下:

Screenshot_20170220-222914.png

按照图中设置完毕后,对于DAC Model设置这一块,做出更改后理论上是不需要重启就可以生效的(仅仅是对于我这块PiFi Dac+ v2.0或者是对于HiFiBerry Dac+来说,其他板子还是需要重启才能生效的),但是为了保险起见,小苏还是推荐大家在更改DAC Model后进行一次重启操作("齿轮图标" - 关机 - 重启),确保驱动正常工作无误。

5.SSH配置:

Volumio默认开启了SSH服务,所以当你的设备与树莓派处在同一WIFI网络下时,可以通过SSH连接到树莓派。这也就意味着你可以通过SSH连接到Linux终端对树莓派进行命令行操作,也可以通过SFTP连接到树莓派进行文件的传输与管理操作。因为Volumio基于Rasbain,所以Volumio在终端的很多操作与Rasbain相似。值得说明的是,在Volumio2.0中,默认的SSH帐号不是pi而是volumio,默认的密码不是raspberry而是volumio。也就是说,在Volumio中,登陆SSH的默认帐号密码都是volumio

通过SSH连接到终端后,终端会输出以下欢迎界面:

Screenshot_20170220-234000.png

因为Volumio基于Rasbain,所以我们可以像在Rasbain上一样,对Volumio进行更换软件源,安装软件等操作。详情可以参考我的这篇文章:

树莓派折腾记:琐碎小笔记

同时,给Volumio执行sudo apt-get upgrade等升级命令是无法正常升级的,原因是Volumio的正常运行需要某些包的支持,升级后可能导致这些新版本的包不再兼容Volumio而损坏系统,所以不要给Volumio执行升级(upgrade)操作,即使你这么做了,你也无法升级成功。

6.播放音乐

进行了前面那么多配置,终于到了最激动人心的时刻了。Volumio支持播放本地音乐(即存放在SD卡中的音乐文件),USB存储中的音乐(即标准USB存储设备中的音乐文件),还支持播放NAS中的音乐。当你插入USB存储设备或者连接到NAS后,Volumio会自动挂载这些设备并在"Browse界面" - 音乐库中显示出来。那么问题来了,本地音乐应该放到什么地方呢?是不是把音乐文件放到SD卡的任何一个目录Volumio都能识别并且能在"音乐库"中显示出来呢?

当然不是~

对于本地音乐,最好的方式是将它们通过SFTP上传到/data/INTERNAL/目录下,并且最好按照自己的播放习惯分文件夹存储(当然不分文件夹存储也可以,但是如果把所有音乐文件直接塞到INTERNAL目录下,从"音乐库"中加载文件时可能会很费劲),如果不把音乐文件存放在/data/INTERNAL/下,Volumio很可能无法识别,即使能够识别,也有可能出现无法播放的情况。

在Volumio官方社区给出的一种方式是将音乐文件存放到/home/volumio/music/下,然后将/home/volumio/music链接到/var/lib/mpd/music/下,小苏试了一下,这种方法在Volumio2.0上似乎并不可取,使用这种方法会出现可以识别音乐文件但是无法播放的情况。也许这种方法在Volumio1.x下可行吧~

(这是小苏推荐的本地音乐文件存放方式:)

Screenshot_20170221-000814.png

到此为止,小苏关于Volumio的介绍就结束了~下面看看Volumio的WebUI截图吧~

Screenshot_20170219-204052.png

Screenshot_20170221-000346.png

Screenshot_20170221-000337.png

Screenshot_20170221-000459.png

Screenshot_20170221-000826.png

参考资料

Volumio2 Github项目:

https://github.com/volumio/Volumio2/

Volumio 官方帮助文档(docs):

https://volumio.github.io/docs/index.html

Linux命令行烧录树莓派镜像至SD卡 - 树莓派实验室:

http://shumeipai.nxez.com/2013/12/08/linux-command-line-burn-raspberry-pi-mirror-to-sd-card.html

文章更新

20161212 初次成文
20170601 更新多站点的部署方式并增加注意事项

问题提出

谈到树莓派能折腾些什么,不得不提的就是把树莓派部署所需环境在小派上跑网站了。在这篇文章中,小苏会向大家介绍如何在树莓派上部署LNMP环境并实现多站点访问。

由于树莓派在软件和硬件上的更新,互联网中大多数有关在树莓派上部署LNMP环境的教程大多基于"树莓派2代",经过小苏的测试,这些教程已经不再适用于小苏手中的"树莓派3代"了,经过一番搜索和折腾,小苏最终找到了使用于3代的部署教程,并且经过进一步折腾,终于在树莓派3代上成功实现了"多站点共存"。

解决方案

  1. 做一些准备工作:

sudo apt-get update #更新软件源索引
sudo apt-get upgrade #更新已安装的软件(可选)

  1. 安装Nginx,PHP,MySQL和它们的一些依赖组件:

sudo apt-get install nginx php5-fpm php5-cgi php5-cli php5-curl php5-gd php5-mcrypt php5-mysql php5-memcache php5-gd php5-sqlite php5-cgi php5-xmlrpc mysql-server mysql-client

值得一提的是,这个过程是直接安装编译好的deb包,而不是下载源码另外编译,但即使如此,这个过程还是可能需要较长时间。

在安装过程中,需要用户输入MySQL的Root用户密码,按提示输入,输入完成按"回车键"即可提交。

  1. 安装phpmyadmin:

sudo apt-get install phpmyadmin

在安装过程中需要用户选择已安装的服务器类型,有apache和lighthttpd两个选择,但我们刚刚安装的nginx却不在选择列表内,选择apache即可,没有影响。

如果你在安装phpmyadmin的过程中遇到了类似以下内容的提示,可以按Tab键切换光标,选择"Yes"后按Enter键确认以进行接下来的操作(若未遇到此提示请忽略):


The phpmyadmin package must have a database installed and configured before it can be used. This
can be optionally handled with dbconfig-common.
If you are an advanced database administrator and know that you want to perform this configuration
manually, or if your database has already been installed and configured, you should refuse this
option. Details on what needs to be done should most likely be provided in
/usr/share/doc/phpmyadmin.

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

在安装过程中还需要MySQL的Root用户密码,输入刚刚设置好的即可,并且还需要输入phpmyadmin的管理密码,输入并按回车键提交即可。

安装phpmyadmin完成后,我们需要创建一个链接将phpmyadmin文件夹链接到Nginx的网页文件夹中:

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

  1. 配置Nginx网站文件夹属性:
    将Nginx默认的网页文件夹:/var/www/html/赋予可执行权限,并且将其用户组改为"www-data"。

sudo chmod 755 /var/www/html/ #将/var/www/html/文件夹赋予可执行权限
sudo chown -R www-data:www-data /var/www/html #将/var/www/html/文件夹的用户组改为"www-data"

  1. Nginx配置:
    在这一步中,我们通过修改Nginx站点属性文件来配置Nginx:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak #备份Nginx默认站点属性文件
sudo vim /etc/nginx/sites-available/default #使用vim编辑默认站点属性文件

在vim中,我们清空原文件的内容,粘贴以下内容:


server
{
    listen       80;
    server_name yourdomain.com; #server_name end
    index index.html index.htm index.php; #index end
    charset utf-8;

    root  /var/www/html;

    location ~ .*\.php(\/.*)*$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
  }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma)$
    {
        expires      30d;
    }

    location ~ .*\.(js|css)$
    {
        expires      12h;
    }

    access_log off; #access_log end
    error_log /dev/null; #error_log end
}

其中,我们需要修改文件中的"yourdomain1.com"为你想要绑定的域名,其他保持默认,保存文件。

这个站点为默认站点,所谓的默认站点,为访问者访问树莓派的IP地址后显示在访问者屏幕上的站点。

保存文件后我们需要重启一下Nginx:

sudo service nginx restart #重启Nginx服务

  1. 做完这一步后,访问"http://你的树莓派IP地址/phpmyadmin"即可看到phpmyadmin的登陆页面,代表LNMP环境部署成功。

至此为止,LNMP环境部署成功,我自己折腾的时候卡在第5步好久,最后以AMH面板的配置文件为基础,结合教程中fastcgi部分重新做了一份配置文件,终于成功(捂脸哭)。

下面开始介绍LNMP的多站点配置过程:

LNMP环境搭建完成后,如果你想在树莓派上部署多个网站,可以通过下面的方式操作:

在Nginx中实现多站点共存的方式是在/etc/nginx/conf.d中新建多个后缀为conf的多站点配置文件。

  1. 配置第二个站点:
    接下来我们创建第二个站点:站点文件夹路径为/var/www/site1,第二个站点的配置文件为/etc/nginx/conf.d/site1.conf ,其中,站点文件夹可以在网站配置文件(/etc/nginx/conf.d/site1.conf)中更改。

首先我们建立并配置第二个站点文件夹:

cd /var/www #将工作目录定位到/var/www
sudo mkdir site1 #新建第二个站点的网站文件夹
sudo chmod 755 ./site1 #赋予site1文件夹可执行权限
sudo chown -R www-data:www-data ./site1 #将site1文件夹的用户组改为"www-data"

配置站点配置文件/etc/nginx/conf.d/site1.conf:

sudo vim /etc/nginx/conf.d/site1.conf #新建site1.conf文件

将下面的内容粘贴到site1.conf中,修改domain2.com为你绑定的域名,保存并退出vim:


server
{
    listen       81;
    server_name domain2.com; #server_name end
    index index.html index.htm index.php; #index end
    charset utf-8;

    root  /var/www/site1;

    location ~ .*\.php(\/.*)*$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
  }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma)$
    {
        expires      30d;
    }

    location ~ .*\.(js|css)$
    {
        expires      12h;
    }

    access_log off; #access_log end
    error_log /dev/null; #error_log end
}

其中,81为此站点监听的端口,你也可以将此端口改成你想要的其他端口(只要不与其他服务的端口冲突就可以)。

接下来,我们重启Nginx服务:

sudo service nginx restart #重启Nginx服务

  1. 在局域网中访问部署在树莓派中的多个站点:
    在上面的步骤中,我们在Nginx中部署了多个站点,在局域网下的其他设备上,我们可以通过在树莓派的IP地址后加入各站点的监听端口来实现。

在上面的步骤中,默认站点的监听端口为80,所以我们可以直接访问树莓派的IP地址(IP地址后无需增加端口)即可访问到默认站点,比如树莓派在局域网中的IP地址为192.168.123.152,那么我们直接在同局域网下的其他设备的浏览器中输入:

http://192.168.123.152/

即可访问默认站点,如果你是按以上方法配置的,访问第二个站点只需要在树莓派的IP地址后加入:监听端口号,因为第二个站点的监听端口号为81,所以我们在同局域网下的其他设备的浏览器中输入:

http://192.168.123.152:81/

即可访问到第二个站点。

参考资料

在Raspberry Pi 3上搭建Typecho+LNMP:
http://www.51hei.com/bbs/dpj-55369-1.html

树莓派从系统安装到搭建nginx+php+mysql - hongfeizhou:
http://www.cnblogs.com/hongfeizhou/p/5307013.html

文章更新

20161210 初次成文

树莓派上电开机并且成功登陆之后,我们就可以愉快地折腾了,在这篇文章中,小苏会说一些"琐碎"的内容,虽然说起来"琐碎",但是这些内容可以帮助我们更方便地玩转树莓派。

  1. 解锁Root用户:

许多操作需要在Root用户下才可以进行,而默认情况下树莓派的Root用户为锁定状态,所以我们首先需要解锁树莓派的Root用户:

sudo passwd root #设置Root用户的密码,期间会让你输入两次密码(输入密码的过程中不会有任何内容提示,连*号都不会显示)
sudo passwd --unlock root #解锁Root用户

  1. 扩展SD卡上的可用空间:

在默认情况下,树莓派并不会将SD卡上的所有空间全部利用起来,不管你的SD卡有多大,在未扩展SD卡可用空间的情况下,树莓派只会将镜像写入SD卡时的镜像大小(4G多一点)当做其全部可用空间。为了充分利用SD卡空间,我们需要对树莓派进行扩展可用空间的操作:

sudo raspi-config #打开树莓派的基本配置面板

在树莓派的配置面板中,选择"Expand Filesystem",按下"Tab"键切换到"<Finish>",在"<Finish>"上按下"回车键"提交你的选项。提交并且重启后即可完成SD卡可用空间的扩展。

  1. 更换软件源为中科大源:

树莓派连接到网络之后,我们就可以为树莓派安装软件了。但由于树莓派默认软件源在英国的原因,在下载软件包时速度非常感人。为了不下载一天一夜,在安装软件之前我们需要修改树莓派的默认软件源为国内镜像源。

这里以中科大源为例(虽然在小苏这儿中科大源速度也不怎么样,不过速度肯定是比默认源好太多了,而且树莓派需要的两个源在中科大镜像源中都有):

sudo vi /etc/apt/sources.list #用vi编辑器打开sources.list

将文件所有行的开头用#注释,并在文件末尾配置中科大源:


#deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi

# Uncomment line below then 'apt-get update' to enable 'apt-get source'

#deb-src http://archive.raspbian.org/raspbian/ jessie main contrib non-free rpi

# USTC source:

deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ jessie main contrib non-free rpi

同样我们修改树莓派的第二处源地址:

sudo vi /etc/apt/sources.list.d/raspi.list #用vi编辑器打开raspi.list


#deb http://archive.raspberrypi.org/debian/ jessie main ui

# Uncomment line below then 'apt-get update' to enable 'apt-get source'

#deb-src http://archive.raspberrypi.org/debian/ jessie main ui

# USTC source:

deb http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ jessie main ui

修改完成后,执行以下命令更新源索引:

sudo apt-get update #更新软件源索引

  1. 允许Root用户登陆Openssh(SSH+SFTP)服务:

为了系统安全,在默认情况下,树莓派是不允许用户以Root身份直接登录Openssh服务的。这样在SSH中虽然没有什么问题(用户可以通过sudo命令临时取得Root权限),但是在SFTP中就有点儿麻烦了。因为在普通用户在SFTP中的控制权很小,操作系统文件(比如删除,重命名,移动等)不是特别方便,所以我们有必要允许Root用户登陆Openssh服务。

以下操作可以允许用户直接以Root身份登陆SSH和SFTP,但为了系统安全,小苏强烈推荐使用pi(也就是普通用户)身份登录SSH,而SFTP的话,可以使用Root身份登陆,但使用SFTP管理文件时,一定要注意安全。

修改完软件源之后就可以安装软件了,个人来说,小苏不是特别习惯用vi,那么第一步先安装vim吧:

sudo apt-get install vim #安装vim编辑器(可选)
sudo vim /etc/ssh/sshd_config #使用vim编辑器打开/etc/ssh/sshd_config文件

在文件内容中找到# Authentication部分,将其下的PermitRootLogin项的值改为"yes":

保存并退出vim编辑器后,重启系统:

sudo init 6 #安全重启系统

系统重启后即可通过Root身份登陆SSH和SFTP。