长安链从零到一部署-chainmaker-v2.3.2

2024-02-14 23:30

本文主要是介绍长安链从零到一部署-chainmaker-v2.3.2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何通过长安链快速部署区块链系统

文章目录

  • 长安链从零到一源码部署
    • 一、环境及概念
      • 1.1、环境依赖
      • 1.2、相关概念
    • 二、环境安装
      • 2.1、配置sudo权限
      • 2.2、修改源
      • 2.3、安装git
      • 2.4、安装golang
      • 2.5、安装docker
      • 2.6、安装GLIBC_2.18【先不安装,若运行时找不到glibc2.1.8则安装】
      • 2.7、安装GCC7.3+【若运行时gcc版本过低则安装】
    • 三、单机部署
      • 3.1、下载源码
      • 3.2、编译证书管理工具
      • 3.3、证书及配置文件生成
      • 3.4、编译及安装包制作
      • 3.5、启动
      • 3.6、查看启动情况
    • 四、智能合约开发
      • 4.1、拉取合约环境镜像
      • 4.2、编译合约
    • 五、部署合约
      • 5.1、编译命令行工具
      • 5.2、执行创建合约
      • 5.3、执行合约方法
      • 5.4、查询合约
    • 六、常见问题
      • 6.1 编译时错误
        • unknown revision v2.0.0
        • misssing go.sum entry
      • 6.2 启动时错误
        • not found GLIBC_2.18
        • restart.sh 权限不足
      • 6.3 运行时错误
        • syscall/js.valueGet not exported
        • runtime type error | byte code validation failed
        • 返回成功,但实际执行失败
      • 6.4 其他关键信息
        • 出块标记是什么
        • 组网成功标记是什么
    • 七、多机部署
      • 7.1、多机部署与单机部署区别
      • 7.2、单机&多机部署对照表

长安链从零到一源码部署

章节及人员关注

此处以centos7 chainmaker-v2.3.2 为例

长安链·ChainMaker官方文档:https://docs.chainmaker.org.cn/index.html
长安链·ChainMaker门户网站:https://chainmaker.org.cn/
长安链·ChainMaker仓库地址:https://git.chainmaker.org.cn/

一、环境及概念

1.1、环境依赖

依赖软件以centos为例:

名称用途
git下载源码
https://git.chainmaker.org.cn/explore
docker智能合约编译环境(tinygo/rust/c++/solidity/golang)
golanggo语言编译环境
gcc7.3+rust编译依赖
具有sudo权限的用户安装依赖

1.2、相关概念

名称说明
区块(Block)区块是区块链中存储交易和交易相关的数据的单元,通常由区块头和区块体组成。
区块链(Blockchain)使用密码技术链接将共识确认过的区块按顺序追加而形成的分布式账本。
智能合约(SmartContract)以数字形式定义的能够自动执行条款的合约。
交易(Transaction)也称为事务,区块链上的一次原子性账本数据状态变更及其过程和结果记录。
交易哈希(TransactionHash)交易上链成功后,产生的唯一哈希值。
交易ID(TransactionId)交易的唯一ID,可由用户指定。
chainmaker可执行文件长安链项目chainmaker-go源码编译后生成的可执行二进制文件
执行make命令后将生成在chainmaker-go/bin目录下
长安链SDK(chainmaker sdk)用于与长安链交互(发送交易,订阅等)的软件开发工具
合约SDK(contract sdk)用于开发智能合约的软件开发工具,使编译的wasm文件可与长安链进行交互
wasm文件(webassembly file)本文指长安链的智能合约编译后生成的文件。
wasm指通过各自符合WebAssembly规范的编译器编译出来的以.wasm结尾的文件。
c++: emmake make
rust: wasm-pack build
tinygo: tinygo build -no-debug -opt=s -o main.wasm -target wasm
长安链CA指使用长安链配套证书管理工具chainmaker-cryptogen管理的密钥体系

二、环境安装

以centos7为例

2.1、配置sudo权限

sudo usermod -G admin -a taifu

2.2、修改源

# 查看源
cat /etc/yum.repos.d/CentOS-Base.repo
# 备份
cd /etc/yum.repos.d/
sudo mv CentOS-Base.repo CentOS-Base.repo.bak
# 下载阿里源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo# 清理缓存
sudo yum clean all
# 生成新的缓存
sudo yum makecache

2.3、安装git

sudo yum install git -y
git --version

2.4、安装golang

https://studygolang.com/dl

https://golang.org/doc/install

linux

# 解压缩
wget https://go.dev/dl/go1.18.10.linux-amd64.tar.gz 
# wget https://studygolang.com/dl/golang/go1.18.10.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.18.10.linux-amd64.tar.gz 
# 配置环境变量
sudo vim /etc/profileexport PATH=$PATH:/usr/local/go/binexport GOROOT=/usr/local/goexport GOPATH=/home/taifu/goexport GOPROXY=https://goproxy.io,direct
source /etc/profile
# 查看版本 >=1.16
go version

2.5、安装docker

# 查看安装版本
docker version
# 删除旧版本
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
# 安装工具包
sudo yum install -y yum-utils
# 添加docker源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 搜索docker软件列表
yum list docker-ce --showduplicates | sort -r
# 安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动
sudo systemctl start docker
# 设置开机启动
sudo systemctl enable docker
# 查看开机启动
sudo systemctl list-unit-files|grep dockerdocker version
sudo groupadd docker          #添加docker用户组
sudo gpasswd -a $USER docker  #将当前用户添加至docker用户组
newgrp docker                 #更新docker用户组# 命令自动补全
sudo yum -y install bash-completion 
source /etc/profile.d/bash_completion.sh# 安装7z
sudo yum install -y zip unzip p7zip p7zip-plugins

2.6、安装GLIBC_2.18【先不安装,若运行时找不到glibc2.1.8则安装】

linux依赖

注意:GLIBC是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc,一旦安装失败系统将不可用,请谨慎操作。此处仅列举一种安装示例(在CentOS Linux release 7.6.1810安装成功),并不一定使用您的系统,请根据您的系统及gcc环境自行选择相应的安装方法。

# 查看GLIBC版本
ldd --version
strings /lib64/libc.so.6 | grep "^GLIBC_"
# 进入chainmaker-go/script/3rd安装 在其他分支有,最新分支已移除
cd chainmaker-go/script/3rd
sh install.sh

2.7、安装GCC7.3+【若运行时gcc版本过低则安装】

通过安装devtoolset-7的方式间接升级为gcc7.x版本

# 查看gcc版本
gcc --version# 升级gcc
yum install centos-release-scl
yum install devtoolset-7
scl enable devtoolset-7 bash
gcc --version

三、单机部署

3.1、下载源码

chainmaker-go官方git仓库:

https://git.chainmaker.org.cn

# 下载源码
cd ~/workspace
git clone -b v2.3.2 --depth=1 https://git.chainmaker.org.cn/chainmaker/chainmaker-go.git
git clone -b v2.3.0 --depth=1 https://git.chainmaker.org.cn/chainmaker/chainmaker-cryptogen.git

3.2、编译证书管理工具

# 编译长安链CA证书管理工具
cd chainmaker-cryptogen
make
# make 或 go build 没有反应,可以检查下网络和代理

3.3、证书及配置文件生成

# 将证书管理工具软连接关联到tools目录下
cd ../chainmaker-go/tools
ln -s ../../chainmaker-cryptogen/ .cd ../scripts
pwd
# 生成节点及证书配置,4个组织1条链,每个组织各1个共识节点
# p2p端口号为  11301 11302 11303 11304 节点内部通信
# grpc端口号为 12301 12302 12303 12304 对外提供服务
# 默认共识:tbft  默认日志级别:INFO
# 0-SOLO,1-TBFT,4-RAFT
./prepare.sh 4 1 11301 12301
# 查看证书及节点配置
tree -L 2 ../build/
tree -L 3 ../build/

3.4、编译及安装包制作

# 编译
./build_release.sh
# 查看
tree ../build/release/
# 所有的证书及安装包都在
# chainamerk-go/build/目录下

3.5、启动

# 启动
# 注意,此处为解压缩然后启动,若改了配置文件,那么会被覆盖。我们可以在第一次启动后,备份安装包(*.gz)到其他目录
./cluster_quick_start.sh normal
# 停止
./cluster_quick_stop.sh 

3.6、查看启动情况

ps -ef|grep chainmaker | grep -v grepnetstat -lptn | grep "1230\|1130"cat ../build/release/chainmaker-*/bin/panic.logcat ../build/release/chainmaker*/log/system.log|grep "ERROR\|put block\|all necessary"

四、智能合约开发

此处示例为tinygo合约编写,其他语言见官方文档:1. 智能合约

go原生语言 docker-go 合约,也可以采用在线编辑器:https://ide230.chainmaker.org.cn/

4.1、拉取合约环境镜像

# 拉取镜像
docker pull chainmakerofficial/chainmaker-go-contract:2.1.0docker images# 运行镜像
docker run -d  --name chainmaker-go-contract -v ~/workspace/chainmaker-go-contract/:/home chainmakerofficial/chainmaker-go-contract:2.1.0 bash -c "while true; do echo hello world; sleep 5;done"docker run -d  --name chainmaker-go-contract -v /data/workspace/chainmaker-go-contract:/home chainmakerofficial/chainmaker-go-contract:2.1.0 bash -c "while true; do echo hello world; sleep 5;done"

4.2、编译合约

# 进入容器内部
docker exec -it chainmaker-go-contract bash
cd /home/
# 解压缩合约SDK源码
tar xvf /data/contract_go_template.tar.gz
cd contract_tinygo
# 编译main.go合约
sh build.sh# 生成合约的字节码文件在
/home/contract_tinygo/chainmaker-contract-go.wasm

五、部署合约

5.1、编译命令行工具

见官方文档: 命令行工具

实际生产系统还是用SDK方式:SDK

cd ~/workspace
git clone -b v2.3.2 https://git.chainmaker.org.cn/chainmaker/chainmaker-go.git
cd chainmaker-go/tools/cmc
go mod tidy
go build#拷贝sdk的配置文件和示例里cmc命令行需要使用的文件
cp -r ~/workspace/chainmaker-go/build/crypto-config/ ./testdata

5.2、执行创建合约

# --byte-code-path 可以是一个 wasm文件,也可以是一个go语言的docker-go虚拟机引擎的7z文件
./cmc client contract user create \
--contract-name=fact \
--runtime-type=WASMER \
--byte-code-path=./testdata/claim-wasm-demo/rust-fact-2.0.0.wasm \
--version=1.0 \
--sdk-conf-path=./testdata/sdk_config.yml \
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.key \
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.crt \
--sync-result=true \
--params="{}"

5.3、执行合约方法

./cmc client contract user invoke \
--contract-name=fact \
--method=save \
--sdk-conf-path=./testdata/sdk_config.yml \
--params="{\"file_name\":\"name007\",\"file_hash\":\"ab3456df5799b87c77e7f88\",\"time\":\"6543234\"}" \
--sync-result=true

5.4、查询合约

./cmc client contract user get \
--contract-name=fact \
--method=find_by_file_hash \
--sdk-conf-path=./testdata/sdk_config.yml \
--params="{\"file_hash\":\"ab3456df5799b87c77e7f88\"}"

六、常见问题

此处介绍部署、运行可能遇到的常见问题

6.1 编译时错误

编译chainmaker-go及chainmaker-cryptogen时可能出现的错误

unknown revision v2.0.0

Q:

go: chainmaker.org/chainmaker/pb-go@v2.0.0+incompatible: reading chainmaker.org/chainmker/pb-go/go.mod at revision v2.0.0: unknown revision v2.0.0

go: chainmaker.org/chainmaker/common@v2.0.0+incompatible: reading chainmaker.org/chainmker/common/go.mod at revision v2.0.0: unknown revision v2.0.0

go: chainmaker.org/chainmaker/protocol@v2.0.0+incompatible: reading chainmaker.org/chainmker/protocol/go.mod at revision v2.0.0: unknown revision v2.0.0

A:

原因:chainmaker.org域名可能记录为其他主机地址了,删除~/.ssh/known_hosts文件重试即可

misssing go.sum entry

Q:

如果执行 ./build_release.sh 时或者在启动时报错:misssing go.sum entry: to add it,分别在 chainmaker-go chainmaker-go/tools/cmc 下执行 go mod tidy,执行完后再重试

A:

原因:go1.16 版本 执行go build时会自动下载依赖,会更新mod文档,在go 1.16版本这一行为被禁止了。想要安装、更新依赖只能使用go get, go mod download, go mod tidy等命令,go build和go test将不会再做这类工作。

在go1.16版本中,想要自动更新依赖可以使用 go build -mod=mod,

进入对应go.mod文件所在目录执行go mod download

# chainmaker-go项目
cd  chainmaker-go/main
go mod downloadcd  chainmaker-go/common
go mod downloadcd  chainmaker-go/tools/cmc
go mod download# # chainmaker-cryptogen项目
cd  chainmaker-cryptogen/src
go mod download

6.2 启动时错误

not found GLIBC_2.18

Q:

若出现错误./chainmaker: /lib64/libc.so.6: version GLIBC_2.18’ not found (required by /root/git-code/chainmaker-go/module/vm/wasmer/wasmer-go/libwasmer.so)`

A:

在linux下可进入chainmaker-go/scripts/3rd目录安装glibc-2.18.tar.gz依赖

# 注:此操作为安装替换GCC版本,请慎重操作。一旦出错系统将不可用。
cd scripts/3rd
sh install.sh
restart.sh 权限不足

Q:

[root@localhost scripts]# ./cluster_quick_start.sh normal ===> Staring chainmaker cluster START ==> /home/wx/chainmaker/chainmaker-go/build/release/chainmaker-v2.0.0-wx-org1.chainmaker.org ./cluster_quick_start.sh: line 51: ./restart.sh: Permission denied

A:

如果启动时出现restart.sh 权限不足问题,给restart.sh 增加执行权限

给项目源文件添加执行权限

cd chainmaker-go/script/bin
chmod +x *.sh

给部署文件添加执行权限

# 进入四个节点的bin目录下 执行下面命令(以第一个节点 org1 为例)
cd chainmaker-go/build/release/chainmaker-V2.0.0-wx-org1.chainmaker.org/bin
chmod +x *.sh

6.3 运行时错误

syscall/js.valueGet not exported

Q:

执行gasm合约时报错:resolve imports: syscall/js.valueGet not exported in module env

A:

tinygo不支持fmt等函数

runtime type error | byte code validation failed

Q:

发送交易成功,但链打印错误信息:contract invoke failed, runtime type error, expect rust:[2], but got 4。同时根据该交易id查询到交易错误信息。

failed to create vm runtime, contract: contract_test, [contract_test], byte code validation failed

A:

执行交易时异步的(查询类交易除外),返回的状态为链成功接收到交易的状态。执行合约是,runtimeType选择错误,需要根据自己的合约语言选择对应的runtimeType。

byte code validation failed:可能原因:1、运行类型错误;2、wasm文件损坏;3、wasm文件非官网指定渠道编译

语言类型
系统合约RuntimeType_NATIVE = 1
rustRuntimeType_WASMER = 2
c++RuntimeType_WXVM = 3
tinygoRuntimeType_GASM = 4
solidityRuntimeType_EVM = 5
golangRuntimeType_DOCKER_GO = 6
返回成功,但实际执行失败

Q:

使用sdk执行安装、调用合约时,SDK 返回message为ok,但链和交易显示执行失败

A:

交易的执行是异步的。SDK返回的成功信息指的是链成功接收到该交易。

获取查看交易实际结果的方式:

  • 根据txId查询该交易,解析出结果。
  • 使用SDK是选择同步发送交易,等待执行结果。

6.4 其他关键信息

出块标记是什么

进入log目录,查看日志文件 筛选 put block即可

cat system.log|grep "ERROR\|put block"

其中一行解释如下:

2021-11-04 15:55:06.351 [INFO] [Storage] @chain1 blockstore_impl.go:363 chain[chain1]: put block[1] (txs:1 bytes:15946), time used (mashal:0, log:1, blockdb:0, statedb:0, historydb:0, resultdb:0, contractdb:0, batchChan:0, total:1)

时间 [日志级别] [模块] @链名称 文件名.go:行数 链chain[链名称]:put block[区块高度](txs:交易个数 bytes:区块大小), 使用时间毫秒(mashal:0, log:1, blockdb:0, statedb:0, historydb:0, resultdb:0, contractdb:0, batchChan:0, total:1)

组网成功标记是什么

组网成功后,即可发送交易。此时接收到的交易将进入到交易池当中,并且会广播给网络的每一个节点(共识、同步节点、轻节点),随后等待共识成功选举leader开始打包区块。

启动成功日志:init blockchain[chain1] success

多节点时,组网成日志:all necessary peers connected

SOLO共识

cat system.log|grep "init blockchain\[chain1\] success"

其他多节点共识

cat system.log|grep "init blockchain\[chain1\] success\|all necessary peers connected"




七、多机部署

7.1、多机部署与单机部署区别

1、执行prepare.sh之前需要修改

配置指定端口(可不改)

配置指定IP

2、./prepare.sh

3、./build_release.sh

4、后续上传各节点安装包,到指定的服务器上,部署解压后使用。

5、进入解压文件夹 bin目录,执行 ./restart.sh

如果需要配置自拉起方式启动,请参考:【自拉起服务】

  • 配置指定端口

配置文件路径:chainmaker-go/config/config_tpl/chainmaker.yml

使用prepare.sh脚本会自动生成端口号,如果实际环境需要固定端口,可以通过修改下面的配置,将{xxx}修改为指定的端口,后续执行脚本时,就不会进行端口的修改。

rpc: port: {rpc_port}net: listen_addr: /ip4/0.0.0.0/tcp/{net_port}
  • 配置指定IP

配置文件路径:chainmaker-go/config/config_tpl/bc_xxx.ymlxxx是节点数,根据需要,选择特定节点数的模板。

127.0.0.1修改为集群各个节点实际所在机器的IP地址。也可使用域名

#共识配置
consensus:# 共识类型(0-SOLO,1-TBFT,2-MBFT,3-HOTSTUFF,4-RAFT,10-POW)type: {consensus_type}# 共识节点列表,组织必须出现在trust_roots的org_id中,每个组织可配置多个共识节点,节点地址采用libp2p格式nodes:- org_id: "{org1_id}"address:- "/ip4/127.0.0.1/tcp/{org1_port}/p2p/{org1_peerid}"- org_id: "{org2_id}"address:- "/ip4/127.0.0.1/tcp/{org2_port}/p2p/{org2_peerid}"- org_id: "{org3_id}"address:- "/ip4/127.0.0.1/tcp/{org3_port}/p2p/{org3_peerid}"- org_id: "{org4_id}"address:- "/ip4/127.0.0.1/tcp/{org4_port}/p2p/{org4_peerid}"

7.2、单机&多机部署对照表

操作单机多机
同步时间/手动同步时间,不需要太精确1分钟以内
下载源码git clone xxx-chainmaer-go
git clone xxx-chainmaker-cryptogen
一致
编译证书工具cd chainmaker-cryptogen
make
cd chainmaker-go/tools
ln -s …/…/chainmaker-cryptogen/ .
一致
进入脚本目录cd chainmaker-go/scripts一致
生成证书./prepare.shchainmaker-go/config/config_tpl/chainmaker.yml
配置指定端口
chainmaker-go/config/config_tpl/bc_xxx.yml
配置指定IP
./prepare.sh
生成节点安装包./build_release.sh一致
启动节点./cluster_quick_start.sh normal上传chainmaker-xxxx-x86_64.tar.gz到各自服务器
解压缩
进入到chainmaker-xxxx/bin目录
sh restart.sh

这篇关于长安链从零到一部署-chainmaker-v2.3.2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/709867

相关文章

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee