新闻详情

新闻详情

首页 / 资讯中心 / 详情

Go项目部署宝塔面板:从交叉编译到反向代理全指南

发布时间:2026/9/26 11:41:28来源:尧图网络
Go项目部署宝塔面板:从交叉编译到反向代理全指南
最近刚把一个 Go 项目完整部署到宝塔面板上数据库用的 MySQL前后折腾了两天。从交叉编译到进程守护、从反向代理到数据库授权每一步都有不少容易踩的坑。这篇文档我尽量写全记录整个部署思路和实操过程目标是让没搞过 Go 部署的同事也能照着一步步落地。适合的业务场景很明确小规模业务系统、个人 API 服务、企业内部工具这类固定域名或 IP 直接对外提供服务不涉及复杂的容器编排和自动扩容。文中的命令和配置我都实际验证过可以直接抄作业。1. 部署规划先想明白 Go 项目部署的三种方式1.1 为什么用宝塔面板而不是纯命令行Go 项目本身就是一个编译出来的二进制文件部署起来其实很轻。但实际项目往往不只是一个可执行文件那么简单它要配 Nginx 反代、要管 SSL 证书、要写 systemd 服务、还要盯着进程是否存活。这些工作如果用纯命令行一点一点敲新手很容易在某个环节卡住。宝塔面板的价值在于把这些零散的运维操作图形化安装 MySQL、创建站点、配置反向代理、设置防火墙鼠标点几下就能完成日志查看和自动备份也顺手解决了。有人会说宝塔面板有各种争议但就中小项目的部署效率而言它确实是目前国内团队最常用的方案之一。尤其对于 Go 这种天然适合单体部署的语言宝塔的站点管理思路非常合拍一个站点对应一个服务Nginx 做入口Go 进程在后台跑MySQL 数据落库整个链路清晰可控。1.2 明确部署架构和数据流向我这次部署的是一个标准的三层架构用户浏览器请求先到 NginxNginx 把动态请求转发给 Go 服务处理Go 服务操作 MySQL 完成数据读写静态资源由 Nginx 直接返回。Go 服务和 MySQL 都在这台服务器上网络开销最校选择这种架构的考虑是Go 的 net/http 标准库本身不擅长处理静态文件缓存和 HTTPS 终结把这些交给 Nginx 是行业通用做法。Nginx 处理高并发静态请求的能力远强于 Go 的默认实现而且配置 SSL 证书、HTTP/2、gzip 压缩都非常成熟。我的建议是除非你的 Go 项目内部已经集成了全套中间件否则部署时务必加上 Nginx 这一层。部署顺序也有讲究我的习惯是先装宝塔面板再装 MySQL然后编译上传 Go 程序配置进程守护最后接 Nginx 反向代理。这样每一步都有明确的验证点出问题时能快速定位是数据库、进程还是 Web 层的问题。2. Go 项目编译打包与文件结构设计2.1 交叉编译生成 Linux 可执行文件如果你的开发环境是 Windows 或 macOS直接在本地go build出来的二进制文件是不能在 Linux 服务器上运行的因为不同操作系统的可执行文件格式不同。解决办法是交叉编译所谓交叉编译就是在当前平台上编译出目标平台Linux 服务器能运行的二进制文件。# 在开发机执行目标平台是 Linux amd64 CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -ldflags -s -w -o app-server main.go这里几个参数解释一下CGO_ENABLED0关闭 CGO这样程序不依赖系统动态链接库在服务器上直接就能跑。如果你的项目用到了需要 CGO 的库比如某些 SQLite 驱动那这条不能加而且建议改成在服务器上编译。GOOSlinux GOARCHamd64指定目标操作系统和 CPU 架构。绝大多数云服务器都是 amd64如果你用的是 ARM 架构的服务器要改成GOARCHarm64。-ldflags -s -w去掉调试信息和符号表能显著缩小二进制体积。我手头一个项目从 80MB 减到 52MB效果挺明显。编译完成后在本地先运行一下确认功能正常再通过宝塔面板的文件管理功能上传到服务器。我习惯放在/www/wwwroot/下面和站点目录平级比如/www/wwwroot/myproject/app-server。这个路径后面配置进程守护和 Nginx 都会用到不要乱放。2.2 配置文件的放置与读取设计Go 项目部署时的配置管理是新手容易忽略的点。我见过直接把数据库密码写死在代码里的项目换环境就得重新编译太痛苦。合理做法是把配置抽离出来程序启动时读取配置文件或环境变量。我在项目里用的是 YAML 配置文件结构长这样server: port: 8080 mode: release database: host: 127.0.0.1 port: 3306 username: app_user password: your_password_here dbname: mydb max_open_conns: 50 max_idle_conns: 10 conn_max_lifetime: 5m log: level: info file: /www/wwwroot/myproject/logs/app.log配置文件的路径通过环境变量指定export APP_CONFIG/www/wwwroot/myproject/config.yaml ./app-server这样每次部署不同的环境只需要修改配置文件而不需要重新编译程序。如果项目代码里已经用了palantir/stacktrace、fsnotify这类工具配置文件热加载也能做但部署初期不建议图省事改配置重启服务是最稳妥的方案。程序里读取配置时我只把跟运行环境强相关的信息放到配置中业务逻辑里的常量尽量保留在代码里。这个边界要控制好配置文件什么东西都往里塞后期维护会非常混乱。3. 宝塔面板环境搭建与进程守护配置3.1 服务器环境部署与安全初始化登录服务器后先更新系统基础库并安装必要组件避免后续安装过程缺依赖。sudo apt update -y sudo apt upgrade -y如果你用的是 CentOS把命令换成sudo yum update -y然后通过宝塔面板官方的一键安装脚本装面板。注意安装脚本的执行路径和版本选择当前稳定版可以直接用官网提供的最新安装命令。安装过程中需要你确认安装路径和初始账号密码建议把密码设置成一个足够强度的随机字符串并记录到自己的密码管理工具中。面板安装完成后第一步不是急着建站点而是做安全加固在宝塔面板的面板设置中修改默认端口并开启 BasicAuth 认证。在云服务商的安全组中只放行 SSH建议改成非默认端口、80、443 和你业务需要的端口。在宝塔的安全菜单中将面板端口设置为仅允许你的办公 IP 访问。这些操作看起来繁琐但对生产环境是必须的。我见过因为面板默认端口对外开放导致被暴力探测的案例还没开始部署服务器就已经被扫描了。3.2 Supervisor 守护 Go 进程Go 进程默认是前台运行的SSH 断开进程也就停止了。宝塔面板内置了 Supervisor 进程守护管理器这是当前部署 Go 应用最省心的方案。它的作用是进程挂了自动拉起来、开机自启、日志统一收集、重启服务只需要点一下按钮。在宝塔的软件商店搜索安装Supervisor管理器。安装完成后添加一个守护进程角色配置如下启动用户www运行目录/www/wwwroot/myproject启动命令/www/wwwroot/myproject/app-server启动优先级默认 0 即可进程数量1需要注意的是进程守护里配置的环境变量尤其是数据库密码这类敏感信息配置前要确认系统用户www对该目录和文件有读取权限。常见问题是编译出来的二进制文件权限是 755没问题但配置文件如果权限是 600 且属于 rootwww用户启动时就读不到。Supervisor 配置完成后手动点击启动按钮观察运行日志。日志路径宝塔会自动生成通常在/www/wwwroot/myproject/logs下程序自己也写了日志文件两边互相印证。启动成功的标志是日志里出现listening on :8080或类似输出。3.3 systemd 单元文件方法补充如果你不想用 Supervisor宝塔面板所在系统本质上还是通过 systemd 来管理服务的我提供一条备选的 systemd 配置作为对照思路。在/etc/systemd/system/myproject.service下写入以下内容[Unit] DescriptionGo API Server Afternetwork.target [Service] Userwww Groupwww WorkingDirectory/www/wwwroot/myproject EnvironmentAPP_CONFIG/www/wwwroot/myproject/config.yaml ExecStart/www/wwwroot/myproject/app-server Restartalways RestartSec5 [Install] WantedBymulti-user.targetRestartalways确保进程意外退出后 5 秒内自动拉起。这是我最看重的配置尤其对于线上服务不自动重启的话半夜出问题都没人知道。配置好后执行sudo systemctl daemon-reload sudo systemctl enable myproject sudo systemctl start myproject用 systemd 的好处是服务器重启后服务会自动恢复加上 Supervisor 其实也依赖系统服务机制二者选其一即可。我更推荐 Supervisor因为宝塔面板提供了可视化日志和重启入口排查问题时不用一个个敲systemctl查状态。4. Nginx 反向代理与站点接入4.1 反向代理核心配置现在 Go 服务已经在 127.0.0.1:8080 跑起来了但用户不能直接访问这个端口。我这边的方案是让 Nginx 监听 80/443 端口把请求转发给 Go 服务处理。Nginx 配置直接在宝塔的网站中添加站点暂时不用创建数据库和FTP纯静态配置即可然后修改站点的配置文件。我的完整 Nginx 站点配置如下域名部分做了占位处理server { listen 80; server_name yourdomain.com; location / { proxy_pass http://127.0.0.1:8080; 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; proxy_connect_timeout 30s; proxy_send_timeout 60s; proxy_read_timeout 60s; } location /static/ { alias /www/wwwroot/myproject/static/; expires 7d; add_header Cache-Control public, immutable; } }几个关键点proxy_set_header Host $host必须要有。如果你的 Go 代码里读取了请求 Host 生成链接不设置这行Go 服务拿到的 Host 是 127.0.0.1:8080生成出来的链接全是错的。X-Real-IP和X-Forwarded-For用于把真实客户端 IP 透传给 Go 服务。很多日志审计、限流功能依赖这部分数据。静态资源单独用expires 7d设置缓存减少后端压力。如果项目本身有静态文件这步能让页面加载速度快不少。配置完成后在宝塔面板里重载 Nginx 配置用浏览器访问域名验证。如果看到的是 502绝大多数原因要么是 Go 进程没起来要么是proxy_pass里写的端口和进程实际监听端口不一致。4.2 HTTPS 证书与强制跳转生产环境不启用 HTTPS 说不过去宝塔面板申请 SSL 证书非常方便。在站点设置中进入SSL面板选择Lets Encrypt勾选域名后自动申请并部署。证书申请成功后在SSL 其他设置中把 HTTP 强制跳转打开所有 http 请求都会 301 转到 https。需要注意一点Go 项目本身不要监听 443 端口让 Nginx 统一做 HTTPS 终结。这样证书的续签运维都在宝塔面板里可视化操作Go 侧完全不用关心。我在第一次部署时图省事直接在 Go 里配置了证书后来证书到期要改文件路径、重启进程折腾一番后还是改回了 Nginx 集中管理省心太多。如果需要让 Go 程序知道用户当前访问的是 HTTPS 还是 HTTP靠的是上面配置的X-Forwarded-Proto $schemeGo 代码里直接读取该请求头来判断即可。很多 OAuth、回调地址类功能都会用到这个。5. 数据库安装、建库与授权体系设计5.1 宝塔软件商店安装 MySQL在宝塔面板的软件商店中搜索MySQL选择一个适合项目的版本。我对新项目一般默认推荐 MySQL 8.0如果项目里用到了老版本的 SQL 语法或驱动不兼容那就选 5.7。安装时可自定义 root 密码务必设置一个强密码并单独记录。安装完成后 MySQL 的管理入口可以直接在宝塔面板中打开 phpMyAdmin。MySQL 刚装好时配置是默认值实操中我建议按业务量做几个调整。连接数上限宝塔的 MySQL 配置文件中默认是 100如果并发高改成 200 或 500。修改路径宝塔面板 → 软件商店 → MySQL → 配置修改找到max_connections项。如果服务器内存只有 2G超过几百的连接数意义不大数据库会先扛不住。MySQL 的存储引擎默认 InnoDB绝大多数 Go 项目的表都用这个引擎。需要注意字符集设置在配置文件中把character-set-server设置为utf8mb4排序规则选utf8mb4_unicode_ci。为什么不是 utf8因为 utf8 在 MySQL 里最多只能存 3 个字节的字符像 emoji 表情和生僻字无法存储utf8mb4 是完整版的 UTF-8 编码兼容性没有坑。5.2 创建业务数据库与最小权限用户进入数据库管理新建数据库填上项目名比如mydb。这里需要新建一个专用的数据库账号而不是使用 root 账号连接业务。账号密码单独设置尽量让密码是无规则的字母数字组合。授权范围选本地服务器因为你这次的 Go 服务和 MySQL 在同一台机器上Go 程序连接数据库使用 127.0.0.1只授予该数据库的增删改查权限即可GRANT SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER ON mydb.* TO app_user127.0.0.1 IDENTIFIED BY your_strong_password; FLUSH PRIVILEGES;如果项目里需要创建表结构、执行迁移授权时增加CREATE、DROP、REFERENCES权限。但生产环境如果是相对稳定的业务不建议把 DDL 权限给到业务账号否则代码一旦有 SQL 注入风险攻击者也只能增删改查不能删库。5.3 远程连接与安全策略仅有本机访问时MySQL 默认监听在 127.0.0.1 就够了。但有些场景需要从本地开发机直连服务器数据库这时有两条路一是先用 SSH 隧道转发。本地执行ssh -L 3307:127.0.0.1:3306 userserver_ip然后本地数据库客户端连接127.0.0.1:3307就能安全地访问服务器上的 MySQL数据库的绑定监听地址不需要改动安全性最高。我日常开发调试用的就是这种方式。二是开放 MySQL 远程端口。在宝塔安全面板中放行 3306 端口并修改 MySQL 配置文件中的bind-address为0.0.0.0还需要把用户授权中的127.0.0.1改成%或指定 IP。这种方案不推荐直接全量放开最好在云安全组中设置来源 IP 白名单只允许自己的办公 IP 访问。实际部署时我遇到过用 root 远程连接然后服务器被爆破的情况。所以无论怎么配置数据库密码一定要高密度别用生日、公司名这类弱口令。6. Go 服务与数据库联调细节6.1 数据源配置与连接池参数调优数据库建好、权限授权完成接下来最关键的就是让 Go 服务正确连接 MySQL。无论你的数据库驱动是github.com/go-sql-driver/mysql还是gorm、sqlx这类 ORM核心都是连接串格式app_user:your_strong_passwordtcp(127.0.0.1:3306)/mydb?charsetutf8mb4parseTimetruelocLocal细节说明charsetutf8mb4与数据库端字符集保持一致。parseTimetrue让数据库驱动自动把 MySQL 的 DATETIME/TIMESTAMP 解析成 Go 的time.Time否则拿到的全是字符串。locLocal数据库时间与本地时区保持一致。如果不设置很多项目会发现写入的时间和实际时间差 8 小时排查半天最后发现是时区配置问题。连接池配置上我在config.yaml里设置了三个关键参数max_open_conns控制最大打开的连接数max_idle_conns控制空闲连接数conn_max_lifetime是连接最大存活时间。Go 的database/sql连接池默认行为不会主动断开MySQL 服务端wait_timeout默认 8 小时后会掐断连接如果代码不处理就很容易报invalid connection错误。所以conn_max_lifetime建议小于 MySQL 的 wait_timeout比如 5 分钟。db.SetMaxOpenConns(cfg.MaxOpenConns) db.SetMaxIdleConns(cfg.MaxIdleConns) db.SetConnMaxLifetime(cfg.ConnMaxLifetime)连接数不是越大越好。每开一个连接MySQL 就要创建一个线程处理连接数太多且大量空闲反而会耗尽数据库资源。一般单机项目 50 个最大连接就已经很充裕了。6.2 迁移、初始化与连通性验证表结构怎么创建我建议用数据库迁移文件管理而不是手动在 phpMyAdmin 里建表。最轻量的做法是准备一个schema.sql在部署时通过 MySQL 命令行导入mysql -h127.0.0.1 -uapp_user -pyour_strong_password mydb schema.sql如果项目用了 GORM可以写一个独立的初始化命令./app-server -migrate程序里通过命令行参数解析判断是否执行自动迁移执行完成后退出再正常启动服务进业务模式。这个方案文档化程度更高新同事接手时一条命令就能把数据库结构拉起来。连接验证我一般分三层查命令行用 mysql 客户端直接连接 MySQL确认账号密码和授权没问题。看 Go 项目启动日志是否出现数据库连接成功的信息。打一个依赖数据库的 API 接口确认能正常读写。我习惯在项目里加一个/healthz端点专门做全链路健康检查逻辑是查 MySQL 的SELECT 1能返回值就说明 Nginx、Go 进程、MySQL 三层的链路是通的。这个接口对后续监控和判断故障非常有用。7. 部署常见问题与排查实战7.1 进程守护失效、端口占用与日志排查问题排查的核心工具是日志和端口状态。现象一Supervisor 显示进程已启动但服务访问不了。第一反应是先看进程监听端口netstat -tlnp | grep 8080如果端口都没有说明程序根本没起来。查看 Supervisor 的应用日志常见报错有配置文件路径不对程序找不到config.yaml直接 panic。数据库连不上启动时就初始化连接程序没做容错设计直接退出。权限不够www用户没有日志目录的写入权限。遇到这类问题先手动以www用户身份从前台运行二进制sudo -u www /www/wwwroot/myproject/app-server看前台输出就知道具体是哪一行报错。这一步能解决 80% 的启动问题。现象二端口被占用。之前调试时手动跑过 Go 进程没退出再启动新进程时端口已经被占了。处理方法lsof -i :8080 kill -9 PID然后在 Supervisor 里重启。现象三服务正常但日志里出现间歇性的EOF错误。多半是 Nginx 的超时设置太短或者 Go 进程被杀后重启导致旧连接失效。调整 Nginx 的proxy_read_timeout为 60s 并设置进程的RestartSec合理值后现象会消失。7.2 数据库连接被拒绝与权限陷阱这类问题通常会报panic: dial tcp 127.0.0.1:3306: connect: connection refused或Access denied for user。首先确认 MySQL 是否真的在运行systemctl status mysqld没启动就先启动再排查。接着手动用同样的命令连接 MySQLmysql -h127.0.0.1 -uapp_user -pyour_password mydb能进说明 Go 项目连接串或密码可能不对。特别注意密码中如果有特殊字符YAML 配置文件必须用引号包裹住整个密码否则#、、*这类字符会把配置解析得七零八落。还有一个隐蔽问题授权时用户 host 没匹配上。MySQL 的账号匹配是按 host 精确匹配的你授权了app_user127.0.0.1但 Go 连接串里用了tcp(localhost:3306)系统会解析成::1或者其他主机名就可能匹配到匿名用户或匹配不上权限验证直接失败。所以我连接串里统一写127.0.0.1避免 hostname 解析带来的不一致。7.3 Nginx 502 与静态资源 404 的处理Nginx 返回 502 Bad Gateway 时说明 Nginx 无法与后端 Go 进程建立连接。排查顺序Go 进程是否在监听proxy_pass的端口是否写对服务器防火墙是否拦截了本地回环连接宝塔面板默认是放行本机的回环流量的但云安全组如果在高安全模式下限制了端口段也可能出现奇怪的现象。静态资源 404 往往是 location 规则的坑。Nginx 的location匹配顺序比较讲究location /static/对应alias /www/wwwroot/myproject/static/如果alias路径拼错资源文件在项目里是static/img/logo.png访问时却请求了/img/logo.png自然 404。这个时候直接看 Nginx 的 error.log 定位路径问题一眼就能看出来。7.4 常见问题速查表问题现象可能原因排查与解决思路服务访问 502Go 进程未启动或监听端口错误netstat -tlnp查看端口Supervisor 日志定位启动错误手动前台启动看输出进程反复自动重启启动即 panic比如配置读取失败查看 supervisor 日志检查配置文件权限和格式数据库连接拒绝MySQL 未启动或连接串错误命令行手动连接 MySQL确认服务状态与账号密码Access denied用户 host 授权不匹配确认授权 host 与连接串中的 host 严格一致页面时间差 8 小时DSN 未设置locLocal修改连接串加locLocal参数静态资源 404location/alias 路径不对查看 Nginx error.log修正路径Go 二进制体积过大编译时未去除调试信息使用-ldflags -s -w重新编译502 偶发且日志频繁 ERR_EMPTY_RESPONSENginx 超时或 Go GC 停顿调大proxy_read_timeout升级服务器配置8. 上线后的日常维护与监控建议部署完成只是开始。我会在宝塔面板中配置一个计划任务每天凌晨自动备份 MySQL 数据保留最近 7 天的备份文件。任务脚本不需要太复杂宝塔有现成的数据库备份插件设置好路径和保留份数就行。Go 二进制文件本身不用频繁备份重新编译就能还原但配置文件和数据库必须多留几个版本。Go 项目的日志管理我建议按天切割初期用 Supervisior 的日志输出或程序内lumberjack库自动切割。日志文件如果长期不清理一两个月就能涨到几个 G既浪费磁盘也不利于排查。宝塔面板的日志清理功能虽然好用但 Go 程序自己写的应用日志需要自己写清理策略。我个人在线上部署时会顺手给服务器装一个简单的监控工具宝塔面板自带资源监控可以查看 CPU、内存、磁盘 IO 的历史记录。如果项目访问量上来发现哪个指标异常可以从监控图反查代码或数据库的问题。另外Nginx 访问日志里也能看到不少线索异常大量请求、404 大量出现都说明可能有人在扫描或你的接口路由有问题。最后想提醒的一点是上线前务必在云服务商的安全组里配置好规则只开放必要的端口。Go 项目如果有管理后台、调试接口上线前最好关闭或者加上 IP 白名单。运维领域最怕的就是部署顺利然后掉以轻心安全永远是底线部署文档再顺手也别忘了这一条。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

炸裂!Codex 塞进 ChatGPT 5.6 后,AI 编程的 config.toml 该怎么写?TaoToken 统一 Key 配置实战 2026/9/26 13:59:42

炸裂!Codex 塞进 ChatGPT 5.6 后,AI 编程的 config.toml 该怎么写?TaoToken 统一 Key 配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Corundum开源100G NIC在Bittware VV4 FPGA卡上的全栈移植指南 2026/9/26 13:59:29

Corundum开源100G NIC在Bittware VV4 FPGA卡上的全栈移植指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
植物叶片分割数据集从标注到U-Net训练全流程指南 2026/9/26 13:59:29

植物叶片分割数据集从标注到U-Net训练全流程指南

简介:面向植物图像分割任务,这份数据集包含110张真实植物叶片图像及一一对应的mask标注,适合用于图像分割模型的训练、验证与算法效果对比。图像前景区域丰富,标注边界精细、质量可靠,能满足入门到进阶的视觉学习者在分…

阅读更多 →
SDR硬件实战指南:Pluto/RTL-SDR/Airspy与SDRangel深度配置 2026/9/26 13:59:29

SDR硬件实战指南:Pluto/RTL-SDR/Airspy与SDRangel深度配置

1. 这不是软件教程,而是一份无线电实验室的“硬件入场券”如果你正盯着SDRangel这个界面漂亮、功能繁多的开源SDR软件发呆,却连USB线插上电脑后设备管理器里那个黄色感叹号都搞不定;如果你已经下载了Pluto SDR、RTL-SDR或Airspy HF&#xff0…

阅读更多 →
AI编程助手大比拼:RooCode如何用自由Agent逆袭? 2026/9/26 13:59:29

AI编程助手大比拼:RooCode如何用自由Agent逆袭?

1. 这场AI编程助手混战里,为什么我会盯上RooCode 最近几个月,身边讨论AI编程助手的频率明显高了起来。Cursor的订阅制用得顺不顺手、Windsurf的流程自动化到底省不省心、VS Code Copilot的补全是不是已经落伍、Trae的免费额度够不够用——群里几乎每隔几…

阅读更多 →
玩转 ClaudeCode:Linux 安装 + Windows/MacOS 适配,TaoToken 统一 Key 配置一篇搞定 2026/9/26 13:59:16

玩转 ClaudeCode:Linux 安装 + Windows/MacOS 适配,TaoToken 统一 Key 配置一篇搞定

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉