使用树莓派搭建服务器
‘壹’ 树莓派可以做网站的服务器吗带数据库的那种。可以的话有教程吗。注:做一个个人网站
树莓派可以安装这个LAMP系列,但Apache 和 Mysql对于树莓派这个小小的机器,太重了,主要是消耗内存多\速度慢\占用磁盘大(约200M吧),所可以选择安装一个轻量级的Web服务器:
nginx + php + sqlite
nginx:是个轻量级的Web服务器,是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,上nginx的并发能力确实在同类型的网页服务器中表现较好。
SQLite:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
很简单直接安装即可,如果卡住追问我就好了
‘贰’ 树莓派搭建文件服务器
https://www.raspberrypi.org/downloads/raspberry-pi-os/
安装 Etcher 之后启动 Etcher,插入 SD 卡、选择要安装的 img 文件、选择 SD 卡对应的磁盘分区
https://www.balena.io/etcher/
① 新建一个ssh空白文件,放到root目录下,树莓派开机会自动启用
② 网络优先选择有线网络
③ 无线网络
将刷好 Raspbian 系统的 SD 卡用电脑读取。在 boot 分区,也就是树莓派的 /boot 目录下新建
具体详情看下面
https://shumeipai.nxez.com/2017/09/13/raspberry-pi-network-configuration-before-boot.html
方法1:利用路由器软件查看IP地址
方法2:
ssh连接默认用户名:pi 密码:raspberry
方法3:IP Scanner
1.切换 root权限 sudo su
2.编辑下列文件
连接raw.githubusercontent.com失败
step1 :
在 https://site.ip138.com/raw.Githubusercontent.com/
输入raw.githubusercontent.com查询IP地址
step2 :
sudo nano /etc/hosts
你查到的ip地址,香港的就行 raw.githubusercontent.com
比如:
151.101.76.133 raw.githubusercontent.com
OpenMediaVault项目地址:
https://github.com/OpenMediaVault-Plugin-Developers/installScript
执行安装脚本:
step1:
输入树莓派的IP地址
初始用户名:admin
密码:openmediavault
step2:
1.连接硬盘
2.文件系统—>卸载硬盘
3.磁盘—>擦除
4.文件系统—>新建 文件系统选择EXT4
5.挂载—>应用
6.共享文件夹—>新建一个文件夹 设置权限
7.SMB/CIFS —>启用
8.共享—>添加共享
mac登陆
前往:连接服务器 smb://树莓派的ip地址
windows
我的电脑—>右键—>映射网络驱动器—>找到共享的文件夹
‘叁’ 树莓派4B+ Centos7 部署k3s集群工具
kubernetes用于大型集群管理,而k3s属于kubernetes的一个轻量级版本,常用于嵌入式设备使用。现把它安装到树莓派上使用。
这里用到树莓派的系统是:CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-4-2009-sda.raw,型号是4B+,8g内存。
树莓派初次启动需要扩容,并且做一些基本调整:
cgroup是linux用来对进程分配cpu、内存资源的工具,需要在启动系统时开启他,k3s会用到。
在/boot/cmdline.txt后加入这个,然后reboot
k3s是一个轻量级的k8s,适用于树莓派这种嵌入式设备。
这个脚本跑完的时候,会把k3s添加到systemd里面,可以通过systemctl status k3s来查看运作状态。启动成功就可以使用啦
官方参考: https://rancher.com/docs/k3s/latest/en/installation/ha-embedded/
等它重启个好几次之后,基本就成功了。
如果一直失败,可以输入命令刷一下iptable缓冲
iptables --flush
iptables -tnat --flush
等第二个结点加入后,在任意结点执行命令,都能查看到已有的2个Server(Master)结点了
当Server结点数大于等于3个且为奇数时,集群才可以实现高可用。
大于等于3是因为k3s使用了Raft算法来实现一致性,而Raft算法的容崩率为1/3,也就是只要集群中有2/3台机器正常运作,集群就能正常运作,所以3台机器是最低要求;要奇数个结点是因为Raft算法过程中有一个很重要的随机投票选Leader的流程,结点们通过定期投票选举出一个Leader角色,然后其他结点在它的任期内就向他同步数据,这个时候如果结点数是偶数,那么容易出现平票问题,选不出leader,并且,崩溃后集群进行数据恢复过程中,实现一致的方法是多数服从少数,如果是偶数Master结点,且刚好被分割成2个结点规模一样的集团,就没办法恢复数据了[裂开],所以需要奇数个结点以避免权力平分问题。
以上为个人理解。
有兴趣的同学可以一起探讨这类共识算法,与此类似的还有联盟链的PBFT类算法,比特币PoW算法等等。
因为集群并非开放式集群,加入集群需要获取一个token作为校验。这个token可以从Master服务器上获取。(手动加入的话,仅需要使用相同的K3S_TOKEN参数启动即可。)
这样,结点就正常连接上啦:
关闭k3s进程后,后台还留存一些服务占用着端口,需要用官方脚本关闭他们
可以flush一下iptables,等他自己重启就行了。
有可能发生了一些冲突,可以试下重装k3s-agent
目前系统已经伴随k3s安装的一些软件:
crictl :类似与docker的命令行工具,比如:
k3s :封装了kubeneters基本工具在里面的集成,如使用kubectl:
这里示范部署一个最简单的web应用
--net host 代表与本机享受同一个网络命名空间
这里可以在docker容器内开启ssh服务: https://blog.csdn.net/Leo_csdn_/article/details/96150534
做好docker镜像后,就可以部署到集群上了。
等一会儿就能在pods列表里面看到了:
但这时候,这个pod并没有对外开放,只能在集群内部相互访问,通过get services命令查看集群的服务,发现并没有我们的hello-node服务。
expose命令其实是创建了一个service,用于给这个pod提供访问入口。
(如果使用--type=LoadBalancer,则代表一个deployment上管理的所有POD进行均衡负载,但这里还没用上deployment,第四章节会使用到)
等一会儿,pod上就有一个结点IP的对外端口,供外部访问了。
运行结束后,刚启动过的pod和service就不见了,服务也停止了。
docker容器,其实就是一个运行的轻量级系统,里面可以跑我们的业务应用。
而POD则是代表容器的集合,一个POD可以运行多个容器,一台机器上可以运行多个POD。
POD未必是一个对外开放的服务,他可能只是内部计算的程序,默认只能集群内部通信,所以还有Service的概念,用于让POD对外开放端口,供外部访问。这里的service本质上是个集群内部的负载均衡器,用来给同一个Deployment分流;对应的还有Ingress,外部负载均衡器,用于给多个Deployment分流。
而Deployment顾名思义,就是一次部署的抽象实例,比如说,现在需要部署一个3台机器均衡负载的nodejs业务应用,那么这个部署任务则代表一个deployment实例。
很快,我们可以看到POD和deployment的部署情况,都已经正常运作。
进入容器后可以使用基本linux命令,也可见8080端口已经被我们的node应用占用了。
但是此时service还没有他们,也就是正处于无法提供外部服务的状态。
这里对一个deployment里面的3个pod启动了个默认均衡负载服务,暴露出来的一个端口是30057,访问可通。
也能够通过logs命令查看控制台输出的日志。
因为deployment实例中包含了pod的部署配置,所以删除deployment时,k3s就会直接把pod也删除掉。
但service并不在deployment部署的范围内,所以需要同步删除它,在删除命令中通过","与deployment分割开来即可。
至此已经把刚起来的服务全部关闭掉了。
这里我们看到3个Server(Master)结点由于需要维护集群高可用,对CPU持续20%左右的消耗,内存也需要一个G左右。而Agent(Wroker)结点只需要执行部署任务,所以对内存与CPU的需求都相对低一些,仅维持在10%左右的CPU和半个G左右的内存消耗。
参考: https://zhuanlan.hu.com/p/120171512
参考: http://kubernetes.kansea.com/docs/hellonode/
‘肆’ 如何用树莓派搭建个人 web 服务器
Apache + MySql + Php.
1、安装Apache
Apache可以用下面的命令来安装
sudo apt-get install apache2
Apache默认路径是/var/www/
其配置文件路径为:/etc/apache2/
可以通过:sudo vi /etc/apache2/ports.conf修改监听端口号
重启服务生效:sudo service apache2 restart
2、安装mysql
sudo apt-get install mysql-server
安装过程中,会出现一个提示符让你输入一个密码。
这个密码是mysql root用户的密码。
3、安装PHP
输入下面的命令,就可以安装PHP 5,以及PHP访问mysql数据库所需要的库。
sudo apt-get install php5
sudo apt-get install php5-mysql
4、测试
安装完成后,可以在浏览器中输入你路由器的IP或域名,就可以访问你的网站了。
你应该能看到一个页面显示“It works”,但是没有其它内容。
创建一个/var/www/index.php
5、外网访问
这里使用蒲公英组建异地局域网实现外网访问
先将蒲公英安装包预先上传至树莓派(路径:/home/oray/下载/PgyVPN_CentOS_2.0.0_x86_64.rpm)
通过cd命令进入存放蒲公英安装软件的目录,输入rpm命令进行安装;
cd 下载/
rpm -ivh PgyVPN_CentOS_2.0.0_x86_64.rpm
安装成功后,任意路径下输入“PgyVistor”命令即可调出交互界面,按照界面指示输入账号进行登录,可以选择打开自动登录。
之后,外网设备同样安装蒲公英客户端,用同一账号登录就可以访问树莓派的Web服务了~
‘伍’ 树莓派搭建好web服务器后怎么关联域名
1、做成web服务器需要满足:域名或者公网ip,电脑安装配置web服务,开启80端口允许访问,网站程序。2、域名或者公网ip,这一点一般家用宽带没有固定的公网ip,常用的动态域名解析花生壳,科迈动态解析,建议申请使用花生壳动态域名解析,并设置到路由器上,这样网站的访问域名是花生壳的子域名。3、如果有公网固定ip,建议购买一个域名解析到这个ip上,这个公网ip可以在电脑直接设定。web绑定,防火墙允许80端口就可以了。4、电脑安装配置web服务,这个条件比较好实现,找个服务器操作系统,如win2003系统,安装上iis组件就可以了,默认80就打开了,然后再配置一下程序需要的环境。5、如果.net程序就安装netframwork相应版本,如果php就配置php+mysql环境。6、家用宽带默认80端口在路由器不开放的,需要在路由器上做端口映射,将个人电脑ip80端口通过宽带路由映射出去。7、网站程序,自己会开发了可以自己做,不会了到网上下载一些开源程序就可以了。
‘陆’ 如何用树莓派搭建服务器
方法/步骤
1
在树莓派上安装linux系统,到官网下载系统压缩包,推荐使用raspbian。
2
如果在windows下安装,需要下载win32diskimager,解压系统,将解压出来的系统映像写到内存卡(内存卡最好大点,推荐8G以上的内存卡)。
3
如果在Linux系统下安装,先输入命令:sudo fdisk -l
查询内存卡的分区,一般是/dev/sdb。
把系统映像解压到家目录下/home/***,输入命令:
sudo dd bs=1M if=~/2016-02-26-raspbian-jessie-lite.img of=/dev/sdb
这步按你自己的实际情况操作。
看到以下输出就成功写入了。
4
把内存卡装入树莓派,开机启动,第一次会需要配置系统,可以按默认设置直接启动进入系统。
5
安装Apache。apache服务器一般在linux软件源列表有,可以用apt安装。
在安装可以先更新一下apt的软件列表,以确定安装的软件是最新。
输入命令:sudo apt-get update
更新完毕可以正式安装apache了。
输入命令:sudo apt-get install apache2
6
安装mysql。这个也是软件列表中的软件,所以直接用apt安装。因为我们是使用服务器端应用,输入以下命令安装:
sudo apt-get install mysql-server
7
安装PHP。
输入命令:sudo apt-get install php5
php还需要对数据库进行操作,所以还需要安装php5-mysql
输入命令:sudo apt-get install php5-mysql
8
注册一个域名,用nat123将你的域名与你的IP进行域名解析。若是内网则还需要内网映射。
9
在浏览器输入打开你的网址,网页正常显示服务器就搭建成功了。
‘柒’ 智慧家庭 - HA(1) - 在树莓派上架设 Home Assistant
本文索引:
Home Assistant (以下简称 HA) 是一个开源的智能家居网关项目,它可以将市面上所有支持的智能硬件设备整合到一起进行统一管理,并提供了默认的 Web UI。HA 社区开发了海量组件以支持市面上主流的设备,在 IoT 中扮演了大脑的角色。在家庭服务器上架设 HA 有多种实现方式,官方也制作了对应的系统镜像 Hass.io ,并推荐使用“树莓派3B+”作为其宿主机器。
为了验证预期效果,最好提前准备好以下设备:
通过 Docker Image 安装及更新一种服务免去了为该服务准备依赖环境的繁琐步骤, HA 官方推出了对应的 Docker Image 且支持树莓派的 CPU 架构,本文主要介绍通过 Docker 安装 HomeAssistant 。如果你不喜欢 Docker ,可以参考 Install Home Assistant 以其他方式安装。
使用 Docker 安装 HA 是非常简单的,官方提供了支持 Raspberry Pi 3 的 Docker Image 和“ 安装指南 ”:
参数 /path/to/your/config:/config 映射 container 的 /config 至本地主机的物理路径,此处我选择了 ~/.homeassistant 。如果希望安装指定版本的 Image,参考“ HA 在 Docker Hub 上的 Tag 列表 ”选择版本,例如 0.69.1:
安装完成后, HomeAssistant 的 container 已经开始运行:
查看刚刚指定的配置文件目录,出现了以下文件及目录:
config 目录(此处为 ~/homeassistant/ )下的 configuration.yaml 是配置文件的入口点,其他由 yaml 为扩展名的配置文件均是为了实现独立管理而单独分离出来的文件,可在 configuration.yaml 文档中找到如下入口载入这些配置文件:
8123 是 Web UI 的默认端口,尝试在浏览器中输入 http://{ip-address-to-raspberry}:8123 访问,得到如下结果:
HA 会自动查找接入同一网络中的智能设备,是因为 configuration.yaml 中默认配置了 Discovery 组件:
一切正常之后,每次重启树莓派必须手动执行 docker container start [Container ID]/NAME 的方式来启动 HA 服务,我们需要将其做成服务或加入开机启动脚本,编辑 /etc/rc.local 文件:
重启树莓派, HA 开机启动成功,至此,一个基本款的家庭 HA 搭建就完成了。
HA 目前仍然在快速迭代中,对应的 Docker Image 也会同步放出。要更新以 Docker Container 运行的 HA 实例,只要重新拉取最新版本的 Image 即可: