使用Apisix打造家庭NAS网关,免公网IP访问

news2024/12/23 2:03:39

使用Apisix打造家庭NAS网关

本文使用apisix打造家庭NAS网关,并通过cloudflare进行穿透,可免公网IP访问。首先你的NAS支持Docker,没有NAS也没有关系,只要你的电脑支持Docker同样可以参照该教程。

1 依赖资源准备

  • 准备域名:
    • 免费域名注册: https://www.freenom.com/
    • 或者在云厂商(阿里云/腾讯云/华为云等)注册一个,新用户最低1
  • cloudflare账户,注册很简单,这里我就不演示,请提前准备好
  • 依赖镜像
    • alpine:3.17
    • bitnami/etcd:latest
    • apache/apisix:latest
    • apache/apisix-dashboard:latest
    • vcyang/cloudflared:1.0.0 如果是arm芯片请选择 vcyang/cloudflared:1.0.0-arm64

2 镜像配置

2.1 设置docker官方镜像源

打开docker -> 镜像 -> 仓库 -> 设置 -> 添加
仓库名称:Docker Hub
库地址: https://hub.docker.com/
在这里插入图片描述

2.2 请依次下载上述依赖的镜像

3 安装镜像

3.1 NAS中新建挂载所需目录

请在nas中建立docker需要挂载的目录,目录如下:

  • 我的文件/docker/
  • 我的文件/docker/etcd/
  • 我的文件/docker/apisix/apisix/
  • 我的文件/docker/apisix/apisix/conf/
  • 我的文件/docker/apisix/apisix/logs/
  • 我的文件/docker/apisix/dashboard/

3.2 NAS中添加apisix所需的配置文件

文件目录: /我的文件/docker/apisix/apisix/conf/config.yaml

apisix:
  node_listen: 9080              # APISIX listening port
  enable_ipv6: true              # 开启ipv6支持

  enable_control: true
  control:
    port: 9092

deployment:
  admin:
    allow_admin:
      - 0.0.0.0/0
      - ::0/0

    admin_key:
      - name: "admin"
        key: edd1c9f034335f136f87ad84b625c8f1
        role: admin                 # admin: manage all configuration data

      - name: "viewer"
        key: 4054f7cf07e344346cd3f287985e76a2
        role: viewer

  etcd:
    host:
      - "http://NAS的ip地址:12379"   # etcd的地址
    prefix: "/apisix"               # apisix configurations prefix
    timeout: 30                     # 30 seconds

3.3 NAS中添加apisix dashboard所需的配置文件

文件目录: /我的文件/docker/apisix/dashboard/conf.yaml

conf:
  listen:
    port: 9000          # `manager api` listening port
  allow_list:           # If we don't set any IP list, then any IP access is allowed by default.
    - 0.0.0.0/0
    - ::0/0
  etcd:
    endpoints:          # supports defining multiple etcd host addresses for an etcd cluster
      - "http://NAS的ip地址:12379" # etcd的地址
    mtls:
      enable: false
      key_file: ""          # Path of your self-signed client side key
      cert_file: ""         # Path of your self-signed client side cert
      ca_file: ""           # Path of your self-signed ca cert, the CA is used to sign callers'
    prefix: /apisix     # apisix config's prefix in etcd, /apisix by default
  log:
    error_log:
      level: warn       # supports levels, lower to higher: debug, info, warn, error, panic, fatal
      file_path:
        logs/error.log  # supports relative path, absolute path, standard output
                        # such as: logs/error.log, /tmp/logs/error.log, /dev/stdout, /dev/stderr
    access_log:
      file_path:
        logs/access.log  # supports relative path, absolute path, standard output

authentication:
  secret:
    secret              # secret for jwt token generation.
                        # NOTE: Highly recommended to modify this value to protect `manager api`.
                        # if it's default value, when `manager api` start, it will generate a random string to replace it.
  expire_time: 3600     # jwt token expire time, in second
  users:                # yamllint enable rule:comments-indentation
    - username: admin   # username and password for login `manager api`
      password: 这里是你的登录密码  # 这里是dashboard登录的密码,请尽量设置复杂一点
    - username: user
      password: 这里是你的登录密码 # 这里是dashboard普通用户登录的密码,请尽量设置复杂一点

plugins:                          # plugin list (sorted in alphabetical order)
  - api-breaker
  - authz-keycloak
  - basic-auth
  - batch-requests
  - consumer-restriction
  - cors
  # - dubbo-proxy
  - echo
  # - error-log-logger
  # - example-plugin
  - fault-injection
  - grpc-transcode
  - hmac-auth
  - http-logger
  - ip-restriction
  - jwt-auth
  - kafka-logger
  - key-auth
  - limit-conn
  - limit-count
  - limit-req
  # - log-rotate
  # - node-status
  - openid-connect
  - prometheus
  - proxy-cache
  - proxy-mirror
  - proxy-rewrite
  - redirect
  - referer-restriction
  - request-id
  - request-validation
  - response-rewrite
  - serverless-post-function
  - serverless-pre-function
  # - skywalking
  - sls-logger
  - syslog
  - tcp-logger
  - udp-logger
  - uri-blocker
  - wolf-rbac
  - zipkin
  - server-info
  - traffic-split

3.4 新建alpine容器

a. 挂载目录: 我的文件/docker/

在这里插入图片描述

b. 设置启动命令:

sleep inf

在这里插入图片描述

c. 容器创建成功后,连接ssh进去执行

# 给etcd挂载的目录读写权限
chmod -R 777 /data/etcd

# 然后退出
exit

3.5 创建etcd容器

a. 设置挂载目录
挂载目录: 我的文件/docker/etcd/
容器内目录: /bitnami/etcd

如图:
在这里插入图片描述

b. 设置端口
本地端口

  • 12379
  • 12380

如图:

在这里插入图片描述

c. 设置环境变量

ALLOW_NONE_AUTHENTICATION: "yes"
ETCD_ADVERTISE_CLIENT_URLS: "http://NAS的ip地址:12379"

如图:
在这里插入图片描述

d. 看进程,看到如图说明etcd容器安装成:
在这里插入图片描述

c. 在浏览器访问: http://NAS的ip地址:12379/version
返回如下信息说明正常访问:

{"etcdserver":"3.5.6","etcdcluster":"3.5.0"}

3.6 创建apisix容器

a. 挂载目录
挂载文件: 我的文件/docker/apisix/apisix/conf/config.yaml
容器内目录: /usr/local/apisix/conf/config.yaml

挂载日志目录: 我的文件/docker/apisix/apisix/logs/
容器内目录: /usr/local/apisix/logs

如图:
在这里插入图片描述

b. 开放端口

  • 19080
  • 19443
  • 19180

如图:
在这里插入图片描述

c. 查看进程,如图说明启动成功
在这里插入图片描述

d. 验证服务
浏览器中访问:http://NAS的IP地址:19180/apisix/admin/services/
返回如下信息说明服务正常:

{"error_msg":"failed to check token"}

3.7 创建apisix-dashboard

a. 设置挂载目录
挂载配置文件: /我的文件/docker/apisix/dashboard/conf.yaml
容器内目录文件: /usr/local/apisix-dashboard/conf/conf.yaml

如图:
在这里插入图片描述

b. 设置端口

  • 19000

如图:
在这里插入图片描述

c. 查看进程,如图说明运行正常:
在这里插入图片描述

d. 验证服务
浏览器中访问:http://NAS的IP地址:19000/
显示如下说明服务正常:
在这里插入图片描述

然后使用配置中的账户和密码登录。

4 设置域名

4.1登录cloudflare

地址:https://dash.cloudflare.com/login

4.2 添加你的域名站点

在这里插入图片描述

4.3 设置你的域名DNS服务器为cloudflare的DNS服务

a. 复制红框的地址,然后修改你的域名的DNS
在这里插入图片描述

b. 这里以阿里云域名举例:
在这里插入图片描述
在这里插入图片描述

然后确定提交

5 通过cloudflare穿透

5.1 创建穿透服务容器,新建容器vcyang/cloudflared

不用做任何设置,直接应用
在这里插入图片描述

5.2 容器启动后连接ssh进入容器

在这里插入图片描述

5.3 配置cloudflared

ssh中执行

cloudflared tunnel login

在这里插入图片描述

复制红框中的地址到浏览器中访问,登录cloudflare账号进行域名授权,然后选择如下图中域名进行授权
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

然后关闭页面

5.4 创建隧道名

a. ssh中执行

cloudflared tunnel create 隧道名,请使用字母或者拼音

在这里插入图片描述

b. 绑定域名,并执行:

cloudflared tunnel route dns 隧道名 你的域名
cloudflared tunnel run --url http://你nas的IP地址:19080 隧道名 &

在这里插入图片描述

d. 浏览中输入https://你的域名 ,显示如下说明网关穿透成功

在这里插入图片描述

6 配置网关

6.1 登录;apisix dashboard访问路由

地址: http://你nas地址:19000
账户和密码参考上面dashboard的配置文件

6.2 配置上游服务器

在这里插入图片描述

配置内容按图中填写,然后下一步,然后提交

在这里插入图片描述

6.2 创建服务

在这里插入图片描述

在这里插入图片描述

6.2 创建路由

在这里插入图片描述

按照图中填写,其他默认,下一步,提交
在这里插入图片描述

在这里插入图片描述

6.3 访问NAS 地址: http://你的域名/home/

在这里插入图片描述

7 结束语

喜欢的小伙伴欢迎收藏+关注,我会不定时的分享一些干货,你们的支持就是我最大的动力。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML+CSS+JS做一个好看的个人网页—web网页设计作业

个人网页设计个人网页(htmlcssjs)——网页设计作业带背景音乐(The way I still Love you)、樱花飘落效果、粒子飘落效果页面美观,样式精美涉及(htmlcssjs),下载后可以根据自己需求进…

8086,8088CPU管脚,奇偶地址体, 时钟信号发生器8284 ,ready信号,reset复位信号。规则字和非规则字

8086/8088均为40条引线,双列直插式封装,某些引线有多重功能,其功能转换有两种情况:一种是分时复用,一种是按组态定义。 用8088微处理器构成系统时,有两种不同的组态: 最小组态:808…

模型效果不好?推荐你8种机器学习调参技巧

大家好,今天给大家一篇关于机器学习调参技巧的文章 超参数调优是机器学习例程中的基本步骤之一。该方法也称为超参数优化,需要搜索超参数的最佳配置以实现最佳性能。 机器学习算法需要用户定义的输入来实现准确性和通用性之间的平衡。这个过程称为超参…

嵌入式开发学习之--RCC(上)

提示:本篇主要介绍一下不同时钟的特性和作用,了解为主。 文章目录前言一、RCC简介二、系统时钟简介2.1HSE 高速外部时钟信号2.2锁相环 PLL2.3系统时钟 SYSCLK2.4AHB 总线时钟 HCLK2.5 APB2 总线时钟 HCLK22.6 APB1 总线时钟 HCLK1三、其他时钟3.1RTC 时钟…

HTTP 请求是什么?

文章目录HTTP请求一,请求行二,请求头三,空行四,请求体五,HTTP请求示例HTTP请求 请求是由客户端向服务器发送的,一般可以分为请求行、请求头、空行和请求体四个部分,如下图所示: 一…

【数据集NO.2】工业检测数据集汇总(缺陷、纹理等检测)

文章目录前言一、东北大学钢材表面缺陷数据集二、天池铝型材表面缺陷数据集三、Severstal 带钢缺陷数据集四、UCI 带钢缺陷数据集五、磁瓦缺陷数据集六、RSDDs铁轨表面缺陷数据集七、印刷电路板(PCB)瑕疵数据集八、坑洼检测数据集九、Kylberg纹理检测十、…

C语言:文件操作(1)

1、什么是文件? 磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种: 程序文件、数据文件 程序文件: 包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(wndows环境后缀为.exe) 数…

初级测试到中级测试就差这几个找bug小技巧

前言 测试的过程就是一个寻找影响产品功能和用户体验bug的过程,测试人员发现的bug类型五花八门。 当你在上班期间,听到不远处传来这样的声音“你会不会提BUG,责任人都指派错了,还能好好提吗?” 如果哪天开发对着你说…

Babel自动生成Attribute文档实现详解

这篇文章主要为大家介绍了Babel自动生成Attribute文档实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助! 1. 前言 利用Babel自动解析源码属性上的注释生成对应Markdown文档,这个场景的应用主要包括在组件库文档对组件…

SpringBoot单元测试

文章目录1、什么是单元测试2、单元测试有哪些好处?3、SpringBoot 单元测试使用3.1 生成单元测试的类3.2 配置单元测试的类并添加SpringBootTest注解3.3 添加单元测试的业务代码3.4 进行测试并查看结果3.5 使用断言3.6 在不修改数据库的前提下,执行单元测…

室内温度控制仿真模型(Simulink+PLC)

本篇博客将会和大家一起一步步解读Simulink自带的仿真模型(Thermal Model of a House),之后再讨论PLC控制系统控制环境温度的一些经验方法。温度控制的大部分控制方法都是采用PID控制,有关PLC的PID控制相关内容可以参看专栏的其它文章,链接如下: 博途PLC 1200/1500PID P…

【LeetCode每日一题:1774. 最接近目标价格的甜点成本~~~递归+深度优先遍历】

题目描述 你打算做甜点,现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则: 必须选择 一种 冰激凌基料。 可以添加 一种或多种 配料,也可以不添加任何配料。 每种类型的配料 最多两份 。 给你…

java计算机毕业设计ssm人事考勤管理系统1u133(附源码、数据库)

java计算机毕业设计ssm人事考勤管理系统1u133(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

Spread 16.X FOR WPF 中文版 我就喜欢 Spread.NET

Spread 16.X FOR WPF 中文版您可以将 Microsoft Excel 的强大功能嵌入到 WPF 和 Silverlight 应用中,使用丰富的内嵌数据可视化功能展现核心数据和分析结果,按需自定制富有创意的表格模版以及发挥更多便捷高效的功能。Spread WPF-Silverlight 源自备受好…

RIoTBoard开发板系列笔记(十三)—— yocto SDK安装与使用

yocto是一个很强大的嵌入式image 构建工具,借助yocto可以轻松的构建出一个开发板镜像。如果我们想借助yocto开发一些应用层的程序,有以下两种方法可供选择: (1)按照yocto的构建规则添加自己的程序和编译脚步&#xff0…

通话蓝牙耳机什么牌子好?通话工作蓝牙耳机推荐

在一般人的印象中,蓝牙耳机主要是用于听听歌、打打游戏还有煲剧,,而对经常经常外出的商务差旅人士和音乐发烧友来说,蓝牙耳机的通话和续航也是重点关注的,因此,笔者专门整理了一些通话效果好的蓝牙耳机&…

微服务框架 SpringCloud微服务架构 9 初识 Docker 9.3 Docker 架构

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构9 初识 Docker9.3 Docker 架构9.3.1 镜像和容器9.3.2 Docker 和DockerHub9…

【C/C++】C语言runtime调用技术

概述 C语言编译后,在可执行文件中会有 函数名信息。如果想要动态调用一个C函数,首先需要 根据函数名找到这个函数地址 ,然后根据函数地址进行调用。 动态链接器已经提供一个 API:dlsym(),可以通过函数名字拿到函数地…

k8s中service资源与pod详解

文章目录一、Service1、创建集群内部可访问的Service2、创建集群外部也可访问的Service3、配置方式编写二、pod详解1、pod配置文件的资源列表2、pod配置3、启动命令4、port端口配置三、资源配额一、Service 通过上节课的学习,已经能够利用Deployment来创建一组Pod来…

vue.js生命周期函数

Vue生命周期 beforecreate : 举个例子:可以在这加个loading事件created :在这结束loading,还做一些初始化,实现函数自执行mounted : 在这发起后端请求,拿回数据,配合路由钩子做一些事情beforeD…