KubeSphere 核心实战之四【在kubesphere平台上部署Ruoyi-cloud项目】(实操篇 4/4)

**《KubeSphere 核心实战系列》**

KubeSphere 核心实战之一(实操篇 1/4)

KubeSphere 核心实战之二(实操篇 2/4)

KubeSphere 核心实战之三(实操篇 3/4)

KubeSphere 核心实战之四(实操篇 4/4)

**《KubeSphere 核心实战系列》**

文章目录

    • 1、Rouyi-Cloud架构
    • 2、项目上云分析
    • 3、开始部署
      • 3.1、部署中间件
        • 3.1.1 部署mysql和redis
        • 3.1.2 mysql数据库迁移到云上mysql
        • 3.1.3 部署nacos
      • 3.2、部署ruoyi-cloud微服务模块前的准备
        • 3.2.1. 云上环境Dockerfile配置
        • 3.2.1. 微服务上云分析
        • 3.2.2. 制作微服务镜像并推送给个人阿里云镜像仓库
      • 3.3、部署ruoyi-cloud微服务模块上云
        • 3.3.1、部署规则
        • 3.3.2、ruoyi-visual-monitor微服务模块上云
        • 3.3.2、ruoyi-system微服务模块上云
        • 3.3.3、ruoyi-job微服务模块上云
        • 3.3.4、ruoyi-gen微服务模块上云
        • 3.3.5、ruoyi-gateway微服务模块上云
        • 3.3.5、ruoyi-file微服务模块上云
        • 3.3.6、ruoyi-auth微服务模块上云
        • 3.3.7、所有后端微服务和中间件服务总览
      • 3.4、部署ruoyi-cloud前端vue项目上云
        • 3.4.1、修改vue.config.js
        • 3.4.2、打包前端项目
        • 3.4.3、存放前端ruoyi-ui构建好的静态文件,用于nginx请求访问
        • 3.4.4、修改ngnix配置文件
        • 3.4.5、压缩上传到云服务器
        • 3.4.6、解压并制作镜像并推送到阿里云个人镜像仓库
        • 3.4.7、使用kubesphere平台部署ruoyi-cloud前端项目

1、Rouyi-Cloud架构

请添加图片描述

2、项目上云分析

将rouyi-cloud项目搬上云需要考虑的问题如下:

  • 1,项目中用到了多少中间件?中间件是有状态应用,有些中间件需要导入默认的数据后才能上云。

  • 2,ruoyi-cloud包含8个微服务子模块(带端口的模块对应一个微服务)

  - ruoyi-ui                  // 前端框架 [80]
  - ruoyi-gateway             // 网关模块 [8080]
  - ruoyi-auth                // 认证中心 [9200]
  - ruoyi-system              // 系统模块 [9201]
  - ruoyi-gen                 // 代码生成 [9202]
  - ruoyi-job                 // 定时任务 [9203]
  - ruoyi-file                // 文件服务 [9300]
  - ruoyi-visual-monitor      // 监控中心 [9100]

它们都是无状态的应用,自己写的微服务需要自己制作镜像(编写Dockerfile文件)。

  • 3,中间件和微服务上云以后,各个中间件和微服务之间的访问问题,涉及整个项目的网络拓扑模型;优先集群内网地址访问微服务中间件(使用内网ip或者内网域名)。

  • 4,每个微服务的配置如何分离(生产配置分离URL),生产环境与开发环境的配置分离。

请添加图片描述

  • 中间件:有状态、数据导入

  • 微服务:无状态、制作镜像

  • 网络:各种访问地址,各个微服务和中间件之间访问(通过集群内部网络进行)

  • 配置:生产配置分离、URL

每个微服务上云需要做的工作:

  • 1、每个微服务准备 bootstrap.properties,配置 nacos地址信息(默认使用本地链接),nacos配置中心中每个配置文件信息需要修改为上云后的mysql和redis链接地址。
  • 2、每个微服务准备Dockerfile,启动命令,指定线上nacos配置等。
  • 3、每个微服务制作自己镜像。

3、开始部署

3.1、部署中间件

根据ruoyi-cloud架构图分析得到,项目需要的中间件有三个,分别是:

  1. mysql(数据迁移:将若依的数据库迁移到云上的mysql中,共三个库)
  2. redis
  3. nacos(注册和配置中心)
3.1.1 部署mysql和redis

首先保证在kubesphere上已经部署好mysql和redis两个服务,具体部署流程参见我的上两篇博客:

  • redis部署:https://tigerhhzz.blog.csdn.net/article/details/135640662

  • mysql部署:https://tigerhhzz.blog.csdn.net/article/details/135623659

名称集群内访问地址集群外部访问地址
mysqlhis-mysql.his:3306192.168.162.31:30201
redishis-redis.his:6379192.168.162.31:30608
3.1.2 mysql数据库迁移到云上mysql

mysql数据库初始化导入,将ruoyi-cloud所需的三个数据库内容导入到部署好的mysql中;三个数据库如下:

  1. ry-cloud
  2. ry-config
  3. ry-seata

具体操作可以通过navicat工具中的数据传输进行数据库的迁移。

在这里插入图片描述

在这里插入图片描述

3.1.3 部署nacos

具体参见nacos的官方文档

https://nacos.io/docs/v2/guide/admin/cluster-mode-quick-start/
请添加图片描述

配置文件 application.properties
如果是集群配置nacos多一个配置文件:cluster.conf
挂载配置文件使用子路径进行挂载。

/home/nacos/conf/application.properties
/home/nacos/conf/cluster.conf

在这里插入图片描述

在kubesphere上创建nacos服务

  1. 首先创建nacos的配置
    请添加图片描述
    请添加图片描述
    使用子路径挂载nacose的两个配置文件:
    请添加图片描述
    上面配置文件别忘了修改mysql数据库的链接地址:his-mysql.his:3306 以及登录账号和密码。

  2. 创建nacos服务:

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

镜像名称:nacos/nacos-server:v2.1.0
nacos客户端下载地址:https://github.com/alibaba/nacos/releases/tag/2.0.3

请添加图片描述
这里补充一个bug:
因为nacos启动需要连接mysql数据库,当nacos服务启动了,然而mysql服务还没有准备就绪,此时会出现服务从nacos中读取配置文件失败的情况。

解决办法:使用探针,nacos服务中增加健康检查机制,定时向nacos容器组发请求来探究运行状况,如果状态是错误的,k8s就不断的重启服务,直到服务正常。

在这里插入图片描述

请添加图片描述

在这里插入图片描述

nacos数据没有挂载的,都存在mysql数据库;

创建一个外网能访问的nacos服务,以node方式访问,暴露外网端口
请添加图片描述
游览器访问nacos: 192.168.162.31:30986请添加图片描述
至此,我们部署完成nacos,redis和mysql 三个中间件服务。

接下来我们开始部署rouyi-cloud项目的微服务模块。

3.2、部署ruoyi-cloud微服务模块前的准备

根据ruoyi-cloud架构图分析得到:
首先是前端vue项目模块,用来用户发送请求到网关服务;网关模块接受到前端的请求后分发给各个微服务模块。

在这里插入图片描述

微服务部署
请添加图片描述

3.2.1. 云上环境Dockerfile配置
  1. nacos中创建prod命名空间:
    在这里插入图片描述

  2. 克隆dev环境中配置到prod命名空间中
    在这里插入图片描述

  3. Dockerfile文件

FROM openjdk:8-jdk
LABEL maintainer=tigerhhzz


#docker run -e PARAMS="--server.port 9090"
ENV PARAMS="--server.port=8080 --spring.profiles.active=prod --spring.cloud.nacos.discovery.server-addr=his-nacos.his:8848 --spring.cloud.nacos.config.server-addr=his-nacos.his:8848 --spring.cloud.nacos.config.namespace=prod --spring.cloud.nacos.config.file-extension=yml"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

COPY target/*.jar /app.jar
EXPOSE 8080

#
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]

启动镜像时,加一些额外的参数,每个微服务启动后对应一个pod,每个pod有不同的ip,但是端口都是8080,这样每个pod的访问地址就是唯一的。

规则:

1、容器默认以8080端口启动
2、时间为CST
3、环境变量 PARAMS 可以动态指定配置文件中任意的值,默认激活的是开发dev环境,去nacos配置中心中找xxxxx-dev.yml配置文件,应用上云打包镜像启动会自动激活生产环境pro,然后去nacos配置中心中找xxxxx-prod.yml配置文件。
4、nacos集群内地址为 his-nacos.his:8848   
5、微服务默认启动加载 nacos中  服务名-激活的环境.yml 文件,所以线上的配置可以全部写在nacos中。
3.2.1. 微服务上云分析

请添加图片描述
idea中使用maven打包jar包。
在这里插入图片描述
在这里插入图片描述
所用微服务模块打包成功。

编辑整理各个模块的jar和Dockerfile文件(每个微服务模块制作镜像的准备工作)
在这里插入图片描述
上传Dockerfile-images-ry整个文件夹到服务器(任何一个节点)
在这里插入图片描述

3.2.2. 制作微服务镜像并推送给个人阿里云镜像仓库

在这里插入图片描述

##打包镜像命令
docker build -t ruoyi-auth:v1.0  .

##查看镜像
docker images|grep ruoyi

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

创建阿里云个人镜像仓库

开通阿里云“容器镜像服务(个人版)

阿里云镜像服务参考官网地址:https://cr.console.aliyun.com/cn-hangzhou/instance/repositories

首先创建一个命名空间,默认仓库类型设置为公开

在这里插入图片描述
然后,在自己的命名空间下,创建一个镜像仓库:
在这里插入图片描述
最后,进行镜像推送

##登录阿里云Docker Registry
docker login --username=hehu****@126.com registry.cn-hangzhou.aliyuncs.com

##将镜像推送到Registry
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi:[镜像版本号]

在这里插入图片描述

把所有微服务镜像推送到个人阿里云镜像仓库。

docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-auth:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-file:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-gateway:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-gen:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-job:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-system:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-visual-monitor:v1.0

在这里插入图片描述

思考两个问题:

  1. 手动一个个制作镜像,很费力费时,有没有一个自动化制作镜像流程?
  2. 这是使用了阿里云个人镜像仓库,有没有自己搭建公司仓库?一般开发中,搭建公司的habor私有仓库;专门存放项目镜像。

3.3、部署ruoyi-cloud微服务模块上云

ruoyi-cloud所用镜像都已经推送到个人阿里云镜像仓库:

3.3.1、部署规则

● 应用一启动会从云上nacos获取到 "应用名-激活的环境标识.yml"的配置文件

● 每次部署应用的时候,需要提前修改nacos线上配置,确认好每个中间件的连接地址是否正确

● 云上nacos配置文件中的中间件例如redis、mysql等链接地址一定是集群内的访问地址

在这里插入图片描述

在这里插入图片描述

3.3.2、ruoyi-visual-monitor微服务模块上云

整个操作在kubesphere云平台进行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看容器运行日志:
在这里插入图片描述

监控模块启动成功!!!

3.3.2、ruoyi-system微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-system:v1.0
过程同3.3.1一样。

3.3.3、ruoyi-job微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-job:v1.0
过程同3.3.1一样。

3.3.4、ruoyi-gen微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-gen:v1.0
过程同3.3.1一样。

3.3.5、ruoyi-gateway微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-gateway:v1.0
过程同3.3.1一样。

3.3.5、ruoyi-file微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-file:v1.0
过程同3.3.1一样。

3.3.6、ruoyi-auth微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-auth:v1.0
过程同3.3.1一样。

3.3.7、所有后端微服务和中间件服务总览

在这里插入图片描述
工作负载一览:
在这里插入图片描述
在这里插入图片描述

3.4、部署ruoyi-cloud前端vue项目上云

ruoyi-cloud前端是vue项目,端口是80
打包方式:其实就是ngnix镜像,将前端打包的文件夹放到ngnix指定文件夹下。

其实就是运行package.json文件中的脚本build:prod
在这里插入图片描述

3.4.1、修改vue.config.js

修改的内容是:
在这里插入图片描述
在这里插入图片描述

http://ruoyi-gateway.his:8080
3.4.2、打包前端项目

打包命令:

# 构建生产环境
npm run build:prod

在这里插入图片描述

3.4.3、存放前端ruoyi-ui构建好的静态文件,用于nginx请求访问

打包完毕后,会生成一个dist文件,然后将dist文件夹中的内容拷贝到如图下的位置中:

在这里插入图片描述

存放前端ruoyi-ui构建好的静态文件,用于nginx请求访问。

3.4.4、修改ngnix配置文件

在这里插入图片描述
修改后的 nginx.conf文件如下

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  _;

        location / {
            root   /home/ruoyi/projects/ruoyi-ui;
            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://ruoyi-gateway.his:8080/;
        }

        # 避免actuator暴露
        if ($request_uri ~ "/actuator") {
            return 403;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
3.4.5、压缩上传到云服务器

压缩上传到集群内任意节点机子上。
在这里插入图片描述

3.4.6、解压并制作镜像并推送到阿里云个人镜像仓库

Dockerfile文件内容:

# 基础镜像
FROM nginx
# author
MAINTAINER ruoyi

# 挂载目录
VOLUME /home/ruoyi/projects/ruoyi-ui
# 创建目录
RUN mkdir -p /home/ruoyi/projects/ruoyi-ui
# 指定路径
WORKDIR /home/ruoyi/projects/ruoyi-ui
# 复制conf文件到路径
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
# 复制html文件到路径
COPY ./html/dist /home/ruoyi/projects/ruoyi-ui

制作ngnix镜像:

docker build -t registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-ui:v1.0 -f dockerfile .

在这里插入图片描述
镜像制作成功:
在这里插入图片描述

推送到阿里云个人镜像仓库

docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-ui:v1.0
3.4.7、使用kubesphere平台部署ruoyi-cloud前端项目

创建无状态服务
需要注意的时候,前端项目云部署暴露外网访问地址nodeport。

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

前端项目启动成功:
在这里插入图片描述

如果内存不够,(启动无顺序限制)

 Auth服务和Gateway服务必须启动
 system服务如果你想访问后台就启动
 job和gen服务这两个一个是定时任务一个是代码生成 如果你有用得到就启动 反则不需要启动

在这里插入图片描述
在这里插入图片描述
前端项目启动成功!!至此所有服务都部署完成!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学会用Python分割、合并字符串

在很多情况下,我们需要对字符串进行分割或合并,以满足特定的需求,例如将字符串拆分成多个部分、将多个字符串合并成一个等等。Python提供了多种方法来进行字符串的分割和合并,本文将介绍其中几种常用的方法。 一、使用split()函数…

深度解析C++引用究竟是什么

首先看一段代码&#xff1a; #include<iostream> using namespace std; void fun(int*a){} void fun(int&a){} int main(){int a10;fun(&a);fun(a); }我们查看它的汇编结果时会发现引用和指针传参整个过程的汇编是一模一样的 我们再看下面这段代码&#xff1a…

HBase(docker版)简单部署和HBase shell操作实践

文章目录 说明HBase部署访问HBase Shell常见命令数据定义语言(DDL) 数据操作语言(DML)通用操作访问HBase WebUI 说明 本文适合HBase初学者快速搭建HBase环境&#xff0c;练习常见shell使用本文参考资料 《大数据技术原理和应用》&#xff08;林子雨 编著 第三版&#xff09;zh…

C++ 滑动窗口

目录 1、209. 长度最小的子数组 2、3. 无重复字符的最长子串 3、1004. 最大连续1的个数 III 4、1658. 将 x 减到 0 的最小操作数 5、904. 水果成篮 6、438. 找到字符串中所有字母异位词 7、30. 串联所有单词的子串 8、76. 最小覆盖子串 1、209. 长度最小的子数组 思路&…

存储监控工具:监控存储区域网络(SAN)

从托管应用程序到提供大型多媒体服务&#xff0c;组织都依靠其 IT 基础架构来提供无与伦比的最终用户体验。为了提供这种卓越的体验&#xff0c;必须大大提高应用程序的可用性和性能。在许多其他挑战中&#xff0c;存储区域网络 &#xff08;SAN&#xff09; 正好用于应对这些挑…

TPCC-MySQL

简介 TPC-C是专门针对联机交易处理系统&#xff08;OLTP系统&#xff09;的规范&#xff0c;一般情况下我们也把这类系统称为业务处理系统。 Tpcc-mysql是percona基于TPC-C(下面简写成TPCC)衍生出来的产品&#xff0c;专用于MySQL基准测试。其源码放在launchpad上&#xff0c…

使用xlsx、xlsx-style导出表格添加背景色;合并单元格部分样式缺失问题解决

这篇说一下使用xlsx-style导出excel时样式的设置。需要安装xlsx、xlsx-style、file-saver插件&#xff08;file-saver可以不装&#xff0c;用a标签代替也可以&#xff09;&#xff0c;安装时可能会碰到一些报错问题&#xff0c;可以去看下我之前一篇博客&#xff1a;纯前端导出…

C语言之刷到的怪题(i与sizeof(i)比较大小)

这个题目一般都是选择输出<。为什么呢&#xff1f;因为i是一个全局变量&#xff0c;并且没有初始化&#xff0c;那么i的值就等于0。i--之后就是-1了。而sizeof(i)求出的就是整形变量对应的大小4个字节。-1<4&#xff0c;因此就选择 输出<。其实不然&#xff0c;这个si…

QEMU - e1000全虚拟化前端与TAP/TUN后端流程简析

目录 1. Host -> Guest 2.Guest ->Host 3. 如何修改以支持TUN设备的后端&#xff1f; 4. 相关 QEMU 源码 5. 实验 1. Host -> Guest 2.Guest ->Host 3. 如何修改以支持TUN设备的后端&#xff1f; 1. 简单通过后端网卡名字来判断是TUN还是TAP。 2. 需要前端全…

秋招面试—CSS篇

2021 CSS面试题 1.CSS可继承属性有哪些&#xff1f; 文字相关&#xff1a;font-famliy 、font-weight 、font-size 、font-style文本相关&#xff1a;text-indent&#xff08;首行缩进&#xff09; 、text-align&#xff08;水平对齐&#xff09; 、line-height 、text-trans…

node.js基础--01

Author nodes&#xff1a;&#xff08;题记&#xff09; node.js is an open-source&#xff0c;cross-platform JAVAScript runtime environment。 node.js是一个开源&#xff0c;跨平台的js运行环境 common commands&#xff08;常用指令&#xff09; 1、C: enter hard …

C# 一个快速读取写入操作execl的方法封装

这里封装了3个实用类ExcelDataReaderExtensions&#xff0c;ExcelDataSetConfiguration&#xff0c;ExcelDataTableConfiguration和一个实用代码参考&#xff1a; using ExcelDataReader; using System; using System.Collections.Generic; using System.Linq; using System.T…

解剖 Python 代码,深入学习 interpret 库的功能和应用!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python是一门广泛应用的编程语言&#xff0c;拥有丰富的标准库和第三方库&#xff0c;可以用于各种应用场景。在Python中&#xff0c;有一个名为interpret的库&#xff0c;它提供了一种强大的方式来处理和执行Py…

一个通过下标查找数值的面试题解法

最近看到一道面试题&#xff0c;面试官说是算法题。我粗略看了下&#xff0c;努力在其中寻找数学公式&#xff0c;但是最后发现它算是一个数据结构相关的题目&#xff0c;没有算法层面的知识。 // There is an array generated by a rule. // The first item is 1. If k is in …

Codeforces Round 918 (Div. 4) 解题报告 | 珂学家 | 偏序 + 扩展Dijkstra

前言 整体评价 属于VP&#xff0c;感觉还是能AK的&#xff0c;E是偏序题&#xff0c;F是改版的迪杰特斯拉。 A. Odd One Out 题型: 签到 t int(input())for i in range(t):a, b, c list(map(int, input().split()))if a b:print (c)elif a c:print (b)else:print (a)B. …

基于Python的全国主要城市天气数据可视化大屏系统

1 绪论 1.1 研究的目的与意义 近年来&#xff0c;气候变化引发全球范围内的关注。天气数据的采集和分析对于气候预测、生态环境保护等方面都起着至关重要的作用。同时&#xff0c;随着科技的不断发展&#xff0c;数据可视化已经成为了许多领域中不可或缺的一部分。基于此&…

防御保护 笔记整理

一、ASPF--- 针对应用层的包过滤 ASPF --- 针对应用层的包过滤 --- 用来抓取多通道协议中协商端口的关键数据包&#xff0c;之后&#xff0c;将端 口算出&#xff0c;将结果记录在sever-map表中&#xff0c;相当于开辟了一条隐形的通道。 FTP --- 文件传输协议 FTP协议是一个典…

指针进阶1

一&#xff0c;字符指针 顾名思义&#xff1a;字符指针指的是一种指针类型为字符指针 char*&#xff1b; char*可以是一个字符也可以是一个字符串&#xff0c;前者很好理解&#xff0c;让我们看看后者&#xff1b; eg&#xff1a;char*p"abcdef";//实际上是将首元…

【开源精选导航】GitHub-Chinese-Top-Charts:一榜在手,优质中文项目轻松找寻

各位热爱开源技术的朋友们&#xff0c;你们是否有过这样的困扰&#xff1a;面对浩瀚的GitHub海洋&#xff0c;想找寻那些具有高质量中文文档的优秀开源项目却无从下手&#xff1f;今天&#xff0c;我们就为大家揭晓一个宝藏般的开源项目——GitHub 中文项目集合&#xff08;访问…

如何在win系统部署Apache服务并实现无公网ip远程访问

文章目录 前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpolar web ui管理界面3.2 创建公网地址 4. 固定公网地址 前言 Apache作为全球使用较高的Web服务器…