使用树莓派 5
安装 Ubuntu Server 24.04 LTS
作为小型服务器使用,并部署包括 docker
在内的各项服务,在此进行记录。
安装 Ubuntu Server 24.04 LTS
此时需要准备一个 TF 卡。
刷入系统
先到 Ubuntu 官网 下载系统镜像文件,这里我选择的是 Ubuntu 服务器 24.04 LTS 64 位镜像。
然后到 树莓派官网 下载系统刷入工具 Raspberry Pi Imager
。运行后选择刚才下载的镜像并选择对应的 TF 卡进行刷入。
刷写配置可选择修改主机名、用户名和密码,并记住勾选使用 SSH
连接,如果需要连接无线网络也可以选择配置。
刷写结束 TF 卡会自动弹出,将其插入断电状态的树莓派,然后接通电源,系统启动。
登录系统
使用 ssh
工具登录系统,若没有配置主机名、用户名和密码,默认主机名为 ubuntu
,默认用户名为 ubuntu
,默认密码为 ubuntu
。第一次登录时会要求修改默认密码。
安装中文语言包
Ubuntu Server
系统安装时默认语言为英语
,现在将其修改为中文
。
首先安装简体中文语言包。
sudo apt update
sudo apt install language-pack-zh-hans
将区域语言设置为简体中文。
localectl set-locale LANG=zh_CN.UTF-8
重启以应用更改。
sudo reboot
查看当前区域语言设置。
locale
测试是否为中文输出。
sudo apt update
删除 Snap 商店
sudo apt autoremove --purge snapd
创建 Swap
交换空间
开启 Swap
创建一个 swap
文件。
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
设置文件权限。
sudo chmod 600 /swapfile
把文件设置为 Swap
空间。
sudo mkswap /swapfile
启用 Swap
空间。
sudo swapon /swapfile
开机自动挂载 Swap
空间。
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
最后,检查 Swap
空间是否已启用。
free -h
关闭 Swap
关闭 Swap
空间。
sudo swapoff /swapfile
停止开机自动挂载。
sudo sed -i '/swapfile/d' /etc/fstab
删除 swap
文件。
sudo rm /swapfile
挂载移动硬盘
查看当前磁盘情况。
lsblk
首先,创建需要挂载的文件夹。
sudo mkdir /mnt/sda1
开机磁盘挂载文件保存于 /etc/fstab
。
sudo vi /etc/fstab
加入这一行命令来挂载磁盘。
/dev/sda1 /mnt/sda1 ntfs defaults,nofail 0 0
挂载磁盘。
sudo mount -av
再次查看当前磁盘情况。
lsblk
配置 SMB 文件共享
安装 Samba 服务。
sudo apt update
sudo apt install samba
要共享的目录必须存在才能被共享,给共享目录赋予权限。
sudo chmod 777 -R /mnt/sda1
配置共享设置。
sudo vi /etc/samba/smb.conf
在 [global]
下加入以兼容 iOS
文件应用。
vfs objects = acl_xattr catia fruit streams_xattr
加入共享目录。
[share]
path = /mnt/sda1
writable = yes
read only = no
guest ok = yes
guest only = yes
public = yes
browseable = yes
available = yes
create mode = 0777
directory mode = 0777
重启 Samba
服务守护进程,查看服务运行状态。
sudo systemctl restart smbd
sudo systemctl status smbd
使用 Cloudflared 建立隧道
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb &&
sudo dpkg -i cloudflared.deb &&
sudo cloudflared service install <token>
部署 Docker
首先卸载可能已经存在的旧版本 docker
。
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
加入 docker
仓库。
# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
安装 docker
。
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
修改镜像源,编辑 /etc/docker/daemon.json
文件,在其中添加以下内容。
{
"registry-mirrors": ["https://mirror"]
}
然后重启 docker
服务。
sudo systemctl restart docker
验证安装。
sudo docker run hello-world
加入用户组以避免权限问题。
# 添加 docker 用户组,一般已存在,不需要执行
sudo groupadd docker
# 将用户加入到docker用户组中
sudo gpasswd -a $USER docker
# 更新用户组
newgrp docker
# 测试 docker 命令是否可以直接使用
docker version
小雅 5678
查看 小雅使用文档。
sudo bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)"
sudo vi /etc/xiaoya/myruntime.txt
sudo bash -c "$(curl http://docker.xiaoya.pro/update_data.sh)"
ddns-go
docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
在浏览器中打开 http://主机IP:9876
,并修改你的配置。
Portainer 9000
首先,创建 Portainer Server 将用于存储其数据库的卷。
sudo docker volume create portainer_data
然后,下载并安装 Portainer Server 容器。
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-ce:latest
Dashdot 3001
sudo docker run -dit \
--restart always \
--privileged \
--name dashdot \
-p 3001:3001 \
-v /:/mnt/host:ro \
-e DASHDOT_ENABLE_CPU_TEMPS=true \
-e DASHDOT_ALWAYS_SHOW_PERCENTAGES=true \
-e DASHDOT_PAGE_TITLE="Raspberry Pi 5" \
-e DASHDOT_SHOW_HOST=true \
-e DASHDOT_CUSTOM_HOST="Raspberry Pi 5" \
mauricenino/dashdot:latest
Aria2 + AriaNg + Filebrowser 8000
首先查看该项目的 GitHub 页面 来创建必要的文件。
sudo docker run -d --name ariang \
--restart always \
-p 8000:80 \
-p 6800:6800 \
-e PUID=1000 \
-e PGID=1000 \
-e ENABLE_AUTH=false \
-e ENABLE_RCLONE=false \
-e ARIA2_SSL=false \
-e ARIA2_EXTERNAL_PORT=6800 \
-e CADDY_LOG_LEVEL=ERROR \
-v /mnt/sda1/download:/data \
-v /home/ubuntu/docker-v/aria2/app/.cache:/app/.cache \
-v /home/ubuntu/docker-v/aria2/app/a.db:/app/filebrowser.db \
-v /home/ubuntu/docker-v/aria2/app/conf/key:/app/conf/key \
-v /home/ubuntu/docker-v/aria2/app/conf:/app/conf \
wahyd4/aria2-ui
Aria2
: http://ubuntu:8000
FileManger
: http://ubuntu:8000/files
默认用户名和密码均为 admin
。
Rclone
: http://ubuntu:8000/rclone
Excalidraw 10001
sudo docker run -dit --restart always --name excalidraw -p 10001:80 welywely/excalidraw:latest
Speed Test 10002
sudo docker run -dit --restart always --name speedtest -p 10002:80 linuxserver/librespeed:latest
Draw.io 10003
sudo docker run -dit --restart always --name drawio -p 10003:8080 jgraph/drawio:latest
Flare 5005
sudo docker run -dit --restart always --name flare -p 5005:5005 -v /home/ubuntu/docker-v/flare/app:/app soulteary/flare
Calibre-Web 8083
首先,在 GitHub 页面 下载数据库文件。
sudo docker run -d \
--name=calibre-web \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-p 8083:8083 \
-v /home/ubuntu/docker-v/calibre-web/data:/config \
-v /home/ubuntu/docker-v/calibre-web/calibre/library:/books \
--restart always \
lscr.io/linuxserver/calibre-web:latest
默认用户名为 admin
。 默认密码为 admin123
。
IT-Tools 9600
sudo docker run -d --name it-tools --restart always -p 9600:80 corentinth/it-tools:latest
Stirling-PDF 9700
sudo docker run -d \
-p 9700:8080 \
-v /home/ubuntu/docker-v/s-pdf/trainingData:/usr/share/tessdata \
-v /home/ubuntu/docker-v/s-pdf/extraConfigs:/configs \
-v /home/ubuntu/docker-v/s-pdf/logs:/logs \
-e DOCKER_ENABLE_SECURITY=false \
-e INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false \
-e LANGS=zh_CN \
--name stirling-pdf \
--restart always \
frooodle/s-pdf:latest
EmulatorJS 9800 3000
sudo docker run -d \
--name=emulatorjs \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e SUBFOLDER=/ `#optional` \
-p 3000:3000 \
-p 9800:80 \
-p 4001:4001 `#optional` \
-v /home/ubuntu/docker-v/emulatorjs/config:/config \
-v /home/ubuntu/docker-v/emulatorjs/data:/data \
--restart always \
lscr.io/linuxserver/emulatorjs:latest
Minecraft Bedrock Server
创建 Docker Compose
文件。
mkdir /home/ubuntu/docker-v/mc-bedrock
cd /home/ubuntu/docker-v/mc-bedrock
vi docker-compose.yml
填写以下内容。
services:
mc:
image: itzg/minecraft-bedrock-server
restart: always
environment:
TZ: "Asia/Shanghai"
EULA: "TRUE"
SERVER_NAME: "Wely"
LEVEL_NAME: "World"
ports:
- "19132:19132/udp"
volumes:
- /home/ubuntu/docker-v/mc-bedrock/data:/data
stdin_open: true
tty: true
然后建立容器。
sudo docker compose up -d
Minecraft Server on Docker (Java Edition)
创建 Docker Compose
文件。
mkdir /home/ubuntu/docker-v/mc-java
cd /home/ubuntu/docker-v/mc-java
vi docker-compose.yml
填写以下内容。
services:
mc:
image: itzg/minecraft-server
restart: always
environment:
TZ: "Asia/Shanghai"
SNOOPER_ENABLED: "false"
SERVER_NAME: "Wely"
MAX_PLAYERS: "10"
LEVEL: "World"
MODE: "survival"
DIFFICULTY: "normal"
EXEC_DIRECTLY: "true"
GUI: "false"
INIT_MEMORY: "1G"
MAX_MEMORY: "4G"
ENABLE_ROLLING_LOGS: "true"
EULA: "true"
ports:
- "25565:25565"
volumes:
- /home/ubuntu/docker-v/mc-java/data:/data
stdin_open: true
tty: true
或者使用 fabric
服务端.
services:
mc:
image: itzg/minecraft-server
restart: always
environment:
TYPE: "FABRIC"
FABRIC_LAUNCHER: "fabric-server-mc.1.21-loader.0.15.11-launcher.1.0.1.jar"
TZ: "Asia/Shanghai"
SNOOPER_ENABLED: "false"
SERVER_NAME: "Wely"
MAX_PLAYERS: "10"
LEVEL: "fabric-world"
MODE: "survival"
DIFFICULTY: "normal"
EXEC_DIRECTLY: "true"
GUI: "false"
INIT_MEMORY: "1G"
MAX_MEMORY: "4G"
ENABLE_ROLLING_LOGS: "true"
EULA: "true"
ports:
- "25565:25565"
volumes:
- /home/ubuntu/docker-v/mc-java/data:/data
stdin_open: true
tty: true
然后建立容器。
sudo docker compose up -d
对于 Docker 无法访问的解决方案
在另一台可以访问的机器上拉取镜像,再传输到需要使用镜像的机器上。
首先拉取对应平台的镜像。
docker pull --platform linux/arm64 image
导出镜像。
docker save -o image.tar image
将 image.tar
文件传输至需要使用镜像的机器,再导入本地镜像。
docker load -i image.tar
此时,导入的镜像包含所有的元数据。
查看路由器校园网 IP
路由器脚本。
#! /bin/ash
echo "==========Start=========="
echo `date '+%Y-%m-%d %H:%M:%S'`
#get current wan_ip
current_wan_ip=`ifconfig -a | grep inet | grep -v inet6 | grep -v 127.0.0.1 | grep -v 192.168.8.1 | awk '{print $2}' | tr -d "addr:"`
echo "IP: $current_wan_ip"
#if ip.html
if [ ! -f "ip.html" ]; then
echo ${current_wan_ip} > ip.html
echo "craete ip.html"
else
last_ip=`cat ip.html`
if [ "${current_wan_ip}" != "${last_ip}" ]; then
#renew ip.html
echo ${current_wan_ip} > ip.html
echo "renew ip.html"
else
echo "no difference"
fi
fi
echo `date '+%Y-%m-%d %H:%M:%S'`
echo -e "==========End==========\n"
树莓派脚本。
sudo sshpass -p password scp -O -o StrictHostKeyChecking=no -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa [email protected]:/root/ip.html /home/ubuntu/server-ip/ip.html
使用 nginx
。
sudo docker run -dit --restart always -p 23333:80 --name nginx -v /home/ubuntu/server-ip:/usr/share/nginx/html nginx
Docker 备份脚本
#! /bin/sh
cd /home/ubuntu
sudo tar -czvf docker-v.tar.gz docker-v
sudo mv docker-v.tar.gz /mnt/sda1/docker-backup/docker-v-$(date +%Y%m%d%H%M%S).tar.gz
find /mnt/sda1/docker-backup/ -mtime +7 -name "*.tar.gz" -exec rm -rf {} \;
树莓派 5 风扇
随着树莓派温度的升高,风扇会做出以下反应:
低于
50°C
,风扇不旋转(0%
速度)50°C
时,风扇以低速运转(30%
速度)60°C
时,风扇速度增加至中速(50%
速度)67.5°C
时,风扇转速增至高速(70%
转速)75°C
时,风扇升至全速(100%
速度)
温度降低时风扇速度也与温度范围有相同的匹配关系,具有 5°C
的滞后;当温度降至低于上述每个阈值 5°C
时,风扇速度会降低。
USB
端口和风扇插口
均采用相同的1.6 A
电流限制。
所有型号的 Raspberry Pi
都进行了一定程度的热管理,以避免在大负荷下过热。SoC
有一个内部温度传感器,GPU
上的软件会对其进行轮询,以确保温度不超过我们为所有型号设定的 85°C
上限。可以将其设置为更低的值,但不能设置为更高的值。当设备接近极限值时,芯片上使用的各种频率和电压会降低。这样可以减少产生的热量,从而控制温度。
当核心温度在 80°C
到 85°C
之间时,ARM
核心将逐渐降低温度。如果温度达到 85°C
,ARM
内核和 GPU
都会受到限制。