| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- #!/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 ""
|