已经给树莓派安装了ubuntu系统,并且配置了内网穿透和开机自启,现在我甚至可以从公交车上使用手机连接到树莓派中进行操作。
然后,下一步我需要的是docker服务。
安装docker服务
安装docker服务只需要一个命令。
1 | lua复制代码sudo apt install docker.io |
执行完成后docker服务已经自行启动,但是还需要稍微进行一些配置。
为了能快速拉取镜像,需要给docker服务添加镜像源,镜像源的配置文件位于/etc/docker/daemon.json
,这个文件默认是不存在的,需要自行创建,执行sudo vim /etc/docker/daemon.json
编辑文件,在“registry-mirrors”字段下添加镜像源 ,保存文件后重启服务。
1 | ruby复制代码ubuntu@ubuntu:~$ sudo vim /etc/docker/daemon.json |
国内可选的镜像源有:
- Docker中国区官方镜像 registry.docker-cn.com
- 网易蜂巢 hub-mirror.c.163.com
- 中国科技大学 docker.mirrors.ustc.edu.cn
配置完毕后可以使用docker pull命令拉取想要的镜像,我需要的镜像有:
1 | arduino复制代码docker pull redis:6.2.6 # redis服务 |
镜像全部拉取完毕后可以执行docker images命令查看:
1 | ruby复制代码ubuntu@ubuntu:~$ sudo docker images |
恢复mariadb数据库
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可,MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。鉴于mysql早已被oracle收购了,所以我只好零成本切换到mariadb。
上次在树莓派使用apt安装了mariadb数据库,存了一些重要数据如gitea的私人仓库数据,后来树莓派raspbian系统所在的U盘坏掉了,但是data目录被抢救下来了,这次使用docker部署mariadb 10.6.4,顺便使用data目录做数据恢复。
1.启动数据库
首先需要从新启动一个数据库服务,使用docker启动数据库只需要一个命令:
1 | ini复制代码docker run --name recovery_db -d -v /mnt/mysqlrecovery:/var/lib/mysql \ |
命令行参数说明:
docker run命令用于运行容器。
–name指定此容器名称为recovery_db,注意名称不能与其他容器的名称相同;
-d选项指定容器在后台运行,区别于-it选项指定容器以交互方式运行;
-v选项用于映射文件目录,此处是把容器内的
/var/lib/mysql
(数据文件路径)映射到容器外的/data/mysqlrecovery
,注意外部目录需要先准备好,需要映射多个路径可以连续使用多个-v;-e参数用于指定环境变量,此处按照mariadb官方docker镜像的说明通过MARIADB_ROOT_PASSWORD环境变量指定容器内mariadb的root密码, 和-v选项一样可以连续使用;
-p选项用于做端口映射,此处是把树莓派的3406端口映射到容器内的3306端口供mariadb服务监听并提供服务,-p参数也可连续使用;
mariadb:10.6.4是指定要使用的docker镜像为mariadb,标签为10.6.4。
命令最后的部分是指定服务端的编码集和指定表名不区分大小写字母。
执行命令之后,使用docker ps
命令可以看到名称为recovery_db的容器已经开始运行,使用ls -l /data/mysqlrecovery
命令可以看到/mnt/mysqlrecovery
目录正在被初始化,出现了mariadb的数据库文件。
根据树莓派的io效率,可能需要等待两三分钟,等数据目录初始化完毕之后就可以使用客户端连接树莓派的3406端口进行验证了,个人推荐使用heidisql工具。
2.复制文件
经过上一步操作,mariadb数据库服务已经开始运行,可以正常使用,之后的步骤都是做数据恢复,我之前抢救出的数据库文件在/home/ubuntu/backups/mysql.zip
,需要解压文件、停服务、覆盖文件、启动服务、导出脚本。
1 | shell复制代码mkdir /mnt/temp && cd /mnt/temp # 创建并切换工作目录 |
数据库启动后,重新使用heidisql或其他支持mysql的客户端连接数据库,可以看到名为gitea的数据库已恢复。
复制数据库文件时需要注意文件的属主和权限,否则数据库无法正常使用。
3.删旧启新
使用数据库客户端工具导出gitea库的数据,以sql文件形式保存,执行docker stop recovery_db && docker rm recovery_db
命令,停止并删除recovery_db
容器,执行rm -rf /mnt/mysqlrecovery
命令删除不再使用的数据库文件。
依照第一步重新启动新的数据库容器,等待数据库可用。
1 | shell复制代码docker run --name work_db -d -v /data/mysqldata:/var/lib/mysql --restart=always \ |
4.导入sql脚本
使用上一步导出的sql文件导入数据到新的数据库。
另可参考官方教程
恢复gitea版本仓库
Gitea是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 语言编写,遵循 MIT 开源许可证,你可以从这里查看gitea的完整代码。gitea具有开源化、易安装、跨平台和轻量级四大特点,即使在树莓派上也能完美运行。
gitea支持使用docker部署和使用二进制方式部署等多种方式,本文属于数据恢复的范畴,采用二进制方式启动gitea服务,与重新部署略有不同。
环境准备
首先需要创建git账号,之后的gitea服务将以git账号权限启动。
1 | shell复制代码groupadd git # 添加用户组,组名git |
之前抢救的gitea版本仓库文件备份包位于/home/ubuntu/backups/giteadata.tar.bz2
,需要使用git用户解压文件到/home/git/gitea
。
1 | shell复制代码cp /home/ubuntu/backups/giteadata.tar.bz2 /home/git/ |
解压完成后,配置文件位于/home/git/gitea/custom/conf/app.ini
,版本仓库位于/home/git/gitea/gitea-repositories
。
1 | yaml复制代码git@ubuntu:~/gitea$ ls -l /home/git/gitea |
下载最新版gitea,树莓派4B使用arm64架构CPU,可以使用gitea-1.15.6-linux-arm64.xz
包,树莓派3B及之前的版本,需要下载gitea-1.15.6-linux-arm-6.xz
或gitea-1.15.6-linux-arm-5.xz
,下载后执行xz -d
命令解压文件,替换到/home/git/gitea/gitea
。
1 | shell复制代码git@ubuntu:~/temp$ wget https://dl.gitea.io/gitea/1.15.6/gitea-1.15.6-linux-arm64.xz |
添加配置
修改配置文件/home/git/gitea/custom/conf/app.ini
使数据库配置和文件路径配置与实际情况相符:
1 | ini复制代码APP_NAME = Gitea: Git with a cup of tea |
执行/home/git/gitea/gitea web --config /home/git/gitea/custom/conf/app.ini
测试gitea进程是否可以正常启动,查看/home/git/gitea/log/gitea.log
日志文件确认是否存在报错,如数据库连接失败、文件系统权限异常等。
1 | shell复制代码git@ubuntu:~/gitea$ /home/git/gitea/gitea web --config /home/git/gitea/custom/conf/app.ini |
1 | shell复制代码git@ubuntu:~/temp$ cat /home/git/gitea/log/gitea.log |
此时可以访问gitea页面查看效果,您可以使用自己的账号登录,同时日志将有刷新:
系统服务
为了避免每次启动树莓派都需要手动启动gitea进程,我们可以参照官方文档将gitea二进制文件注册成系统服务,由于我的数据库是使用docker部署的,所以service文件与官方示例相比略有不同:
1 | ini复制代码[Unit] |
将以上内容保存到/etc/systemd/system/gitea.service
文件(可能需要root权限),然后设置开机自启并启动gitea服务。
1 | shell复制代码systemctl enable gitea # 设置服务开机自启 |
执行systemctl status gitea
查看服务状态,打开浏览器查看页面情况。
数据完美恢复~
本文转载自: 掘金