详细记录Docker部署前后端分离项目的过程

虚拟机软件下载

VMware安装 (一直下一步就行。)

VMware下载

VMware认证秘钥

CentOS镜像下载

虚拟机创建

然后启动,就会在虚拟机中安装导入的centos镜像。

远程管理服务器

我们不可能在虚拟机centos系统的终端操作命令,很麻烦。所以我们需要一个可以通过ssh客户端,这里使用xshell

上传服务器文件

为了更好地操作文件,我们需要通过ftp协议去连接服务器,然后进行文件操作,这里选择filezilla。因为linux系统没有GUI,所以编辑起来比较麻烦。

linux默认是不开启ftp协议的,开启的是SFTP协议。

linux优点

  • 跨平台的硬件支持
  • 丰富的软件支持。CentOS,通过yum安装软件,Ubuntu,通过apt安装软件。
  • 多用户多任务。
  • 可靠的安全性。(权限管理非常完善)
  • 良好的稳定性。
  • 完善的网络功能。(强大的防火墙)

linux目录结构

文件或者文件夹都放在根目录下。

  • /bin:存放系统的可执行二进制文件,如ls、cp、mv等命令。
  • /boot:存放引导系统启动所需的文件,包括内核镜像和引导加载程序。
  • /dev:存放抽象硬件,设备文件目录,包含Linux系统中所有的设备文件,如磁盘、终端设备、打印设备等。
  • /etc:存放系统配置文件,包括用户帐号和密码、网络配置、服务配置等。
  • /home:存放用户的主目录,每个用户通常在此目录下有一个与用户名相同的子目录。
  • /lib:存放系统和应用程序使用的共享库(类似于Windows的动态链接库)。
  • /media:挂载点目录,用于挂载可移动介质,如光盘、USB存储设备等。
  • /mnt:挂载点目录,用于挂载临时文件系统,如NFS共享、临时挂载Windows分区等。
  • /opt:存放可选的应用程序包、第三方软件等。(大型软件存放目录)
  • /proc:虚拟文件系统,提供有关系统内核和进程的信息。
  • /root:超级用户(root)的主目录。
  • /sbin:存放系统管理员使用的系统管理和维护命令。
  • /tmp:临时文件目录,用于存放临时文件,该目录下的文件在系统重启时会被清空。
  • /usr:存放用户程序和数据的目录,包括系统应用程序、库文件、文档等。(存放安装程序,程序默认目录)
  • /var:存放系统运行时需要修改的文件,如日志文件、缓存文件、邮件等。(存放经常变化的文件)

查看linux文件信息

ls -l <dirname / filename>, ll

文件属性共有10位组成,第一位表示文件类型,其他9位表示权限信息。每三位一组。

文件类型

  • d 目录
  • - 文件
  • l 软连接
  • b 存储设备。例如移动硬盘的信息。
  • c 串行设备。鼠标键盘等。

属主权限,属组权限,其他用户权限

  • r
  • w
  • x 执行
文件类型,操作权限 文件数量(文件是1,文件夹统计的是内部文件数量,注意不会递归统计,只会统计当前目录下的) 创建该文件用户的名字 创建该文件所属的用户组名字 大小(字节Byte) 文件创建时间信息 文件名
drwxr-xr-x. 2 root root 6 Aug 5 12:49 llm

修改文件或者目录权限

shell 复制代码
chmod id <dirname / filename>

创建用户

shell 复制代码
adduser <username>

passwd <username>

login # 登陆
su - <username> # 切换用户

切换用户

创建用户,操作文件,权限不足

修改权限

CentOS7 防火墙

默认安装了firewalld防火墙。利用防火墙我们可以允许或者限制传输的数据通过。

例如我们访问远程服务器上的mysql数据库,如果远程服务器中未开启3306端口,我们将不能访问远程服务器中的mysql。

shell 复制代码
# 查看
firewall-cmd --state
# 启动
service firewall start
# 关闭
service firewall stop
# 重启
service firewall restart

普通用户无法查看防火墙,必须是超级用户,即root。

管理防火墙

端口管理

shell 复制代码
    # 开启 8080 - 8085 这范围的端口
    firewall-cmd --permanent --add-port=8080-8085/tcp
    # 加载最新设置
    firewall-cmd --reload
    # 查看开放哪些端口
    firewall-cmd --permanent --list-ports
    # 删除端口
    firewall-cmd --permanent --remove-port=8080-8085/tcp

查看开启的端口和服务

shell 复制代码
# 查看开放的网络端口
firewall-cmd --permanent --list-ports 
# 有哪些服务使用了互联网
firewall-cmd --permanent --list-services

Docker

Docker 是一个流行的容器化平台,可以帮助简化和改进项目的部署过程。镜像是用来创建容器的。容器是从镜像中创建出来的虚拟实例。

1.轻量和可移植性:Docker 容器非常轻量,只包含运行应用程序所需的最小依赖项,因此可以更有效地利用系统资源。Docker 容器还具有良好的可移植性,可以在不同的运行环境中进行部署,而无需担心依赖项或配置的不兼容性。

2.一致的开发和生产环境:Docker 允许开发人员在本地创建容器,以在与生产环境相同的环境中运行和测试应用程序。这种一致性可以减少由于环境差异而导致的问题,并提高开发团队之间的合作效率。

3.快速部署和扩展:使用 Docker 部署项目可以更快地进行部署和扩展。由于容器是轻量级的,可以在几秒钟内启动和停止,从而大大缩短了项目的部署时间。此外,可以使用 Docker Compose 或 Docker Swarm 这样的工具轻松扩展应用程序的容器实例,以满足不断增长的流量需求。

4.环境隔离和安全性:每个 Docker 容器都是独立且隔离的,具有自己的文件系统、进程和网络空间。这种隔离性可以防止应用程序之间的相互影响,并提供更高的安全性。即使一个容器中的应用程序出现问题,它也不会对其他容器或宿主机造成影响。

5.持续集成和交付:Docker 容器可以与持续集成和持续交付(CI/CD)流程无缝集成。开发团队可以使用容器构建、测试和部署应用程序,从而在开发周期中实现更快的迭代和交付。

总之,Docker 提供了一种方便、可移植、高效和安全的方式来部署和管理项目。它可以提高开发和运维的效率,并促进团队的协作和软件交付的可靠性。

docker创建的所有虚拟实例共用同一个linux内核,对硬件占用较小,属于轻量级虚拟机。

安装Docker

shell 复制代码
# 先更新yum软件管理器
yum -y update

yum install -y docker

切换docker镜像源

shell 复制代码

管理docker

shell 复制代码
# 启动
service docker start
# 关闭
service docker stop
# 重启
service docker restart

docker相关指令

容器管理相关指令

  • 创建容器:docker create
  • 启动容器:docker start
  • 停止容器:docker stop
  • 重启容器:docker restart
  • 删除容器:docker rm
  • 查看容器状态:docker ps
  • 进入运行中的容器:docker exec
  • 暂停容器:docker pause
  • 恢复容器的运行:docker unpause

镜像管理相关指令

  • 拉取镜像:docker pull
  • 构建镜像:docker build
  • 查看已安装镜像列表:docker images
  • 删除镜像:docker rmi
  • 导出镜像:docker save
  • 导入镜像:docker load
  • 查看有哪些相关镜像:docker search <keyword>

网络管理相关指令

  • 创建网络:docker network create
  • 查看网络列表:docker network ls
  • 连接容器到网络:docker network connect
  • 断开容器与网络的连接:docker network disconnect

数据管理相关指令

  • 挂载主机目录到容器:docker run -v
  • 查看数据卷:docker volume ls
  • 创建数据卷(目录和目录的映射),文件的映射直接通过-v参数去映射即可:docker volume create
  • 删除数据卷:docker volume rm

日志和信息相关指令

  • 查看容器日志:docker logs
  • 查看容器信息:docker inspect
  • 查看容器内进程信息:docker top

其他常用指令

  • 克隆镜像并修改名称:docker tag <原镜像名称> <修改的名称>
  • 构建并启动容器:docker run
  • 进入容器交互式终端:docker exec -it-it表示启动终端交互界面。如果启动时不加这个参数,那么启动后依旧停留在宿主机交互界面中。
  • 其他指令选项如 -d(后台运行)、-p(端口映射)、-e(环境变量设置)等,用于配置容器运行参数。

mysql集群方案介绍

数据库集群是一种将多个数据库服务器组合在一起以实现高可用性、负载均衡和扩展性的解决方案。

单节点数据库的弊病

  • 单节点数据库无法满足性能上的要求。
  • 单节点数据库没有冗余设计,无法满足高可用。

PXC集群

达到实时同步。每个节点都可以读取和写入数据,如果有一个节点数据未写入成功,那么数据就表示写入失败。

安装PXC镜像。

shell 复制代码
docker pull percona/percona-xtradb-cluster

创建内部网络

出于安全考虑,我们给PXC集群实例创建Docker内部网络。

shell 复制代码
# 创建网段
docker network create net1
# 查看网段信息
docker network inspect net1
# 移除网段
docker network rm net1

创建数据卷,将宿主机中的数据映射到容器中的PXC节点中。一般创建卷映射文件在/var/lib/docker/volumes/中。

shell 复制代码
# 创建数据卷
docker volume create --name v1
# 删除数据卷
docker volume rm v1

创建PXC容器,只需要向PXC镜像传入运行参数就能创建出PXC容器。

shell 复制代码
# 创建出的容器在后台运行,将宿主机端口与容器端口映射。
# 挂载主机目录到容器,通过上面创建的数据卷
# 指定创建容器的mysql密码,集群名称,数据库节点之间同步用到的密码
# 给映射的文件在容器中操作最高的权限。
# 容器起名字
# 使用的内部网段
# 使用的ip地址
# 镜像的名字
docker run -d -p 3306:3306
-v v1:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=password
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=password
--privileged 
--name=node1 
--net=net1 
--ip 172.18.0.2
pxc

创建服务器集群

shell 复制代码
docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
docker volume create --name v4
docker volume create --name v5
shell 复制代码
# 创建第一个节点
docker run -d -p 3306:3306 
-e MYSQL_ROOT_PASSWORD=123456
-e CLUSTER_NAME=PXC 
-e XTRABACKUP_PASSWORD=123456 
-v v1:/var/lib/mysql --privileged
--name=node1 --net=net1 --ip 172.18.0.2 pxc

# 创建第二个节点
# CLUSTER_JOIN表示和第几个节点进行同步
docker run -d -p 3307:3306 
-e MYSQL_ROOT_PASSWORD=123456
-e CLUSTER_NAME=PXC 
-e XTRABACKUP_PASSWORD=123456
-e CLUSTER_JOIN=node1
-v v2:/var/lib/mysql --privileged
--name=node2 --net=net1 --ip 172.18.0.3 pxc

# 创建第三个节点
docker run -d -p 3308:3306 
-e MYSQL_ROOT_PASSWORD=123456
-e CLUSTER_NAME=PXC 
-e XTRABACKUP_PASSWORD=123456
-e CLUSTER_JOIN=node1 
-v v3:/var/lib/mysql --privileged
--name=node3 --net=net1 --ip 172.18.0.4 pxc

# 创建第四个节点
docker run -d -p 3309:3306 
-e MYSQL_ROOT_PASSWORD=123456
-e CLUSTER_NAME=PXC 
-e XTRABACKUP_PASSWORD=123456
-e CLUSTER_JOIN=node1  
-v v4:/var/lib/mysql --privileged
--name=node4 --net=net1 --ip 172.18.0.5 pxc

# 创建第五个节点
docker run -d -p 3310:3306 
-e MYSQL_ROOT_PASSWORD=123456
-e CLUSTER_NAME=PXC 
-e XTRABACKUP_PASSWORD=123456
-e CLUSTER_JOIN=node1
-v v5:/var/lib/mysql --privileged
--name=node5  --net=net1 --ip 172.18.0.6 pxc

本地mysql GUI连接数据库

连接上面创建的五个数据库节点

然后操作一个数据库都会影响该集群下的所有数据库。

数据库负载均衡

将请求均匀的分配给集群中的数据库进行操作。使用Haproxy做负载均衡,请求被均匀分发给每个节点,单节点负载低,性能好。

中间件 开发语言 支持协议 负载均衡算法 高可用性功能 扩展性能力 服务发现和注册 社区支持和文档
Nginx C HTTP, HTTPS, TCP 轮询,IP哈希,最少连接 健康检查,热备份 水平扩展,反向代理 第三方实现,集成zookeeper等 强大的社区支持和文档
HAProxy C HTTP, HTTPS, TCP 轮询,IP哈希,最少连接 健康检查,故障转移 水平扩展,反向代理,SSL终止 主动探测,动态配置管理 社区支持和文档丰富
Envoy C++ HTTP, gRPC, TCP, MQTT 轮询,最少连接,最佳负载 健康检查,故障转移,熔断 水平扩展,HTTP/2支持,过滤器 集成服务发现(如Consul) 活跃的开源社区和文档
Traefik Go HTTP, TCP, UDP 轮询,IP哈希,最少连接 健康检查,故障转移,熔断 水平扩展,反向代理,自动HTTPS 集成服务发现(如Etcd) 活跃的开源社区和文档
Apache Traffic C HTTP, HTTPS, TCP, UDP 轮询,IP哈希,最少连接 健康检查,故障转移,会话保持 水平扩展,反向代理,负载均衡 集成第三方服务发现(如Consul) 社区支持和文档丰富

在docker容器中安装HAProxy镜像。

shell 复制代码
docker pull haproxy:1.8.8

创建HAProxy配置文件,来达到负载均衡。可以参考这里

shell 复制代码
touch /home/soft/haproxy/haproxy.cfg

配置文件内容如下

shell 复制代码
global
	#工作目录
	chroot /usr/local/etc/haproxy
	#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
	log 127.0.0.1 local5 info
	#守护进程运行
	daemon

defaults
	log	global
	mode	http
	#日志格式
	option	httplog
	#日志中不记录负载均衡的心跳检测记录
	option	dontlognull
  #连接超时(毫秒)
	timeout connect 5000
  #客户端超时(毫秒)
	timeout client  50000
	#服务器超时(毫秒)
  timeout server  50000

#监控界面	
listen  admin_stats
	#监控界面的访问的IP和端口
	bind  0.0.0.0:8888
	#访问协议
  mode        http
	#URI相对地址
  stats uri   /dbs
	#统计报告格式
  stats realm     Global\ statistics
	#登陆帐户信息
  stats auth  admin:123456
#数据库负载均衡
listen  proxy-mysql
	#访问的IP和端口
	bind  0.0.0.0:3306  
  #网络协议
	mode  tcp
	#负载均衡算法(轮询算法)
	#轮询算法:roundrobin
	#权重算法:static-rr
	#最少连接算法:leastconn
	#请求源IP算法:source 
  balance  roundrobin
	#日志格式
  option  tcplog
	#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
  option  mysql-check user haproxy
  server  MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000  
  server  MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000  
	server  MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000 
	server  MySQL_4 172.18.0.5:3306 check weight 1 maxconn 2000
	server  MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000
	#使用keepalive检测死链
  option  tcpka 

启动haproxy容器

shell 复制代码
# 将容器中的监控界面端口映射到宿主机4001端口上
# 将容器负载均衡端口映射到宿主机4002端口上
# 将主机目录和容器目录映射

# 使用的内部网段。和数据库集群在同一个网段
docker run -it -d
-p 4001:8888
-p 4002:3306
-v /home/soft/haproxy:/usr/local/etc/haproxy
--privileged
--name h1 
--net=net1
--ip 172.18.0.7
haproxy

启动容器后,打开其终端交互界面

shell 复制代码
docker exec --it h1 bash

进入容器后,指定配置文件路径。既可以访问监控界面了

shell 复制代码
haproxy -f /usr/local/etc/haproxy/haproxy.cfg

在MYSQL中创建一个 haproxy用户,密码为空的账号。用户haproxy容器向数据库发心跳检测登录使用。

mysql 复制代码
# 任何ip都可以通过haproxy登录这个账户
CREATE USER 'haproxy'@'%' IDENTIFIED BY ''

由于单节点Haproxy不具备高可用,必须要冗余设计。设计多个数据库负载均衡节点。

利用keepalived实现双机热备。

从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务。当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务。

从狭义上讲,双机热备就是使用互为备份的两台服务器共同执行同一服务,其中一台主机为工作机(Primary Server),另一台主机为备份主机(Standby Server)。在系统正常情况下,工作机为应用系统提供服务,备份机监视工作机的运行情况(一般是通过心跳诊断,工作机同时也在检测备份机是否正常),当工作机出现异常,不能支持应用系统运营时,备份机主动接管工作机的工作,继续支持关键应用服务,保证系统不间断的运行。双机热备针对的是IT核心服务器、存储、网络路由交换的故障的高可用性解决方案。

安装keepalived,keepalived必须要安装到Haproxy所在的容器之内。这里使用apt指令是因为haproxy镜像是通过ubuntu创建的。

我们先更改apt下载的源,不然会报错,或者下载很慢

shell 复制代码
apt-get update
apt-get install keepalived

keepalived在运行时需要争抢虚拟ip,所以需要添加配置文件。

shell 复制代码
# /etc/keepalived/keppalived.conf
vrrp_instance VI_1 {
  # keepalived的身份(master主服务器, backup备用服务器)。主服务器需要抢占虚拟ip,备用服务器不会抢占虚拟ip
  state MASTER
  # 网卡设备
  interface eth0
  # 虚拟路由标识,master和backup的虚拟路由标识必须一致,标识可以是0 - 255
  virtual_router_id 51
  # master权重要高于backup,数字越大优先级越高。
  priority 100
  # master与backup节点间同步检查的时间间隔,单位是秒,准备之间必须一致。
  advert_int 1
  # 主从服务器验证方式。主备必须使用相同的密码才能正常通信。
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  # 虚拟ip地址。可以设置多个虚拟ip地址,每行一个
  virtual_ipaddress {
    172.18.0.201
  }
}

启动keepalived程序。

shell 复制代码
service keepalived start

热备份

将数据备份到寄主机上。创建数据卷

shell 复制代码
# 在宿主机中创建数据卷
docker volume create backup
# 将数据卷映射到pxc节点中
docker run -d -p 3306:3306 
-e MYSQL_ROOT_PASSWORD=12345
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=12345
-v v1:/var/lib/mysql
-v backup:/data
--privileged
-e CLUSTER_JOIN=node2
--name node1
--net=net1
--ip 127.18.0.2 pxc

PXC容器中安装XtraBackup,并执行备份

shell 复制代码
apt-get update
apt-get install percona-xtrabackup-24

# 全量备份
innobackupex --user=root --password=123456 /data/backup/full
# 查看宿主机中的数据卷
docker inspect backup

全量冷还原

  • 删除数据库集群的所有节点
shell 复制代码
docker stop node1 node2 node3 node4 node5
docker rm node1 node2 node3 node4 node5
  • 删除数据库集群关联的数据卷
shell 复制代码
docker vokume rm v1 v2 v3 v4 v5
  • 重新创建数据库集群节点
shell 复制代码
docker volume create v1

docker run -d -p 3306:3306 
-e MYSQL_ROOT_PASSWORD=123456 
-e CLUSTER_NAME=PXC 
-e XTRABACKUP_PASSWORD=123456 
-v v1:/var/lib/mysql
# 找到备份的数据卷,映射到集群中
-v backup:/data
--privileged 
--name=node1 
--net=net1 
--ip 172.18.0.2 
pxc
  • 清空mysql数据
shell 复制代码
rm -rf /var/lib/mysql/*
  • 把没有提交事务回滚一下
shell 复制代码
innobackupex 
--user=root 
--password=123456
--apply-back
/data/backup/full
  • 执行冷还原
shell 复制代码
innobackupex 
--user=root 
--password=123456
--copy-back
/data/backup/full
  • 重启集群节点
shell 复制代码
docker restart node1

redis高速缓存

高速缓存利用内存保存数据,读写速度远超硬盘。高速缓存可以减少I/O操作,降低I/O压力。

redis集群方案

  • redisCluster,没有中心节点。客户端与redis节点直连,不需要中间代理层。官方推荐。
  • codis,中间件产品,存在中心节点
  • twemproxy,中间件产品,存在中心节点。

配置RedisCluster集群

  • 安装redis镜像。
shell 复制代码
docker pull yyyyttttwwww/redis
  • 创建网络
shell 复制代码
docker network create --subnet=172.19.0.0/16 net2
  • 运行redis容器
shell 复制代码
docker run -it -d 
# redis默认端口6379
-p 5001:6379
-net=net2
--ip 172.19.0.2
--name r1
redis bash
  • 修改redis的配置文件
shell 复制代码
# /usr/redis/redis.conf

# 运行在后台
daemonize yes 
# 开启集群
cluster-enabled yes
# 集群配置文件
cluster-config-file nodes.conf
# 超时时间
cluster-node-timeout 15000
# 开启AOF模式,开启日志
appendonly yes
  • 启动redis程序
shell 复制代码
# 进入 /usr/redis/src

./redis-server ../redis.conf

依据上面的操作,创建若干redis节点。

nginx负载均衡

安装nginx镜像

shell 复制代码
docker pull nginx

上传nginx.conf文件

ini 复制代码
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
	
	proxy_redirect          off;
	proxy_set_header        Host $host;
	proxy_set_header        X-Real-IP $remote_addr;
	proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
	client_max_body_size    10m;
	client_body_buffer_size   128k;
	proxy_connect_timeout   5s;
	proxy_send_timeout      5s;
	proxy_read_timeout      5s;
	proxy_buffer_size        4k;
	proxy_buffers           4 32k;
	proxy_busy_buffers_size  64k;
	proxy_temp_file_write_size 64k;
	
  # 负载均衡,需要启动多个后台接口容器
	upstream serve_list {
		server 192.168.99.104:6001;
		server 192.168.99.104:6002;
		server 192.168.99.104:6003;
	}
	server {
        listen       6101;
        server_name  192.168.99.104; 
        location / {  
            proxy_pass   http://serve_list;
            index  index.html index.htm;  
        }  

    }
}

启动nginx容器

shell 复制代码
docker run -it -d --name n1 
-v /home/n1/nginx.conf:/etc/nginx/nginx.conf
--net=host
--privileged
nginx

创建两个nginx节点,通过keepalived实现双机热备。

前端也可以实现负载均衡,实现双机热备,防止一个服务器程序挂掉,服务停止响应。 创建多个前端服务,然后通过nginx实现负载均衡,再通过keepalived实现双机热备。

相关推荐
baozj9 小时前
🚀 手动改 500 个文件?不存在的!我用 AST 撸了个 Vue 国际化神器
前端·javascript·vue.js
用户40993225021210 小时前
为什么Vue 3的计算属性能解决模板臃肿、性能优化和双向同步三大痛点?
前端·ai编程·trae
海云前端110 小时前
Vue首屏加速秘籍 组件按需加载真能省一半时间
前端
蛋仔聊测试10 小时前
Playwright 中route 方法模拟测试数据(Mocking)详解
前端·python·测试
零号机10 小时前
使用TRAE 30分钟极速开发一款划词中英互译浏览器插件
前端·人工智能
疯狂踩坑人10 小时前
结合400行mini-react代码,图文解说React原理
前端·react.js·面试
Mintopia10 小时前
🚀 共绩算力:3分钟拥有自己的文生图AI服务-容器化部署 StableDiffusion1.5-WebUI 应用
前端·人工智能·aigc
街尾杂货店&10 小时前
CSS - transition 过渡属性及使用方法(示例代码)
前端·css
CH_X_M11 小时前
为什么在AI对话中选择用sse而不是web socket?
前端
Mintopia11 小时前
🧠 量子计算对AIGC的潜在影响:Web技术的未来可能性
前端·javascript·aigc