-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontent.json
1 lines (1 loc) · 22.3 KB
/
content.json
1
{"meta":{"title":"aHangssBlog","subtitle":"编程菜鸟","description":"aHang的个人博客","author":"魔鬼筋肉人","url":"https://me.ahang.icu","root":"/"},"pages":[{"title":"关于","date":"2024-06-23T16:00:00.000Z","updated":"2024-09-22T11:45:36.279Z","comments":false,"path":"about/index.html","permalink":"https://me.ahang.icu/about/index.html","excerpt":"","text":"内容我还在想😒…"},{"title":"即刻","date":"2024-06-27T14:05:11.000Z","updated":"2024-09-22T11:45:36.279Z","comments":true,"path":"essay/index.html","permalink":"https://me.ahang.icu/essay/index.html","excerpt":"","text":""},{"title":"文章标签","date":"2024-06-23T16:00:00.000Z","updated":"2024-09-22T11:45:36.279Z","comments":false,"path":"tags/index.html","permalink":"https://me.ahang.icu/tags/index.html","excerpt":"","text":""},{"title":"全部分类","date":"2024-06-23T16:00:00.000Z","updated":"2024-09-22T11:45:36.279Z","comments":true,"path":"categories/index.html","permalink":"https://me.ahang.icu/categories/index.html","excerpt":"","text":""}],"posts":[{"title":"win11professionalactive","slug":"win11professionalactive","date":"2024-09-22T11:53:20.000Z","updated":"2024-09-22T12:28:05.728Z","comments":true,"path":"2024/09/22/win11professionalactive/","permalink":"https://me.ahang.icu/2024/09/22/win11professionalactive/","excerpt":"","text":"win11 kms激活kms服务器 kms.03k.org 2024.8.30 测试可行 在powershell或cmd中键入: 123slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GXslmgr /skms kms.03k.orgslmgr /ato","categories":[{"name":"其他","slug":"其他","permalink":"https://me.ahang.icu/categories/%E5%85%B6%E4%BB%96/"}],"tags":[{"name":"win11专业版激活","slug":"win11专业版激活","permalink":"https://me.ahang.icu/tags/win11%E4%B8%93%E4%B8%9A%E7%89%88%E6%BF%80%E6%B4%BB/"}]},{"title":"自用工具合集","slug":"自用工具合集","date":"2024-08-10T16:36:31.000Z","updated":"2024-09-22T11:45:36.279Z","comments":true,"path":"2024/08/11/自用工具合集/","permalink":"https://me.ahang.icu/2024/08/11/%E8%87%AA%E7%94%A8%E5%B7%A5%E5%85%B7%E5%90%88%E9%9B%86/","excerpt":"","text":"本文记录我收藏的一些 有趣🤡|生产力🆙|独特🧐 的开源工具。基本上都是我正在使用的工具。 终端oh-my-zsh 客制化shell终端。多种主题任选 github sdkman linux,macos上的绝佳sdk管理工具 github scoop win上的绝佳sdk/软件管理工具 github lazydocker 管理docker的TUI,支持鼠标点击 github lazygit 管理git的TUI,支持鼠标点击 github fd 一个简单,快速,友好的 “find” 命令替代 github WEB|桌面tabby ssh客户端。Termius平替 github excalidraw 手绘风格的开源画板 github drawio UML画图工具。Processon平替 github screenshot-to-code 通过截图生成前端页面代码 github marktext markdown编辑器。Typora平替 github","categories":[{"name":"工具","slug":"工具","permalink":"https://me.ahang.icu/categories/%E5%B7%A5%E5%85%B7/"}],"tags":[{"name":"自用工具","slug":"自用工具","permalink":"https://me.ahang.icu/tags/%E8%87%AA%E7%94%A8%E5%B7%A5%E5%85%B7/"}]},{"title":"git checkout检出文件","slug":"article5","date":"2024-07-18T14:01:04.000Z","updated":"2024-09-22T11:45:36.279Z","comments":true,"path":"2024/07/18/article5/","permalink":"https://me.ahang.icu/2024/07/18/article5/","excerpt":"","text":"概述git checkout的作用通常有两个: 切换到指定分支或者commit 从指定分支或commit中恢复文件到当前工作目录 第一个作用大家都很清楚,通过 git checkout <branch>|<commit id> 很轻松能做到。本文重点记录第二个作用,也就是检出文件的作用。 背景我学习项目的时候通常喜欢在README.md中记录笔记。然后现在我希望将当前项目的版本回退到前一个版本,但是同时我又希望只保留当前版本的 README.md中的新增笔记内容。 如果直接使用 git revert <commit id> 那么会直接恢复到前一个版本,但是随之而来的,我的新增的笔记内容会消失。使用 git reset 也是一样。下方git树图示将展示我希望git树的变化: 1234567891011# 当前git树:a (HEAD -> main)|b|c# 希望的git树:(回退版本,但是保留特定文件)b (HEAD -> main)|c 解决方案通过 git checkout 检出文件的功能,可以实现此目的。 1git checkout <branch> -- <file> ... 新建一个临时分支,这个分支保留了主分支最新的提交。然后在主分支执行回滚操作,回滚到指定的版本。然后通过git checkout 的文件检出功能,将之前的临时分支中最新的文件内容检出到当前分支。就实现了 ”版本回退但是保留特定文件最新状态“ 的目的。 具体流程如下: 流程 新建一个临时分支,该分支会保存当前分支的所有最新提交 1git checkout -b temp-branch 此时,我们的git树会像这样: 123456# 当前git树:a temp-branch(HEAD -> temp-branch)|/b|c 此时temp-branch相当于main分支的备份。我们现在可以放心的回滚main分支的提交了。回滚提交到指定的版本: 12345# 切换到main分支的最新提交(a提交)git checkout main# 重置HEAD到bgit reset --hard b 此时,我们的git树会像这样: 123456# 当前git树:a temp-branch|/b (HEAD -> main)|c 此时README文件中的内容也一同回滚到b的版本了,但是别担心,我们可以使用git checkout 指令来恢复文件。 还记得temp-branch分支吗?他是main分支最新提交的备份,该分支中保存了a提交中的最新内容。因此,我们使用git checkout 来从temp-branch分支中恢复内容: 12# 将temp-branch分支中的README.md检出到当前版本中git checkout temp-branch -- README.md 假如现在我改变了想法,我除了想保留README.md,还想保留之前版本的所有yml文件,那么可以这样写: 1git checkout temp-branch -- README.md $(find ./ -name '*.yml') 完成这一切后,删除这个临时分支(它已经发挥了它的作用)。我们的目的达到了。 1git checkout -d temp-branch","categories":[{"name":"运维","slug":"运维","permalink":"https://me.ahang.icu/categories/%E8%BF%90%E7%BB%B4/"}],"tags":[{"name":"git","slug":"git","permalink":"https://me.ahang.icu/tags/git/"}]},{"title":"搭建git服务","slug":"article4","date":"2024-07-07T12:45:53.000Z","updated":"2024-09-22T11:45:36.279Z","comments":true,"path":"2024/07/07/article4/","permalink":"https://me.ahang.icu/2024/07/07/article4/","excerpt":"","text":"记录一下搭建git服务的过程(简单版) 步骤新建用户第一步,创建一个新的用户,是为了便于权限管理 1adduser git 可以通过 cat /etc/passwd 查看当前系统的用户 添加ssh公钥第二步,将客户端机器的ssh公钥(位于用户目录下的 .ssh 目录中)添加到服务器用户的 .ssh/authorized_keys 中。如果没有的话新建这个文件。 这一步的主要目的是为了能让客户端机器可以通过git访问服务器。 试着通过 ssh git@<服务器ip或域名> 来访问服务器,如果这里公钥添加成功了,是可以直接访问的。 123cd ~mkdir .ssh && cd .sshtouch authorized_keys 初始化一个远端仓库在 ~ 下新建一个远端仓库,通过 git init --bare 来初始化。 123cd ~mkdir test.git && cd test.gitgit init --bare 推送文件到远端仓库在客户端机器上克隆远端仓库: 1git clone git@<ip/domain>:test.git 进行一些修改,然后推送。 这样就实现了一个简易的git服务器了。","categories":[{"name":"运维","slug":"运维","permalink":"https://me.ahang.icu/categories/%E8%BF%90%E7%BB%B4/"}],"tags":[{"name":"git","slug":"git","permalink":"https://me.ahang.icu/tags/git/"}]},{"title":"win上超好用的包管理工具-scoop","slug":"article3","date":"2024-06-26T06:28:24.000Z","updated":"2024-09-22T11:45:36.279Z","comments":true,"path":"2024/06/26/article3/","permalink":"https://me.ahang.icu/2024/06/26/article3/","excerpt":"","text":"Linux 和 macOS 各有便捷的包管理工具。在 Ubuntu 上,可以通过 apt 轻松管理软件,使用 sdkman 管理开发环境。在 macOS 上,Homebrew 是一个流行的包管理工具,它同样可以轻松安装和管理各种软件包和开发环境。本文介绍的 Scoop 是一款适用于 Windows 系统的高效包管理工具,不仅能够安装众多软件,还能管理开发环境(如 Java 或 Node.js),从而避免因手动安装软件对系统目录造成污染。简直是强迫症患者福音!🤗 安装在powershell中执行以下命令: 123Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser# 安装scoopInvoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression 该命令使设备允许运行安装和管理脚本。这是必需的,因为默认情况下,Windows 10 客户端设备会限制任何 PowerShell 脚本的执行。 scoop会被安装至 C:\\Users\\<YOUR USERNAME>\\scoop 安装完成后执行: 1scoop help 可以查看帮助信息 卸载1scoop uninstall scoop 使用查找软件1scoop search <app> 例如: scoop search jdk 你的控制台会输出: 123456Name Version Source Binaries---- ------- ------ --------corretto-jdk 21.0.3.9.1 javacorretto-lts-jdk 17.0.11.9.1 javacorretto11-jdk 11.0.23.9.1 javacorretto15-jdk 15.0.2.7.1 java scoop默认预装了 main 的bucket。 这里我们可以看到source是java, 因此如果想要安装jdk,我们需要添加java到bucket中。 安装软件1scoop install <app> scoop只能安装本地bucket中存在的软件。接上,如果想要安装jdk, 我们需要先将java源添加到bucket中。 1scoop bucket add java 之后执行 scoop install corretto-jdk 即可安装。 scoop目前已知的bucket有: main - Default bucket which contains popular non-GUI apps. extras - Apps that do not fit the main bucket’s criteria. games - Open-source and freeware video games and game-related tools. nerd-fonts - Nerd Fonts. nirsoft - A collection of over 250+ apps from Nirsoft. sysinternals - The Sysinternals suite from Microsoft. java - A collection of Java development kits (JDKs) and Java runtime engines (JREs), Java’s virtual machine debugging tools and Java based runtime engines. nonportable - Non-portable apps (may trigger UAC prompts). php - Installers for most versions of PHP. versions - Alternative versions of apps found in other buckets. 卸载软件1scoop uninstall <app> 切换软件版本假如你同时安装了多个环境,比如同时安装jdk11和jdk17,可以通过reset命令来切换版本。 12# 切换到已安装的openjdk11scoop reset openjdk11 本文介绍了scoop的安装,卸载,以及一些常用的指令。本章有提及到不全面的地方,请参考scoop官网或者scoop官方wiki。","categories":[{"name":"工具","slug":"工具","permalink":"https://me.ahang.icu/categories/%E5%B7%A5%E5%85%B7/"}],"tags":[{"name":"scoop","slug":"scoop","permalink":"https://me.ahang.icu/tags/scoop/"},{"name":"windows包管理","slug":"windows包管理","permalink":"https://me.ahang.icu/tags/windows%E5%8C%85%E7%AE%A1%E7%90%86/"}]},{"title":"nginx实现正向代理","slug":"article2","date":"2024-06-25T06:41:02.000Z","updated":"2024-09-22T11:45:36.279Z","comments":true,"path":"2024/06/25/article2/","permalink":"https://me.ahang.icu/2024/06/25/article2/","excerpt":"本文介绍如何通过nignx实现正向代理。","text":"本文介绍如何通过nignx实现正向代理。 nginx正向代理需要借助一个模块: ngx_http_proxy_connect_module 该模块的源码地址 我们需要先下载这个源码,然后通过编译的方式将其安装到nginx里。nginx安装方式有很多,比如通过apt直接安装,或者使用docker等。本文使用的nginx安装方式是源码编译安装。 步骤 下载ngx_http_proxy_connect_module模块。 直接clone其github仓库即可。 1git clone https://github.com/chobits/ngx_http_proxy_connect_module.git 下载nginx (v1.24.0) 123wget https://nginx.org/download/nginx-1.24.0.tar.gz# 解压tar -zxvf nginx-1.24.0.tar.gz 安装nginx前,你可能需要一些前置的准备: 安装gcc 1apt install build-essential 安装pcre (正则库) 1apt-get install libpcre3 libpcre3-dev openssl 1apt-get install openssl libssl-dev 打补丁 123cd /path/to/nginx-1.24.0 #进入源码根目录# 打补丁patch -p1 < /path/to/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_102101.patch 这里我使用nginx1.24.0,需要的补丁是 proxy_connect_rewrite_102101.patch。 如果你使用其他nginx版本,可以在ngx_http_proxy_connect_module模块的github仓库查看对应的补丁。只需要将上述 ‘proxy_connect_rewrite_102101.patch’ 替换为对应版本的补丁即可。 编译nginx源码,安装nginx 12345678# 进入源码目录cd /path/to/nginx-1.24.0# 编译配置项./configure --add-module=../ngx_http_proxy_connect_module --with-http_ssl_module# 编译make# 安装sudo make install 通过编译安装的nginx主目录位置在: /usr/local/nginx 下 编辑配置文件 ,启用正向代理 123456789101112131415161718192021222324252627282930313233343536373839404142434445worker_processes auto;error_log /usr/local/nginx/logs/error.log warn;pid /usr/local/nginx/logs/nginx.pid;events { worker_connections 1024;}# 在 http 节中添加配置http { include mime.types; default_type application/octet-stream; # 配置日志 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /usr/local/nginx/logs/access.log main; # 配置代理缓存 proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_zone:10m max_size=1g inactive=60m use_temp_path=off; # 配置正向代理 server { listen 8888; # 你需要在对应的云主机ISP防火墙开放这个端口 resolver 223.5.5.5; # 允许 CONNECT 方法 proxy_connect; proxy_connect_allow all; proxy_connect_connect_timeout 10s; proxy_connect_read_timeout 10s; proxy_connect_send_timeout 10s; location / { proxy_pass http://$host; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }} 在win上配置代理,填入云主机的ip地址和端口即可。 已经安装了nginx?上面是从头开始安装nginx的例子。 如果你的云主机上已经存在了nginx,但是不想重装,可以通过平滑升级方式实现。 步骤 首先查看你当前安装的nginx包含哪些配置项 1/usr/local/nginx/sbin/nginx -V 记住configure arguments: 后面的内容, 我们需要保留这些 配置项,这样才不会影响你原来的nginx 进入新下载的nginx源码目录, 通过configure配置新的配置项,这个配置项会覆盖掉原来的配置。因此把原来的 配置加上,再添加你想要的 其他模块。 1234567# 进入源码目录cd /path/to/nginx-1.24.0# 编译配置项 # xxxxxxxxxxx 指的是之前让你记下的,你原来nginx的配置项,在此基础上添加新的依赖。./configure xxxxxxxxxxx --add-module=../ngx_http_proxy_connect_module# 编译make 将 objs 目录下,编译好的nginx二进制文件复制到nginx的安装目录下的/sbin里。 12cd objscp nginx /usr/local/nginx/sbin 回到源码的目录,执行make upgrade指令 12cd /path/to/nginx-1.24.0make upgrade 如果在执行make upgrade指令时报错: make: *** [Makefile:22:upgrade] 错误 1 尝试先kill掉原来的nginx进程,然后使用绝对路径来启动新的nginx: 12# 直接执行/usr/local/nginx/sbin/nginx 之后再执行 make upgrade 应该不会有问题了。 安装完ngx_http_proxy_connect_module模块后,剩下的就是配置nginx.conf了,和上面一样,不再赘述。","categories":[{"name":"运维","slug":"运维","permalink":"https://me.ahang.icu/categories/%E8%BF%90%E7%BB%B4/"}],"tags":[{"name":"nginx","slug":"nginx","permalink":"https://me.ahang.icu/tags/nginx/"},{"name":"正向代理","slug":"正向代理","permalink":"https://me.ahang.icu/tags/%E6%AD%A3%E5%90%91%E4%BB%A3%E7%90%86/"}]},{"title":"通过frp搭建自己的内网穿透服务","slug":"article1","date":"2024-06-24T03:48:44.000Z","updated":"2024-09-22T11:45:36.279Z","comments":true,"path":"2024/06/24/article1/","permalink":"https://me.ahang.icu/2024/06/24/article1/","excerpt":"本文介绍如何通过frp在自己的云服务器上搭建内网穿透服务,提供对外暴露的web服务。 内网穿透可以将本机的服务通过云服务器拥有的公有ip暴露到公网上供他人访问,应用场景有很多,比如做微信小程序开发时需要调试接口,或者向别人演示自己还未正式上线的小demo等。 在阅读本文内容之前,需要有一些前置准备: 你拥有一个域名 你拥有一台具有公网ip地址的云主机","text":"本文介绍如何通过frp在自己的云服务器上搭建内网穿透服务,提供对外暴露的web服务。 内网穿透可以将本机的服务通过云服务器拥有的公有ip暴露到公网上供他人访问,应用场景有很多,比如做微信小程序开发时需要调试接口,或者向别人演示自己还未正式上线的小demo等。 在阅读本文内容之前,需要有一些前置准备: 你拥有一个域名 你拥有一台具有公网ip地址的云主机 frpfrp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。 下载如果你是win系统,可以通过frp的github releases点击下载文件。 如果你是linux系统,你可以通过wget下载: 1wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz 这里以win为例,下载完压缩包解压之后,你会看到如下的目录结构: 123456--frp_0.58.1_windows_amd64|-----frpc.toml|-----frpc.exe|-----frps.exe|-----frps.toml|-----LICENSE 这里介绍一下,这个frpc.toml是客户端的配置文件,客户端指的是你需要进行内网穿透的机器。c就是client的意思。frpc.exe就是客户端的frp程序的启动文件。 frps.toml就是源服务器的配置文件,源服务器指的就是你的云服务器(拥有公网ip的)。同理,这个s就是source的意思。 那其实我们现在用的win机器,只需要保留frpc.toml和frpc.exe就行了,剩下的frps.toml和frps.exe可以删除掉。因为云服务器使用linux系统这个exe他也用不了,所以我们在云服务器上还需要从giithub上下载这个frp的文件。 同样的,在云服务器上下载了文件后,也可以删除掉frpc.toml和frpc,只需要保留frps.toml和frps即可。 接下来介绍具体操作步骤: 对于客户端(win机器) 通过github releases下载文件 保留文件中的frpc.toml和frpc.exe即可 配置frpc.toml 启动frpc服务 对于云主机(linux机器) 通过sh命令获取frp文件 1wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz 保留文件中的frps.toml和frps即可 配置frps.toml 启动frps服务 如果你不想每次都进入frp安装目录下通过 xxx/frps -c xxx/frps.toml 来启动的话,可以通过systemd来添加frp服务,通过systemctl统一管理。具体步骤如下: 在/lib/systemd/system/下创建 frps.service文件, 内容如下: 12345678910111213[Unit]# 服务名称,可自定义Description = frp serverAfter = network.target syslog.targetWants = network.target[Service]Type = simple# 启动frps的命令,需修改为您的frps的安装路径ExecStart = /path/to/frps -c /path/to/frps.toml[Install]WantedBy = multi-user.target 通过systemd管理frps 12345678910# 设置自启动sudo systemctl enable frps# 启动frpsudo systemctl start frps# 停止frpsudo systemctl stop frps# 重启frpsudo systemctl restart frps# 查看frp状态sudo systemctl status frps 对外提供web服务 在云主机上配置frps.toml 12bindPort = 7000vhostHTTPPort = 8080 在win机器(客户端)上配置frpc.toml 1234567891011121314serverAddr = "x.x.x.x" <-云主机公网ip地址serverPort = 7000[[proxies]]name = "web"type = "http"localPort = 80 <-暴露本机80端口的服务customDomains = ["www.yourdomain.com"][[proxies]]name = "web2"type = "http"localPort = 8080 <-暴露本机8080端口的服务customDomains = ["www.yourdomain2.com"] 记得把自己的域名解析到云主机上! 启动服务 1to/path/frps -c frps.toml 或者 通过systemd win机器同理,通过powershell或者cmd执行exe程序并通过 -c 指定应用的配置文件。 至此,内网穿透已经实现,你可以愉快的向别人分享你的demo啦!😊 结尾附上frp的官方文档,本文还有些不完善的地方或者没有提到的功能,可以参考frp官方文档。","categories":[{"name":"运维","slug":"运维","permalink":"https://me.ahang.icu/categories/%E8%BF%90%E7%BB%B4/"}],"tags":[{"name":"frp","slug":"frp","permalink":"https://me.ahang.icu/tags/frp/"},{"name":"内网穿透","slug":"内网穿透","permalink":"https://me.ahang.icu/tags/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/"}]}],"categories":[{"name":"其他","slug":"其他","permalink":"https://me.ahang.icu/categories/%E5%85%B6%E4%BB%96/"},{"name":"工具","slug":"工具","permalink":"https://me.ahang.icu/categories/%E5%B7%A5%E5%85%B7/"},{"name":"运维","slug":"运维","permalink":"https://me.ahang.icu/categories/%E8%BF%90%E7%BB%B4/"}],"tags":[{"name":"win11专业版激活","slug":"win11专业版激活","permalink":"https://me.ahang.icu/tags/win11%E4%B8%93%E4%B8%9A%E7%89%88%E6%BF%80%E6%B4%BB/"},{"name":"自用工具","slug":"自用工具","permalink":"https://me.ahang.icu/tags/%E8%87%AA%E7%94%A8%E5%B7%A5%E5%85%B7/"},{"name":"git","slug":"git","permalink":"https://me.ahang.icu/tags/git/"},{"name":"scoop","slug":"scoop","permalink":"https://me.ahang.icu/tags/scoop/"},{"name":"windows包管理","slug":"windows包管理","permalink":"https://me.ahang.icu/tags/windows%E5%8C%85%E7%AE%A1%E7%90%86/"},{"name":"nginx","slug":"nginx","permalink":"https://me.ahang.icu/tags/nginx/"},{"name":"正向代理","slug":"正向代理","permalink":"https://me.ahang.icu/tags/%E6%AD%A3%E5%90%91%E4%BB%A3%E7%90%86/"},{"name":"frp","slug":"frp","permalink":"https://me.ahang.icu/tags/frp/"},{"name":"内网穿透","slug":"内网穿透","permalink":"https://me.ahang.icu/tags/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/"}]}