树莓派4b的linux之旅

未经本人同意禁止转载、印发。
本文涉及到的软件地址连接:
链接:https://pan.baidu.com/s/1HIfGp5Ghc2BWduS5R7Rvrg
提取码:qsa9

0 树莓派4b ubuntu20.04

0.1 官方镜像下载地址

  • 官方系统镜像地址(选择相应的版本,建议64位的,用迅雷下载链接可能快一些)
# 版本1:Ubuntu Server 20.04.1 LTS  (LTS 是官方长期支持的版本)
https://ubuntu.com/download/raspberry-pi/thank-you?version=20.04.1&architecture=server-arm64+raspi

# 版本2:Ubuntu Desktop 20.10
https://ubuntu.com/download/raspberry-pi/thank-you?version=20.10&architecture=desktop-arm64+raspi

0.2 镜像的烧录与安装

  • 进行解压,得到镜像文件
    • ubuntu-20.04.1-preinstalled-server-arm64+raspi.img
  • 下载烧写工具 balenaEtcher
  • balenaEtcher 将上面解压 得到的 *-arm64+raspi.img 镜像文件烧写到SD卡中
  • SD卡烧录好有两个硬盘,一个硬盘是fat32文件系统的,一个是ext4文件格式的
  • 完成后电脑弹出SD卡,把SD安装到树莓派
  • 连接网线(没有网线就要有HDMI的显示屏)
  • 插电启动

1 系统初始化

1.1 ssh连接

  • 使用的连接软件:Xshell-6.0.0197p.exe

  • ssh连接到树莓派

  • 用户名:ubuntu

  • 密码:ubuntu

  • 修改密码,重新连接

1.2 更改镜像源

# 备份镜像源
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑镜像源文件
sudo vim /etc/apt/sources.list
# 添加以下的行,这个源是用在ARM板上的,支持arm64
sudo touch /etc/apt/sources.list
sudo tee /etc/apt/sources.list <<-'EOF'
deb https://mirrors.aliyun.com/ubuntu-ports/ bionic main multiverse restricted universe
deb https://mirrors.aliyun.com/ubuntu-ports/ bionic-security main multiverse restricted universe
deb https://mirrors.aliyun.com/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb https://mirrors.aliyun.com/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb-src https://mirrors.aliyun.com/ubuntu-ports/ bionic main multiverse restricted universe
deb-src https://mirrors.aliyun.com/ubuntu-ports/ bionic-security main multiverse restricted universe
deb-src https://mirrors.aliyun.com/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb-src https://mirrors.aliyun.com/ubuntu-ports/ bionic-backports main multiverse restricted universe
EOF
# 更新系统源
sudo apt update
# 如果报错的话 It is held by process 2775 (apt-get)
sudo kill -9 2775
# 进行更新
sudo apt upgrade -yapt install 

1.3 修改主机设置

# 修改主机名 
sudo vim /etc/cloud/cloud.cfg
# 里面将preserve_hostname设置为true

# 在里面修改主机名
sudo vim /etc/hostname

# 修改时区和更新时间
sudo timedatectl set-timezone Asia/Shanghai
# 再次查看时间,已经修改为北京时间(Fri, 24 Apr 2020 00:27:10 +0800)
date -R

1.4 切换python的镜像源

# 新建文件夹
mkdir ~/.pip

sudo vim ~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

[list]
format=columns
# 安装pip3
sudo apt install python3-pip -y

# 观察是否正常
pip3 list

1.5 挂载磁盘(如果有外接硬盘的话)

# 查看自己的外接硬盘的盘符
sudo fdisk -l
Device     Start        End    Sectors   Size Type
/dev/sda1   2048 1953523711 1953521664 931.5G Linux filesystem
sudo vim /etc/fstab
# 最下面加上
/dev/sda1        /mnt    ext4    defaults        0 0

sudo mount -a
# 没有提示说明正确

# 然后进行挂载
sudo mount /dev/sda1 /mnt

# 然后访问/mnt
cd /mnt

#外接硬盘就被挂载到/mnt下

1.6 显示系统信息

# 系统cpu运行
top
# 显示cpu温度
cat /sys/class/thermal/thermal_zone0/temp|awk '{printf("Temp = %.2f C\n",$1/1000)}'

1.6 重启

# 到这一步基本的工作都弄完了,重启一下树莓派
sudo reboot

2 安装 docker

  • 在这里面下载 docker-cedocker-ce-clicontainerd.io 最新的安装包
    • https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/arm64/
  • 上传下载的三个 .deb 文件
# 安装三个deb文件
sudo dpkg -i ./docker-ce-cli_20.10.2_3-0_ubuntu-bionic_arm64.deb 
sudo dpkg -i ./containerd.io_1.4.3-1_arm64.deb 
sudo dpkg -i ./docker-ce_20.10.2_3-0_ubuntu-bionic_arm64.deb 

# 进行测试
sudo docker run hello-world

#配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fvp17nw5.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker


# 下载 Docker 图形化界面 portainer
sudo docker pull portainer/portainer

# 创建 portainer 容器
sudo docker volume create portainer_data

# 运行 portainer
sudo docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

# portainer 使用地址
# 浏览器打开 http://你的树莓派的ip地址:9000/
# 例如:http://192.168.31.184:9000/

2.1 docker 使用说明

  • 一般情况下在:http://192.168.31.184:9000/,里面可以处理大部分docker的事情
  • 有些时候需要其他的用法就需要额外的docker命令来进行使用
# 有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动
# 修改docker容器启动配置参数
sudo docker container update --restart=always 容器名称

# 往docker容器里面上传文件
sudo docker cp /path/file 容器名称:/path_to_save

# 查看运行的容器
sudo docker ps

# 查看下载的镜像
sudo docker images

# 暂停 container
sudo docker stop 容器名称

# 删除容器 填容器id
sudo docker rm 容器id

# 删除镜像 填镜像id
sudo docker rmi 镜像id

2.2 使用docker安装mysq5.7

  • https://hub.docker.com/_/mysql
  • 下面的服务基本上都需要使用mysql 所以这个一定要装
sudo docker pull mysql:5.7.33

# -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
# 设置 MySQL 服务 root 用户的密码 MYSQL_ROOT_PASSWORD=wp123456
sudo docker run --restart unless-stopped -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=wp123456 mysql:5.7.33

#进入容器
sudo docker exec -it mysql bash

#登录mysql
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'wp123456';

#添加远程登录用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
flush privileges;
exit;

# 退出mysql容器
exit

3 安装应用

3.1 安装 nextcloud 云盘管理

  • https://hub.docker.com/_/nextcloud

  • 默认情况下,docker 安装 nextcloud 使用SQLite进行数据存储,但是Nextcloud设置向导(首次运行时显示)允许连接到现有的MySQL /
    MariaDB或PostgreSQL数据库。您还可以链接数据库容器(例如)–link my-mysql:mysql,然后mysql在安装时用作数据库主机。更多信息在docker-compose部分。

# 拉取 nextcloud 镜像
sudo docker pull nextcloud:latest

# 新建一个文件夹,用于存放文件,这里我存放上面挂载的/mnt目录下
cd /mnt
sudo mkdir nextcloud
cd nextcloud/
sudo mkdir nextcloud apps config data theme

# 下面的目录要改
sudo docker run -d -p 81:80 --restart unless-stopped -v /mnt/nextcloud/nextcloud:/var/www/html -v /mnt/nextcloud/apps:/var/www/html/custom_apps -v /mnt/nextcloud/config:/var/www/html/config -v /mnt/nextcloud/data:/var/www/html/data nextcloud

# 其中 -p 8080:80  指定一个外部端口 8080,这里是指定外部端口80
  • 打开浏览器输入

    • http://你的树莓派的ip地址:81/
    • 例如:http://192.168.31.184:81/
  • 输入需要创建的管理员和密码

  • 存储与数据库里面 只需要修改配置数据库里面的内容,其他不用改。

  • 大概 5mins

image-20210108234912306

# 安装完成以后修复索引
# 进入容器
sudo docker exec -u 33 -it objective_bardeen bash 
./occ db:add-missing-indices
exit

# nextcloud 使用地址
# 浏览器打开 http://你的树莓派的ip地址:81/
# 例如:http://192.168.31.184:81/

3.1.1 安装其他插件

# 直接在网页里面安装可能很慢
# 通过浏览器直接访问 App Store 页面
# 页面地址为 https://apps.nextcloud.com/
# 根据nextcloud的版本选择下载压缩包,压缩包的文件名后缀一般为.tar.gz

# 往docker容器里面上传文件
sudo docker cp /path/registration-0.5.1.tar.gz my-wordpress:/var/www/html/apps
# 进入容器里面
sudo docker exec -it angry_proskuriakova bash

cd /var/www/html/apps
tar -zvxf registration-0.5.1.tar.gz

# 使用管理员账号或具有管理权限的账号登录系统,找到插件管理页面,选择启用插件即可

# 设置电子邮件服务器:(qq邮箱如下图所示)
# 邮件服务器密码(需要去qq邮箱里面自己获取):zpsgpwyltntabthd

image-20201121184153697

3.1.2 登录提示域名不信任的问题

# 进入容器里面
sudo docker exec -it angry_proskuriakova bash

# 下载vim工具
apt update
apt install vim
# 进行修改配置文件
vim config/config.php
# 找到’trusted_domains’
# 在 array 里添加需要信任的网站(即为私有云主机的ip或者域名或者映射的外网ip)

image-20210118204013112

3.2 使用 docker 安装 aria2 下载器

  • https://hub.docker.com/r/p3terx/aria2-pro
  • https://hub.docker.com/r/p3terx/ariang
# 拉取 aria2 镜像
sudo docker pull p3terx/aria2-pro
# 拉取网页ui镜像
sudo docker pull p3terx/ariang

# 新建一个文件夹,用于存放文件,这里我存放上面挂载的/mnt目录下
cd /mnt
sudo mkdir aria2
cd aria2/
sudo mkdir aria2-config aria2-downloads

# 运行 aria2 服务
# 下面命令中的 RPC_SECRET=wp123456 可以自己指定 例如 RPC_SECRET=qq123456,需要记住
sudo docker run -d --name aria2-pro --restart unless-stopped --log-opt max-size=1m -e PUID=$UID -e PGID=$GID -e UMASK_SET=022 -e RPC_SECRET=wp123456 -e RPC_PORT=6800 -p 6800:6800 -e LISTEN_PORT=6888 -p 6888:6888 -p 6888:6888/udp -v /mnt/aria2/aria2-config:/config -v /mnt/aria2/aria2-downloads:/downloads p3terx/aria2-pro

# 运行 webui 服务
sudo docker run -d --name ariang --log-opt max-size=1m --restart unless-stopped -p 6880:6880 p3terx/ariang

# 浏览器打开 http://你的树莓派的ip地址:6880/
# 例如:http://192.168.31.184:6880/

# 将刚刚的 RPC_SECRET 等号后面的 wp123456 填入
# AriaNg 设置 -> RPC (192.168.31.184:6800) -> Aria2 RPC 密钥 里面
# 刷新页面,至此安装完成

# aria2 下载器 使用地址
# 浏览器打开 http://你的树莓派的ip地址:6880/
# 例如:http://192.168.31.184:6880/

image-20210109184729426

3.3 使用 docker 安装 samba 文件服务器

  • https://hub.docker.com/r/dperson/samba
# 拉取镜像
sudo docker pull dperson/samba

# 新建一个文件夹,用于存放文件,这里我存放上面挂载的/mnt目录下

# 启动镜像
# -u "user:passwd"  连接时的账号和密码,多用户就多 -u
# -v /mnt:/mount 冒号左边填的是你想要共享的目录地址,右边不要动
sudo docker run -it --name samba --restart unless-stopped -m 512m -p 139:139 -p 445:445 -v /mnt:/mount -d dperson/samba -u "wp;wp" -g "aio read size = 0" -g "aio write size = 0" -s "shared;/mount/;yes;no;yes;all;wp"

# windows电脑,进入文件管理器,右击此电脑-> 添加网路位址

img

# windows电脑,进入文件管理器,右击此电脑-> 映射网络驱动器(N)...
# 输入 \\192.168.31.184\shared -> 完成
# 可能需要输入上面的账号密码 -> 记住密码,确定

image-20210222152059179

image-20210222152221083

image-20210222152328392

image-20210222152239201

3.4 使用 docker 安装 wordpress

  • https://hub.docker.com/_/wordpress
# 拉取 wordpress 镜像
sudo docker pull wordpress

# WORDPRESS_DB_HOST 是mysql地址和端口
# WORDPRESS_DB_USER 是mysql用户名
# WORDPRESS_DB_PASSWORD 是 mysql 密码
# WORDPRESS_DB_NAME 是数据库的名称,这里填 wordpress_db
sudo docker run --name my-wordpress --restart unless-stopped -e WORDPRESS_DB_HOST=192.168.31.184:3306 -e WORDPRESS_DB_USER=mysql_用户 -e WORDPRESS_DB_PASSWORD=mysql_密码 -e WORDPRESS_DB_NAME=wordpress_db -p 80:80 -d wordpress

3.4.1 上传下载的插件或者图片大于2mb

  • 出现:上传的文件尺寸超过upload_max_filesize文件中定义的php.ini值。
# 往docker容器里面上传文件
sudo docker cp /home/ubuntu/software/mailoptin.1.2.34.2.zip my-wordpress:/var/www/html/wp-content/plugins
# 进入容器里面
sudo docker exec -it my-wordpress bash
# 下载解压工具
apt update
apt install unzip
# 把zip包复制到/wp-content/plugins文件夹下,解压
cd /var/www/html/wp-content/plugins
unzip mailoptin.1.2.34.2.zip
# 增加权限
chmod 775 ../../wp-content
# 然后在web界面就能看到了,启用,配置一下,enjoy
  • 推荐的插件:
    • 已经下载好了,按照上面的方式就可以使用了
    • 也可以在插件市场自己下载,推荐使用最新版
https://wordpress.org/plugins/contact-form-7/
https://downloads.wordpress.org/plugin/contact-form-7.5.3.2.zip

https://wordpress.org/plugins/wp-smushit/
https://downloads.wordpress.org/plugin/wp-smushit.3.8.2.zip

https://wordpress.org/plugins/wp-mail-smtp/
https://downloads.wordpress.org/plugin/wp-mail-smtp.2.5.1.zip

https://wordpress.org/plugins/wp-user-avatar/
https://downloads.wordpress.org/plugin/wp-user-avatar.2.2.9.zip

https://wordpress.org/plugins/wordpress-seo/
https://downloads.wordpress.org/plugin/wordpress-seo.15.6.2.zip

image-20210118193322210

3.4.2 在仪表盘不小心更改了wordpress地址后回不到后台

image-20201121203118695

image-20201121203136531

# 解决这个问题,进数据库修改相关数据即可
# 操作如下:
mysql -u root -p
# 然后输入密码

# 显示所有数据库
show databases;
# 选中你自己网站对应的数据库
use wordpress_db;
# 显示该数据库所有表格
show tables;
# 查看数据库前10条记录
select * from wp_options where 1=1 limit 10;

image-20201121203321281

# 例如:
update wp_options set option_value='http://192.168.31.126/wordpress' where option_name='siteurl';
update wp_options set option_value='http://192.168.31.126' where option_name='home';

image-20201121203316419

# 再次的查看修改后的
# 查看数据库前10条记录
select * from wp_options where 1=1 limit 10;
# 退出 mysql
quit;

image-20201121203510617

  • 现在就能重新登上去了,设置也改回去了

image-20201121203444573

image-20201121203448842

3.5使用 docker 安装 AdGuard Home

  • https://hub.docker.com/r/adguard/adguardhome
mkdir ~/adguardhome
mkdir ~/adguardhome/work
mkdir ~/adguardhome/conf
cd ~

# 创建 macvlan 网络
# 如果你的路由器的地址为 192.168.31.1 (小米路由器 miwifi.com 也是这个)
# 则设置为下面的--subnet=192.168.31.0/24 --gateway=192.168.31.1
# 否则的话只改下面的两个点之间的数字31 
sudo docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=eth0 adguardhome_net

# 新建镜像
# 下面的 --ip 192.168.31.253 必须是没有被使用的 ip
sudo docker run -d --name adguardhome --restart unless-stopped --log-opt max-size=1m  --network adguardhome_net --ip 192.168.31.253 -v $PWD/adguardhome/work:/opt/adguardhome/work -v $PWD/adguardhome/conf:/opt/adguardhome/conf adguard/adguardhome

# AdGuard Home 使用地址
# 浏览器打开 http://上面网卡的ip:8096/
# 例如:http://192.168.31.253:3000

image-20210128152707297

  • 一直下一步,添加自己的账号

3.5.1 先在 安卓 或者 ios 设备上设置

  • IOS Wi-Fi 设置

image-20210128152922131

  • 安卓 WiFi 设置

image-20210128152955586

  • 在仪表盘上看到,下面的情况,就可以进行下一步了

image-20210128153044550

3.5.2 DNS设置

  • 需要接管路由器的DNS,就要在配置 AdGuard Home 里面配置上游 DNS 服务器

image-20210222150851965

tls://dns.pub
https://dns.pub/dns-query
tls://dns.alidns.com
https://dns.alidns.com/dns-query

image-20210222150908683

119.29.29.29
223.5.5.5
9.9.9.10
149.112.112.10
2620:fe::10
2620:fe::fe:10
  • 点击应用

3.5.3 配置广告过滤规则

anti-AD
https://anti-ad.net/easylist.txt

adaway
https://adaway.org/hosts.txt

halflife_mobile
https://gitee.com/halflife/list/raw/master/ad.txt

halflife_pc
https://gitee.com/halflife/list/raw/master/ad-pc.txt

image-20210128154203969

3.5.4 修改路由器上DNS服务器

  • 在路由器上改变DNS服务器的地址

image-20210222151323681

image-20210222151445234

  • 等待路由器应用设置,就完成配置了

image-20210222151603780

3.6 使用 docker 安装 homebridge 家庭

  • https://hub.docker.com/r/oznu/homebridge
cd ~
mkdir homebridge

# PGID 和 PUID 使用下面的命令查看 id user
id ubuntu
# 有时在使用数据量(-v标志)时,主机OS和容器之间可能会出现权限问题。我们通过允许您指定用户PUID和组来避免此问题PGID。确保主机上的数据卷目录归您指定的同一用户所有,并且它将“正常工作”。

sudo docker run -itd --net=host -e PGID=1000 -e PUID=1000 -e HOMEBRIDGE_CONFIG_UI=1 -e HOMEBRIDGE_CONFIG_UI_PORT=8581 -e TZ=Asia/Shanghai --name=homebridge -v $(pwd)/homebridge:/homebridge oznu/homebridge:ubuntu

# 要管理Homebridge,浏览器打开 http://树莓派ip地址:8581
# 例如,http://192.168.1.20:8581
# 在这里,您可以安装,删除和更新插件,修改Homebridge config.json并重新启动Homebridge。
# 默认用户名是admin,默认密码是admin

3.7 使用 docker 安装 jellyfin 视频服务

  • https://hub.docker.com/r/jellyfin/jellyfin
  • 需要挂载一个硬盘,不然可能电影视频存放的空间可能不足
  • 可以选择任何位置来存储媒体文件
# 创建存放的文件夹
sudo mkdir /mnt/jellyfin/
sudo mkdir /mnt/jellyfin/config
sudo mkdir /mnt/jellyfin/cache

sudo mkdir /mnt/media
sudo mkdir /mnt/media/movie

sudo docker volume create jellyfin-config
sudo docker volume create jellyfin-cache

# 下面的目录就是上面创建的目录
sudo docker run -d --name jellyfin --user 0 --net=host --volume /mnt/jellyfin/config:/config --volume /mnt/jellyfin/cache:/cache --mount type=bind,source=/mnt/media,target=/media --restart=unless-stopped jellyfin/jellyfin

# jellyfin 使用地址
# 浏览器打开 http://你的树莓派的ip地址:8096/
# 例如:http://192.168.31.184:8096

3.8 使用 docker 安装 openwrt (有点小问题)

  • 参考地址:https://mlapp.cn/376.html,这里只是截取,可以去这个地址查看完整的教程
  • 必须清楚你树莓派现在的ip地址
    • 例如:192.168.31.184
# 1.打开网卡混杂模式
sudo ip link set eth0 promisc on 

# 2.创建网络(须结合实际网络情况,不能照抄命令)
# 如果上面已经安装过 AdGuard Home ,就不要执行下面的这一条。如果没有安装的话,就执行下面的这一条。
# sudo docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=eth0 openwrt_net

# 看到网络macnet已建立成功
sudo docker network ls

# 拉取镜像
sudo docker pull registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest

# 镜像拉取完成后,我们可以执行docker images命令查看现存镜像:
sudo docker images

# 4.创建并启动容器
# 下面的这个 --network openwrt_net
# 如果已经安装过 AdGuard Home ,就变成这个--network adguardhome_net
sudo docker run --restart unless-stopped --name openwrt -d --network openwrt_net --privileged registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest /sbin/init
  • 其中:
    • restart always参数表示容器退出时始终重启,使服务尽量保持始终可用;
    • name openwrt参数定义了容器的名称;
    • -d参数定义使容器运行在 Daemon 模式;
    • network macnet参数定义将容器加入 maxnet网络;
    • privileged 参数定义容器运行在特权模式下;
    • registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest为 Docker 镜像名,因容器托管在阿里云 Docker 镜像仓库内,所以在镜像名中含有阿里云仓库信息;
    • /sbin/init定义容器启动后执行的命令。
# 启动容器后,我们可以使用 docker ps -a命令查看当前运行的容器:
sudo docker ps -a

# 5.进入容器并修改相关参数(须结合实际网络情况,不能照抄配置)
sudo docker exec -it openwrt bash 

# 执行此命令后我们便进入 OpenWrt 的命令行界面,首先,我们需要编辑 OpenWrt 的网络配置文件:
vim /etc/config/network
# 我们需要更改 Lan 口设置:
config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option ipaddr '192.168.123.100'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option gateway '192.168.123.1'
        option broadcast '192.168.123.255'
        option dns '192.168.123.1'
  • 其中:所有的 192.168.123.x 需要根据树莓派所处网段修改,option gateway和option dns填写路由器的 IP,若树莓派获得的 IP 为 192.168.2.154,路由器 IP
    为192.168.2.1,则需要这样修改:
config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option ipaddr '192.168.2.100'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option gateway '192.168.2.1'
        option broadcast '192.168.2.255'
        option dns '192.168.2.1'
  • option ipaddr 项目定义了 OpenWrt 的 IP 地址,在完成网段设置后,IP最后一段可根据自己的爱好修改(前提是符合规则且不和现有已分配 IP 冲突)。
# 6.重启网络
/etc/init.d/network restart
# 7.进入控制面板
# 在浏览器中输入第 5 步option ipaddr 项目中的 IP 进入 Luci 控制面板,若option ipaddr 的参数为 192.168.123.100,则可以在浏览器输入 http://192.168.123.100进入控制面板。

#用户名:root
#密码:password

#8.关闭 DHCP 服务
# 在 “网络 - 接口 - Lan - 修改” 界面中,勾选下方的 “忽略此接口(不在此接口提供 DHCP 服务)”,并“保存&应用”。

# 9.主路由 DHCP 设置
# 进入路由器后台中,将主路由的 DHCP 的默认网关和 DNS 服务器设置为第 5 步中option ipaddr 项目中的 IP。

# 10.重新连接路由器
# 完成以上操作后,断开设备(如手机,电脑)与路由器的连接,重新连接路由器,连接路由器的设备将获取到我们设置到的 IP。

3.9 搭建 Plex Media Server (建议用jellyfin )

  • https://hub.docker.com/r/linuxserver/plex
  • 需要挂载一个硬盘,不然可能电影视频存放的空间可能不足
  • 可以选择任何位置来存储媒体文件,只需确保设置了正确的权限即可
  • 下载地址:https://www.plex.tv/media-server-downloads/?lang=
  • 使用迅雷下载比较快

image-20201121223914335

# 上传 文件/plexmediaserver_1.20.5.3600-47c0d9038_arm64.deb
sudo dpkg -i ./plexmediaserver_1.20.5.3600-47c0d9038_arm64.deb

# 要验证Plex服务是否正在运行,请输入
sudo systemctl status plexmediaserver

3.9.1 配置 Plex Media Server

# 在启动Plex设置向导之前,让我们创建用于存储Plex媒体文件的目录

# 需要挂载一个硬盘,不然可能电影视频存放的空间可能不足
# 可以选择任何位置来存储媒体文件,只需确保设置了正确的权限即可

# 先进行挂载硬盘
cd /mnt
# 创建文件夹
sudo mkdir plex-media-server-file
sudo mkdir -p /mnt/plex-media-server-file/{movie,tv,music,photo,other}

# Plex Media Server作为用户plex运行,该用户plex必须具有对媒体文件和目录的读取和执行权限。
# 要设置正确的所有权,请运行以下命令
sudo chown -R plex: /mnt/plex-media-server-file

# 现在,我们可以继续进行服务器配置
# 浏览器打开 http://你的树莓派的ip地址:32400/web
# 例如:http://192.168.31.126:32400/web

image-20201121141445123

4 安装 frp 内网穿透

  • 使你的树莓派可以在移动网络下使用
  • 前提是你已经有一个云端公网ip的服务器(大学生可以去阿里云购买云服务器,一年120左右)
  • 使用的工具是 frp GitHub链接

4.1 frp是什么

  • 简单地说,frp就是一个反向代理软件,它体积轻量但功能很强大,可以使处于内网或防火墙后的设备对外界提供服务,它支持HTTP、TCP、UDP等众多协议。我们今天仅讨论TCP和UDP相关的内容。

4.2 服务端设置 需要安装 docker

  • 也就是公网ip的服务器端设置
  • 需要在服务器的控制台设置弹性网卡,让7000、7500端口可以访问
mkdir ~/frps
vim ~/frps/frps.ini
[common]
bind_port = 7000
dashboard_port = 7500
token = your_token
dashboard_user = your_user
dashboard_pwd = your_pwd
vhost_http_port = 10080
vhost_https_port = 10443
docker run --restart unless-stopped --network host -d -v /root/frps/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps

4.3 树莓派端设置

# 创建存放的文件夹
mkdir ~/frp
# 修改 frpc.ini 配置
vim ~/frp/frpc.ini
# 下面的 server_addr 填你服务器的公网ip
# 下面的 token 填你刚刚需要记住的 yourToken
[common]
server_addr = your_VPS_ip
server_port = 7000
token = your_token

[web_80]
type = tcp
local_ip = 192.168.31.184
local_port = 80
remote_port = 80

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7022

[Portainer]
type = tcp
local_ip = 192.168.31.184
local_port = 9000
remote_port = 7900

[Homebridge]
type = tcp
local_ip = 192.168.31.184
local_port = 8581
remote_port = 8581
# 修改保存后
# 拉取docker镜像
sudo docker pull snowdreamtech/frpc

# 修改下面的连接地址 -v /home/ubuntu/frp/frpc.ini:/etc/frp/frpc.ini 前面是你树莓派的frpc.ini文件路径。后面不用改
sudo docker run --restart unless-stopped --network host -d -v /home/ubuntu/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc

# 此时 frpc 会在docker容器里面运行,并且是开机自动启动的
  • 需要注意的是 remote_port 是服务器端需要在控制台设置弹性网卡,让 remote_port 端口可以访问

4.4 自定义规则

  • frp实际使用时,会按照端口号进行对应的转发,原理如下图所示。

image-20210118202102306

  • 上面frpc.ini的ssh、web_80字段都是自己定义的规则,自定义端口对应时格式如下
    • [xxx] 表示一个规则名称,自己定义,便于查询即可。
    • type 表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册。
    • local_port 是本地应用的端口号,按照实际应用工作在本机的端口号填写即可。
    • remote_port 是该条规则在服务端开放的端口号,自己填写并记录即可。
  • 需要注意的是 remote_port 是服务器端需要在控制台设置弹性网卡,让 remote_port 端口可以访问
  • 及时在弹性网卡里面关闭不需要的端口

4.5 关闭和更改服务

# 修改 frpc.ini 配置
vim ~/frp/frpc.ini
# 重新启动docker容器就行了

4.7 进行访问

  • 可以在移动网络下使用 http://服务器公网ip地址:remote_port 去访问你已经开启的服务

5 安装硬件

5.1 安装oled驱动

# 上传 文件/bcm2835-1.63.tar.gz
tar -zxvf bcm2835-1.63.tar.gz
cd bcm2835-1.63/

# 安装GCC
sudo apt-get install gcc -y
# 安装编译文件的工具make
sudo apt install make

sudo ./configure
# 进行编译
sudo make
sudo make check

# 安装编译好的驱动
sudo make install

# 上传 文件/wiringPi-8d188fa.tar.gz
tar xfz wiringPi-8d188fa.tar.gz
cd wiringPi-8d188fa/
sudo ./build

# 检查gpio是否安装成功
gpio -v
# 安装i2c-tools工具
sudo apt-get install i2c-tools -y
# 检查oled是否插到树莓派上
sudo i2cdetect -y 1

# 切换root用户
sudo su

# 回到root目录
cd ~
mkdir download
mkdir oled

# 切换python的国内源,下载速度快
mkdir ~/.pip
cd ~/.pip
sudo vim pip.conf
'''
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

[list]
format=columns
'''

cd ~/download
# 里面有相应的脚本例子:
# 上传 文件/Adafruit_Python_SSD1306.tar.gz
tar -zxvf Adafruit_Python_SSD1306.tar.gz


# 将例子里面的文件复制到root用户的oled目录下
cp ~/download/Adafruit_Python_SSD1306/examples/stats.py  /root/oled/

# 安装pip工具
apt install python-pip -y

# 安装相应的库文件
pip install Adafruit_GPIO Adafruit_SSD1306 RPi.GPIO
# 安装PIL库
apt-get install python-pil -y

# 后台运行控制oled显示的py文件
cd /root/oled
python stats.py &
# 成功点亮oled,显示了ip地址和其他信息

5.1.1 设置开机自动启动(有问题)

  • 控制oled显示的py文件
  • 用来显示ip地址课相应的其他信息
vim /lib/systemd/system/rc-local.service
# 在最下面添加:
'''
[Install]  
WantedBy=multi-user.target  
Alias=rc-local.service
'''
# system默认读取/etc/systemd/system下配置文件,需要在/etc/systemd/system目录下创建软链接:
ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/

vim /etc/rc.local
# 写入下面的内容
'''
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# 第一个是Python的目录 第二个是py文件所在的目录和文件 第三个是后台启动
/usr/bin/python /root/oled/stats.py & 

exit 0
'''

# 给 rc.local 加上权限,启用服务
chmod 755 /etc/rc.local
systemctl enable rc-local

# 启动服务并检查状态
systemctl start rc-local.service
systemctl status rc-local.service

# 更新系统的其他软件
apt upgrade -y

# 重启
reboot

# 观察进程:
ps -aux|grep 'stats.py'
# 已经成功开机启动
Logo

更多推荐