#!/bin/bash # 物联网基站本地开发环境设置脚本 set -e echo "=== 物联网基站本地开发环境设置 ===" # 检查Docker是否安装 if ! command -v docker &> /dev/null; then echo "错误: Docker未安装,请先安装Docker" exit 1 fi # 检查Docker Compose是否安装 if ! command -v docker-compose &> /dev/null; then echo "错误: Docker Compose未安装,请先安装Docker Compose" exit 1 fi # 检查Go是否安装 if ! command -v go &> /dev/null; then echo "错误: Go未安装,请先安装Go 1.19+" exit 1 fi # 检查Go版本 GO_VERSION=$(go version | awk '{print $3}' | sed 's/go//') REQUIRED_VERSION="1.19" if [ "$(printf '%s\n' "$REQUIRED_VERSION" "$GO_VERSION" | sort -V | head -n1)" != "$REQUIRED_VERSION" ]; then echo "错误: Go版本过低,需要Go $REQUIRED_VERSION 或更高版本,当前版本: $GO_VERSION" exit 1 fi echo "✓ 环境检查通过" # 创建开发配置文件 if [ ! -f config/config.dev.yaml ]; then echo "创建开发配置文件..." cp config/config.yaml config/config.dev.yaml # 修改开发配置 sed -i.bak 's/mode: "debug"/mode: "debug"/' config/config.dev.yaml sed -i.bak 's/output: "logs\/app.log"/output: "stdout"/' config/config.dev.yaml sed -i.bak 's/level: "info"/level: "debug"/' config/config.dev.yaml echo "✓ 开发配置文件已创建" else echo "✓ 开发配置文件已存在" fi # 创建环境变量文件 if [ ! -f .env ]; then echo "创建环境变量文件..." cat > .env << EOF CONFIG_PATH=config/config.dev.yaml GIN_MODE=debug EOF echo "✓ 环境变量文件已创建" else echo "✓ 环境变量文件已存在" fi # 创建必要的目录 echo "创建必要的目录..." mkdir -p logs mkdir -p uploads mkdir -p tmp echo "✓ 目录创建完成" # 启动基础服务 echo "启动基础服务..." docker-compose up -d postgres influxdb redis nats mqtt # 等待服务启动 echo "等待服务启动..." sleep 10 # 检查服务状态 echo "检查服务状态..." docker-compose ps # 创建数据库 echo "创建数据库..." docker-compose exec -T postgres psql -U postgres -c "CREATE DATABASE iot_base_station;" || echo "数据库可能已存在" # 运行数据库迁移 echo "运行数据库迁移..." go run cmd/migrate/main.go up # 安装开发工具 echo "安装开发工具..." go install github.com/cosmtrek/air@latest go install github.com/go-delve/delve/cmd/dlv@latest go install golang.org/x/tools/cmd/goimports@latest go install golang.org/x/lint/golint@latest # 创建VS Code配置 if [ ! -d .vscode ]; then echo "创建VS Code配置..." mkdir -p .vscode cat > .vscode/launch.json << EOF { "version": "0.2.0", "configurations": [ { "name": "Launch Server", "type": "go", "request": "launch", "mode": "debug", "program": "\${workspaceFolder}/cmd/server/main.go", "env": { "CONFIG_PATH": "config/config.dev.yaml" } }, { "name": "Launch Gateway", "type": "go", "request": "launch", "mode": "debug", "program": "\${workspaceFolder}/cmd/gateway/main.go", "env": { "CONFIG_PATH": "config/config.dev.yaml" } } ] } EOF cat > .vscode/settings.json << EOF { "go.useLanguageServer": true, "go.formatTool": "goimports", "go.lintTool": "golint", "go.lintOnSave": "package", "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.organizeImports": true } } EOF echo "✓ VS Code配置已创建" else echo "✓ VS Code配置已存在" fi # 创建Pre-commit钩子 if [ ! -f .pre-commit-config.yaml ]; then echo "创建Pre-commit钩子..." cat > .pre-commit-config.yaml << EOF repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml - id: check-added-large-files - repo: https://github.com/tekwizely/pre-commit-golang rev: v1.0.0-rc.1 hooks: - id: go-fmt - id: go-vet-mod - id: go-mod-tidy EOF # 安装pre-commit if command -v pip &> /dev/null; then pip install pre-commit pre-commit install echo "✓ Pre-commit钩子已安装" else echo "警告: pip未安装,跳过pre-commit安装" fi else echo "✓ Pre-commit配置已存在" fi # 显示下一步操作 echo "" echo "=== 开发环境设置完成 ===" echo "" echo "下一步操作:" echo "1. 启动主服务器: go run cmd/server/main.go" echo "2. 启动数据网关: go run cmd/gateway/main.go" echo "3. 启动监控服务: go run cmd/monitor/main.go" echo "4. 运行设备模拟器: go run simulations/main.go" echo "" echo "或者使用热重载: air -c .air.toml" echo "" echo "访问应用:" echo "- 管理平台: http://localhost:8080" echo "- Grafana: http://localhost:3000 (admin/admin)" echo "- InfluxDB: http://localhost:8086" echo "" echo "测试API:" echo "curl -X GET http://localhost:8080/health" echo ""