# 2.2 后端服务启动 :::tip 概述 后端为标准 GoFrame v2 工程,单入口 `main.go`,启动后监听 `:8000`。本节覆盖从编译到运行的完整步骤与常见启动问题。 ::: ## 启动流程 ```text main.go ├─ 注册五数据库驱动(mysql/pgsql/mssql/oracle/sqlite blank import) ├─ 注册 Redis 适配器 └─ internal/cmd.Run(ctx) ├─ 1) utility/cache.Init Redis 探测,失败降级进程内存 ├─ 2) wireDependencies 校验中间件依赖接线(缺失仅告警) ├─ 3) g.Server + router.Register 中间件链 + 路由绑定 ├─ 4) DaemonInit(延时 2s) 定时任务调度器加载 status=1 任务 ├─ 5) gcron 注册 CleanTemp 每日 03:30 清理上传临时目录 └─ 6) s.Run() 阻塞运行 HTTP 服务 ``` ## 编译与运行 ```sh # 在项目根目录执行 # 方式一:直接运行(开发) go run main.go # 方式二:编译后运行(推荐) go build -o bin/admin-server.exe main.go ./bin/admin-server.exe ``` 启动成功后控制台输出路由表与监听地址,服务监听 **:8000**。 ## 启动前检查 1. **配置文件**:确认 `manifest/config/config.yaml` 中: - `database.default.link` 数据库连接串(默认 MySQL root/root) - `redis.default` 地址与密码 2. **数据库已初始化**:参见 [2.4 数据库初始化](./database-init) 3. **端口未占用**: ```sh # Windows 查看端口占用 netstat -ano | findstr ":8000" | findstr LISTENING ``` ## 验证启动成功 ```sh # 健康检查(免登录公开接口) curl http://127.0.0.1:8000/api/health # {"code":0,"ok":true,"msg":"操作成功","data":{"status":"up"}} # OpenAPI 文档 # 浏览器打开 http://127.0.0.1:8000/swagger (本地 Redoc 页面) # 原生 JSON:http://127.0.0.1:8000/api.json ``` ## 服务重启(Windows) ```sh netstat -ano | findstr ":8000" | findstr LISTENING taskkill /F /PID go build -o bin/admin-server.exe main.go && ./bin/admin-server.exe ``` 服务已开启优雅重启(`server.graceful: true`),生产环境可使用进程管理器发 SIGHUSR2 热重启。 ## 启动日志说明 | 日志 | 含义 | |------|------| | `IdentityLoader`/`TenantLoader`/`LogSink` 告警 | 中间件依赖未接线(不阻断启动),表现为不加载角色权限/跳过租户校验/日志不落库 | | Redis 连接失败告警 + `memory fallback` | 已降级内存缓存,多实例共享能力退化 | | 路由表输出(`server.dumpRouterMap`) | 配置为 true 时打印全部注册路由,调试路由问题用 | ## 常见启动失败原因 + **端口占用**:8000 被其他进程占用,改 `server.address` 或释放端口 + **数据库连不上**:检查 link 串、库是否存在、账号密码;库名含点需确认拼写 + **配置文件缺失**:必须从项目根目录运行(相对路径读取 `manifest/config/config.yaml`) + **Go 版本过低**:go.mod 声明 1.27.2,低版本报 `go.mod requires go >= 1.27.2`