meowrain

MeowRain

Life is Simple

Nginx 编译安装

参考 https://blog.csdn.net/weixin_59298892/article/details/134988500 下载源码包 1 2 wget https://nginx.org/download/nginx-1.26.2.tar.gz tar -zxvf nginx-1.26.2.tar.gz 安装编译必须库 1 2 sudo apt install build-essential sudo apt install gcc libpcre3 libpcre3-dev zlib1g-dev libssl-dev openssl 配置 1 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 2. 安装路径: Nginx 的安装路径为 /usr/local/nginx。 可执行文件(二进制文件)位于 /usr/local/nginx/sbin/nginx。 模块路径为 /usr/local/nginx/modules。 配置文件路径为 /usr/local/nginx/conf。 主配置文件为 /usr/local/nginx/conf/nginx.conf。 PID 文件(进程 ID 文件)为 /usr/local/nginx/logs/nginx.pid。 错误日志文件为 /usr/local/nginx/logs/error.

WSL2中安装Arch

这里你应该已经成功安装wsl了 没安装的见这个 https://learn.microsoft.com/zh-cn/windows/wsl/install https://learn.microsoft.com/zh-cn/windows/wsl/install#upgrade-version-from-wsl-1-to-wsl-2 下载相关文件 https://github.com/yuk7/ArchWSL/releases 解压后,我们打开终端,执行Arch.exe,会自动安装 里面的ext4.vhdx是安装后生成的 配置 首先在终端进入Arch.exe 然后配置密码 1 passwd 输入两次你的密码 然后我们配置 sudo 权限 1 echo "%wheel ALL=(ALL) ALL" > /etc/sudoers.d/wheel 添加用户 1 useradd -m -G wheel -s /bin/bash {username} 设置默认用户密码 1 passwd {username} 设置Arch.exe默认启动的用户 1 Arch.exe config --default-user {username} 配置pacman 自动设置镜像 1 2 3 curl -l -O "https://raw.githubusercontent.com/LS-KR/Arch-Install-Shell-Stable/main/ustc-mirror.sh" sudo sh ./ustc-mirror.sh 配置pacman 1 2 3 4 5 6 7 sudo pacman-key --init sudo pacman-key --populate sudo pacman -Syy archlinux-keyring sudo pacman -Su 更新系统软件包

Go Jwt

参考 https://juejin.cn/post/7342766597243207715?searchId=20240903160011693AB9B562C29F25EA11 http://ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html JWT 介紹 JWT 即 JSON web Token ,用於在網絡應用環境中安全地傳遞聲明claims JWT 是一种紧凑且自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。由于其信息是经过数字签名的,所以可以确保发送的数据在传输过程中未被篡改。 JWT 組成結構 JWT 由三个部分组成,它们之间用 . 分隔,格式如下:Header.Payload.Signature、 Header: Header部分用於描述該JWT的基本信息,比如其類型和所使用的算法 Payload(負載): Payload部分包含所傳遞的聲明,聲明是關於實體和其他數據的語句。聲明能分爲三種類型: > 注冊聲明 > 公共聲明 > 私有聲明 > Signature(簽名): 为了防止数据篡改,将头部和负载的信息进行一定算法处理,加上一个密钥,最后生成签名。如果使用的是 HMAC SHA256 算法,那么签名就是将编码后的头部、编码后的负载拼接起来,通过密钥进行HMAC SHA256 运算后的结果。 Signature 部分是对前两部分的签名,防止数据篡改。 首先,需要指定一个密钥(secret)。这个密钥只有服务器才知道,不能泄露给用户。然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名。 HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret) 算出签名以后,把 Header、Payload、Signature 三个部分拼成一个字符串,每个部分之间用"点"(.)分隔,就可以返回给用户。 實際使用 安裝go-jwt 1 go get -u github.com/golang-jwt/jwt/v5 创建 Token(JWT) 对象 生成 JWT 字符串首先需要创建 Token 对象(代表着一个 JWT)。因此我们需要先了解如何创建 Token 对象。

Golang使用bcrypt实现密码加密和验证

golang使用bcrypt实现密码加密和验证 介绍 把用户的密码存入数据库的时候,我们当然不能使用明文存储,要对密码进行一次加密,然后再存储到数据库中。 我们一般采用哈希算法实现对密码的加密,因为哈希算法得到的加密数据是不可逆的 哈希算法(Hash Algorithm)是一种将任意长度的数据映射为固定长度数据的算法。哈希算法广泛应用于数据完整性校验、密码存储、数字签名等领域。以下是一些常见的哈希算法: 简单的哈希算法 1. MD5 (Message Digest Algorithm 5) 输出长度: 128位(16字节) 特点: 速度快,但安全性较低,容易受到碰撞攻击。 应用: 文件校验、旧版密码存储。 2. SHA-1 (Secure Hash Algorithm 1) 输出长度: 160位(20字节) 特点: 安全性较MD5高,但仍存在碰撞风险。 应用: 数字签名、SSL证书。 3. SHA-2 (Secure Hash Algorithm 2) 子算法: SHA-224, SHA-256, SHA-384, SHA-512 输出长度: 224位、256位、384位、512位 特点: 安全性高,广泛使用。 应用: 数字签名、SSL/TLS、区块链。 4. SHA-3 (Secure Hash Algorithm 3) 子算法: SHA3-224, SHA3-256, SHA3-384, SHA3-512 输出长度: 224位、256位、384位、512位 特点: 基于Keccak算法,与SHA-2结构不同,安全性高。 应用: 数字签名、密码存储。 5. RIPEMD-160 (RACE Integrity Primitives Evaluation Message Digest 160) 输出长度: 160位(20字节) 特点: 安全性较高,常用于比特币地址生成。 应用: 数字签名、区块链。 6.

Electron項目因爲eslint配置原因報require錯誤解決

找到.eslintrc.cjs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /* eslint-env node */ require('@rushstack/eslint-patch/modern-module-resolution') module.exports = { root: true, 'extends': [ 'plugin:vue/vue3-essential', 'eslint:recommended', '@vue/eslint-config-typescript', '@vue/eslint-config-prettier/skip-formatting' ], parserOptions: { ecmaVersion: 'latest' }, rules: { "no-undef": "off" } } 添加 1 2 3 rules: { "no-undef": "off" } 就可以了

Electron引入和使用sqlite

安裝sqlite 1 npm i sqlite3 在main.js中使用ipcMain創建相關函數 記住要導入包 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 app.whenReady().then(() => { createWindow() dbInit() }) const sqlite3 = require('sqlite3').verbose() let db const dbInit = () => { // Ensure the directory exists const dbPath = path.

Vue項目導入Electron

https://juejin.cn/post/7360899424107970586#heading-3 https://juejin.cn/post/7163088791007068191 安裝vue 1 npm create vue@latest 安裝electron 在安装 electron之前需要先配置一下 安装源 新建一个 .npmrc文件 windows的.npmrc在C:\Users\yourname Linux在用戶家目錄下 1 2 3 4 5 proxy=http://127.0.0.1:2080 home=https://www.npmjs.org registry=https://registry.npmjs.org/ https-proxy=http://127.0.0.1:2080 electron_mirror=https://npmmirror.com/mirrors/electron/ 我這裏不僅設置了electron的mirror,還設置了npm的代理,防止下載出現問題 然後我們安裝electron 1 npm install --save-dev electron 安装electron-builder 用于打包可安装exe程序和绿色版免安装exe程序 1 npm install -D electron-builder 用vite构建electron应用程序需要一个vite插件 1 npm install -D electron-devtools-installer 安裝vite配套electron的插件 1 npm install vite-electron-plugin vite-plugin-electron-renderer -D 接下來我們新建一個electron目錄 在electron目錄裏面創建一個index.ts,用於配置electron 這個目錄裏的ts文件後面會被編譯為js文件,放在dist-electron目錄中 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 // src-electron/main.

Vite中加载环境变量

介绍 公共变量 Vite 在一个特殊的 import.meta.env 对象上暴露环境变量,这些变量在构建时会被静态地替换掉。 加载的环境变量也会通过 import.meta.env 以字符串形式暴露给客户端源码。 为了防止意外地将一些环境变量泄漏到客户端,只有以 VITE_ 为前缀的变量才会暴露给经过 vite 处理的代码。例如下面这些环境变量: 1 2 VITE_SOME_KEY=123 DB_PASSWORD=foobar 只有 VITE_SOME_KEY 会被暴露为 import.meta.env.VITE_SOME_KEY 提供给客户端源码,而 DB_PASSWORD 则不会。 1 2 console.log(import.meta.env.VITE_SOME_KEY) // "123" console.log(import.meta.env.DB_PASSWORD) // undefined 默认情况下,Vite 在 vite/client.d.ts 中为 import.meta.env 提供了类型定义。随着在 .env[mode] 文件中自定义了越来越多的环境变量,你可能想要在代码中获取这些以 VITE_ 为前缀的用户自定义环境变量的 TypeScript 智能提示。 见下面额外配置 .env文件 使用 带VITE的普通使用方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 login.

跨域问题以及解决方案

什么是跨域 跨域:浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。 在前后端分离的模式下,前后端的域名是不一致的,此时就会发生跨域访问问题。跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号(如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的。而axios是通过Promise实现对ajax技术的一种封装,也同样存在跨域问题。 解决方案 后端修改响应头 原理: 通过在后端服务器的响应头中添加 Access-Control-Allow-Origin 字段,允许指定域名或通配符下的前端访问资源。 优点: 简单易行,直接在后端代码中修改即可,无需额外配置。 缺点: 需要后端配合修改代码,对于跨域请求的控制力度有限。 前端反向代理 原理: 使用前端代理服务器,将跨域请求转发到目标服务器,然后将响应结果返回给前端。 优点: 无需后端配合,前端可以完全控制跨域请求,灵活度高。 缺点: 需要额外的代理服务器配置,可能会增加前端开发的复杂度。 vite配置 Vite 的 server 选项主要用于配置开发服务器,其中包含 proxy 属性,可以用来设置反向代理规则。 通过 proxy 属性,你可以将开发环境中的某些请求转发到其他服务器,从而解决跨域问题,或者访问不同的 API 服务。 举个例子,假设你想要将 /api 路径下的所有请求转发到 http://localhost:3000 服务器,你可以在 vite.config.js 文件中添加以下配置: 1 2 3 4 5 6 7 8 9 10 11 12 13 import { defineConfig } from 'vite'; export default defineConfig({ server: { proxy: { '/api': { target: 'http://localhost:3000', changeOrigin: true, rewrite: (path) => path.

Docker不用sudo报权限问题解决方法

docker 报permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock 解决办法 这是最常见的解决方法。将你的用户添加到 docker 用户组,就可以获得访问 Docker daemon socket 的权限。 查看当前用户所在的组: 1 groups 将用户添加到 docker 组 (需要 root 权限): 1 sudo usermod -aG docker $USER 重启 shell 或重新登录: 使更改生效。
0%