【Docker与Termux】闲置旧安卓手机上的NAS无缝部署方案

在这里插入图片描述最近有了新手机,旧手机也闲置了,由于之前一直在寻找平价的NAS替代方案,旧手机在抽屉躺了N天后,我决定让它重新焕发光彩,努力工作,继续拉磨。
这个时代的旧手机可以满足NAS的基本配置需求,内存、硬盘、内置电源、WIFI模块、快速接口,简直是理想中的NAS形态,但是散热、ROOT和性能是个短板,不过也不是大问题!
这里的方案也不需要ROOT!

网页端,这个是手机上用Docker部署好的个人网盘页面。
在这里插入图片描述手机端。
在这里插入图片描述容器运行
在这里插入图片描述

什么NAS?
可道云,这也不算是个正经的NAS系统,但是私有云存储&协同办公,又是PC端桌面的操作界面,电脑手机使用都蛮方便,也算是能达到我个人的使用需求。
平时主要存存工具软件,存放我那越来越难以安置的知识库。
地址:https://kodcloud.com/

一般来说在手机上使用Linux系统都是基于termux APP版linux,但是Docker仍然不能在termux版linux里运行,需要Termux上装Qemu虚拟机,然后再在Qemu里装alpine linux,这种套娃式的操作蛮费事,对于没有耐心的盆友来说是一个噩梦般的操作过程,所幸的是有人把Termux+Qemu虚拟机+Alpine Linux整合好了,名为alpine term,极大简化了部署流程,下载Alpine-termux这个APP安装就能用,不过这个安装就能用也只是一个相对的概念,对于我们使用Docker部署应用来说还是有一段路需要走,有一些坑需要踩。

下面正式进入旧手机改造流程,祝我们成功,为了我们的折腾精神。🍻

  • 准备工作:
    小风扇、旧手机,电源线、有网络的WIFI、一台电脑、VMware虚拟机、Shell终端软件

1、下载Alpine-termux APP

Alpine-termux APP概念:
Alpine-termux是APP,Alpine系统是Alpine-termux APP中的一个虚拟机,你可以将Alpine-termux理解为VMware或者Hyper-V或其它虚拟机软件,而Alpine是在虚拟机里运行的Linux系统。

GitHub项目页
https://github.com/FakeRajbhx/alpine-term
APP大概500多M,直接使用GitHub文件提速下载以下APK:https://gh.api.99988866.xyz/
https://github.com/FakeRajbhx/alpine-term/releases/download/New/alpine-term-v16.0-release.apk

2、初始化和登录

下载安装后初始化开机,开机后,登录系统,用户:alpine 密码: alpine
切换到root账户,输入sudo -s
密码为 alpine ,接着修改root密码, 输入 passwd ,需要输入两次密码。

root登录后会显示

C:\Users\admin>ssh root@172.16.12.21 -p 8022
The authenticity of host '[172.16.12.21]:8022 ([172.16.12.21]:8022)' can't be established.
ECDSA key fingerprint is SHA256:T7ViBHC8k6XKW4kY/jor/CRLynwZnv5QF88sMmfTreA.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[172.16.12.21]:8022' (ECDSA) to the list of known hosts.
root@172.16.12.21's password:############################################################Welcome to the Alpine Linux!This operating system uses a package manager called 'apk'.
Here is a quick guide how to use it:apk add {pkg name}   - install packageapk del {pkg name}   - uninstall packageapk info             - list installed packagesapk info {pkg name}  - show information about packageapk search {query}   - search for packageapk update           - update package listsapk upgrade          - upgrade installed packagesapk audit            - show file system changesCheck file '/home/alpine/README' for details about the
current setup of the operating system.See <https://wiki.alpinelinux.org> for the information
about administrating Alpine systems.############################################################Things to do on the first login:1. Change password.2. Set timezone by executing 'sudo setup-timezone'.3. Change this message by editing /etc/motd.4. Change login banner by editing /etc/issue.5. Check for package updates.############################################################root@alpine-term ~ #

3、ssh和root配置

下面的sed命令是在手机端操作的,毕竟此时无法通过电脑终端连接Alpine-termux,如果觉得在手机上一个字母一个字母输入麻烦,就直接vi /etc/ssh/sshd_config配置文件,将PasswordAuthentication和PermitRootLogin的no改成yes,这速度比一个一个输入快多了!

问题:为什么不把命令复制在手机上再在手机命令行里粘贴?
因为Alpine-termux的手机端似乎对长文本的输入支持不友好,比如博主在将以下命令复制粘贴在手机端命令行后,是现实不完整的,即使强行回车,也会报错,所以还是直接在配置文件将no改为yes是最省事的!

系统默认是禁止ssh密码登录的,所以需要先开启它,输入:

sed -i ‘s/PasswordAuthentication no/PasswordAuthentication yes/g’ /etc/ssh/sshd_config  

如果还需要开机root用户登录的话,输入

sed -i ‘s/PermitRootLogin no/PermitRootLogin yes/g’ /etc/ssh/sshd_config

然后重启启动sshd服务,输入

service sshd restart  

重启完成就配置好了。

4、alpine到termux的端口映射

映射ssh的22端口(方便电脑操作,只想手机操作就忽略这个步骤)
因为是Qemu套娃,所以需要映射ssh的22端口,开机完成后,手指在软件的左上方向右滑,会出现菜单,
如下所示:

[1]QEMU[2]/dev/ttyS0
Waiting for login on /dev/ttyS0...[3]/dev/ttyS1
Waiting for login on /dev/ttyS1...[4]/dev/ttyS2
Waiting for login on /dev/ttyS2...[5]/dev/ttyS3
Waiting for login on /dev/ttyS3...

选择 [2]/dev/ttyS0
输入:

ssh root@127.0.0.1 -p 22

映射ssh的22端口到手机的8022端口,选择 [1]QEMU,
输入

hostfwd_add tcp::8022-:22

【注意事项1】这个映射端口的命令每次重启Alpine Term 都需要重新设置一次,建议常驻后台。
执行上面的指令后就可以远程ssh手机的8022端口。这样当手机和电脑处于同一局域网的时候我们就能在电脑上通过FinalShell远程登录手机的Termux模拟终端了。
在电脑上操作终端复制命令比较方便。

【注意事项2】如果你中途出门去公司或其它公共场合,连接了其它wifi,只要没主动关闭Alpine Term APP后台,可以直接在wifi设置里查看新的IP,使用新IP+8022访问模拟终端。

5、网络配置

在alpine中,使用vi编辑器:

vi /etc/network/interfaces

添加如下配置
这里使用dhcp自动获取IP,Alpine虚拟机在这种套娃式的情境下没必要设置固定IP。

auto lo  
iface lo inet loopback  
auto eth0  
iface eth0 inet dhcp

保存后重启网络

/etc/init.d/networking restart

配置DNS地址

vi /etc/resolv.conf

添加如下配置

nameserver 8.8.8.8
nameserver 8.8.4.4

resolv.conf修改后没有重启操作,直接就生效了!

这样alpine就能访问互联网了,如果还是没网,就重启APP重新配置!

6、配置APK源

查看系统版本

cat /etc/alpine-release
3.13.12

方案一、使用阿里镜像 https://mirrors.aliyun.com

sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

方案二、使用科大镜像 http://mirrors.ustc.edu.cn

sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

在上面方案中找到对应系统版本的源版本,这里使用科大的镜像源

http://mirrors.ustc.edu.cn/alpine/v3.13/

找到的源写入以下文件

vi /etc/apk/repositories

在文件中修改以下信息
顺便将最下面的testing注释掉,因为源里没有testing这个目录,不注释掉会导致报错

# Main package repositories.
http://mirrors.ustc.edu.cn/alpine/v3.13/main
http://mirrors.ustc.edu.cn/alpine/v3.13/community# Testing repository.
# You can install packages from this repository with:
# apk add package@testing
#@testing http://mirrors.ustc.edu.cn/alpine/v3.13/testing

或者也可以使用sed替换

sed -i 's/文本/文本/g' /etc/apk/repositories

更新仓库

apk update

升级软件包,后面加–force-broken-world跳过一些问题

apk upgrade --available --force-broken-world

7、重新进入系统

启动alpine-term APP后等待系统加载完成。
系统加载完成后登录alpine-term使用alpine账号登录:

alpine/alpine

进入alpine系统后,使用root用户登录系统:

root/xxxxx

之后在alpine系统命令行输入:

ssh root@127.0.0.1 -p 22

然后手指在软件的左上方向右滑,进行端口映射,选择 [1]QEMU输入:

hostfwd_add tcp::8022-:22

之后就可以在电脑端使用alpine-term IP加上8022远程访问alpine系统了。

8、安装docker

安装docker

sudo apk add docker

使docker开机启动

sudo rc-update add docker  

开启docker服务

sudo service docker start  

后台启动

sudo setsid containerd  
sudo setsid dockerd

docker启动报错

"failed to mount overlay: no such device storage-driver=overlay2" 

上面的错误表明在尝试挂载 Overlay2 存储驱动时出现了问题
添加以下文件及信息

vi /etc/docker/daemon.json
{"storage-driver"="devicemapper"}

测试

docker info
docker ps

测试成功的信息

root@alpine-term ~ # docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMESroot@alpine-term ~ # docker info
Client:Context:    defaultDebug Mode: falseServer:Containers: 0Running: 0Paused: 0Stopped: 0Images: 0Server Version: 20.10.3Storage Driver: overlay2Backing Filesystem: extfsSupports d_type: trueNative Overlay Diff: trueLogging Driver: json-fileCgroup Driver: cgroupfsCgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 7eba5930496d9bbe375fdf71603e610ad737d2b2runc version: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7init version:Security Options:seccompProfile: defaultKernel Version: 5.10.152-0-virtOperating System: Alpine Linux v3.13OSType: linuxArchitecture: x86_64CPUs: 1Total Memory: 2.321GiBName: alpine-termID: BYOE:XMQL:NQVM:E2ZZ:RRXQ:HWB4:YB2B:5KNY:R24L:HMLF:REPA:XYZBDocker Root Dir: /var/lib/dockerDebug Mode: falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries:127.0.0.0/8Live Restore Enabled: falseWARNING: No blkio weight support
WARNING: No blkio weight_device support

DOCKER 安装完成!

9、安装docker compose

curl可能会因为alpine系统网络问题无法下载

curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

这里直接去PC浏览器下载,然后再通过终端上传到alpine系统
https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64
下载完成后将其上传到目录/usr/local/bin/
修改docker-compose-linux-x86_64为docker-compose

mv docker-compose-linux-x86_64 docker-compose

修改docker-compose权限

chmod 777 docker-compose

查看docker-compose版本

docker-compose -v
Docker Compose version v2.23.3

10、部署个人网盘

前言:

因为Alpine-termux APP和手机本身的限制,有时候拉取镜像会因为网络的问题直接失败。

root@alpine-term /mnt/shared/h1d/kodbox # docker-compose up -d 
[+] Running 0/39 
⠋ db 8 layers [⠀⠀⠀⠀⠀⠀⠀⠀] 0B/0B Pulling 27.9s 
⠧ d4c3c94e5e10 Waiting 13.6s
error pulling image configuration: Get "https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/d7/d7a7b84914e9e8f30bd2d3a4114a65dcc076982658d77dce2471f7a8680556ab/data?verify=1715396819-pzw5%2BKmSVyKpEVAUKLWXjUiz93M%3D": net/http: TLS handshake timeout

所以这里我放弃了在Alpine-termux APP虚拟机里直接拉取镜像。

我在电脑端起了一台centos7虚拟机,在centos7中执行docker-compose pull镜像。

1、vmware PC环境(容器部署与迁移)

1.在centos7中安装docker
安装并启动docker服务, 新版本docker会自动安装docker-compose-plugin

 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyunsystemctl enable docker && systemctl start docker

docker compose 用法, 在通过docker compose up启动后, 可以使用docker compose ls查看配置文件位置

docker compose ls

提示:
docker compose命令不存在,可手动安装二进制文件docker-compose并在后续命令中替换。

curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

2.http方式快速启动
注意:
首先创建一个目录作为项目目录,后面所有命令都在这个目录下执行

mkdir /kodbox && cd /kodbox

需在db.env中设置数据库密码,还有yml中的MYSQL_ROOT_PASSWORD需补充.
创建文件来设置数据库环境变量vim db.env

MYSQL_PASSWORD=test@123
MYSQL_DATABASE=kodbox
MYSQL_USER=kodbox

创建docker-compose.yml 文件

 vim docker-compose.yml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/327316.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024 年第一季度全球互联网中断事件

2024 年第一季度伊始&#xff0c;互联网发生了多起中断事件。陆地和海底电缆的损坏在多个地方造成了问题&#xff0c;而与持续中地缘政治冲突相关的军事行动影响了其他地区的连接。 几个非洲国家以及巴基斯坦的政府下令关闭互联网&#xff0c;主要针对移动网络连接。 被称为Ano…

使用vant-ui+vue3实现一个可复用的评星组件

如图所示 有两种情况 一种是5颗星 一种是3颗星 官网上只提供了图标类型的 并没有加文字 https://femessage-vant.netlify.app/#/zh-CN/ 自己结合两种情况 在全局注册了此组件(后续还会持续更新代码~) <template><div class"vant_rate_wrapper"><van…

Ceph集群扩容及数据再均衡原理分析

用户文件在Ceph RADOS中存储、定位过程大概包括&#xff1a;用户文件切割成对象、对象映射到PG、PG分组PGP、PG映射到OSD。这些过程中&#xff0c;可能涉及了大量概念和变量&#xff0c;而其实它们大部分是通过HASH、CRUSH等算法计算出来的&#xff0c;初始参数可能也就只有这么…

OpenResty单机限流

目录 该项目已经实现的限流方法限流流程图限流规则存储针对接口限流 限流算法实现主要代码部分固定窗口令牌桶限制并发数 注意点 前言&#xff1a; 上一篇文章介绍了OpenResty的安装和lua的基本语法学习&#xff0c;这一篇介绍一下使用OpenResty进行限流。本文只对限流功能实现…

BLDC电机基础知识

1、电机工作原理 电机输入的是电能输出机械能&#xff0c;即电机是一种将电能转换为机械能的装置。电机利用磁场的同名磁极互相排斥以及电磁场原理完成电能与机械能的转换。 由物理电磁场理论知识我们知道&#xff0c;磁铁周围存在磁场&#xff0c;同时运动的电荷或通电导线周…

将 Vue、React、Angular、HTML 等一键打包成 macOS 和 Windows 平台客户端应用

应用简介 PPX 基于 pywebview 和 PyInstaller 框架&#xff0c;构建 macOS 和 Windows 平台的客户端。本应用的视图层支持 Vue、React、Angular、HTML 中的任意一种&#xff0c;业务层支持 Python 脚本。考虑到某些生物计算场景数据量大&#xff0c;数据私密&#xff0c;因此将…

uniapp的底部弹出层实现保姆式教程

实现照片&#xff1a; 此过程先进入uniapp官网&#xff0c;找到扩展组件 打开找到里面的uni-popup和uni-icons 点击进入&#xff0c;下载&安装 点击下载并导入HBuilderX 导入到你使用的目录&#xff0c;如test目录 同样将uni-icons点击下载并导入HBuilderX 点击合并 此时te…

C++ 常量

常量是指在程序运行过程中&#xff0c;其值不能被改变的量。 如&#xff1a;i255;arearr3.14; 在程序中直接使用数值有两个问题&#xff1a; 可读性差&#xff1b; 可维护差&#xff1b; 一 符号常量 C语言符号常量的顶用形式如下&#xff1a; 二 C99的const常量 C 语言co…

MyBatis-Plus核心功能详解:条件构造器、自定义SQL与Service接口

在Java的Web开发中&#xff0c;MyBatis-Plus作为MyBatis的增强工具&#xff0c;提供了许多实用的功能&#xff0c;极大地简化了数据库操作的开发过程。下面&#xff0c;我们将详细探讨MyBatis-Plus的三大核心功能&#xff1a;条件构造器、自定义SQL以及Service接口。 一、条件…

凸优化理论学习二|凸函数及其相关概念

系列文章目录 凸优化理论学习一|最优化及凸集的基本概念 文章目录 系列文章目录一、凸函数&#xff08;一&#xff09;凸集&#xff08;二&#xff09;凸函数的定义及举例&#xff08;三&#xff09;凸函数的证明1、将凸函数限制在一条直线上2、判断函数是否为凸函数的一阶条件…

网络安全ctf比赛_学习资源整理,解题工具、比赛时间、解题思路、实战靶场、学习路线,推荐收藏!...

对于想学习或者参加CTF比赛的朋友来说&#xff0c;CTF工具、练习靶场必不可少&#xff0c;今天给大家分享自己收藏的CTF资源&#xff0c;希望能对各位有所帮助。 CTF在线工具 首先给大家推荐我自己常用的3个CTF在线工具网站&#xff0c;内容齐全&#xff0c;收藏备用。 1、C…

Modbus协议

Modbus协议 1.起源 Modbus由Modicon公司于1979年开发&#xff0c;是一种工业现场总线协议标准。 Modbus通信协议具有多个变种&#xff0c;其中有支持串口&#xff0c;以太网多个版本&#xff0c;其中最著名的是Modbus RTU、Modbus ASCII和Modbus TCP三种 其中Modbus TCP是在施…

Oracle 流stream将删除的数据保存

Oracle 流stream将删除的数据保存 --实验的目的是捕获hr.employees表的删除行&#xff0c;将删除行插入到emp_del表中。 --设置初始化参数 AQ_TM_PROCESSES1 COMPATIBLE9.2.0 LOG_PARALLELISM1 --查看数据库的名称&#xff0c;我的为ora9,将以下的ora9全部替换为你的数据库名称…

【教程向】从零开始创建浏览器插件(三)解决 Chrome 扩展中弹出页面、背景脚本、内容脚本之间通信的问题

第三步&#xff1a;解决 Chrome 扩展中弹出页面、背景脚本、内容脚本之间通信的问题 Chrome 扩展开发中&#xff0c;弹出页面&#xff08;Popup&#xff09;、背景脚本&#xff08;Background Script&#xff09;、内容脚本&#xff08;Content Script&#xff09;各自拥有独立…

微信小程序知识点归纳(一)

前言&#xff1a;适用于有一定基础的前端开发同学&#xff0c;完成从网页开发到小程序开发的知识转换。 先立框架&#xff0c;后砌墙壁 回顾&#xff1a;了解微信小程序开发流程-CSDN博客 初始页面结构&#xff0c;三部分pages、utils、配置&#xff0c;分别存放页面、工具类…

OpenAI Whisper 语音转文本实验

为了实现语音方式与大语言模型的对话&#xff0c;需要使用语音识别&#xff08;Voice2Text&#xff09;和语音输出&#xff08;Text2Voice&#xff09;。感觉这项技术已比较成熟了&#xff0c;国内也有许多的机构开发这项技术&#xff0c;但是像寻找一个方便测试的技术居然还不…

使用Vue调用ColaAI Plus大模型,实现聊天(简陋版)

首先去百度文心注册申请自己的api 官网地址&#xff1a;LuckyCola 注册点开个人中心 查看这个文档自己申请一个ColaAI Plus定制增强大模型API | LuckyColahttps://luckycola.com.cn/public/docs/shares/api/colaAi.html来到vue的页面 写个样式 <template><Header …

C++ | Leetcode C++题解之第79题单词搜索

题目&#xff1a; 题解&#xff1a; class Solution { public:bool exist(vector<vector<char>>& board, string word) {rows board.size();cols board[0].size();for(int i 0; i < rows; i) {for(int j 0; j < cols; j) {if (dfs(board, word, i, …

dnf手游攻略,新手入坑必备!

一、角色创建策略 在DNF手游中&#xff0c;角色创建是玩家初入游戏的首要步骤。为最大化游戏体验和收益&#xff0c;新手玩家通常建议创建三个角色&#xff1a;一个主账号和两个副账号。 主账号选择 主账号的选择应基于玩家个人的喜好和对职业的熟悉程度。无论选择哪个职业&a…

Gone框架介绍17 - 创建一个可运行在生产环境的Web项目

gone是可以高效开发Web服务的Golang依赖注入框架 github地址&#xff1a;https://github.com/gone-io/gone 文档原地址&#xff1a;https://goner.fun/zh/guide/auto-gen-priest.html 请帮忙在github上点个 ⭐️吧&#xff0c;这对我很重要 &#xff1b;万分感谢&#xff01;&a…