setup-dev.sh 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. #!/bin/bash
  2. # 物联网基站本地开发环境设置脚本
  3. set -e
  4. echo "=== 物联网基站本地开发环境设置 ==="
  5. # 检查Docker是否安装
  6. if ! command -v docker &> /dev/null; then
  7. echo "错误: Docker未安装,请先安装Docker"
  8. exit 1
  9. fi
  10. # 检查Docker Compose是否安装
  11. if ! command -v docker-compose &> /dev/null; then
  12. echo "错误: Docker Compose未安装,请先安装Docker Compose"
  13. exit 1
  14. fi
  15. # 检查Go是否安装
  16. if ! command -v go &> /dev/null; then
  17. echo "错误: Go未安装,请先安装Go 1.19+"
  18. exit 1
  19. fi
  20. # 检查Go版本
  21. GO_VERSION=$(go version | awk '{print $3}' | sed 's/go//')
  22. REQUIRED_VERSION="1.19"
  23. if [ "$(printf '%s\n' "$REQUIRED_VERSION" "$GO_VERSION" | sort -V | head -n1)" != "$REQUIRED_VERSION" ]; then
  24. echo "错误: Go版本过低,需要Go $REQUIRED_VERSION 或更高版本,当前版本: $GO_VERSION"
  25. exit 1
  26. fi
  27. echo "✓ 环境检查通过"
  28. # 创建开发配置文件
  29. if [ ! -f config/config.dev.yaml ]; then
  30. echo "创建开发配置文件..."
  31. cp config/config.yaml config/config.dev.yaml
  32. # 修改开发配置
  33. sed -i.bak 's/mode: "debug"/mode: "debug"/' config/config.dev.yaml
  34. sed -i.bak 's/output: "logs\/app.log"/output: "stdout"/' config/config.dev.yaml
  35. sed -i.bak 's/level: "info"/level: "debug"/' config/config.dev.yaml
  36. echo "✓ 开发配置文件已创建"
  37. else
  38. echo "✓ 开发配置文件已存在"
  39. fi
  40. # 创建环境变量文件
  41. if [ ! -f .env ]; then
  42. echo "创建环境变量文件..."
  43. cat > .env << EOF
  44. CONFIG_PATH=config/config.dev.yaml
  45. GIN_MODE=debug
  46. EOF
  47. echo "✓ 环境变量文件已创建"
  48. else
  49. echo "✓ 环境变量文件已存在"
  50. fi
  51. # 创建必要的目录
  52. echo "创建必要的目录..."
  53. mkdir -p logs
  54. mkdir -p uploads
  55. mkdir -p tmp
  56. echo "✓ 目录创建完成"
  57. # 启动基础服务
  58. echo "启动基础服务..."
  59. docker-compose up -d postgres influxdb redis nats mqtt
  60. # 等待服务启动
  61. echo "等待服务启动..."
  62. sleep 10
  63. # 检查服务状态
  64. echo "检查服务状态..."
  65. docker-compose ps
  66. # 创建数据库
  67. echo "创建数据库..."
  68. docker-compose exec -T postgres psql -U postgres -c "CREATE DATABASE iot_base_station;" || echo "数据库可能已存在"
  69. # 运行数据库迁移
  70. echo "运行数据库迁移..."
  71. go run cmd/migrate/main.go up
  72. # 安装开发工具
  73. echo "安装开发工具..."
  74. go install github.com/cosmtrek/air@latest
  75. go install github.com/go-delve/delve/cmd/dlv@latest
  76. go install golang.org/x/tools/cmd/goimports@latest
  77. go install golang.org/x/lint/golint@latest
  78. # 创建VS Code配置
  79. if [ ! -d .vscode ]; then
  80. echo "创建VS Code配置..."
  81. mkdir -p .vscode
  82. cat > .vscode/launch.json << EOF
  83. {
  84. "version": "0.2.0",
  85. "configurations": [
  86. {
  87. "name": "Launch Server",
  88. "type": "go",
  89. "request": "launch",
  90. "mode": "debug",
  91. "program": "\${workspaceFolder}/cmd/server/main.go",
  92. "env": {
  93. "CONFIG_PATH": "config/config.dev.yaml"
  94. }
  95. },
  96. {
  97. "name": "Launch Gateway",
  98. "type": "go",
  99. "request": "launch",
  100. "mode": "debug",
  101. "program": "\${workspaceFolder}/cmd/gateway/main.go",
  102. "env": {
  103. "CONFIG_PATH": "config/config.dev.yaml"
  104. }
  105. }
  106. ]
  107. }
  108. EOF
  109. cat > .vscode/settings.json << EOF
  110. {
  111. "go.useLanguageServer": true,
  112. "go.formatTool": "goimports",
  113. "go.lintTool": "golint",
  114. "go.lintOnSave": "package",
  115. "editor.formatOnSave": true,
  116. "editor.codeActionsOnSave": {
  117. "source.organizeImports": true
  118. }
  119. }
  120. EOF
  121. echo "✓ VS Code配置已创建"
  122. else
  123. echo "✓ VS Code配置已存在"
  124. fi
  125. # 创建Pre-commit钩子
  126. if [ ! -f .pre-commit-config.yaml ]; then
  127. echo "创建Pre-commit钩子..."
  128. cat > .pre-commit-config.yaml << EOF
  129. repos:
  130. - repo: https://github.com/pre-commit/pre-commit-hooks
  131. rev: v4.4.0
  132. hooks:
  133. - id: trailing-whitespace
  134. - id: end-of-file-fixer
  135. - id: check-yaml
  136. - id: check-added-large-files
  137. - repo: https://github.com/tekwizely/pre-commit-golang
  138. rev: v1.0.0-rc.1
  139. hooks:
  140. - id: go-fmt
  141. - id: go-vet-mod
  142. - id: go-mod-tidy
  143. EOF
  144. # 安装pre-commit
  145. if command -v pip &> /dev/null; then
  146. pip install pre-commit
  147. pre-commit install
  148. echo "✓ Pre-commit钩子已安装"
  149. else
  150. echo "警告: pip未安装,跳过pre-commit安装"
  151. fi
  152. else
  153. echo "✓ Pre-commit配置已存在"
  154. fi
  155. # 显示下一步操作
  156. echo ""
  157. echo "=== 开发环境设置完成 ==="
  158. echo ""
  159. echo "下一步操作:"
  160. echo "1. 启动主服务器: go run cmd/server/main.go"
  161. echo "2. 启动数据网关: go run cmd/gateway/main.go"
  162. echo "3. 启动监控服务: go run cmd/monitor/main.go"
  163. echo "4. 运行设备模拟器: go run simulations/main.go"
  164. echo ""
  165. echo "或者使用热重载: air -c .air.toml"
  166. echo ""
  167. echo "访问应用:"
  168. echo "- 管理平台: http://localhost:8080"
  169. echo "- Grafana: http://localhost:3000 (admin/admin)"
  170. echo "- InfluxDB: http://localhost:8086"
  171. echo ""
  172. echo "测试API:"
  173. echo "curl -X GET http://localhost:8080/health"
  174. echo ""