阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Docker微服务-Jenkins+GitLab+Maven+Shell自动化构建实施案例

432次阅读
没有评论

共计 10478 个字符,预计需要花费 27 分钟才能阅读完成。

* 环境:
CentOS7
代码仓库:Gitlab
持续集成代码更新:Jenkins
构建打包:Maven
镜像自动交付脚本:Shell

基础环境软件安装:Gitlab、Jenkins、Maven 配置,安装参考网上,这里安装略,重点介绍项目持续集成和镜像交付。
结合上一博文:https://www.linuxidc.com/Linux/2019-02/157106.htm
这里配置了两个基础服务容器的自动化构建,一个常规业务服务容器的自动化构建,其他的容器服务持续集成类似操作,这不做重复操作。


* 创建基础持续集成项目 -config

1.1 创建自由风格的软件项目 -Job,创建 config-tmp-release
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

1.2 创建 maven 项目 -Job,创建基础项目 config-tmp-ms
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

1.3 配置 config-tmp-ms 基础项目
基于 jdk8,配置 config-tmp-ms 项目 Git 代码仓库源,并选取 release 分支。
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例
配置关联项目 config-tmp-release:
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例
构建命令及构建后操作脚本:
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

1.4 配置脚本
项目 jar 包同步脚本:/home/jenkins/docker-tmp/script/rsync.sh config-tmp-ms config-service

cat /home/jenkins/docker-tmp/script/rsync.sh
#!/bin/bash
ip=10.1.1.1  #docker tmp server
passwd=******
rsync -vzrtopg --numeric-ids --progress --password-file=/etc/rsyncd.password6 /home/jenkins/.jenkins/workspace/$1/target/alaxiaoyou-$2-0.0.1-SNAPSHOT.jar root@$ip::$1
expect /home/jenkins/docker-test/script/image.exp $ip $passwd $1 $2 $3

其中 config-tmp-ms 必须跟项目 job 名称一样。$1 为此项目 job 名称“config-tmp-ms”,$2 为此项目代码 git@gitlab.alaxiaoyou.com:xxx/alaxiaoyou-config-service.git,provider:config-service。目的是自动替换各个 provider 配置。

expect 脚本远程触发 rancher 服务器上脚本:/home/jenkins/docker-pro/script/image.exp

cat /home/jenkins/docker-pro/script/image.exp 
#!/usr/bin/expect -f
set ipaddress [lindex $argv 0]
set passwd [lindex $argv 1]
set msname [lindex $argv 2]
set msnameb [lindex $argv 3]

spawn ssh name@$ipaddress;
expect "password:";
send "$passwd\r";
expect "#"
send "sudo nohup /data/docker/layout-script/pro-all.sh $msname $msnameb  >> /data/docker/logs/$msname.log &\r"
expect eof {exit 1}

rancher server 服务器上脚本,构建,推送 push 到阿里镜像仓库:/data/docker/layout-script/pro-all.sh

#!/bin/bash
namems=$1
namemsb=$2
version=latest
msrepo=/data/docker/$1
imgrepo=xmbaby
imgname=$1

if [! -d $msrepo];then

mkdir -p $msrepo

scp jenkins@10.1.1.1:~/.jenkins/workspace/$1/target/alaxiaoyou-$2-0.0.1-SNAPSHOT.jar $msrepo
echo "[$namems]" >> /etc/rsyncd.conf
echo "path=/data/docker/$namems/" >> /etc/rsyncd.conf
echo "comment = update
ignore errors
read only = no
list = no
hosts allow = 10.1.1.1/255.255.255.0
auth users = root
uid = root
gid = root
secrets file = /etc/rsyncd.secrets" >> /etc/rsyncd.conf

else

echo "开始构建 docker 镜像"

fi

echo "FROM registry-internal.cn-hangzhou.aliyuncs.com/xmbaby-pre/ms-jdk8" > $msrepo/dockerfile
echo "MAINTAINER $namems"name@alaxiaoyou.com"" >> $msrepo/dockerfile
echo "ADD alaxiaoyou-$namemsb-0.0.1-SNAPSHOT.jar /data/httpd/" >> $msrepo/dockerfile
echo "WORKDIR /data/httpd/" >> $msrepo/dockerfile
echo "ENTRYPOINT java -Xmx512m -Xss512k -jar alaxiaoyou-$namemsb-0.0.1-SNAPSHOT.jar" >> $msrepo/dockerfile

cd $msrepo

docker build -t ms/$namems .

if [$? -ne 0];then

echo "$namems 镜像构建失败,请检查 dockerfile !"
exit

else

imageid=`docker images |grep "ms/$namems" |awk '{print $3}'`
docker login --username=name@alaxiaoyou.com --password=****** registry-internal.cn-hangzhou.aliyuncs.com
docker tag $imageid registry-internal.cn-hangzhou.aliyuncs.com/$imgrepo/$imgname:$version
docker push registry-internal.cn-hangzhou.aliyuncs.com/$imgrepo/$imgname:$version

fi

1.5 构建操作
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

构建 config-tmp-release 项目,此项目执行完成后,自动构建关联的下级项目 config-tmp-ms,config-tmp-ms 项目会 Jenkins 中自动拉取最新代码,触发 rsync 同步脚本,rsync 脚本里触发 docker 镜像 build 和 push 操作。Jenkins 最终构建完成后,即可将镜像仓库拉取最新交付的镜像。


* 创建基础持续集成项目 -gateway

2.1 创建自由风格的软件项目 -Job,创建 gateway-tmp-release
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

2.2 创建 maven 项目 -Job,创建基础项目 gateway-tmp-ms
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

2.3 配置 gateway-tmp-ms 基础项目
基于 jdk8,配置 gateway-tmp-ms 项目 Git 代码仓库源,并选取 release 分支。
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

配置关联项目 gateway-tmp-release:
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

配置构建前操作脚本,构建命令,构建后操作脚本:
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

2.4 配置脚本
构建前配置模板替换,配置成相应的 provider,这里为 gateway provider:
脚本:sh /home/jenkins/docker-tmp/script/configuration.sh gateway-tmp-ms api-gateway

cat /home/jenkins/docker-tmp/script/configuration.sh
#!/bin/bash
sed s/module/alaxiaoyou-$2/g  /home/jenkins/.jenkins/workspace/ms-tmp-configuration/module.yml > /home/jenkins/.jenkins/workspace/ms-tmp-configuration/bootstrap.yml
yes | cp -rfp /home/jenkins/.jenkins/workspace/ms-tmp-configuration/bootstrap.yml /home/jenkins/.jenkins/workspace/$1/src/main/resources/

其中 gateway-tmp-ms 必须跟项目 job 名称一样。$1 为此项目 job 名称“gateway-tmp-ms”,$2 为此项目代码 git@gitlab.alaxiaoyou.com:xxx.git 名称 ”api-gateway”。目的是自动替换各个 provider 配置,接下来后面各个 provider 自动替换。

模板文件:

cat /home/jenkins/.jenkins/workspace/ms-tmp-configuration/module.yml
spring:
  application:
    name: module 
  cloud:
    zookeeper:
      connect-string: zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
    config:
      uri: http://msconfig:20000

构建后配置,项目包(maven 打包)同步脚本 rsync,从 git 仓库服务器拉取代码打包后,包同步到 docker-tmp 服务器(rancher 服务器)中:
项目 jar 包同步脚本:sh /home/jenkins/docker-tmp/script/rsync.sh gateway-tmp-ms api-gateway

cat /home/jenkins/docker-tmp/script/rsync.sh
#!/bin/bash
ip=10.1.1.1  #docker tmp server
passwd=******
rsync -vzrtopg --numeric-ids --progress --password-file=/etc/rsyncd.password6 /home/jenkins/.jenkins/workspace/$1/target/alaxiaoyou-$2-0.0.1-SNAPSHOT.jar root@$ip::$1
expect /home/jenkins/docker-tmp/script/image.exp $ip $passwd $1 $2 $3

expect 脚本远程触发 rancher 服务器上脚本:/home/jenkins/docker-tmp/script/image.exp

cat /home/jenkins/docker-tmp/script/image.exp
#!/usr/bin/expect -f
set ipaddress [lindex $argv 0]
set passwd [lindex $argv 1]
set msname [lindex $argv 2]
set msnameb [lindex $argv 3]
set jvm [lindex $argv 4]

spawn ssh name@$ipaddress;
expect "password:";
send "$passwd\r";
expect "#"
send "sudo nohup /data/docker/layout-script/all.sh $msname $msnameb $jvm  >> /data/docker/logs/$msname.log &\r"

rancher server 服务器上脚本,构建,推送 push 到阿里镜像仓库:/data/docker/layout-script/all.sh

#!/bin/bash
namems=$1
namemsb=$2
version=latest
msrepo=/data/docker/$1
imgrepo=xmbaby
imgname=$1

if [! -d $msrepo];then

mkdir -p $msrepo

scp jenkins@10.1.1.1:~/.jenkins/workspace/$1/target/alaxiaoyou-$2-0.0.1-SNAPSHOT.jar $msrepo

echo "[$namems]" >> /etc/rsyncd.conf
echo "path=/data/docker/$namems/" >> /etc/rsyncd.conf
echo "comment = update
ignore errors
read only = no
list = no
hosts allow = 10.1.1.1/255.255.255.0
auth users = root
uid = root
gid = root
secrets file = /etc/rsyncd.secrets" >> /etc/rsyncd.conf

else

echo "开始构建 docker 镜像"

fi

echo "FROM registry-internal.cn-hangzhou.aliyuncs.com/xmbaby-pre/ms-jdk8" > $msrepo/dockerfile
echo "MAINTAINER $namems"name@alaxiaoyou.com"" >> $msrepo/dockerfile
echo "ADD alaxiaoyou-$namemsb-0.0.1-SNAPSHOT.jar /data/httpd/" >> $msrepo/dockerfile
echo "WORKDIR /data/httpd/" >> $msrepo/dockerfile
echo "ENTRYPOINT java -Xmx512m -Xss512k -jar alaxiaoyou-$namemsb-0.0.1-SNAPSHOT.jar" >> $msrepo/dockerfile

cd $msrepo

docker build -t ms/$namems .

if [$? -ne 0];then

echo "$namems 镜像构建失败,请检查 dockerfile !"
exit

else

imageid=`docker images |grep "ms/$namems" |awk '{print $3}'`
docker login --username=name@alaxiaoyou.com --password=****** registry-internal.cn-hangzhou.aliyuncs.com
docker tag $imageid registry-internal.cn-hangzhou.aliyuncs.com/$imgrepo/$imgname:$version
docker push registry-internal.cn-hangzhou.aliyuncs.com/$imgrepo/$imgname:$version

fi

2.5 构建操作
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

构建 gateway-tmp-release 项目,此项目执行完成后,自动构建关联的下级项目 gateway-tmp-ms,gateway-tmp-ms 项目会 Jenkins 中自动拉取最新代码,触发 rsync 同步脚本,rsync 脚本里触发 docker 镜像 build 和 push 操作。Jenkins 最终构建完成后,即可将镜像仓库拉取最新交付的镜像。


* 创建持续集成项目 -sms

3.1 创建 maven 项目 -Job,创建 sms-tmp-release
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

3.2 配置 ms-tmp-release 项目
基于 jdk8,配置 sms 项目 Git 代码仓库源,并选取 release 分支。
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

构建基于 pom.xml 进行构建
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

3.3 创建 maven 项目 -Job,创建 sms-tmp-ms
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

3.4 配置 sms-tmp-ms 项目
基于 jdk8,配置 sms 项目 Git 代码仓库源,并选取 release 分支:
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

配置关联项目 sms-tmp-release:
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

配置构建前操作脚本,构建命令,构建后操作脚本:
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

3.5 配置脚本
构建前配置模板替换,配置成相应的 provider,这里为 sms provider:
脚本:sh /home/jenkins/docker-tmp/script/configuration.sh sms-tmp-ms sms-provider

cat /home/jenkins/docker-tmp/script/configuration.sh sms-tmp-ms sms-provider
#!/bin/bash
sed s/module/alaxiaoyou-$2/g  /home/jenkins/.jenkins/workspace/ms-tmp-configuration/module.yml > /home/jenkins/.jenkins/workspace/ms-tmp-configuration/bootstrap.yml
yes | cp -rfp /home/jenkins/.jenkins/workspace/ms-tmp-configuration/bootstrap.yml /home/jenkins/.jenkins/workspace/$1/src/main/resources/

模板文件:

cat /home/jenkins/.jenkins/workspace/ms-tmp-configuration/module.yml
spring:
  application:
    name: module 
  cloud:
    zookeeper:
      connect-string: zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
    config:
      uri: http://msconfig:20000

其中 sms-tmp-ms 必须跟项目 job 名称一样。$1 为此项目 job 名称“sms-tmp-ms”,$2 为此项目代码 git@gitlab.alaxiaoyou.com:xxx.git 名称 ”sms-provider”。目的是自动替换各个 provider 配置。

构建后配置,项目包(maven 打包)同步脚本 rsync,从 git 仓库服务器拉取代码打包后,包同步到 docker-tmp 服务器(rancher 服务器)中:
脚本:sh /home/jenkins/docker-tmp/script/rsync.sh sms-tmp-ms sms-provider 256m

cat /home/jenkins/docker-tmp/script/rsync.sh  sms-tmp-ms sms-provider 256m
#!/bin/bash
ip=10.1.1.1  #docker tmp server
passwd=******
rsync -vzrtopg --numeric-ids --progress --password-file=/etc/rsyncd.password6 /home/jenkins/.jenkins/workspace/$1/target/alaxiaoyou-$2-0.0.1-SNAPSHOT.jar root@$ip::$1
expect /home/jenkins/docker-test/script/image.exp $ip $passwd $1 $2 $3

Jenkins 和 rancher 不在同一台服务器行,用 shell expect 脚本远程触发 rancher 服务器上脚本:

cat /home/jenkins/docker-test/script/image.exp
#!/usr/bin/expect -f
set ipaddress [lindex $argv 0]
set passwd [lindex $argv 1]
set msname [lindex $argv 2]
set msnameb [lindex $argv 3]
set jvm [lindex $argv 4]

spawn ssh name@$ipaddress;
expect "password:";
send "$passwd\r";
expect "#"
send "sudo nohup /data/docker/layout-script/all.sh $msname $msnameb $jvm  >> /data/docker/logs/$msname.log &\r"
expect eof {exit 1}

rancher server 服务器上脚本,构建,推送 push 到阿里镜像仓库:/data/docker/layout-script/all.sh

#!/bin/bash
namems=$1
namemsb=$2
version=latest
msrepo=/data/docker/$1
imgrepo=xmbaby
imgname=$1

if [! -d $msrepo];then

mkdir -p $msrepo

scp jenkins@10.1.1.1:~/.jenkins/workspace/$1/target/alaxiaoyou-$2-0.0.1-SNAPSHOT.jar $msrepo

echo "[$namems]" >> /etc/rsyncd.conf
echo "path=/data/docker/$namems/" >> /etc/rsyncd.conf
echo "comment = update
ignore errors
read only = no
list = no
hosts allow = 10.1.1.1/255.255.255.0
auth users = root
uid = root
gid = root
secrets file = /etc/rsyncd.secrets" >> /etc/rsyncd.conf

else

echo "开始构建 docker 镜像"

fi

echo "FROM registry-internal.cn-hangzhou.aliyuncs.com/xmbaby-pre/ms-jdk8" > $msrepo/dockerfile
echo "MAINTAINER $namems"name@alaxiaoyou.com"" >> $msrepo/dockerfile
echo "ADD alaxiaoyou-$namemsb-0.0.1-SNAPSHOT.jar /data/httpd/" >> $msrepo/dockerfile
echo "WORKDIR /data/httpd/" >> $msrepo/dockerfile
echo "ENTRYPOINT java -Xmx512m -Xss512k -jar alaxiaoyou-$namemsb-0.0.1-SNAPSHOT.jar" >> $msrepo/dockerfile

cd $msrepo

docker build -t ms/$namems .

if [$? -ne 0];then

echo "$namems 镜像构建失败,请检查 dockerfile !"
exit

else

imageid=`docker images |grep "ms/$namems" |awk '{print $3}'`
docker login --username=name@alaxiaoyou.com --password=****** registry-internal.cn-hangzhou.aliyuncs.com
docker tag $imageid registry-internal.cn-hangzhou.aliyuncs.com/$imgrepo/$imgname:$version
docker push registry-internal.cn-hangzhou.aliyuncs.com/$imgrepo/$imgname:$version

fi

3.6 构建操作
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

构建 sms-tmp-release 项目,此项目执行完成后,自动构建关联的下级项目 sms-tmp-ms,sms-tmp-ms 项目会 Jenkins 中自动拉取最新代码,触发 rsync 同步脚本,rsync 脚本里触发 docker 镜像 build 和 push 操作。Jenkins 最终构建完成后,即可将镜像仓库拉取最新交付的镜像。

3.7 发布已构建镜像
进入 rancher 控制台

添加服务 tmp-sms-ms:
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

映射卷:
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

点击“创建”,选中“创建前总是拉取镜像”,rancher 便会分发任务至 agent,进行最新镜像的拉取。
其中镜像为已在 rancher 宿主机上,进行手动镜像构建交付到阿里云镜像仓库的。并非通过 Jenkins 自动构建交付到阿里云镜像仓库。

3.8 镜像升级、回滚操作
升级步骤:
停止该服务正在运行的容器
拉取最新镜像
运行新容器

回滚:
如果不单击 rancher 控制台右上角“Upgraded”,该服务可进行回滚操作。
rancher 控制台上方为“stopped”状态的容器为旧容器,单击“启动”按钮可进行回滚;
下方为“Running”状态的容器为升级的容器,单击右上角“Upgraded”按钮可进行回滚;容器镜像升级完成,旧容器销毁。
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

3.9 阿里云镜像仓库交付的镜像
Docker 微服务 -Jenkins+GitLab+Maven+Shell 自动化构建实施案例

说明:以上配置了两个基础服务容器的持续交付,一个常规服务容器的持续交付,其他的容器服务持续交付类似操作,这不做重复操作。其中,构建、推送镜像仓库的脚本里对应的 IP 配置为生产环境地址,由于此次测试环境为内网,无外网 IP。所以,涉及到镜像的 push 操作无法操作成功。各个服务 provider 的打包,如要在 Jenkins 中自动操作,无法完成。所以,均从其他已打好包的服务器上拷贝过来,然后在 rancher 宿主机进行构建、推送 push 到阿里云镜像仓库。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计10478字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7995089
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛 NAS-4:飞牛 NAS 安装 istore 旁路由,家庭网络升级的最佳实践 开始 大家好我是...
终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的 3D 玩偶了 前些日子参加某网站活动,获得一次实物 3D 打印的机会,于是从众多...
CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流! 大家好,我是星哥,今天才思枯竭,不写技术文章了!来吐槽一下 CSDN。...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新 SSL 证书系统、申请 godaddy 的 APIKEY 公司之前花钱购买的 ssl 证书快...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...