Tomcat服务的部署及配置优化

文章目录

  • 1. Tomcat的相关介绍
    • 1.1 Tomcat简介
    • 1.2 Tomcat的核心组件
      • 1.2.1 Web容器
      • 1.2.2 Servlet容器
      • 1.2.3 JSP容器
    • 1.3 Tomcat的功能组件
      • 1.3.1 connector连接器
      • 1.3.2 container容器
        • 1.3.2.1 子容器及其相关功能
    • 1.4 主要作用
    • 1.5 Tmocat处理请求的过程
  • 2. Tomcata服务部署
    • 2.1 安装并配置JDK
    • 2.2 设置JDK环境变量
    • 2.3 安装Tomcat并用systemctl启动
      • 2.3.1 路径启动
      • 2.3 2 为tomcat添加进systemd服务
  • 3. Tomcat的端口及配置文件
    • 3.1 Tomcat常用端口
    • 3.2 主要目录、文件及其功能
  • 4. 虚拟主机
    • 4.1 作用
    • 4.2 配置虚拟主机(基于域名)
      • 4.2.1 创建 scj 和 shan 项目目录和文件
      • 4.2.2 修改 Tomcat 主配置文件
      • 4.2.3 重启并检测是否成功
  • 5. tomcat 配置优化
    • 5.1 配置文件优化
    • 5.2 内核优化
    • 5.3 JVM优化

1. Tomcat的相关介绍

1.1 Tomcat简介

Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器

Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。

一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。

1.2 Tomcat的核心组件

  • Web 容器:完成 Web 服务器的功能。
  • Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
  • JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。

1.2.1 Web容器

Tomcat 是 Web 应用服务器,也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器,负责处理客户请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户。

1.2.2 Servlet容器

Servlet 是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性,
简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建

1.2.3 JSP容器

JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 <% 开头,以 %> 结束。

JSP 是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。

JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

1.3 Tomcat的功能组件

Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container
其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。
每个 Tomcat 服务器可以管理多个 Service。

1.3.1 connector连接器

暴露监听端口,接收客户端发来的请求和返回响应消息给客户端

1.3.2 container容器

负责处理用户请求的业务逻辑。
由4个子容器组成(engine、host、context、wrapper),子容器之间是父子关系

1.3.2.1 子容器及其相关功能

  • engine:引擎,管理多个虚拟主机,一个container只有一个engine
  • host:代表一个虚拟主机
  • context:代表一个 Web 应用,包含多个 Servlet 封装器
  • wrapper:servlet封装器,每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能

1.4 主要作用

  • 可以作为 Web 应用服务器,处理静态 Web 页面, 如 html 页面,但性能一般
  • 还可以作为 Servlet/JSP 容器,处理 java 语言开发的 jsp 动态页面应用程序,这也是 tomcat 主要的应用场景

1.5 Tmocat处理请求的过程

在这里插入图片描述

1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。
4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。

客户端请求过程:
客户端浏览器——> connector(暴露的8080端口) ——>container(engine)——>host ——>context——>wrapper

container(engine) 根据域名发送给对应的虚拟主机
host 根据用户访问的URL路径
context 根据URL路径对应的Web应用
wrapper 根据应用程序处理业务逻辑

2. Tomcata服务部署

2.1 安装并配置JDK

systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux#将所需源码包传到/opt目录下
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz

在这里插入图片描述

#rpm安装JDK
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm 

在这里插入图片描述

rpm -ql jdk1.8 | tail -n 1
#查看安装路径

在这里插入图片描述

cd /usr/java/jdk1.8.0_201-amd64/ ;ls
文件名功能
bin存放 Java 可执行文件的目录
include存放 Java 开发头文件的目录
jre存放 Java 运行时环境的目录
LICENSEJDK 许可证文件
README.htmlJDK 的直观说明文档(HTML 格式)
src.zipJDK 的源代码压缩包
THIRDPARTYLICENSEREADME.txt第三方许可证文档
COPYRIGHTJDK 的版权信息
javafx-src.zipJavaFX 源代码压缩包
lib存放 JDK 和 JavaFX 库文件的目录
man存放 JDK 手册页(man page)文件的目录
releaseJDK 的版本信息
THIRDPARTYLICENSEREADME-JAVAFX.txtJavaFX 第三方许可证文档

在这里插入图片描述

java -version 
#查看目前JDK版本

在这里插入图片描述

2.2 设置JDK环境变量

#查看全局配置文件
vim /etc/profile

在这里插入图片描述

vi /etc/profile.d/java.shexport JAVA_HOME=/usr/java/jdk1.8.0_201-amd64   
#java家目录
export JRE_HOME=$JAVA_HOME/jre
#jre家目录
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
#指向java工具包和环境包
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#java环境变量#linux查找可执行文件是根据PATH变量从左往右查找,找到即停止
#所以需要将安装版本的路径放在$PATH前面`CLASSPATH` 是一个环境变量,用于指定 Java 程序运行时的类路径。类路径是指计算机中存储 Java 类文件和库文件的路径。当 Java 程序运行时,虚拟机会搜索类路径上指定的路径,以找到所需的类文件和库文件,以便正确加载和执行程序。#CLASSPATH和 PATH是必需的,而JAVA_HOME和JRE_HOME是为了方便修改,只需要修改JAVA_HOME

在这里插入图片描述

source /etc/profile.d/java.sh
#调用Java脚本java -version
#查看当前JDK版本

在这里插入图片描述

#测试
任意Java脚本,测试是否成功

在这里插入图片描述

javac HelloWorld.java
#编译

在这里插入图片描述

java -cp . HelloWorld #执行脚本

在这里插入图片描述

---------------------------------热知识-------------------------------------------------------------------
JDK :java development kit (java开发工具)
JRE :java runtime environment (java运行时环境)
JVM :java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。
CLASSPATH:告诉jvm要使用或执行的class放在什么路径上,便于JVM加载class文件。
tools.jar:是系统用来编译一个类的时候用到的,即执行javac的时候用到。
dt.jar:dt.jar是关于运行环境的类库,主要是swing包。
----------------------------------------------------------------------------------------------------------

2.3 安装Tomcat并用systemctl启动

2.3.1 路径启动

#解压tomcat安装包
cd /opt
tar xf apache-tomcat-9.0.16.tar.gz  
#解压缩源码包 

在这里插入图片描述

cp -r apache-tomcat-9.0.16/ /usr/local/tomcat
#将源码包目录拷贝至/usr/local/下并重命名为tomcat
#简化路径,方便管理mv apache-tomcat-9.0.16 /usr/local/tomcat

在这里插入图片描述

#启动Tomcat的方法,省略路径
startup.sh          #后台启动tomcat
catalina.sh start   #后台启动tomcat
catalina.sh run     #前台启动 tomcat#关闭Tomcat的方法:
shutdown.sh      关闭tomcat#查看tomcat是否启动:
ss -natp |grep 8080

在这里插入图片描述

2.3 2 为tomcat添加进systemd服务

#先关闭服务
/usr/local/tomcat/bin/shutdown.sh

在这里插入图片描述

#添加用户设置属主属组
useradd -s /sbin/nologin tomcat
chown tomcat:tomcat /usr/local/tomcat/ -R
#新建.service服务文件
vi /etc/systemd/system/tomcat.service[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat[Install]
WantedBy=multi-user.target
#重新加载服务,并开启,查看是否成功启动
systemctl daemon-reload
systemctl start tomcat
ss -ntap |grep 8080
或
systemctl status tomcat

在这里插入图片描述

浏览器访问Tomcat的默认主页 http://192.168.67.102:8080

在这里插入图片描述

3. Tomcat的端口及配置文件

3.1 Tomcat常用端口

8080: 默认接收 http 请求的端口

8005: 安全端口,可以关闭tomcat

8009: apache 和 tomcat 联动 AJP 协议

8443:负责处理https请求连接

3.2 主要目录、文件及其功能

目录名功能
bin存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh
conf存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。
lib存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的 jar 包
logs存放 Tomcat 日志
temp存放 Tomcat 运行时产生的文件
webapps存放项目资源的目录
workTomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到
文件名说明
server.xml主配置文件
web.xml每个webapp只有“部署"后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为
context.xml用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件
tomcat-users.xml用户认证的账号和密码文件
catalina.policy当使用security选项启动omcat时,用于为tomcat设置安全策略
catalina.propertiesTomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.propertiesTomcat日志系统相关的配置,可以修改日志级别和日志路径等

注意:配置文件对于大小写很敏感

4. 虚拟主机

4.1 作用

  1. 分离多个网站:通过配置虚拟主机,可以将不同的网站分开,并为每个网站指定独立的文档根目录、日志文件、访问日志等,以避免网站之间的资源冲突和混乱。
  2. 实现多个域名指向不同的网站:通过虚拟主机,可以将多个域名指向同一台服务器的不同网站,实现一个服务器对应多个域名,提高服务器的利用率和灵活性。
  3. 隔离与保护:每个虚拟主机都是独立的,网站之间不会相互干扰,如果一个网站出现问题,不会影响其他网站的正常运行。
  4. 提供定制化配置:通过虚拟主机配置,可以为每个网站提供独立的配置选项,如SSL证书、访问权限、反向代理等,以满足不同网站的需求。
  5. 简化管理和维护:通过虚拟主机,可以利用Tomcat提供的管理工具(如Tomcat Manager)对每个虚拟主机进行独立的管理和监控,方便统一管理多个网站

4.2 配置虚拟主机(基于域名)

新增两个域名 www.scj.com 和 www.shan.com,希望通过这两个域名访问到不同的项目内容。

4.2.1 创建 scj 和 shan 项目目录和文件

#创建 zhuo 和 xuni 项目目录与文件
cd /usr/local/tomcat/webapps
mkdir scj  shan

在这里插入图片描述

#自定义主页内容
echo "this is scj web" > scj/index.html
echo "this is shan web" > shan/index.html

在这里插入图片描述

4.2.2 修改 Tomcat 主配置文件

#修改主配置文件
vim /usr/local/tomcat/conf/server.xml 
约164行位置插入
-----------------------------------------------------<Host name="www.scj.com"  appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true"xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/scj"path="" reloadable="true" /></Host><Host name="www.shan.com"  appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true"xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/shan"path="" reloadable="true" /></Host>###################释义#########
Host name :主机名appBase :Tomcat程序工作目录,相对路径为webapps,绝对路径为/usr/local/tomcat/webappsunpackWARs :是否解压war包autoDeploy :指示Tomcat运行时,如有新的WEB应用是否允许自动部署xmlValidation :是否验证xml文件执行有效性检验的标志xmlNamespaceAware :是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验appBase :WEB应用的目录path :设置访问的URI为WEB应用的根目录reloadable :是否在程序有改动时重新载入

在这里插入图片描述

4.2.3 重启并检测是否成功

#服务机关闭防火墙并重启服务
systemctl restart tomcat
systemctl stop firewalld
setenforce 0
#前往客户机,更改/etc/hosts文件并关闭防火墙
echo "192.168.67.102 www.scj.com www.shan.com" >> /etc/hosts
systemctl stop firewalld
setenforce 0

在这里插入图片描述

#在客户机中测试
curl http://www.scj.com:8080
curl http://www.shan.com:8080

在这里插入图片描述

5. tomcat 配置优化

5.1 配置文件优化

maxThreads(最大线程数/并发)
processorCache(进程缓冲)
acceptCount(等待队列数)  
enableLookups(关闭DNS反向解析)  
URIEncoding(网页字符集编码UTF-8) 
maxKeepAliveRequests(长连接最大请求数)  
connectionTimeout(连接超时时间)  
compression(开启页面压缩)

5.2 内核优化

#/etc/security/limits.conf     
nofile  nproc  memlock
#/etc/sysctl.conf   
net.ipv4.tcp_tw_reuse=1   
net.ipv4.tcp_tw_recycle=1   
net.ipv4.tcp_fin_timeout=30  
net.ipv4.tcp_max_tw_buckets=5000    
net.ipv4.ip_local_port_range=1024 65535 

5.3 JVM优化

#在 catalina.sh 中设置 JAVA_OPTS 参数JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=1024m -XX:MaxPermSize=1024m -Xmn768m"-server                                    #表示启用JDK的Server模式,实现在多核服务器性能更佳
-Xms2048m -Xmx2048m                        #设置JVM堆内存初始值和最大最一样大,一般设置为物理内存的 1/2
-XX:PermSize=1024m -XX:MaxPermSize=1024m   #设置永久代(非堆内存)初始值和最大最一样大,一般设置为物理内存的 1/4#初始值和最大最设置一样大的原因:可以减少GC次数和内存伸缩带来的频繁内存申请,从而减少一定的系统开销。-Xmn #设置JVM堆内存新生代的大小,一般设置为堆内存的 3/8-XX:ParallelGCThreads=2   #设置并行GC(垃圾回收)线程数,提高垃圾回收效率
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat/temp/oom.hprof  设#置进程发生OOM异常退出会进行DUMP备份
-XX:+DisableExplicitGC  #禁止调用System.gc()方法,防止误调用系统gc方法导致系统的JVM堆内存大起大落而使系统响应效率严重降低

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

log4qt库的使用

log4qt库的使用 一,什么是log4qt?二,log4qt的下载三,如何集成log4qt?1.在vs2022中集成log4qt的方法:模块一:配置log4qt的步骤步骤一,将下好的log4qt库进行解压,然后再库文件中,新建build和Log4Qt文件夹步骤二,打开cmake,有两个填写路径的位置.步骤三,点击cmake的configure按钮…

tcp满开始和拥塞避免

tcp的拥塞控制有四种算法&#xff0c;后面的快重传和快恢复是后面新增的&#xff0c; 刚开始会初始化慢开始门限值&#xff0c;并将拥塞窗口值为1往网络中发送&#xff0c;若收到确认包则将拥塞窗口翻倍&#xff0c;执行慢开始算法&#xff0c;当拥塞窗口值达到慢开始门限后&am…

02-Tomcat打破双亲委派机制

上一篇&#xff1a;01-从JDK源码级别剖析JVM类加载机制 Tomcat 如果使用默认的双亲委派类加载机制行不行&#xff1f; 我们思考一下&#xff1a;Tomcat是个web容器&#xff0c; 那么它要解决什么问题&#xff1a; 一个web容器可能需要部署两个应用程序&#xff0c;不同的应用…

Alibaba(获得店铺的所有商品) API 接口

为了进行电商平台 的API开发&#xff0c;首先我们需要做下面几件事情。 1&#xff09;开发者注册一个账号 2&#xff09;然后为每个alibaba应用注册一个应用程序键&#xff08;App Key) 。 3&#xff09;下载alibaba API的SDK并掌握基本的API基础知识和调用 4&#xff09;利…

深入浅出Android同步屏障机制

原文链接 Android Sync Barrier机制 诡异的假死问题 前段时间&#xff0c;项目上遇到了一个假死问题&#xff0c;随机出现&#xff0c;无固定复现规律&#xff0c;大量频繁随机操作后&#xff0c;便会出现假死&#xff0c;整个应用无法操作&#xff0c;不会响应事件&#xff…

【Linux】Systemd 中的单元(Unit)和单元文件(Unit File)怎么理解?

单元&#xff08;Unit&#xff09;单元文件&#xff08;Unit File&#xff09;感谢 &#x1f496; 关于systemd是什么&#xff0c;http://t.csdn.cn/pMkG7这篇文章里有详细说明。 这篇文件我们一起来看看Systemd 中的单元&#xff08;Unit&#xff09;和单元文件&#xff08;Un…

vue使用jsencrypt实现rsa前端加密

实现 RSA 加密 介绍 vue 完成 rsa 加密传输&#xff0c;jsencrypt 实现参数的前端加密 1 安装 jsencrypt npm install jsencrypt2 编写 jsencrypt.js 在 utils 文件夹中新建 jsencrypt.js 文件&#xff0c;内容如下&#xff1a;注意点&#xff1a;一般公钥都是后端生成好的&a…

excl在建模语言中的运用

目录 1.表格的定位 2.数学函数 3.自动填充功能 4.数据透视表的应用 5.切片器 6. Date(),time(),now()&#xff0c;today() 7.文本转日期 8.分裂 9.sumif函数 10.数字转换为文本的方法 11.SUMIFS()函数&#xff1a;多个条件筛选 12.宏 13.提取多个表中&#xff0c;…

大秒杀系统设计

参考链接&#xff1a;http://www.taodudu.cc/news/show-5770725.html?actiononClick 1. 一些数据 大家还记得2013年的小米秒杀吗&#xff1f;三款小米手机各11万台开卖&#xff0c;走的都是大秒系统&#xff0c;3分钟后成为双十一第一家也是最快破亿的旗舰店。 经过日志统计…

appium+jenkins实例构建

自动化测试平台 Jenkins简介 是一个开源软件项目&#xff0c;是基于java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。 前面我们已经开完测试脚本&#xff0c;也使用bat 批处…

文件上传之图片码混淆绕过(upload的16,17关)

目录 1.upload16关 1.上传gif loadup17关&#xff08;文件内容检查&#xff0c;图片二次渲染&#xff09; 1.上传gif&#xff08;同上面步骤相同&#xff09; 2.条件竞争 1.upload16关 1.上传gif imagecreatefromxxxx函数把图片内容打散&#xff0c;&#xff0c;但是不会…

MySQL用户管理

文章目录 MySQL用户管理1. 用户1.1 用户信息1.2 创建用户1.3 删除用户1.4 修改用户密码 2. 数据库的权限2.1 给用户授权2.2 回收权限2.2 回收权限 MySQL用户管理 如果我们只能使用root用户&#xff0c;这样存在安全隐患。这时&#xff0c;就需要使用MySQL的用户管理。 1. 用户…

flink的几种常见的执行模式

背景 在运行flink时&#xff0c;我们经常会有几种不同的执行模式&#xff0c;比如在IDE中启动时&#xff0c;通过提交到YARN上&#xff0c;还有通过Kebernates启动时&#xff0c;本文就来记录一下这几种模式 flink的几种执行模式 flink嵌入式模式&#xff1a; 这是一种我们在…

自考本科,毕业八年,2023浙大MPA提面优秀分享

去年十月中旬&#xff0c;我参加了浙江大学MPA提前批面试。结果出乎意料地&#xff0c;我竟然获得了A资格。对此&#xff0c;我自己也感到难以置信。事实上&#xff0c;我只是抱着试一试的心态递交了申请材料。因为通过我对前几年浙大自划线的情况来看&#xff0c;对于浙江大学…

用postman 推送消息到GCP的pubsub

创建1个Topic 和 2个 subscription 我们可以用terraform 去创建1个topic 和 2个subscriptions # topic resource "google_pubsub_topic" "topic_a" {name "TopicA"project var.project_id }# subscriptions resource "google_pubsub_s…

SpringMVC的常用注解,参数传递以及页面跳转的使用

目录 slf4j 常用注解 RequestMapping RequestParam RequestBody PathVariable 参数传递 首先在pom.xml配置文件中导入SLF4J的依赖 基础类型String 复杂类型 RequestParam PathVariable RequestBody 增删改查 返回值 void返回值 String返回值 modelString …

【算法】分治法的应用——快速排序

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

关于黑马hive课程案例FineBI中文乱码的解决

文章目录 问题描述情况一的解决情况二的解决 ETL数据清洗知识社交案例参考代码结果展示 问题描述 情况1&#xff1a;FineBI导入表名中文乱码&#xff0c;字段内容正常情况2&#xff1a;FineBI导入表字段中文乱码&#xff0c;表名内容正常 情况一的解决 使用navcat等工具连接…

Docker如何安装seafile

SQLite 方式 要在 Docker 中安装 Seafile&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装 Docker&#xff1a;确保您的系统上已经安装了 Docker。您可以根据您的操作系统类型&#xff0c;在官方网站上找到适合您系统的 Docker 版本并进行安装。 下载 Seafile 镜像&…

第16章_瑞萨MCU零基础入门系列教程之CAN 协议

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…