构建fastapi docker

进入文件路径 /home/fenxiang/nsgkapi 就修改后的文件上传 构建docker 命令 docker build -t kulipa/nsgkapi . 运行docker docker run -d --network api --name nsgkapi kulipa/nsgkapi 登录docker docker login 推送到dockerhub命令 docker push Kulipa/nsgkapi:latest 拉取命令 docker pull kulipa/nsgkapi:latest

2025年3月23日 · 1 分钟 · Creeper

开源模型搭建

本地部署 DeepSeek-R1 大模型! **1、本地部署,**我们可以通过Ollama来进行安装 Ollama 官方版:【点击前往】 Web UI 控制端【点击安装】 安装命令 1.5B Qwen DeepSeek R1 ollama run deepseek-r1:1.5b 7B Qwen DeepSeek R1 ollama run deepseek-r1:7b 8B Llama DeepSeek R1 ollama run deepseek-r1:8b 14B Qwen DeepSeek R1 ollama run deepseek-r1:14b 32B Qwen DeepSeek R1 ollama run deepseek-r1:32b 70B Llama DeepSeek R1 ollama run deepseek-r1:70b

2025年1月28日 · 1 分钟 · Creeper

fastapi用户模型备份

用户模型 用户的信息: 姓名 性别 # -*- coding:utf-8 -*- """ @Des: 基础模型 """ from tortoise import fields from tortoise.models import Model class TimestampMixin(Model): create_time = fields.DatetimeField(auto_now_add=True, description='创建时间') update_time = fields.DatetimeField(auto_now=True, description="更新时间") class Meta: abstract = True class UserWechat(TimestampMixin): city = fields.CharField(null=True, max_length=255, description='城市') country = fields.CharField(null=True, max_length=255, description='国家') headimgurl = fields.CharField(null=True, max_length=255, description='微信头像') nickname = fields.CharField(null=True, max_length=255, description='微信昵称') openid = fields.CharField(unique=True, max_length=255, description='openid') unionid = fields.CharField(unique=True, null=True, max_length=255, description='unionid') province = fields.CharField(null=True, max_length=255, description='省份') sex = fields.IntField(null=True, description='性别') user: fields.OneToOneRelation["UserWechat"] = \ fields.OneToOneField("base.User", related_name="wechat", on_delete=fields.CASCADE) class Meta: table_description = "用户微信" table = "user_wechat" class User(TimestampMixin): role: fields.ManyToManyRelation["Role"] = \ fields.ManyToManyField("base.Role", related_name="user", on_delete=fields.CASCADE) username = fields.CharField(null=True, max_length=20, description="用户名") user_type = fields.BooleanField(default=False, description="用户类型 True:超级管理员 False:普通管理员") password = fields.CharField(null=True, max_length=255) nickname = fields.CharField(default='binkuolo', max_length=255, description='昵称') user_phone = fields.CharField(null=True, description="手机号", max_length=11) user_email = fields.CharField(null=True, description='邮箱', max_length=255) full_name = fields.CharField(null=True, description='姓名', max_length=255) user_status = fields.IntField(default=0, description='0未激活 1正常 2禁用') header_img = fields.CharField(null=True, max_length=255, description='头像') sex = fields.IntField(default=0, null=True, description='0未知 1男 2女') remarks = fields.CharField(null=True, max_length=30, description="备注") client_host = fields.CharField(null=True, max_length=19, description="访问IP") wechat: fields.OneToOneRelation[UserWechat] class Meta: table_description = "用户表" table = "user" class Role(TimestampMixin): user: fields.ManyToManyRelation[User] role_name = fields.CharField(max_length=15, description="角色名称") access: fields.ManyToManyRelation["Access"] = \ fields.ManyToManyField("base.Access", related_name="role", on_delete=fields.CASCADE) role_status = fields.BooleanField(default=False, description="True:启用 False:禁用") role_desc = fields.CharField(null=True, max_length=255, description='角色描述') class Meta: table_description = "角色表" table = "role" class Access(TimestampMixin): role: fields.ManyToManyRelation[Role] access_name = fields.CharField(max_length=15, description="权限名称") parent_id = fields.IntField(default=0, description='父id') scopes = fields.CharField(unique=True, max_length=255, description='权限范围标识') access_desc = fields.CharField(null=True, max_length=255, description='权限描述') menu_icon = fields.CharField(null=True, max_length=255, description='菜单图标') is_check = fields.BooleanField(default=False, description='是否验证权限 True为验证 False不验证') is_menu = fields.BooleanField(default=False, description='是否为菜单 True菜单 False不是菜单') class Meta: table_description = "权限表" table = "access" class AccessLog(TimestampMixin): user_id = fields.IntField(description="用户ID") target_url = fields.CharField(null=True, description="访问的url", max_length=255) user_agent = fields.CharField(null=True, description="访问UA", max_length=255) request_params = fields.JSONField(null=True, description="请求参数get|post") ip = fields.CharField(null=True, max_length=32, description="访问IP") note = fields.CharField(null=True, max_length=255, description="备注") class Meta: table_description = "用户操作记录表" table = "access_log" class SystemParams(TimestampMixin): params_name = fields.CharField(unique=True, max_length=255, description="参数名") params = fields.JSONField(description="参数") class Meta: table_description = "系统参数表" table = "system_params"

2024年10月23日 · 2 分钟 · Creeper

mklink的使用

mklink 是 Windows 操作系统中的命令行工具,用于创建符号链接(symbolic link)或硬链接(hard link)。这两种链接类型都是文件系统中的对象引用,它们允许将一个文件或目录链接到另一个位置,而无需复制实际的数据。 符号链接(Symbolic Link): 符号链接是一种指向目标文件或目录的快捷方式。它类似于快捷方式(Shortcut),但是在操作系统级别上更为透明。 符号链接可以链接到文件或目录,甚至可以链接到网络位置。 符号链接支持相对路径和绝对路径。 例如,创建符号链接的命令如下: mklink /d [目标] [源] 其中 /d 表示创建目录的符号链接,[目标] 是新链接的路径,[源] 是源文件或目录的路径。 硬链接(Hard Link): 硬链接是在文件系统中创建的两个或多个文件条目,它们都指向相同的实际数据块。 硬链接只能链接到同一文件系统中的文件,并且不能链接到目录。 删除原始文件不会删除硬链接,只有在删除所有硬链接后,实际数据块才会被释放。 例如,创建硬链接的命令如下: mklink [目标] [源] [目标] 是新链接的路径,[源] 是源文件的路径。 这些链接可以用来简化文件和目录的组织,创建备份,或者在不同位置共享相同的数据。需要注意的是,创建符号链接和硬链接通常需要管理员权限。 mklink /j 是 Windows 操作系统中的命令,用于创建一个目录的符号链接,也被称为“联接”(junction)。这个命令的作用是在文件系统中创建一个目录的符号链接,使得该链接指向另一个目录,而不是一个文件。这类似于硬链接,但是是针对目录的链接。 具体的命令格式如下: mklink /j [目标] [源] 其中: /j 表示创建目录的符号链接。 [目标] 是新链接的路径,即符号链接将被创建的位置。 [源] 是源目录的路径,即符号链接将指向的位置。 这种符号链接的创建可以使得一个目录的内容在文件系统中出现在多个位置,而实际上只占用一份磁盘空间。这在一些情况下是很有用的,例如,你可能想要在不同的位置使用相同的数据,但不想在每个位置都复制整个目录的内容。符号链接允许你在这些位置之间共享相同的目录结构。 需要注意的是,创建符号链接通常需要管理员权限。 mklink /d 和 mklink /j 是 Windows 操作系统中用于创建符号链接的两个不同的选项,它们主要用于链接目录。以下是它们之间的主要区别: 目标存在时的行为: /d: 创建目录的符号链接。可以链接到一个已经存在的目录,但要求目标目录不存在。即,如果目标目录已经存在,无法创建 /d 类型的符号链接。 /j: 创建目录的符号链接(联接)。可以链接到一个已经存在的目录,并且不要求目标目录不存在。如果目标目录已经存在,/j 会将链接指向现有目录,而不创建新目录。 支持的文件系统: /d: 可以在所有支持 NTFS 文件系统的版本上使用。 /j: 主要用于支持 NTFS 文件系统的版本,特别是用于链接目录到一个卷(卷是文件系统上的一个单独的逻辑存储单元)。 用途: ...

2024年1月13日 · 1 分钟 · Creeper

解决一个Windows下启动项重复的问题

解决一个Windows下启动项重复的问题 ​ 我喜欢Windows在运行的时候,任务管理器出现在右下的系统托盘里,便于监视系统的运行情况。为了能够开机自动运行任务管理器,我在”开始菜单”–>“程序”–>“启动”项中增加了指向任务管理器(taskmgr.exe)的快捷方式。这时问题出现了,当我开机的时候,taskmgr.exe会运行两次。 ​ 运行Windows自动的工具msconfig,发现startup栏中有两条taskmgr记录: taskmgr C:\WINDOWS\System32\taskmgr.exe Common Startup taskmgr C:\WINDOWS\System32\taskmgr.exe Startup ​ 为什么会出现Common Startup和Startup这两条记录呢?通过搜索互联网,我找到 参考资料一。这篇文件详细介绍了msconfig中的这些startup记录是如何来的,自然也讲到了Common Startup和Startup的由来:(假设我登录Windows的用户名是tom) ​ 1. Common Startup对应C:\Documents and Settings\ All Users\Start Menu\Programs\Startup目录下的项; ​ 2. Startup对应C:\Documents and Settings\tom\Start Menu\Programs\Startup目录下的项。 ​ 文章还给出了一种验证的方法:右击“开始菜单”–>“程序”–>“启动”,在弹出的上下文菜单中,单击最上面的“打开”项,出来的目录是对应Startup项的;如果单击第二项“打开所有用户”,出来的目录是对应Common Startup项的。奇怪的是,我按照这种验证方法,出来目录的全都是指向All Users,没有指向tom这个用户的,这也是taskmgr.exe会运行两次的根本原因。 ​ 继续上网查找,找到了 参考资料二,里面的大牛指出了上述行为是受注册表控制的。我打开我的注册表,看到了下面两条: [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ Shell Folders] Start Menu = C:\Documents and Settings\All Users\Start Menu Startup = C:\Documents and Settings\All Users\Start Menu\Programs\Startup [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ User Shell Folders] Start Menu = %ALLUSERSPROFILE%\Start Menu Startup = %ALLUSERSPROFILE%\Start Menu\Programs\Startup ​ 很明显,第一条Shell Folders对应的是Common Startup,第二User Shell Folders条对应的是Startup。因为%ALLUSERSPROFILE%等于C:\Documents and Settings\All Users,所以我系统里的Common Startup和Startup指向了同一目录。 ...

2023年12月16日 · 1 分钟 · Creeper

OpenWrt的编译和使用

OpenWrt的编译和使用 lede仓库源码和教程 OpenWrt的编译和使用 Flippy 的 Openwrt 打包源码 Flippy 的 Openwrt 打包源码 passwall仓库 kenzok8 仓库 里面有armbian和openwrt以及内核 ophub 注意 不要用 root 用户进行编译 国内用户编译前最好准备好梯子 默认登陆IP 192.168.1.99 密码 password 编译命令 首先装好 Linux 系统,推荐 Debian 11 或 Ubuntu LTS 安装编译依赖 sudo apt update -y sudo apt full-upgrade -y sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \ bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \ git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \ libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \ mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools \ libpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip \ vim wget xmlto xxd zlib1g-dev python3-setuptools 下载源代码,更新 feeds 并选择配置 git clone https://github.com/coolsnowwolf/lede cd lede ./scripts/feeds update -a ./scripts/feeds install -a make menuconfig 下载 dl 库,编译固件 (-j 后面是线程数,第一次编译推荐用单线程) make download -j8 make V=s -j1 本套代码保证肯定可以编译成功。里面包括了 R23 所有源代码,包括 IPK 的。 ...

2023年10月22日 · 3 分钟 · Creeper