Nginx

通用配置


  server {
    listen 80;
    client_max_body_size 4G;

    server_name example.com;

    location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_redirect off;
      proxy_buffering off;
      proxy_pass http://uvicorn;
    }

    location /static {
      # path for static files
      root /path/to/app/static;
    }
  }

  map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
  }

  upstream uvicorn {
    server unix:/tmp/uvicorn.sock;
  }

网络相关

https

mkcert 生成本地证书

资源

工具

博客

其他

产品

图标

前端资源

React

Remix

tailwind

UI

练习

NextJs

CSS

模板

字体

前端参考网站

Saas

AI

chat

http://192.168.0.102:11231/

AI绘画

容器

  • docker
  • podman

OS

配置透明代理(网关)

k8s

install kubectl

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client

helm

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

docker

代理

/etc/docker/daemon.json

{
  "proxies": {
    "http-proxy": "http://192.168.0.100:10809",
    "https-proxy": "http://192.168.0.100:10809",
    "no-proxy": "localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,ingress-nginx.svc,default.svc"
  }
}

部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <my-deployment>
spec:
  replicas: 3  # 部署3个Pod
  selector:
    matchLabels:
      app: <my-app>
  template:
    metadata:
      labels:
        app: <my-app>
    spec:
      containers:
      - name: <my-container>
        image: nginx:latest  # 使用nginx镜像作为示例
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: <my-service>
spec:
  selector:
    app: <my-app>  # 与Pod的标签匹配
  ports:
    - protocol: TCP
      port: 80  # Service暴露的端口
      targetPort: 80  # Pod的目标端口
  type: ClusterIP  # Service类型,ClusterIP是默认类型,只在集群内部暴露
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: <example-ingress>
spec:
  rules:
    - host: service-b.example.com  # 匹配另一个域名,可以忽略
      http:
        paths:
          - pathType: Prefix
            path: /foo
            backend:
              service:
                name: foo-service
                port:
                  number: 8080
          - pathType: Prefix
            path: /bar
            backend:
              service:
                name: bar-service
                port:
                  number: 8080
---

minikube

下载

init

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64
# minikube start --bind-address="192.168.0.211"
minikube start 
kubectl get po -A

service 启动

[Unit]
Description=minikube
After=network.target

[Service]
Type=idle
Restart=on-failure
User=vagrant
ExecStart=/bin/bash -c 'minikube start'

[Install]
WantedBy=multi-user.target

隧道

minikube tunnel  --bind-address="192.168.0.211"

流程

minikube 启动后,启动 ingress,部署一个ingress controller

k0s

ssh -NL 45919:127.0.0.1:36635 ubuntu 反向代理

安装

curl --proto '=https' --tlsv1.2 -sSf https://get.k0s.sh | sudo sh
sudo k0s install controller --single
sudo vim /etc/systemd/system/k0scontroller.service
sudo systemctl daemon-reload
sudo k0s stop && sudo k0s start
sudo k0s status
sudo k0s kubectl get nodes
Environment="HTTP_PROXY=http://192.168.0.100:10809"
Environment="HTTPS_PROXY=http://192.168.0.100:10809"
Environment="NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,ingress-nginx.svc,default.svc"

helm

sudo cp /var/lib/k0s/pki/admin.conf ~/admin.conf
export KUBECONFIG=~/admin.conf
echo "export KUBECONFIG=~/admin.conf" >> ~/.bashrc
sudo chown k0s:k0s ~/admin.conf
chmod g-r ~/admin.conf

重置


sudo umount `sudo mount | grep k0s | grep pods | awk 'NR==1{print $3}'| xargs `

nerdctl

nerdctl --address=$NERDCTL_PLUGINS images

部署工具

  • pulumi 基础设施即代码

数据库

postgresql

免费云:

FAQ

只安装客户端

ubuntu: sudo apt-get install -y postgresql-client

显示表存储大小

SELECT pg_size_pretty( pg_total_relation_size('tablename') )

What's the default superuser username/password for postgres after a new install?

https://serverfault.com/questions/110154/whats-the-default-superuser-username-password-for-postgres-after-a-new-install

Postgresql

配置文件位置: /etc/postgresql/16/main/pg_hba.conf

FAQ

重载配置

连接到数据库

SELECT pg_reload_conf();

云服务

数据库

Serverless

aws-lambda

价格 价格计算器

100000 请求 30s/per

AWS Lambda 免费套餐包括每月 100 万次免费请求和 400000 GB 秒的计算时间,可用于由 x86、Graviton2 处理器或两者整合提供支持的函数。 此外,免费套餐包括每月 100GiB 的 HTTP 响应流,不包括每个请求的前 6MB(免费)

安装

  1. 安装 aws
  2. 配置 aws aws configure
  3. 验证是否登录成功 aws lambda list-functions

客户端

nodejs

pnpm add @aws-sdk/client-lambda
import { InvokeCommand, InvokeCommandInput, LambdaClient, ListLayersCommand } from "@aws-sdk/client-lambda";

const config = {
    region: "ap-east-1"
}
const client = new LambdaClient(config);

export interface IGetDnsBody {
    domains: string[],
    dnsServers: string[]
}

//数据在 response.payload
async function getDns(body: IGetDnsBody) {
    const input = { // InvocationRequest
        FunctionName: "getDns", // required
        Payload: new TextEncoder().encode(JSON.stringify(body))
    };
    const command = new InvokeCommand(input);
    const response = await client.send(command);

    //response body
    return response.Payload;
}

云原生

win

ssh 服务

系统 功能,open server 服务开启 开启服务

修改 C:\ProgramData\ssh\administrators_authorized_keys ,注意用管理员模式

一定要修改权限

icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

文件夹链接

mklink /D "link目录" "target实际目录"


mklink /D "C:\Users\jason\.vscode-server" "d:\.vscode-server"

网络

重启网络适配器

netsh interface show interface

netsh interface set interface "Your Network Adapter Name" admin=disable
netsh interface set interface "Your Network Adapter Name" admin=enable

vagrant

setx VAGRANT_HOME d:\.vagrant.d

Wsl

自动启动

set ws=wscript.CreateObject("wscript.shell")
ws.run "wsl -d Debian", 0

端口转发

netsh interface portproxy  show all # 显示所有的转发

netsh interface portproxy add v4tov4 listenport=5432 listenaddress=0.0.0.0 connectport=5432 connectaddress=172.18.15.75 # 添加端口转发

netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=8080 # 删除端口转发


虚拟机

vagrant

debian

FAQ

  1. 如果出现桥接网络无法启动
sudo systemctl restart networking # 可能管用

Linux

shell

当前目录

function cur(){
    FOLDER_TMP=$(dirname "$(readlink -f "$0")")
    WORK_DIR=$(dirname "$FOLDER_TMP")
    echo $WORK_DIR
    cd "$WORK_DIR"
}

根据参数执行命令模板

#!/bin/bash

# 检查参数数量
if [ "$#" -ne 1 ]; then
    echo "Usage: $0 <command>"
    exit 1
fi

# 根据参数执行不同的命令
case "$1" in
    start)
        echo "Starting the service..."
        # 这里添加启动服务的命令
        ;;
    stop)
        echo "Stopping the service..."
        # 这里添加停止服务的命令
        ;;
    restart)
        echo "Restarting the service..."
        # 这里添加重启服务的命令
        ;;
    status)
        echo "Checking the service status..."
        # 这里添加检查服务状态的命令
        ;;
    *)
        echo "Invalid command: $1"
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac

添加新用户

UN=k0s
sudo useradd -d /home/$UN  -G docker,sudo   -s /bin/bash $UN
sudo mkdir /home/$UN
sudo chown k0s:k0s /home/$UN
sudo passwd $UN
# pass
#  suders  

透明代理

参考 透明代理

docker 启动

docker run -it --rm --net=br0  --name ttproxy  ubuntu
  1. 安装 v2ray
mkdir v2ray
cd v2ray
wget https://github.com/v2fly/v2ray-core/releases/download/v5.19.0/v2ray-linux-64.zip
unzip v2ray-linux-64.zip

Mac

软件工具

虚拟桌面

词汇

  • Roadmap

投资

参考网站

  1. substack 每周订阅

翻译

开源

LibreTranslate

pip install libretranslate
pip install numpy==1.26.4

libretranslate --load-only zh,en --host 0.0.0.0

FAQ

  1. numpy 问题
pip install numpy==1.26.4

有用的第三方服务

学习语言的项目

初学者练习项目

  1. 简易博客系统:

    • 实现文章的增删改查功能
    • 支持 Markdown 格式文章
    • 提供用户注册、登录功能
    • 可选:添加评论功能、分类功能
  2. 任务管理工具:

    • 创建、编辑、删除任务
    • 设置任务优先级、截止日期
    • 支持任务列表、看板等视图
    • 可选:集成日历功能、团队协作功能
  3. 个人笔记应用:

    • 支持富文本编辑
    • 标签分类
    • 搜索功能
    • 云端同步
  4. 简易论坛:

    用户注册、登录 发帖、回复 分类板块 搜索功能

进阶练习项目

  1. 在线商城:

    商品展示、搜索 购物车功能 订单管理 支付集成 用户管理

  2. 社交网络: 用户注册、登录 好友系统 动态发布 消息系统 社交图谱

  3. 实时聊天应用: 实时消息推送 群聊、私聊 表情、图片发送 在线状态显示

  4. 在线文档协作工具:

    实时文档编辑 版本控制 权限管理 协作功能

挑战性项目

  1. 区块链浏览器:

    展示区块链信息 支持多种区块链 提供交易查询、地址查询等功能

  2. 游戏服务器: 实现简单的多人在线游戏 处理玩家连接、数据同步、游戏逻辑等

网络相关

  • 网络聊天室: 多个用户通过网络实时聊天。
  • 文件传输: 在不同设备之间传输文件
  • 远程控制: 控制远程计算机
  • 网络游戏: 实现多人在线游戏。
  • 分布式系统: 构建分布式的应用程序

登录

不同语言的登录框架

python

SSO 单点登录


docker run \
  --rm \
  -e driverName=mysql \
  -e dataSourceName='root:root@tcp(192.168.0.102:3307)/' \
  -p 8001:8000 \
  casbin/casdoor:latest

性能测试

硬盘

工具

juicefs

测试结果

宿主机 win10

vmware win10
BlockSize: 1.0 MiB, BigFileSize: 1.0 GiB, SmallFileSize: 128 KiB, SmallFileCount: 100, NumThreads: 4
+------------------+-----------------+--------------+
|       ITEM       |      VALUE      |     COST     |
+------------------+-----------------+--------------+
|   Write big file |    176.67 MiB/s | 23.18 s/file |
|    Read big file |    912.52 MiB/s |  4.49 s/file |
| Write small file |  1953.0 files/s | 2.05 ms/file |
|  Read small file | 12159.1 files/s | 0.33 ms/file |
|        Stat file | 97320.0 files/s | 0.04 ms/file |
+------------------+-----------------+--------------+

编辑器

nvim

nvchad