没看到有收费的项目,好像可以定时任务,自动发邮件到指定邮箱 6 个帖子 - 6 位参与者 阅读完整话题
鼠标左键微动坏了,经常自动双击。淘宝上买了一个微动,今天装上试试。一边更换,一边更新本帖,主打一个记录生活。 拆卸外壳。撕开脚垫,有四颗螺丝。鼠标用久了,脚垫有些分层,用指甲抠了半天。附带的镊子不如指甲好用。 废了半天劲拆开外壳。不愧是用了快6年的鼠标,隔三差五用牙线清理还是有不少脏东西藏在里面,顺便彻底清理一下。 鼠标的后侧位置有一个卡扣,需要用巧劲轻微把外壳向外掰变形一点点,才能打开。这里很容易大力出奇迹掰断,要小心。 2 个帖子 - 2 位参与者 阅读完整话题
IT之家 4 月 18 日消息,消息源 Canon Rumors 前天发文称,佳能可能会为 EOS R7 Mark II 无反相机引入 DIGIC Accelerator Lite 精简版处理器。 据报道,佳能已经在 EOS R1 和 R5 Mark II 相机中使用过 DIGIC Accelerator 处理器,用于提升相机的数据处理能力。该芯片可与高速背照式 / 堆栈式传感器配合,带来更快的电子快门速度、自动对焦性能, 大幅降低果冻效应 , 还可以同时记录照片和视频 。 IT之家注意到,EOS R6 Mark III 并没有搭载这枚处理器,原因可能不只是成本问题,也与该机采用前照式 CMOS 有关,读取速度明显慢于高端机型。 目前已有传闻称,佳能 EOS R7 Mark II 将成为首款搭载背照式堆栈传感器的 APS-C 画幅 EOS-R 相机。如果相关消息属实,那么更高的读出速度需要搭配更强的处理器。 值得注意的是,佳能的 DIGIC X 处理器本身就有不同版本,例如 R1、R5 Mark II 等高端机型搭载满血版处理器,性能明显优于 R6 Mark III 和 R8 等中端机型。 不过,佳能显然没有必要去刻意限制 R7 Mark II 的性能,APS-C 和全画幅之间本来就已经形成明显的定位区别。
介绍:一个能基于vmware自动创建实验环境,检测代码执行结果的Linux教学平台。 初衷 六七年运维运维老人了,深知linux学习过程过于枯燥,因此想着做一个教程实验一体的一个小软件。网络上教程和实际操作大多数是分离的,环境不一,资料不全,关键步骤是否执行成功也无法得知,导致进展不下去。 很多伙伴不是没有学习的动力,是学习前的准备工作太多了,就像一个学习炒菜的人,如果需要出门买菜、砍价、洗菜,浪费太多的时间在前置工作上,做这个软件的目的,是让你先把时间花在炒菜上面,前置步骤可以后面慢慢学。 你需要做什么,把vmware软件安装好,ova文件准备好,导入下实验文件,就可以开始学习了。(说明书都有教程) linux教程方面,属红帽最为知名,因此配套课程以红帽作为编写模板,对其进行必要的补充和修改,学不会就真是我写的有问题了,无AI,放心食用。 核心辅助:针对关键步骤做了检测判断,可以辅助你查看命令是否执行成功。 环境重置:一键重置实验环境,新手要的是先成功,而不是排错。能力不足时,重新开始会更好,排错是等你学会后,再来折腾。 虚拟机资源调度:如果你平日里经常折腾vm,需要创建集群环境之类的,软件也支持自定义资源,直接帮你创建好虚拟机,不需要你手动点开vm,一台台创建操作。 软件介绍 课程导入 软件依赖于实验手册,导入实验手册后就能看得到课程,具体操作在说明中有写。 实验区域 左侧功能菜单,中间实验手册,右侧ssh资源,ssh资源基于vmare自行创建,自动连接实验手册对应的虚拟机资源。 环境重置 环境弄坏了,点击左侧"环境重置即可",基于快照机制,10秒崭新如初。中间实验手册,目前展示的内容基于红帽编写,(累啊)纯手工制作,右侧是实验手册对应的ssh资源。 实验步骤检测 实验手册针对当前必要的步骤进行检测,辅助确认命令有效执行。 未通过: 通过: 实验文件一键导入 如果实验手册绑定文件(任意类型),支持一键导入,避免实验中缺失素材。 资源自定义 除了实验手册定义的资源,可自行定义虚拟机。 在首页中新建课程,课程中新建目录,然后即可创建实验,在实验中,可自行添加实验资源。 假设说你需要弄个集群,可根据个人需要创建虚拟机,只要你本地资源足够就行。 此处演示创建三台虚拟机。 虚拟机管理 可自行管理课程所创建的虚拟机。 其他介绍在说明数中,可前往查看。 软件下载安装 github限制100M的软件,目前暂时放到百度网盘,有其他更好的佬可以告知下。 链接: 百度网盘 请输入提取码 提取码: p8mh 课程资料也在网盘中,一起下载即可。 双击"LabBox-1.0.0-Portable.exe"直接运行,免安装。 1 个帖子 - 1 位参与者 阅读完整话题
最近半年一直在折腾一个项目——用 AI 自动生成短视频。起因是身边做小生意的朋友总问我能不能帮忙剪视频发抖音,我想这事儿应该能自动化,就开始做了。 分享一下技术方案和踩过的坑,希望对有类似想法的朋友有参考价值。 整体架构 用户上传素材 + 输入文案 ↓ TTS 语音合成(MiniMax / 火山引擎) ↓ 根据语音时长自动分配素材时间轴 ↓ 云端渲染(转场、字幕、BGM) ↓ 成品视频 后端 FastAPI + MySQL,前端 Vue 3,视频渲染走云端 API,手机端用 Capacitor 套了个壳。一个人全栈,没有团队。 几个有意思的技术点 1. TTS 选型 试了一圈,最后主力用 MiniMax speech-2.8-hd,中文多音字准确率目前最好。火山引擎作为补充,主要是剪映生态的独有音色(奶气萌娃、广告解说这种)。Azure 的中文效果一般,Fish Audio 没深入测。 踩坑:TTS 返回的音频时长和文字长度不是线性关系,语气词、停顿都会影响。批量生成时如果对时长有严格要求,需要做重试机制。 2. 素材自动分配 这块逻辑最复杂。用户上传 N 个素材(视频+图片混合),系统要自动决定每个素材展示多久、从视频的哪个位置截取。 几个关键决策: 视频从中间 70% 区域截取(跳过开头 20% 和结尾 10%),因为大部分手机拍的视频开头都是晃动的 图片展示时长根据总时长动态计算,保证每张都出现,最少 1 秒/张 批量生成时用发牌算法分配素材,保证每条视频的封面帧不同 3. 批量生成去重 做矩阵号的核心需求是"一组素材生成几十条不重复的视频"。去重策略: AI 扩写多组文案时分配不同的切入角度(预定义了 30 个角度) 每条视频的素材起始偏移不同 视频截取位置随机化 第一个 clip 强制用不同素材保证封面不同 4. 浮点精度问题 这个坑最隐蔽。视频时间轴用浮点数计算,多个 clip 拼接时 accumulated 会漂移,导致素材重叠或出现缝隙。解决方案是每次用 round 后的值更新 accumulated: cs = round(clip_start, 1) ce = round(clip_end, 1) accumulated += (ce - cs) # 不是 accumulated += clip_dur 5. 实时语音输入 加了个语音输入功能,用户对着手机说文案直接转文字。技术上是浏览器 AudioContext 采集 PCM → WebSocket 传到后端 → 转发到阿里云 paraformer-realtime-v2。 踩坑:中间结果和最终结果的拼接如果处理不好会闪烁,最后用了"快照 + 增量"的方案解决。 技术栈汇总 层 技术 前端 Vue 3 + Vite + Capacitor 后端 Python 3.13 + FastAPI + SQLAlchemy 数据库 MySQL 8 存储 阿里云 OSS + CDN AI 文案 通义千问 TTS 火山引擎 语音识别 阿里云 paraformer-realtime-v2 目前自己和几个朋友在用,做餐饮和服装的,反馈还行。有兴趣的可以体验一下: https://zj.xinghepay.com ,Android 也有 APK https://media.xinghepay.com/xinghe/app/xhzj.apk 技术上有什么想聊的欢迎评论区交流,特别是视频处理和 TTS 这块,踩的坑比较多,能聊的也多 6 个帖子 - 5 位参与者 阅读完整话题
之前10号左右用站内佬的注册机搓了三百多个号授权到CPA上 前两天封杀后还剩下一百多个 想问下授权的号有效期是多久 CPA会不会自动更新令牌 如果不会的话怎么批量更新令牌 1 个帖子 - 1 位参与者 阅读完整话题
在vscode里每次在终端启动cc的时候,就会自动给我开三个新vscode窗口 1 个帖子 - 1 位参与者 阅读完整话题
本人一直想要搭建一个中转站,偶然看见sub2api,故使用它搭建了一个,以下是步骤: 先约定 3 个你要替换的值: api.example.com :改成你的域名 [email protected] :改成你的管理员邮箱 CHANGE_ME... :改成你自己生成的随机密钥 1)登录服务器并更新系统 ssh root@你的服务器IP apt update apt -y upgrade timedatectl 这一步是基础准备,先把系统更新到当前仓库版本,并确认时间正常。时间不准会影响 HTTPS、登录态和支付回调之类的功能。Docker 官方当前 Ubuntu 安装文档仍然建议使用官方 apt 仓库安装 Docker Engine。 2)安装 Docker Engine 和 Docker Compose v2 先卸载可能冲突的旧包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do apt-get remove -y $pkg done 安装 Docker 官方仓库: apt-get update apt-get install -y ca-certificates curl install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \ > /etc/apt/sources.list.d/docker.list 安装 Docker 和 Compose 插件: apt-get update apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 检查版本: docker --version docker compose version systemctl enable docker systemctl start docker systemctl status docker --no-pager Docker 官方当前安装文档给出的推荐安装包名就是 docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 。另外,Docker 也明确提醒:如果你用 UFW 或 firewalld,Docker 暴露出来的端口可能绕过防火墙表面规则,所以正式环境尽量只暴露 80/443,把 8080 留给本机反代。 3)安装 Git、openssl 和基础工具 apt-get install -y git curl wget nano openssl ufw 这些工具后面都会用到: git 拉仓库 openssl 生成密钥 nano 编辑配置 ufw 放行 80/443/22 4)准备部署目录并拉取官方文件 mkdir -p /opt/sub2api cd /opt/sub2api git clone https://github.com/Wei-Shaw/sub2api.git source cp source/deploy/docker-compose.local.yml . cp source/deploy/.env.example .env cp source/deploy/config.example.yaml config.yaml Sub2API 官方部署说明里,手动部署路径就是:克隆仓库、复制 .env.example 、创建 data postgres_data redis_data ,再用 docker-compose.local.yml 启动;并且官方明确把 local 版描述为“本地目录、易迁移”。 5)生成生产环境密钥 先生成三个随机值: openssl rand -hex 32 openssl rand -hex 32 openssl rand -hex 32 把输出保存下来,分别用于: POSTGRES_PASSWORD JWT_SECRET TOTP_ENCRYPTION_KEY 官方 .env 模板和部署说明都强调: POSTGRES_PASSWORD 必填,而 JWT_SECRET 和 TOTP_ENCRYPTION_KEY 最好固定,否则会影响持久登录态和 2FA。 6)写入最终版 .env cat > /opt/sub2api/.env <<'EOF' BIND_HOST=127.0.0.1 SERVER_PORT=8080 SERVER_MODE=release RUN_MODE=standard TZ=Asia/Shanghai POSTGRES_USER=sub2api POSTGRES_PASSWORD=CHANGE_ME_TO_A_LONG_RANDOM_PASSWORD POSTGRES_DB=sub2api DATABASE_MAX_OPEN_CONNS=50 DATABASE_MAX_IDLE_CONNS=10 DATABASE_CONN_MAX_LIFETIME_MINUTES=30 DATABASE_CONN_MAX_IDLE_TIME_MINUTES=5 REDIS_PASSWORD= REDIS_DB=0 REDIS_POOL_SIZE=1024 REDIS_MIN_IDLE_CONNS=10 REDIS_ENABLE_TLS=false [email protected] ADMIN_PASSWORD= JWT_SECRET=CHANGE_ME_TO_A_LONG_RANDOM_HEX_STRING JWT_EXPIRE_HOUR=24 JWT_ACCESS_TOKEN_EXPIRE_MINUTES=0 TOTP_ENCRYPTION_KEY=CHANGE_ME_TO_ANOTHER_LONG_RANDOM_HEX_STRING GEMINI_OAUTH_CLIENT_ID= GEMINI_OAUTH_CLIENT_SECRET= GEMINI_OAUTH_SCOPES= GEMINI_QUOTA_POLICY= GEMINI_CLI_OAUTH_CLIENT_SECRET= ANTIGRAVITY_OAUTH_CLIENT_SECRET= SECURITY_URL_ALLOWLIST_ENABLED=true SECURITY_URL_ALLOWLIST_ALLOW_INSECURE_HTTP=false SECURITY_URL_ALLOWLIST_ALLOW_PRIVATE_HOSTS=false SECURITY_URL_ALLOWLIST_UPSTREAM_HOSTS= UPDATE_PROXY_URL= EOF 然后编辑,把占位符改成你自己的值: nano /opt/sub2api/.env 这里我保留了 .env 里的基础白名单开关,但把域名清单放到 config.yaml 里统一管理,因为官方 config.example.yaml 里真正完整的 URL 白名单字段在 security.url_allowlist 下。 7)写入最终版 config.yaml cat > /opt/sub2api/config.yaml <<'EOF' server: host: "0.0.0.0" port: 8080 mode: "release" frontend_url: "https://api.example.com" trusted_proxies: [] max_request_body_size: 268435456 h2c: enabled: true max_concurrent_streams: 50 idle_timeout: 75 max_read_frame_size: 1048576 max_upload_buffer_per_connection: 2097152 max_upload_buffer_per_stream: 524288 run_mode: "standard" cors: allowed_origins: - "https://api.example.com" allow_credentials: true security: url_allowlist: enabled: true upstream_hosts: - "api.openai.com" - "api.anthropic.com" - "generativelanguage.googleapis.com" - "cloudcode-pa.googleapis.com" - "*.openai.azure.com" pricing_hosts: - "raw.githubusercontent.com" crs_hosts: [] allow_private_hosts: false allow_insecure_http: false response_headers: enabled: true additional_allowed: [] force_remove: [] csp: enabled: true policy: "default-src 'self'; script-src 'self' __CSP_NONCE__ https://challenges.cloudflare.com https://static.cloudflareinsights.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; font-src 'self' data: https://fonts.gstatic.com; connect-src 'self' https:; frame-src https://challenges.cloudflare.com; frame-ancestors 'none'; base-uri 'self'; form-action 'self'" proxy_probe: insecure_skip_verify: false proxy_fallback: allow_direct_on_error: false EOF 改域名: nano /opt/sub2api/config.yaml 官方当前配置示例里, frontend_url 用于生成邮件等外部链接;URL 白名单示例里也明确列出了 upstream_hosts 、 pricing_hosts 、 crs_hosts 、 allow_private_hosts 、 allow_insecure_http 。我这里把样例里的 allow_private_hosts 和 allow_insecure_http 从 true 收紧成了更适合公网生产的 false 。 8)写入最终版 docker-compose.local.yml cat > /opt/sub2api/docker-compose.local.yml <<'EOF' services: sub2api: image: weishaw/sub2api:latest container_name: sub2api restart: unless-stopped ulimits: nofile: soft: 100000 hard: 100000 ports: - "${BIND_HOST:-127.0.0.1}:${SERVER_PORT:-8080}:8080" volumes: - ./data:/app/data - ./config.yaml:/app/data/config.yaml:ro environment: - AUTO_SETUP=true - SERVER_HOST=0.0.0.0 - SERVER_PORT=8080 - SERVER_MODE=${SERVER_MODE:-release} - RUN_MODE=${RUN_MODE:-standard} - DATABASE_HOST=postgres - DATABASE_PORT=5432 - DATABASE_USER=${POSTGRES_USER:-sub2api} - DATABASE_PASSWORD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required} - DATABASE_DBNAME=${POSTGRES_DB:-sub2api} - DATABASE_SSLMODE=disable - DATABASE_MAX_OPEN_CONNS=${DATABASE_MAX_OPEN_CONNS:-50} - DATABASE_MAX_IDLE_CONNS=${DATABASE_MAX_IDLE_CONNS:-10} - DATABASE_CONN_MAX_LIFETIME_MINUTES=${DATABASE_CONN_MAX_LIFETIME_MINUTES:-30} - DATABASE_CONN_MAX_IDLE_TIME_MINUTES=${DATABASE_CONN_MAX_IDLE_TIME_MINUTES:-5} - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-} - REDIS_DB=${REDIS_DB:-0} - REDIS_POOL_SIZE=${REDIS_POOL_SIZE:-1024} - REDIS_MIN_IDLE_CONNS=${REDIS_MIN_IDLE_CONNS:-10} - REDIS_ENABLE_TLS=${REDIS_ENABLE_TLS:-false} - ADMIN_EMAIL=${ADMIN_EMAIL:[email protected]} - ADMIN_PASSWORD=${ADMIN_PASSWORD:-} - JWT_SECRET=${JWT_SECRET:-} - JWT_EXPIRE_HOUR=${JWT_EXPIRE_HOUR:-24} - JWT_ACCESS_TOKEN_EXPIRE_MINUTES=${JWT_ACCESS_TOKEN_EXPIRE_MINUTES:-0} - TOTP_ENCRYPTION_KEY=${TOTP_ENCRYPTION_KEY:-} - TZ=${TZ:-Asia/Shanghai} - GEMINI_OAUTH_CLIENT_ID=${GEMINI_OAUTH_CLIENT_ID:-} - GEMINI_OAUTH_CLIENT_SECRET=${GEMINI_OAUTH_CLIENT_SECRET:-} - GEMINI_OAUTH_SCOPES=${GEMINI_OAUTH_SCOPES:-} - GEMINI_QUOTA_POLICY=${GEMINI_QUOTA_POLICY:-} - GEMINI_CLI_OAUTH_CLIENT_SECRET=${GEMINI_CLI_OAUTH_CLIENT_SECRET:-} - ANTIGRAVITY_OAUTH_CLIENT_SECRET=${ANTIGRAVITY_OAUTH_CLIENT_SECRET:-} - SECURITY_URL_ALLOWLIST_ENABLED=${SECURITY_URL_ALLOWLIST_ENABLED:-true} - SECURITY_URL_ALLOWLIST_ALLOW_INSECURE_HTTP=${SECURITY_URL_ALLOWLIST_ALLOW_INSECURE_HTTP:-false} - SECURITY_URL_ALLOWLIST_ALLOW_PRIVATE_HOSTS=${SECURITY_URL_ALLOWLIST_ALLOW_PRIVATE_HOSTS:-false} - SECURITY_URL_ALLOWLIST_UPSTREAM_HOSTS=${SECURITY_URL_ALLOWLIST_UPSTREAM_HOSTS:-} - UPDATE_PROXY_URL=${UPDATE_PROXY_URL:-} depends_on: postgres: condition: service_healthy redis: condition: service_healthy networks: - sub2api-network healthcheck: test: ["CMD", "wget", "-q", "-T", "5", "-O", "/dev/null", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 3 start_period: 30s postgres: image: postgres:18-alpine container_name: sub2api-postgres restart: unless-stopped ulimits: nofile: soft: 100000 hard: 100000 volumes: - ./postgres_data:/var/lib/postgresql/data environment: - POSTGRES_USER=${POSTGRES_USER:-sub2api} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required} - POSTGRES_DB=${POSTGRES_DB:-sub2api} - PGDATA=/var/lib/postgresql/data - TZ=${TZ:-Asia/Shanghai} networks: - sub2api-network healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-sub2api} -d ${POSTGRES_DB:-sub2api}"] interval: 10s timeout: 5s retries: 5 start_period: 10s redis: image: redis:8-alpine container_name: sub2api-redis restart: unless-stopped ulimits: nofile: soft: 100000 hard: 100000 volumes: - ./redis_data:/data command: > sh -c ' redis-server --save 60 1 --appendonly yes --appendfsync everysec ${REDIS_PASSWORD:+--requirepass "$REDIS_PASSWORD"} ' environment: - TZ=${TZ:-Asia/Shanghai} - REDISCLI_AUTH=${REDIS_PASSWORD:-} networks: - sub2api-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 start_period: 5s networks: sub2api-network: driver: bridge EOF 这份 compose 依然遵循官方 local 版思路:本地目录持久化、 weishaw/sub2api:latest + postgres:18-alpine + redis:8-alpine 、 /health 健康检查;另外我把 config.yaml 的挂载打开了,因为官方默认是注释状态。 9)创建数据目录并启动容器 cd /opt/sub2api mkdir -p data postgres_data redis_data docker compose -f docker-compose.local.yml up -d docker compose -f docker-compose.local.yml ps 如果一切正常,再看日志: docker compose -f docker-compose.local.yml logs -f sub2api Sub2API 官方说明里写得很明确:Compose 模式下 AUTO_SETUP=true 时,首次启动会自动连接 PostgreSQL 和 Redis、执行数据库迁移、创建管理员账号、在未提供时自动生成管理员密码。 10)取出管理员密码并做健康检查 如果你在 .env 里把 ADMIN_PASSWORD= 留空,就执行: docker compose -f docker-compose.local.yml logs sub2api | grep -i "admin password" 本机健康检查: curl http://127.0.0.1:8080/health 官方手动部署说明和命令示例里都给了从日志里查自动生成管理员密码的方法。( GitHub ) 11)安装 Caddy 并启用自动 HTTPS 先安装 Caddy 官方仓库: apt install -y debian-keyring debian-archive-keyring apt-transport-https curl curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg chmod o+r /etc/apt/sources.list.d/caddy-stable.list apt update apt install -y caddy 这正是 Caddy 官方当前给出的 Debian/Ubuntu stable 安装路径。( Caddy Web Server ) 12)写入 Caddyfile cat > /etc/caddy/Caddyfile <<'EOF' api.example.com { @static { path /assets/* path /logo.png path /favicon.ico } header @static { Cache-Control "public, max-age=31536000, immutable" -Pragma -Expires } tls { protocols tls1.2 tls1.3 } reverse_proxy 127.0.0.1:8080 { health_uri /health health_interval 30s health_timeout 10s health_status 200 header_up X-Real-IP {remote_host} header_up X-Forwarded-For {remote_host} header_up X-Forwarded-Proto {scheme} header_up X-Forwarded-Host {host} header_up CF-Connecting-IP {http.request.header.CF-Connecting-IP} } encode { zstd gzip 6 minimum_length 256 } request_body { max_size 100MB } log { output file /var/log/caddy/sub2api.log { roll_size 50mb roll_keep 10 roll_keep_for 720h } format json level INFO } handle_errors { respond "{err.status_code} {err.status_text}" } } EOF 检查并重载: caddy fmt --overwrite /etc/caddy/Caddyfile caddy validate --config /etc/caddy/Caddyfile systemctl enable caddy systemctl restart caddy systemctl status caddy --no-pager 官方仓库当前确实自带 deploy/Caddyfile ,里面已经包含 TLS、 reverse_proxy localhost:8080 、 /health 健康检查、转发真实 IP 头和日志滚动思路,所以这条路线最省心。 13)放行防火墙 ufw allow 22/tcp ufw allow 80/tcp ufw allow 443/tcp ufw enable ufw status verbose 不要开放 8080 给公网,因为你已经通过 BIND_HOST=127.0.0.1 把应用只绑在本机,再让 Caddy 反代它。这样也符合 Docker 官方对防火墙的安全提醒。 14)最终验证 先本机验证: curl http://127.0.0.1:8080/health curl -I https://api.example.com 然后浏览器访问: https://api.example.com 用管理员邮箱和日志里拿到的密码登录。 15)部署完成后立刻执行的 5 个检查 登录后台,确认能打开首页。 到设置里确认站点 URL 是否正确。 frontend_url 如果没配对,后面邮件链接和支付回调会出错。 如果你要启用 URL 白名单,只保留自己真的要用的上游域名。官方样例里带了 OpenAI、Anthropic、Gemini、Azure OpenAI 等域名,但生产上不建议全开。 如果要开支付,后台路径是 设置 → 支付设置 ,官方当前支持 EasyPay、支付宝官方、微信官方、Stripe;多实例分流支持 round-robin 和 least-amount ,回调地址会按你的域名自动拼接。 如果你用 Stripe,记得订阅 payment_intent.succeeded 和 payment_intent.payment_failed 。 16)后续最常用的运维命令 cd /opt/sub2api # 看状态 docker compose -f docker-compose.local.yml ps # 看日志 docker compose -f docker-compose.local.yml logs -f sub2api # 重启应用 docker compose -f docker-compose.local.yml restart sub2api # 更新镜像 docker compose -f docker-compose.local.yml pull docker compose -f docker-compose.local.yml up -d # 停服务 docker compose -f docker-compose.local.yml down 官方部署说明里也给了 local 版这组常用命令,并强调 local 版最方便整目录迁移和备份。 4 个帖子 - 4 位参与者 阅读完整话题
如何量化 diff 的"复杂度"(变更行数、波及模块数量、涉及文件类型、改动是否是核心业务逻辑) 是需要一个小模型做路由 还是做静态路由好一点,有没有佬有相关实现方案。 1 个帖子 - 1 位参与者 阅读完整话题
您好!我理解您的情况了。根据最新政策: 关于老套餐自动续费问题: 很抱歉地通知您, 老套餐续订窗口期已经过了,相关服务已经下线了 。 即使您之前开通了自动续费,由于老套餐续订服务已下线,系统无法再进行自动续费操作。 这不是升了个寂寞 1 个帖子 - 1 位参与者 阅读完整话题
如题,楼主古法自动注册了若干个codex账号,导入CPA, 发现只能导入45个 ,超过这个数量的账号都没法导入成功了,没找到哪里有配置在限制。 各位佬友有遇到过这种情况吗? 5 个帖子 - 4 位参与者 阅读完整话题
1在闪购搜:超时免单,可以领超时免单权益,偶尔会超时,系统自动赔付,这个券很容易领,强烈建议领这个再下单!!! 2新增一个广州的地址,搜 大牌直降 领一个15-13的券(我是选了大学的地址,应该随便一个都可) 3扫下面的码领个叠加券 4下单 感谢淘宝!!! 32 个帖子 - 19 位参与者 阅读完整话题
IT之家 4 月 18 日消息,搜狗输入法 4 月 17 日发布《致搜狗输入法用户的一封信》,表示将在 2026 年 4 月至 7 月逐步实现账号的多设备统一,并计划在 5 月份推出跨设备复制粘贴功能。 IT之家附具体内容如下: 亲爱的用户朋友: 长期以来,我们收到许多用户的反馈,希望不同设备间的输入体验能更加统一。为响应大家呼声,自 2026 年 4 月下旬起至 7 月,我们将逐步实现账号的多设备统一。升级完成后,无论你是更换新设备,还是在多个设备间切换使用,只要登录同一账号 (支持不同登录方式), 输入习惯、内容列表等都将自动同步 ,为你带来更统一、更便捷的输入体验。 整个升级过程将由系统自动完成,无需你额外操作,也不会影响正常使用。如在升级期间遇到账号相关问题,欢迎通过应用内反馈、用户社群、客服邮箱 (IMETS@ tencent.com ) 等渠道联系我们,我们会第一时间帮你核查处理。 此外,我们计划在 5 月推出跨设备复制粘贴功能,敬请期待! 感谢你一直以来对搜狗输入法的支持。 搜狗输入法团队 2026 年 4 月 17 日
在github闲逛,发现一个claude code的自动提取内存的插件,叫claude-mem,大概就是自动根据几个hook,提取内容保存,自动增加内容提问,大概就是这个意思,不过一看provider,只支持御三家,无法填国内的,看着挺好的,就是用不了,实在没国内版本的我就打算后面自己写一个算了,有的话还请佬推荐一下。 顺便说一下这个东西的作用,最近hermes之所以这么火,也是因为他的自学习能力,所谓自学习能力,其实就是内存管理,跟上面的原理是差不多的。所以claude code有了这个,等于变相也成了一个可以自己学习的编程智能体。 4 个帖子 - 3 位参与者 阅读完整话题
当然举报都是有理由的,想问一下这个举报是系统自动触发的还是,佬友或者管理手动触发的?这个举报是有奖励吗频次有点高啊,好神奇,还有被举报的次数有点多,是不是不会自动消除的?看来我与3级无缘了? 34 个帖子 - 23 位参与者 阅读完整话题
IT之家 4 月 17 日消息,消息人士 @ camerainsider 昨天在 X 平台透露,适马计划 9 月发布一款 65mm 超大光圈自动对焦镜头新品, 光圈比 F1.2 更大 。 作为参考,适马曾在 2020 年推出过 65mm F2 DG DN 镜头,适配“马徕松”L 卡口 / 索尼 E 卡口,主打全金属镜身、高解析力、紧凑设计。不过这款产品隶属 Contemporary 系列,主打轻巧便携而非极限性能。 同时,目前无反全画幅自动镜头领域,超越 F1.2 光圈的全画幅自动对焦镜头还比较少见,推测适马的这款镜头光圈规格大概率可能是 F1.0,当然也有可能是 F1.1 或 F1.05。
上周使用wsl时出现的,表现为一个分区无法挂载。自动挂载和手动挂载均失败。 dmesg: [ 2.398835] mount: [ 2.398839] /mnt/x: fsconfig system call failed: Operation not supported. [ 2.399674] dmesg(1) may have more information after failed mount system call. [ 2.400210] WSL (1 - init()) ERROR: UtilCreateProcessAndWait:726: /bin/mount failed with status 0x2000 [ 2.466421] mount: [ 2.466425] /mnt/x: mount(2) system call failed: Operation not supported. [ 2.467460] dmesg(1) may have more information after failed mount system call. [ 2.468180] WSL (2 - init-systemd(Ubuntu)) ERROR: UtilCreateProcessAndWait:726: /bin/mount failed with status 0x2000 X:是一个NTFS分区,chkdsk无问题,windows可以正常访问 下面是分区信息和权限设置 问题也发在wsl的issue里面了。。。但是就他们那个效率估计得不到解决方案,所以来求助佬友们了 已经重装了一次wsl了。。并没有用 需要诊断日志可以去issue找 /bin/mount failed with status 0x2000 · Issue #40221 · microsoft/WSL 2 个帖子 - 2 位参与者 阅读完整话题
IT之家 4 月 17 日消息,据 Windows Latest 今日报道,微软在最新的 Win11 星期二更新中加入了一项引发争议的设计:部分 PC 在安装更新并重启后,系统会自动启动 Microsoft Edge 浏览器,并展示一个声称“Windows 更新已完成”的页面。 如图所示,该页面中央以较大字体显示“Your Windows update is complete”(你的 Windows 更新已完成),下方略小字体提示用户查看 5 项最新功能,并配有一个蓝色的大号“Next”(下一步)按钮。 令人困惑的是,微软并未提供关闭按钮。用户要么点击蓝色按钮继续,要么手动关闭 Edge 或新建标签页。 对于普通用户而言,唯一的可见选项即是点击按钮。此外,即使用户点击页面上的任何空白区域,同样会被引导至下一页,继续展示所谓的“最新”功能。 另外,页面左下角以较小字体显示“Your Windows 11 PC has been updated”(你的 Windows 11 电脑已更新)。有用户质疑:页面中央的大字已经告知更新完成,为何还要重复显示同样的信息? 据 Windows Latest 实测,该引导流程共计需要点击 6 次“Next”按钮,最终页面会出现另一个蓝色大按钮“Start browsing”(开始浏览)。 点击该按钮后,Edge 会打开一个新标签页。整个流程本质上是一次强制将用户导向 Edge 浏览器的交互设计。 更令人无语的是,微软在引导页面中展示的所谓“最新功能”几乎都不是 4 月更新的新特性。 第一项介绍任务栏时钟重新支持秒显示 —— 该功能此前被移除后又加回,且已向所有用户推送相当一段时间。 第二项是将 Emoji 固定到任务栏,这算是新功能。 第三项介绍 Copilot 总结和回答复杂文档问题的能力,该功能早已上线。 第四项是截图工具快速标记功能。 第五项则是文件资源管理器右键菜单中的 AI Actions(AI 操作)功能。 通常情况下,操作系统在获得更新或希望向用户确认安装成功时,会通过横幅或内置应用(如“开始使用”或“获取帮助”)进行提示,而非强制打开网页浏览器。另外,Windows 11 本身已经预装了“开始使用”应用和“获取帮助”应用,但微软并未选择使用它们来展示基础功能。 该页面右下角还设有“喜欢”和“不喜欢”按钮,点击后仅显示一条“感谢您的反馈”的横幅,点击横幅的关闭按钮也不会关闭当前页面。 有用户认为,Edge 本身是一款优秀的浏览器,支持所有 Chrome 扩展,并拥有垂直标签页、沉浸式阅读器以及 AI 标签整理器等独特功能。然而,微软持续以强制手段引导用户使用 Edge,可能导致该浏览器始终停留在“仅被用户用来下载 Chrome”的尴尬定位。
先说本人情况: 根据模拟考,预估成绩650-675之间(希望别考崩了哈哈),在河北对应中档-中档偏上的985,如同济-电子科技大-华科-西交-天大-北航-哈工大这一列 现在5月前要决定强基计划。 强基计划:985大学,只能报一个专业,100%保研,不准转专业(这是最大的问题)。 目前感兴趣的是自动化(但是强基作为国家培养理科基础人才的东西,没有直接的自动化),但是有可能毕业之后比较挤;另外现在是具身智能比较挤的时候,有可能我毕业之后卷到头了变成红海,有很多被卷翻了的人等着社招,对刚毕业的不利;再就是自动化不是一个越老越吃香的学科,可能被优化; 之后看航空航天,这方面肯定是接下来国家投入的重点,包括民营航天、低空经济之类的应该会在我毕业(8年左右)开始大规模井喷(像现在宇树这样),但是肯定会经历一波九死一生的大逃杀,到时候我在毒圈里还是毒圈外就不知道了; 再考虑微电子(应用物理学强基计划),这肯定需要硕士学历,所以强基的保研给了很大的福利。目前据我查资料有设计公司(海思)和fab厂两大方向,虽然累但是工资比较高,而且芯片设计应该挺吃资历的吧,优化风险小一点? 以及军工,也就是北理、西交、西北工大、哈工大,也有一定潜力 请问各位佬友,如果您是这几个方向的话: 您的大致学历、就业方向? 您认为这个学科的读研、读博是否面临巨大困难? 您认为这个专业对老资历(35岁以上)是否友好? 其他想补充的? 下面是我目前比较感兴趣的部分学校的招生数量 招生计划.pdf (392.0 KB) 7 个帖子 - 3 位参与者 阅读完整话题
目前是用网页端的claude以及中转站api加claude code,目前想问一个问题,看看能否实现全过程的自动化。 先用输入内容1加提示词A,得到几条内容(结果1),接着用B判断结果1有哪些可用即结果2。 新开一个对话(保证上下文的干净。)然后用结果2加提示词B,再筛选一次,得到结果3。 结果3加提示词C,得到最终内容。 如果不新开一个对话的话,很容易导致产生幻觉以及被上下文误导。 我有很多的输入内容需要这个过程进行操作。有没有一种办法可以我睡觉的时候他们在自动的工作,然后我睡醒打开一看左边是输入内容,右边就是最终结果。 1 个帖子 - 1 位参与者 阅读完整话题