阿里云服务器项目部署docker-compose+vue+redis+nginx+minio+springboot

news2024/11/25 22:53:28

1 阿里云服务器项目部署-单机部署 docker-compose

1.1 搭建背景

服务器 阿里云服务器

前端 vue

后端 springboot

服务 redis 、nginx、minio 都做单机模式部署,不做集群部署

博客内容参考了其他博文,会贴出来

1.2 <重要>端口开放前提说明

任何开放的端口都需要先在阿里云控制台进行开放

在这里插入图片描述

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

1.2 docker搭建

两种方式安装

1、yum方式安装docker,我用的是这个

2、采用源码包方式安装,一般内网部署会用到,这个我不会

官方开发博客: https://docs.docker.com/engine/install/centos/

参考博文:https://blog.csdn.net/qq_42971035/article/details/121733265

操作步骤

# 1.卸载旧的版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
 
# 如有需要,可以安装gcc
yum -y install gcc
 
# 以及gcc-c++
yum -y install gcc-c++
 
                  
# 2.需要的安装包
sudo yum install -y yum-utils
 
# 3.设置镜像仓库
sudo yum-config-manager \
    --add-repo \
    # 默认是国外的,不要使用
    https://download.docker.com/linux/centos/docker-ce.repo
    
    # 建议使用阿里云的镜像,十分快
 sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 
# 更新yum软件包索引(安装前的工作,非必须)
yum makecache fast
# yum makecache: error: argument timer: invalid choice: 'fast' (choose from 'timer')
# 安装报错了,yum makecache fast是centOS7的命令, 不使用8,可以直接使用
yum makecache # 或者
dnf makecache
 
 
# 4.安装docker docker-ce:社区版的,docker-ee:企业版的
sudo yum install docker-ce docker-ce-cli containerd.io

# 5.启动docker
 systemctl start docker
 
# 6.查看docker版本
docker version # 或者
sudo docker version
 
# 7.测试Hello World
docker run hello-world # 或者
sudo docker run hello-world

当出现"Hello from Docker!”时,代表我们镜像安装成功。

# 8.查看下载的hello-world镜像
docker images #或者
sudo docker images

此时会有对应的镜像显示:

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   2 months ago   13.3kB

到了这里才真正代表着docker安装成功并成功拉取对应的镜像。

如果需要卸载docker的话:

# 1.卸载docker
yum remove docker-ce docker-ce-cli containerd.io
 
# 2.删除资源
rm -rf /var/lib/docker
 
# /var/lib/docker docker的默认工作路径

1.3 docker-compose搭建

也可以不用docker-compose 管理多个容器,自己选择

需要从github上下载docker-compose二进制文件安装

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose

这个命令是用于从 GitHub 上下载 Docker Compose 的二进制文件,并将其保存到 /usr/local/bin/docker-compose 路径下。

下面是对该命令的解释:

  • curl:一个用于在命令行中进行网络请求的工具。它可以用于从远程服务器下载文件。
  • -L:在下载过程中,如果服务器返回重定向(HTTP 3xx 响应),则自动跟随重定向。
  • https://github.com/docker/compose/releases/download/1.16.1/docker-compose-uname -s-uname -m``:这部分是要下载的文件的 URL。其中,uname -s 返回当前操作系统的名称,uname -m 返回当前机器的架构。这样,URL 就会根据操作系统和机器架构自动选择相应的文件进行下载。
  • -o /usr/local/bin/docker-compose:指定下载的文件保存的路径和文件名。在这里,下载的文件将被保存为 /usr/local/bin/docker-compose

该命令的目的是将 Docker Compose 的二进制文件下载到你的系统中,以便你可以在命令行中直接使用 docker-compose 命令来管理 Docker 容器。完成下载后,可能需要给下载的文件添加可执行权限,才能在命令行中正常使用。例如,可以执行以下命令:

sudo chmod +x /usr/local/bin/docker-compose

请注意,该命令需要在具有适当权限的用户或使用管理员(root)权限下运行,以保证文件可以被保存到 /usr/local/bin/ 目录中。

查看docker-compose版本,是否安装完成

[root@iZbp1ao8rgk3c56ynu2aliZ /]# docker-compose -v
docker-compose version 1.29.2, build 5becea4c

在这里插入图片描述

以下的服务 我都安装在docker目录下了

在这里插入图片描述

1.3 mysql搭建

参考博客:https://blog.csdn.net/qq_34383510/article/details/130902638

1.3.1创建目录

-- 在root目录下创建docker目录
mkdir docker
-- 在docker目录下创建mysql目录
cd /docker
mkdir mysql

1.3.2创建docker-compose.yml

在docker目录下执行 vim docker-compose.yml

输入内容如下:

version: '3'
services:
    # mysql容器 - Mysql container
    mysql: # 这里mysql是服务名
        # 容器名
        container_name: container-mysql
        # 指定了容器的网络模式为桥接模式
        network_mode: bridge
        environment:
            # 时区上海 - Time zone Shanghai (Change if needed)
            TZ: Asia/Shanghai
            # root 密码 - root password
            MYSQL_ROOT_PASSWORD: 你的密码
        #镜像
        image: mysql/mysql-server:8.0.28
        # 指定了容器停止后总是重新启动
        restart: always
        # 端口 定义了容器的端口映射,将容器内的 MySQL 服务的 3306 端口映射到主机的 13306 端口
        ports:
            - 13306:3306
        # 数据挂载 - Data mounting
        volumes:
        # 将主机上的 /docker/mysql/data 目录挂载到容器内的 /var/lib/mysql 目录。这样做的目的是将 MySQL 数据目录与主机上的目录进行映射,使得数据在容器重启或删除后不会丢失
            - /docker/mysql/data:/var/lib/mysql
         # 将主机上的 /docker/mysql/conf/my.cnf 文件挂载到容器内的 /etc/my.cnf 文件。这样做的目的是将 MySQL 的配置文件与主机上的配置文件进行映射,以便在容器启动时加载自定义的 MySQL 配置。
            - /docker/mysql/conf/my.cnf:/etc/my.cnf
           # 将主机上的 /docker/mysql/log 目录挂载到容器内的 /var/log/mysql 目录。这样做的目的是将 MySQL 的日志文件与主机上的目录进行映射,以便在容器运行时可以方便地查看 MySQL 的日志信息。
            - /docker/mysql/log:/var/log/mysql
            #  将主机上的时间配置文件 /etc/localtime 挂载到容器内的 /etc/localtime 文件,并设置为只读模式。这样做的目的是让容器内的时间与主机上的时间保持一致,以避免时间不一致可能带来的问题。
            - /etc/localtime:/etc/localtime:ro

ports:
- 13306:3306

定义了容器的端口映射,将容器内的 MySQL 服务的 3306 端口映射到主机的 13306 端口,那么应该如最上面所说,在阿里云开放13306端口,在本地连接时,也应该用 公网ip:13306 连接服务器上的mysql,我自己嫌麻烦,用的都是3306

ports:

  • 3306:3306

执行命令启动:docker-compose up -d 或者 :docker-compose up

  • docker-compose up -d: 使用 -d 参数,表示以“后台模式”(detached mode)启动容器。这意味着容器将在后台运行,并且你可以继续使用终端窗口进行其他操作,而不会被容器的输出所阻塞。这在生产环境或需要长期运行的服务中很常见。
  • docker-compose up: 没有 -d 参数,表示以“前台模式”(foreground mode)启动容器。容器将在当前终端窗口中运行,并且你将看到容器的输出信息。如果你使用 Ctrl + C 组合键来终止命令,容器也将停止运行。这在开发和调试阶段通常更为方便,因为你可以立即看到容器的输出信息和错误提示。

如果你想让容器在后台运行,并且不希望终端被容器的输出所阻塞,可以使用 docker-compose up -d。如果你希望在当前终端中看到容器的输出信息,并且方便地终止容器的运行,可以使用 docker-compose up

如果 执行docker-compose up -d 启动,再输入 docker ps 查看启动的镜像

在这里插入图片描述

如果有mysql,那表示启动成功

关闭所有服务 docker-compose down

关闭某个服务 docker-compose stop 服务名 服务名不是容器名

1.3.3 mysql远程访问

本地打开mysql软件,用公网ip:开放的端口 密码 远程连接

连接失败解决方法

执行命令docker ps查询启动的镜像
docker exec -it 容器id bin/bash 进入容器
mysql -u root -p登录mysql
use mysql;切换数据库

update user set host='%' where user='root';
grant all privileges on *.* to 'root'@'%';
flush privileges;

img

设置成功后,重新连接成功。
img

1.4 redis搭建

参考博客:https://blog.csdn.net/qq_34383510/article/details/131352344

在docker目录下创建redis目录
cd /docker
mkdir redis
在redis目录下创建data目录
cd redis
mkdir data

创建redis.conf

redis目录下,创建redis.conf配置文件

img

主要修改以下几项配置

# 开启密码验证(可选),要是注释掉就不用密码登录了
# requirepass 123456
requirepass 123456

# 允许redis外地连接,需要注释掉绑定的IP
# bind 127.0.0.1

# 关闭保护模式 当 protected-mode 设置为 yes(默认值)时,Redis 服务器只允许通过本地环回地址(127.0.0.1)进行访问,并拒绝来自外部网络的连接请求。这样可以确保 Redis 服务器只能被本地应用程序访问,我们需要远程访问,所以修改为no
protected-mode no

# 注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no

# 开启redis数据持久化, (可选)
appendonly yes

完成配置

 # bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#bind 127.0.0.1

protected-mode no

port 6379

tcp-backlog 511

requirepass 123456

timeout 0

tcp-keepalive 300

daemonize no

supervised no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile ""

databases 16

always-show-logo yes

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error no

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./

replica-serve-stale-data yes

replica-read-only yes

repl-diskless-sync no

repl-disable-tcp-nodelay no

replica-priority 100

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

appendonly yes

appendfilename "appendonly.aof"

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble yes

lua-time-limit 5000

slowlog-max-len 128

notify-keyspace-events ""

hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128
zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

stream-node-max-bytes 4096
stream-node-max-entries 100

activerehashing yes

hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

打开docker-compose.yml

输入以下内容 复制过去注意缩进,和 mysql是同级

    #redis容器 - Redis container
    redis:
      image: redis:6.2.5
      container_name: container-redis
      ports:
        - 6379:6379
      environment:
        # 时区上海 - Time zone Shanghai (Change if needed)
        TZ: Asia/Shanghai
      volumes:
        # 数据文件 - data files
        - /docker/redis/data:/data:rw
        - /docker/redis/redis.conf:/usr/local/etc/redis/redis.conf
        - /docker/redis/data/logs:/logs
      command: "redis-server /usr/local/etc/redis/redis.conf --requirepass 123456  --appendonly yes"
      privileged: true
      restart: always
      network_mode: bridge

要去阿里云开放6379端口

再次执行docker-compose up -d,成功启动redis

在这里插入图片描述

1.5 minio搭建

打开docker-compose.yml

输入以下内容 复制过去注意缩进,和 mysql是同级 没有指定minio版本


  minio:
    image: minio/minio
    hostname: "minio"
    ports:
      - 9000:9000 # api 端口
      - 9001:9001 # 控制台端口
    environment:
      MINIO_ACCESS_KEY: admin    #管理后台用户名
      MINIO_SECRET_KEY: admin123 #管理后台密码,最小8个字符
    volumes:
      - /docker/minio/data:/data               #映射当前目录下的data目录至容器内/data目录
      - /docker/minio/config:/root/.minio/     #映射配置目录
    command: server --console-address ':9001' /data  #指定容器中的目录 /data
    privileged: true
    restart: always

要去阿里云开放9000端口

再次执行docker-compose up -d,成功启动minio

在这里插入图片描述

1.6 nginx搭建

参考博客:https://blog.csdn.net/PyongSen/article/details/123054599

# 切换目录
cd /docker
# 创建nginx文件交
mkdir nginx

创建nginx.conf

#user  root;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       8083; # 前端的端口
        server_name  localhost;
        location / {
			# 这里的root 是下面的docker-compose.yml实现了前端网页的挂载
            root   /usr/share/nginx/html;  
            # nginx 报404需要加下面这行
            try_files $uri $uri/ /index.html last; 
            index  index.html index.htm;
            #nginx 报405加下面这行
            error_page 405 =200 http://$host$request_uri;
        }
        #nginx 报 连接错误 、没有数据(We’re sorry but “XXX” doesn’t work...放开下面的注释
        # 跨域
        location ^~/api/ {
			add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
			add_header Access-Control-Allow-Credentials true;
			proxy_set_header X-NginX-Proxy true;		
			#rewrite    ^(.*)api(.*)$   $1/$2; break;
            proxy_pass http://公网ip:后端端口/;
			#rewrite ^/api/(.*) /$1 break;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

打开docker-compose.yml

输入以下内容 复制过去注意缩进,和 mysql是同级

    nginx: # 服务名称,用户自定义
      container_name: container-nginx
      image: nginx:latest  # 镜像版本
      ports:
        - 8083:8083  # 前端项目暴露的端口
      restart: always #docker启动的时候会自动启动这个服务
      #network_mode: host #不在对应某个端口,我认为的解释是对应所有端口了
      volumes: # 挂载 
        # html和nginx.conf 挂载
        # 将宿主机上的 /docker/nginx/logs 目录挂载到容器内的 /var/log/nginx 目录。这样做的目的是将 Nginx 的日志文件存储在宿主机上,以便于日志的管理和查看。
        - /docker/nginx/logs:/var/log/nginx
        # 将宿主机上的 /docker/nginx/html 目录挂载到容器内的 /usr/share/nginx/html 目录。这样做的目的是将网站的静态文件存储在宿主机上,从而实现网站内容的持久化和管理。
        - /docker/nginx/html:/usr/share/nginx/html
        # 将宿主机上的 /docker/nginx/nginx.conf 文件挂载到容器内的 /etc/nginx/nginx.conf 文件。这样做的目的是将 Nginx 的配置文件存储在宿主机上,并使之对 Nginx 服务产生影响,从而实现配置的持久化和灵活性
        - /docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      privileged: true # 这个必须要,解决nginx的文件调用的权限问题

先不用启动,等前后端全部署好一起启动

1.7 jdk搭建

参考博客:https://blog.csdn.net/m0_49762804/article/details/132362282

下载地址:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

在这里插入图片描述

下载完上传,放在哪个文件交都行,我嫌麻烦,统一放在docker文件夹里

cd /docker
madir java
上传文件到 /docker/java
tar -zxvf jdk-8u381-linux-x64.tar.gz

接下来配置环境变量

vim命令打开/etc/profile

vim /etc/profile

添加下面内容

#Set Java_Environment
export JAVA_HOME=/docker/java/jdk1.8.0_381
export JRE_HOME=/docker/java/jdk1.8.0_381/jre
export CLASSPATH=.:$JAVA_HOME/lib$:JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin/$JAVA_HOME:$PATH

退出编辑模式

按 esc 按键
英文输入法状态下
输入 :wq
按回车

加载环境变量

source /etc/profile

验证是否安装成功

java -version

在这里插入图片描述

1.8 前端部署

前端是 vue 项目

在控制台 输入 npm run build

/docker/nginx/ 目录下创建 html文件交

cd /docker/nginx
mkdir html

前端打包好之后,会创建dist文件夹,将该文件夹下的文件都上传到 /docker/nginx/html路径下,这样前端就配置好了

在这里插入图片描述

前端部署好,这时候就能启动docker-compose了

docker-compose up -d

1.9 后端部署

我是把后端和服务分成了两个docker-compose.yml,可以不用这么做

一个yml用来启动服务,一个用来启动jar包

cd /docker
mkdir app

在这里插入图片描述

后端架包上传到该路径,创建Dockfile文件,该文件没有后缀名

Dockfile内容

#使用java 8 版本
FROM openjdk:8
# 将本目录下的park-0.0.1-SNAPSHOT.jar 复制到 /docker/app/,并重命名为 park-jar.jar
COPY  park-0.0.1-SNAPSHOT.jar /docker/app/park-jar.jar 
WORKDIR /docker/app
#对外暴露的端口
EXPOSE 8081

ENTRYPOINT ["java", "-jar", "/docker/app/park-jar.jar" ]

创建docker-dompose.yml 编写内容

version: '3'
services:
    park-jar:
      container_name: container-park-jar
      restart: always
      image: park-jar
      build:   # 表示以当前目录下的Dockerfile开始构建镜像
        context: .  #Dockerfile 所在目录
        dockerfile: Dockerfile 
      ports:
        - 8081:8081 #后端项目暴露的端口
      privileged: true

启动后端

docker-compose up -d

然后再浏览器地址栏输入 公网ip:前端端口,就能正常访问项目了。

结束。

Ub-1712815960265)]

后端架包上传到该路径,创建Dockerfile文件,该文件没有后缀名

Dockerfile内容

#使用java 8 版本
FROM openjdk:8
# 将本目录下的park-0.0.1-SNAPSHOT.jar 复制到 /docker/app/,并重命名为 park-jar.jar
COPY  park-0.0.1-SNAPSHOT.jar /docker/app/park-jar.jar 
WORKDIR /docker/app
#对外暴露的端口
EXPOSE 8081

ENTRYPOINT ["java", "-jar", "/docker/app/park-jar.jar" ]

创建docker-dompose.yml 编写内容

version: '3'
services:
    park-jar:
      container_name: container-park-jar
      restart: always
      image: park-jar
      build:   # 表示以当前目录下的Dockerfile开始构建镜像
        context: .  #Dockerfile 所在目录
        dockerfile: Dockerfile 
      ports:
        - 8081:8081 #后端项目暴露的端口
      privileged: true

启动后端

docker-compose up -d

docker ps
所有的镜像都在这里了
在这里插入图片描述

然后再浏览器地址栏输入 公网ip:前端端口,就能正常访问项目了。

结束。

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

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

相关文章

2024年华中杯数学建模竞赛全攻略:ABC题思路解析+代码实现+数据集+论文撰写+全程答疑

引言 &#xff08;比赛后所有题目资料在文末获取呀&#xff09; 华中杯数学建模竞赛是数学建模领域的一项重要赛事&#xff0c;它不仅考验参赛者的数学建模能力&#xff0c;还考验了编程技能、数据分析能力和论文撰写能力。为了帮助参赛者更好地准备2024年的竞赛&#xff0c;本…

编程填空题:麻烦的位运算

闲着没事干可以做做 可以看到&#xff0c;那个函数直接return了&#xff0c;也就是说&#xff0c;得找到一个表达式&#xff0c;直接求出结果 简单分析一下&#xff1a; 其第i位为1当且仅当n的右边i位均为1 也就是说&#xff0c;前i-1位有0&#xff0c;第i位就是0 也就是说…

二维数组之前缀和中篇

在此之前&#xff0c;可以先看看这篇二维数组之二维前缀和-首篇。 和为K的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,…

cesium加载倾斜影像数据(模拟雨、雪、雾、无人机飞行、测距、箭头标绘、电子围栏等)

实现效果如下&#xff1a; 功能菜单如下&#xff1a; 加载倾斜影像核心代码&#xff1a; var palaceTileset new Cesium.Cesium3DTileset({url: http://127.0.0.1:9002/tileset.json,//控制切片视角显示的数量&#xff0c;可调整性能maximumScreenSpaceError: 0.1,maximumNum…

c++的学习之路:25、map与set

摘要 本文中说一下map与set的使用 目录 摘要 一、关联式容器 二、键值对 三、map 1、map的介绍 2、map的使用 1、map的模板参数说明&#xff1a; 2、map的构造 3、map的迭代器 4、map的容量与元素访问 5、map中元素的修改 6、代码使用 ​编辑 三、总结 四、se…

51单片机入门_江协科技_33~34_OB记录的自学笔记_LED呼吸灯与PWM直流马达调速

33. 直流电机驱动(PWM) 33.1. 直流电机介绍 •直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极&#xff0c;当电极正接时&#xff0c;电机正转&#xff0c;当电极反接时&#xff0c;电机反转 •直流电机主要由永磁体&#xff08;定子&#xff09;、线圈&…

winform 入门篇 -- 第15章 表格视图

表格控件 表格视图 DataGridView &#xff0c;即表格控件提行多行多列的表格状的数据展示 演示: 以表格控件来展示学生数据。。 每个单元格 都可以进行独立的编写 &#xff08;与上节得不同&#xff09; 基本操作: 1 添加一个表格控件 DataGridView 2 设置列数、列名 属…

HarmonyOS Next 视频弹幕功能

视频弹幕功能 介绍 本示例介绍如何使用ohos.danmakuflamemaster和ohos.gsyvideoplayer开发支持视频弹幕的播放器。可以自定义弹幕样式、占据屏幕宽度&#xff0c;发送弹幕&#xff0c;开关弹幕视图。 效果图预览 使用说明 点击播放按钮&#xff0c;进行视频播放&#xff0c…

STM32 USB虚拟串口

电路原理图 usb部分 晶振部分 usb与单片机连接 配置信息 sys配置信息 rcc配置信息 usb配置信息 虚拟串口配置信息 时钟配置信息 项目配置信息 代码 包含文件 主函数代码 实验效果 修改接收波特率依然可以正常接收&#xff0c;也就是说单片机可以自动适应上位机的波特率设置。…

2023年图灵奖揭晓:Avi Wigderson的辉煌成就与深远影响

2023年图灵奖揭晓&#xff0c;你怎么看&#xff1f; 2023年图灵奖&#xff0c;最近刚刚颁给普林斯顿数学教授 Avi Wigderson&#xff01;作为理论计算机科学领域的领军人物&#xff0c;他对于理解计算中的随机性和伪随机性的作用&#xff0c;作出了开创性贡献。 方向三&#xf…

免费泛域名SSL如何申请,和通配符有什么区别

-----让我们明确什么是泛域名。所谓泛域名&#xff0c;是指使用星号&#xff08;*&#xff09;作为子域名的占位符&#xff0c;它可以匹配任意子域名。-----而通配符在域名中&#xff0c;它可以出现在主域名的任何位置&#xff0c;它可以用于主域名和子域名的保护。 主要应用场…

握手问题(蓝桥杯)

文章目录 握手问题【问题描述】答案&#xff1a;1204解题思路模拟 握手问题 【问题描述】 小蓝组织了一场算法交流会议&#xff0c;总共有 50 人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手&#…

OceanBase 4.3 列存存储格式和列存索引存储格式

以 t1 表和索引为例子&#xff0c;下面两张图说明了存储层如何存储数据。 create table t1 (id1 int, id2 int, name varchar(10), salary int, primary key(id1, id2)) with column group (each column);create index idx (name) storing(salary) with column group(each co…

突破“三个九”!离子阱量子计算再创新高

如果把量子计算比作一场球赛&#xff0c;Quantinuum无疑又打了一记漂亮的好球。实际上&#xff0c;结合今年春季在量子体积、逻辑量子比特和布线问题等方面的进展&#xff0c;这个团队已经接近于完成一场完美的比赛。 3月&#xff0c;Quantinuum的研究人员证明了QCCD架构的可扩…

MYSQL08_页的概述、内部结构、文件头、文件尾、最大最小记录、页目录、区段表

文章目录 ①. 页的概述、大小②. 页的内部结构③. 第一部分 - 文件头④. 第一部分 - 文件尾⑤. 第二部分 - 空闲、用户记录、最大最小⑥. 第三部分 - 页目录⑦. 第三部分 - 页面头部⑧. 从数据页角度看B树⑨. 区、段和表、碎片区 ①. 页的概述、大小 ①. 数据库的存储结构&…

小行星碰撞

题目链接 小行星碰撞 题目描述 注意点 两个小行星相互碰撞&#xff0c;较小的小行星会爆炸如果两颗小行星大小相同&#xff0c;则两颗小行星都会爆炸每一颗小行星以相同的速度移动正负表示小行星的移动方向&#xff08;正表示向右移动&#xff0c;负表示向左移动&#xff09…

day81 session会话 文件上传

知识点&#xff1a; session 文件上传 一 session 1&#xff09;session&#xff1a;会话 在服务器端存储信息 指客户与服务器的会话 当用户通过浏览器访问服务器的某个页面时&#xff0c;在服务器开辟一个内存空间session 每个session 有唯一的id 2&#xff09;session过期 …

安全开发实战(3)--存活探测与端口扫描

目录 安全开发专栏 前言 存活探测 端口扫描 方式一: 1.3.1 One 1.3.2 Two 1.3.3 批量监测 方式二: 1.3.1 One 1.3.2 Two 1.3.3 Three 1.3.4 扫描ip地址,提取出开放端口和协议 ​编辑 1.3.5 批量扫描(最终完成版) 总结 安全开发专栏 安全开发实战​http://t.csd…

javaee前后端交互

1.选择Java Enterprise创建项目 2.勾选Web Profile 3.项目名称 4.创建包和类 5.继承HttpServlet并重写方法doGet和doPost 6.在web.xml里添加代码 7.点击Add Configuration,进去后点击加号 8.选择选项 9.调整如图&#xff0c;后选择Deployment进入 10.点击加号选择第一个 11.…

【GoWeb框架初探————Gin篇】

1. Gin 1.1 下载相应依赖 创建go项目&#xff0c;在项目下建立go.mod文件&#xff08;若有则跳过&#xff09; 命令行运行 go get github.com/gin-gonic/gin1.2 启动一个简单Web服务 package mainimport ("github.com/gin-gonic/gin""github.com/thinkerou/…