使用树莓派 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 updatesudo 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 updatesudo 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 smbdsudo 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 updatesudo apt install ca-certificates curlsudo install -m 0755 -d /etc/apt/keyringssudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.ascsudo 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/nullsudo 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:latestDashdot 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:latestAria2 + 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-uiAria2: 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:latestSpeed Test 10002
sudo docker run -dit --restart always --name speedtest -p 10002:80 linuxserver/librespeed:latestDraw.io 10003
sudo docker run -dit --restart always --name drawio -p 10003:8080 jgraph/drawio:latestFlare 5005
sudo docker run -dit --restart always --name flare -p 5005:5005 -v /home/ubuntu/docker-v/flare/app:/app soulteary/flareCalibre-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:latestStirling-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:latestEmulatorJS 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:latestMinecraft Bedrock Server
创建 Docker Compose 文件。
mkdir /home/ubuntu/docker-v/mc-bedrockcd /home/ubuntu/docker-v/mc-bedrockvi 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 -dMinecraft Server on Docker (Java Edition)
创建 Docker Compose 文件。
mkdir /home/ubuntu/docker-v/mc-javacd /home/ubuntu/docker-v/mc-javavi 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/ashecho "==========Start=========="echo `date '+%Y-%m-%d %H:%M:%S'`#get current wan_ipcurrent_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.htmlif [ ! -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" fifiecho `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 root@192.168.8.1:/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 nginxDocker 备份脚本
#! /bin/shcd /home/ubuntusudo tar -czvf docker-v.tar.gz docker-vsudo mv docker-v.tar.gz /mnt/sda1/docker-backup/docker-v-$(date +%Y%m%d%H%M%S).tar.gzfind /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 都会受到限制。