DeepSeek本地快捷部署

本地部署的优势:

  • 数据隐私保护:本地部署DeepSeek可以确保数据不会离开本地服务器,大大提高了数据的安全性,避免了数据泄露的风险。

  • 灵活定制:可以根据业务需求灵活调整模型的参数和功能,满足特定的业务场景需求。

  • 离线使用:无需依赖网络,随时随地都能调用AI能力,特别适合没有稳定网络连接的环境。

部署过程

一、安装Ollama

Ollama 是一个开源工具,旨在帮助你在本地轻松运行和部署大型语言模型。以下是安装 Ollama 的步骤:

  • 访问 Ollama 的官方网站的下载页面

  • 在下载页面选择适合你操作系统环境(Windows、Mac 或 Linux)的安装包。完成下载后,双击安装文件,按照提示一步步完成安装过程。
    对于大多数环境来说,最简便的方法是通过一个简单的命令完成安装:

curl -fsSL https://ollama.com/install.sh | sh
  • 最后,打开终端,输入以下命令来验证 Ollama 是否成功安装
ollama --version

这将显示当前安装的 Ollama 版本信息,如出现以下信息则安装顺利完成。

二、下载模型

  • 模型选择
    自己部署一般下载的模型有1.5B到70B的,可以对照自己的机器配置来进行相关模型的下载与安装

    模型大小 参数量 显存需求 (GPU) CPU 和内存需求 适用场景
    1.5B 15亿 2-4 GB 8 GB 内存 低端设备,轻量推理
    7B 70亿 8-12 GB 16 GB 内存 中端设备,通用推理
    8B 80亿 10-16 GB 16-32 GB 内存 中高端设备,高性能推理
    14B 140亿 16-24 GB 32 GB 内存 高端设备,高性能推理
    32B 320亿 32-48 GB 64 GB 内存 高端设备,专业推理
    70B 700亿 64 GB+ 128 GB 内存 顶级设备,大规模推理
    671B 6710亿 多 GPU (80 GB+) 256 GB+ 内存 超大规模推理,分布式计算
  • 模型下载

  1. 在终端使用ollmam run命令直接下载
    比如要下载1.5b的模型,使用命令:
ollama run deepseek-r1:1.5b

下载过程如图所示:

下载完成后,自动运行了模型,可以随便问一个问题试试:

自此模型简易的搭建就结束了

三、web ui搭建

这里为了方便,直接使用浏览器扩展,推荐 Page Assist 这个扩展,直接搜索安装即可
快捷链接: Edge浏览器扩展链接 Firefox浏览器扩展链接
扩展安装完成后点击浏览器栏的扩展图标,选择Page Assist

在右上角的设置里可以把页面语言改为中文


然后点击左上角的新聊天,就可以开始对话了,有下载了多个模型的,可以选择不同的模型

扩展支持网页搜索

我打开网络搜索问了一下今天是哪一天(写文章这里时是3月18号)
他能正常理解是3月18号

tcpdump抓取指定返回码的http网络包

tcpdump -i any -A -s 0 -n 'port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450) and (tcp[((tcp[12:1] & 0xf0) >> 2)+4:4] = 0x2f312e31) and (tcp[((tcp[12:1] & 0xf0) >> 2)+8:4] = 0x20323030)'

前面的参数比较简单,就不再详细说明了,我们关注下后面被单引号包裹起来的那串长长的让人有点懵逼的过滤表达式:

port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450) and (tcp[((tcp[12:1] & 0xf0) >> 2)+4:4] = 0x2f312e31) and (tcp[((tcp[12:1] & 0xf0) >> 2)+8:4] = 0x20323030)

其中and起到的作用是逻辑运算里面的与操作符,我们把这个表达式分成四个部分:

port 80
这个比较好理解,意思就是说抓取发往80端口和从80端口回来的包;

tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450
这段等式的前半段比较复杂,等式左边表达的意思是tcp数据包开头的四个字节,等式右边其实是ascii字符编码,查阅下ascii字符编码表(在linux系统可以直接通过man ascii查阅ascii字符编码表),0x48545450其实就是HTTP
那么这个等式的意思就是:tcp数据段的头四个字节 = HTTP,也就是说,我们抓取的是HTTP包;

tcp[((tcp[12:1] & 0xf0) >> 2)+4:4] = 0x2f312e31
类似于前面的表达式,表达的意思是:tcp数据段的头四个字节之后出现的四个字节 = /1.1,即http的版本,上面解析出来的HTTP连起来就是HTTP/1.1

tcp[((tcp[12:1] & 0xf0) >> 2)+8:4] = 0x20323030
这段表达式的意思是:tcp数据段的头八个字节之后出现的四个字节 = ‘ 200’

那现在我们来总结下,前面那段垄长的表达式的意思其实比较简单:tcp数据段的前12个字节 = HTTP/1.1 200
这其实就是HTTP响应报文的起始行。

那么tcp[((tcp[12:1] & 0xf0) >> 2):4]这种表达式该怎么理解呢?
我们对这段表达式做一个拆分:
tcp[12:1]
tcp[12:1] & 0xf0
(tcp[12:1] & 0xf0) >> 2
((tcp[12:1] & 0xf0) >> 2):4
第一,tcp[12:1],参考tcp表达式的语法解释,tcp[x:y]表示的意思是:从tcp报文的第x字节(不包括第x字节)之后,读取y个字节,那么tcp[12:1]的意思就是说:读取tcp报文的第12个字节后的一个字节,也就是第13个字节,那么tcp报文的第13个字节是什么呢?来看下tcp报文的结构图:

上面的每一行是32位,也就是4个字节,第13个字节,也就是:4位头部长度 + 6位保留的前四位;

第二,tcp[12:1] & 0xf0, 其实就是把tcp报文的第13个字节读取出来,前四位也就是tcp头部里面的4位头部长度,后四位填充4个0,也就是左移了四位的tcp报文的头部长度,因为我们多读取了后面四位;

第三,(tcp[12:1] & 0xf0) >> 2,为什么要右移两位呢?如果我们要得到tcp报文头部的长度,应该要相应地右移四位对不对,因为前面我们多读了四位。但是,tcp报文头部里面的4位头部长度其实是tcp有多少个4字节。那么,如果我们要得到tcp报文到底有多少个字节的话,要再左移两位

所以,先右移四位去掉向后多读的四位,再左移两位从有多少个4字节换算成有多少个字节,总共就是右移两位。
也就是,(tcp[12:1] & 0xf0) >> 2 tcp头部有多少个字节

第四,((tcp[12:1] & 0xf0) >> 2):4,结合1里面的表达式来理解,意思比较清楚了,读取tcp头部之后的数据段的前四个字节!

那么,tcp数据段开头的四个字节是什么?我们来看下tcp/ip四层协议下的包结构:

在这里,我们记住一点就是,下层的协议数据是在上层的整个包体结构上加上自己的头部,类似于下面的等式关系:

tcp = http + tcp_header

ip = tcp + ip_header

ip = http + tcp_header + ip_header

如果最上层的应用层协议是http协议的话,那么参考http响应包报文:

前12个字节恰好就是HTTP的版本+状态码

下面是使用上面的tcpdump命令示例抓取到的测试机响应报文:

说了这么多,是不是觉得根据http的返回码来抓包还是有点复杂呢,要每次手撸那串表达式估计也是蛮蛋疼的。其实我们可以用shell脚本对tcpdump再进一步封装成httpdump,输入参数就是你想抓取的返回码:
比如这个脚本文件名叫dump.sh,执行
./dump.sh 200
脚本内容参考:

#!/bin/sh

#将输入的http返回码转换成ascii码
code=`echo 1 | hexdump -C | awk '{print234}' | grep -Ev "^"`

#抓包
sudo tcpdump -i any -A -s 0 -n "port 80 and (tcp[((tcp[12:1]&0xf0) >> 2):4] = 0x48545450) and (tcp[((tcp[12:1]&0xf0) >> 2)+4:4] = 0x2f312e31) and (tcp[((tcp[12:1]&0xf0) >> 2)+8:4] = 0x20code)"