树莓派4B 基于 ubuntu24 移植 Ruoyi
树莓派换源 & 安装配置docker (ubuntu24)
-
从树莓派官网下载工具"树莓派镜像烧录器"
-
从ubuntu官网下载Ubuntu 24.04.2 LTS: https://ubuntu.com/download/raspberry-pi
硬件要求:最少4GB ram 和 16GB 磁盘
下载完整后,得到:ubuntu-24.04.2-preinstalled-desktop-arm64+raspi.img.xz
需要解压成:ubuntu-24.04.2-preinstalled-desktop-arm64+raspi.img
-
使用树莓派镜像烧录器烧录镜像
CHOOSE DEVICE - 选择树莓派4 (根据实际型号来)
操作系统 -> Use custom -> ubuntu-24.04.2-preinstalled-desktop-arm64+raspi.img
选择SD卡 -> 实际的sd卡
点击 NEXT
然后可以编辑设置,实现预配置(用户名,wifi, 国家, 键盘, 时区, 开启ssh服务等)(这一步好像没啥用,启动系统后还要再设一遍)
格式化并写入sd卡
-
将 SD 卡插入到树莓派,启动系统,配置语言、时区、用户、密码、时区等,安装系统
-
ubuntu24 系统比较吃资源,后续可以选择更低版本的系统,跑个火狐浏览器就可以把cpu全占满。并且系统太大了,内存释放也比较慢。这样看来,还是debian比较好。
-
打开火狐浏览器,下载vnc server https://www.realvnc.com/en/connect/download/?lai_vid=gxl0mpADGIy9x&lai_sr=5-9&lai_sl=l 下载版本选择树莓派版本+arm64,下载完毕后,安装即可。安装完毕,如果要求登录,选择跳过,即可实现登录
-
安装基础的工具
sudo apt update # 网络工具 sudo apt install net-tools # ssh sudo apt install openssl-server # iftop sudo apt install iftop # vim sudo apt install vim # 自动补全(比较大,341MB,选择安装) sudo apt install auto-complete-el # 安装完毕后编辑 /etc/bash.bashrc # 将这一段解开注释 # sudo hint if [ ! -e "$HOME/.sudo_as_admin_successful" ] && [ ! -e "$HOME/.hushlogin" ] ; then case " $(groups) " in *\ admin\ *|*\ sudo\ *) if [ -x /usr/bin/sudo ]; then cat <<-EOF To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. EOF fi esac fi sudo apt install python3-pip # 配置python3 pip 源 (跳过此步骤,ubuntu24 安装python依赖库改成了 sudo apt install python3-库名 的形式) # sudo su # cd ~ # mkdir .pip # cd .pip # touch pip.conf # pip.conf 内容如下 # [global] # index-url = https://pypi.tuna.tsinghua.edu.cn/simple # [install] # trusted-host=pypi.tuna.tsinghua.edu.cn -
apt 换源(这里的做法还是不太理想)
cd /etc/apt/sources.list.d sudo touch mysource.sources sudo vim mysource.sources # 内容如下 # 清华源 Types: deb URIs: http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ Suites: noble noble-updates noble-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg # 阿里源 Types: deb URIs: http://mirrors.aliyun.com/ubuntu/ Suites: noble noble-updates noble-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg -
安装配置docker
sudo apt install docker.io # 查看 docker 版本 docker -v # Docker version 27.5.1, build 27.5.1-0ubuntu3~24.04.2 apt install docker-compose docker-compose version # docker-py version: 5.0.3 # CPython version: 3.12.3 # OpenSSL version: OpenSSL 3.0.13 30 Jan 2024 # 更换Docker镜像源 # 切换为 root 用户,否则会报错无权限 sudo -i cat > /etc/docker/daemon.json <<EOF { "log-driver": "json-file", "log-opts": { "max-size": "20m", "max-file": "3" }, "ipv6": true, "fixed-cidr-v6": "fd00:dead:beef:c0::/80", "experimental":true, "ip6tables":true, "registry-mirrors": [ "https://registry.hub.docker.com", "http://hub-mirror.c.163.com", "https://mirror.baidubce.com", "https://docker.mirrors.sjtug.sjtu.edu.cn", "https://docker.nju.edu.cn", "https://docker.m.daocloud.io", "https://dockerhub.icu", "https://docker.anyhub.us.kg", "https://docker.1panel.live" ] } EOF # 重启一下daemon和docker服务 sudo systemctl daemon-reload #重启daemon进程 sudo systemctl restart docker.service #重启docker # 查看docker配置信息 docker info # 尝试拉取镜像 docker pull nginx:latest # docker pull docker.1panel.live/docker.io/openresty/openresty docker pull redis:latest # docker pull mysql:latest # 9.0 版本,太新了 docker pull docker.xuanyuan.me/library/mysql:8.0 # 开始准备用 node 编译下vue,后来发现vue不需要交叉编译,直接在windows上编译好了放到nginx就可以 # docker pull node:latest # 24 # docker pull node:16Java环境
# 方式一,直接安装
sudo apt install openjdk-8-jdk
# 方式二,使用java安装包自行安装 (arm64的java8安装包)
sudo mkdir -p /usr/local/java
sudo tar -zxvf jdk-8u281-linux-aarch64-serial.tar.gz -C /usr/local/java
# 编辑 /etc/profile, 添加如下配置
export JAVA_HOME=/usr/local/java/jdk1.8.0_281
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 验证
source /etc/profile
java -version
# java version "1.8.0_281"
# Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
# Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
# 注意:如果想要用root执行java,需要用指令 su -i 切换root,不可以用 sudo su (只会切换用户,但不加载该用户的登录环境/etc/profile) (这里后续可以改进一下)
基础环境部署
mysql8.0 容器
# 创建目录
#/opt/mysql/8.0/
cd /opt
mkdir mysql
cd mysql
mkdir 8.0
cd 8.0
mkdir conf data log
# 配置my.conf
cd conf
touch my.conf
my.conf内容如下
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
default_authentication_plugin= mysql_native_password
创建 docker-compose.yml
cd /opt/mysql/8.0
touch docker-compose.yml
docker-compose.yml 内容如下
version: '3.8' # 可以根据需要调整版本
services:
mysql:
container_name: mysql8
image: docker.xuanyuan.me/library/mysql:8.0
restart: always # 可以选择使用 always 或 unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3306:3306"
volumes:
- /opt/mysql/8.0/data:/var/lib/mysql:rw
- /opt/mysql/8.0/log:/var/log/mysql:rw
- /opt/mysql/8.0/conf/my.cnf:/etc/mysql/my.cnf:rw
- /etc/localtime:/etc/localtime:ro
配置mysql
# 后台启动mysql8容器(调试的话可以去掉-d,另外,停止并删除容器使用 down)
docker-compose up -d
# 进入mysql8
docker exec -it mysql8 bash
# 访问mysql服务(默认密码:root)
mysql -uroot -p
# 配置允许远程访问(下面的密码填充自己的密码,比如 123456)
alter user 'root'@'%' identified with mysql_native_password by '密码';
FLUSH PRIVILEGES;
exit
# 退出容器
exit
此时,可以用外部工具访问mysql了
redis 容器
mkdir -p /opt/redis
cd /opt/redis
mkdir /data
touch docker-compose.yml
docker-compose.yml (这里没有 network_mode: "host" 会有报错:# WARNING Memory overcommit must be enabled!)
version: '3.8' # 可以根据需要调整版本
services:
redis:
container_name: redis_container
image: redis:latest
restart: always # 可以选择使用 always 或 unless-stopped
network_mode: "host" # 使用主机网络
volumes:
- /opt/redis/data:/data
- /etc/localtime:/etc/localtime:ro
编译部署RuoYi
这里选择的是前后端分离版本,官网页面如下:
http://doc.ruoyi.vip/ruoyi-vue/document/hjbs.html#准备工作
环境推荐配置
JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Redis >= 3.0
Maven >= 3.0
Node >= 12
-
拉取项目
git clone https://gitee.com/y_project/RuoYi-Vue.git -
使用idea打开项目(建议用新版本的idea,我用的2023.1, 之前用2021打开会有点问题, 当然,如果习惯eclipse的话, 官网推荐用eclipse打开)
必要配置
- 修改数据库连接,编辑
resources目录下的application-druid.yml
# 数据源配置 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver druid: # 主库数据源 master: url: 数据库地址 username: 数据库账号 password: 数据库密码- 修改服务器配置,
编辑resources目录下的application.yml
# 开发环境配置 server: # 服务器的HTTP端口,默认为80 port: 端口 servlet: # 应用的访问路径 context-path: /应用路径修改 ruoyi-admin的配置文件中的数据库用户名和密码,修改文件路径:/home/ruoyi/uploadPath
打包,打包后会在 RuoYi-Vue\ruoyi-admin\target 生成 ruoyi-admin.jar,这就是主程序包
- 修改数据库连接,编辑
树莓派环境,后端部署
```bash
su -i
mkdir -p /home/ruoyi
cd /home/ruoyi
mkdir uploadPath
# 将 ruoyi-admin.jar 上传到 /home/ruoyi 目录(当然,这里自定义)
touch ry.sh
```
官方给的启动脚本ry.sh有点问题(主要是windows异常行结束符 & 修改执行的sh为 bash)
我改了一下:ry.sh,主要是开头的 #!/bin/sh 改成了 #!/bin/bash
此外,如果报错:-bash: ./ry.sh: 无法执行:找不到需要的文件,大概率就是脚本在windows编辑过,需要在树莓派linux中使用vim打开,然后输入:set ff=unix ,之后保存退出再试就可以了。
#!/bin/bash
# ./ry.sh start 启动 stop 停止 restart 重启 status 状态
AppName=ruoyi-admin.jar
# JVM参数
JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
APP_HOME=`pwd`
LOG_PATH=$APP_HOME/logs/$AppName.log
if [ "$1" = "" ];
then
echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
exit 1
fi
if [ "$AppName" = "" ];
then
echo -e "\033[0;31m 未输入应用名 \033[0m"
exit 1
fi
function start()
{
PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
if [ x"$PID" != x"" ]; then
echo "$AppName is running..."
else
nohup java $JVM_OPTS -jar $AppName > /dev/null 2>&1 &
echo "Start $AppName success..."
fi
}
function stop()
{
echo "Stop $AppName"
PID=""
query(){
PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
}
query
if [ x"$PID" != x"" ]; then
kill -TERM $PID
echo "$AppName (pid:$PID) exiting..."
while [ x"$PID" != x"" ]
do
sleep 1
query
done
echo "$AppName exited."
else
echo "$AppName already stopped."
fi
}
function restart()
{
stop
sleep 2
start
}
function status()
{
PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
if [ $PID != 0 ];then
echo "$AppName is running..."
else
echo "$AppName is not running..."
fi
}
case $1 in
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
*)
esac
# 启动后端程序
./ry.sh start
前端编译
前端是静态资源库,不需要考虑交叉编译的事情,所以目前方案就是windows打包,然后树莓派nginx部署
进入项目的RuoYi-Vue\ruoyi-ui目录
开发
# 克隆项目(此步骤省略,上面已经下载了)
# git clone https://gitee.com/y_project/RuoYi-Vue
# 进入项目目录
cd ruoyi-ui
# 安装依赖
npm install
# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npmmirror.com
# 启动服务
npm run dev
# 浏览器访问 http://localhost:80
发布
# 构建测试环境
npm run build:stage
# 构建生产环境
npm run build:prod
# 生成目录
ruoyi-ui\dist
树莓派部署
# 这里可以直接在树莓派宿主机安装nginx, 现在使用容器nginx方案,也可以改成openresty容器的。
# 将构建完成的 dist 文件夹放到此目录下
mkdir -p /opt/nginx/html
mkdir -p /opt/nginx/conf
mkdir -p /opt/nginx/logs
touch /opt/nginx/conf/ruoyi.conf
ruoyi.conf
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
root /usr/share/nginx/html/dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
}
# springdoc proxy
location ~ ^/v3/api-docs/(.*) {
proxy_pass http://localhost:8080/v3/api-docs/$1;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
docker-compose.yml
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: nginx
network_mode: "host" # 使用主机网络
volumes:
- /opt/nginx/conf:/etc/nginx/conf.d # 映射配置文件
- /opt/nginx/logs:/var/log/nginx # 映射日志文件
- /opt/nginx/html:/usr/share/nginx/html # 映射静态文件
- /etc/localtime:/etc/localtime:ro
- /home/ruoyi/uploadPath/:/home/ruoyi/uploadPath/ #ruoyi
restart: always # 设置容器自动重启
cd /opt/nginx/
docker-compose up -d
浏览器访问http://树莓派ip,即可访问若依界面。
后续实际运行发现,页面运行一段时间,就跳出来登不进去了,登录一直报错。在windows本地运行没问题,估计还是环境有点问题。仅当做一次探索和记录吧,后续会想办法优化。
参考文档
[1]. 无法拉取 Docker 镜像?树莓派4B 安装Docker并配置Docker镜像源分享
[2]. docker设置国内镜像源

浙公网安备 33010602011771号