zerolin1024 commited on
Commit
e0ff2ea
·
verified ·
1 Parent(s): 6c8181f

Upload 15 files

Browse files
Files changed (4) hide show
  1. .env.example +2 -1
  2. Dockerfile +39 -39
  3. database/database.go +22 -6
  4. main.go +5 -1
.env.example CHANGED
@@ -7,4 +7,5 @@ SECRET="asupersecretkey"
7
  ADMIN_USERNAME="admin"
8
  ADMIN_PASSWORD="password"
9
 
10
- CORS_ALLOWED_ORIGINS="http://localhost:3000,http://192.168.2.4:3000"
 
 
7
  ADMIN_USERNAME="admin"
8
  ADMIN_PASSWORD="password"
9
 
10
+ CORS_ALLOWED_ORIGINS="http://localhost:3000,http://192.168.2.4:3000"
11
+ PORT=8080
Dockerfile CHANGED
@@ -1,40 +1,40 @@
1
- # 使用官方 Go 镜像作为构建环境
2
- FROM golang:1.24-alpine AS builder
3
-
4
- # 安装 CGO 编译器
5
- RUN apk --no-cache add build-base
6
-
7
- # 设置工作目录
8
- WORKDIR /app
9
-
10
- # 复制 go mod 文件
11
- COPY go.mod go.sum ./
12
-
13
- # 下载依赖
14
- RUN go mod download
15
-
16
- # 复制源代码
17
- COPY . .
18
-
19
- # 构建应用
20
- RUN CGO_ENABLED=1 GOOS=linux go build -a -installsuffix cgo -o main .
21
-
22
- # 使用轻量级的 Alpine Linux 作为运行环境
23
- FROM alpine:latest
24
-
25
- # 安装必要的包
26
- RUN apk --no-cache add ca-certificates sqlite
27
-
28
- # 设置工作目录
29
- WORKDIR /root/
30
-
31
- # 从构建阶段复制可执行文件
32
- COPY --from=builder /app/main .
33
-
34
- # 环境变量将在运行时传入,而不是在构建时。
35
-
36
- # 暴露端口
37
- EXPOSE 8080
38
-
39
- # 运行应用
40
  CMD ["./main"]
 
1
+ # 使用官方 Go 镜像作为构建环境
2
+ FROM golang:1.24-alpine AS builder
3
+
4
+ # 安装 CGO 编译器
5
+ RUN apk --no-cache add build-base
6
+
7
+ # 设置工作目录
8
+ WORKDIR /app
9
+
10
+ # 复制 go mod 文件
11
+ COPY go.mod go.sum ./
12
+
13
+ # 下载依赖
14
+ RUN go mod download
15
+
16
+ # 复制源代码
17
+ COPY . .
18
+
19
+ # 构建应用
20
+ RUN CGO_ENABLED=1 GOOS=linux go build -a -installsuffix cgo -o main .
21
+
22
+ # 使用轻量级的 Alpine Linux 作为运行环境
23
+ FROM alpine:latest
24
+
25
+ # 安装必要的包
26
+ RUN apk --no-cache add ca-certificates sqlite
27
+
28
+ # 设置工作目录
29
+ WORKDIR /root/
30
+
31
+ # 从构建阶段复制可执行文件
32
+ COPY --from=builder /app/main .
33
+
34
+ # 环境变量将在运行时传入,而不是在构建时。
35
+
36
+ # 暴露端口
37
+ EXPOSE 8080
38
+
39
+ # 运行应用
40
  CMD ["./main"]
database/database.go CHANGED
@@ -1,7 +1,9 @@
1
  package database
2
 
3
  import (
 
4
  "log"
 
5
  "os"
6
  "strings"
7
  "uptime/backend/models"
@@ -19,13 +21,27 @@ func ConnectDatabase() {
19
  if dsn == "" {
20
  log.Println("DATABASE_URI is not set, falling back to sqlite.")
21
  DB, err = gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
22
- } else if strings.HasPrefix(dsn, "mysql://") {
23
- // GORM's MySQL driver expects a DSN without the scheme.
24
- // Example: user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local
25
- mysqlDSN := strings.TrimPrefix(dsn, "mysql://")
26
- DB, err = gorm.Open(mysql.Open(mysqlDSN), &gorm.Config{})
27
  } else {
28
- log.Fatalf("Unsupported database URI scheme: %s", dsn)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  }
30
 
31
  if err != nil {
 
1
  package database
2
 
3
  import (
4
+ "fmt"
5
  "log"
6
+ "net/url"
7
  "os"
8
  "strings"
9
  "uptime/backend/models"
 
21
  if dsn == "" {
22
  log.Println("DATABASE_URI is not set, falling back to sqlite.")
23
  DB, err = gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
 
 
 
 
 
24
  } else {
25
+ // Parse the aiven-provided URI
26
+ parsedURL, err := url.Parse(dsn)
27
+ if err != nil {
28
+ log.Fatal("Failed to parse DATABASE_URI!", err)
29
+ }
30
+
31
+ // Extract components
32
+ password, _ := parsedURL.User.Password()
33
+ host := parsedURL.Host
34
+ path := strings.Trim(parsedURL.Path, "/")
35
+
36
+ // Format for gorm
37
+ dsn = fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
38
+ parsedURL.User.Username(),
39
+ password,
40
+ host,
41
+ path,
42
+ )
43
+
44
+ DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
45
  }
46
 
47
  if err != nil {
main.go CHANGED
@@ -61,7 +61,11 @@ func main() {
61
  "message": "pong",
62
  })
63
  })
64
- r.Run() // listen and serve on 0.0.0.0:8080
 
 
 
 
65
  }
66
 
67
  func createAdminUser() {
 
61
  "message": "pong",
62
  })
63
  })
64
+ port := os.Getenv("PORT")
65
+ if port == "" {
66
+ port = "8080" // Default port
67
+ }
68
+ r.Run(":" + port)
69
  }
70
 
71
  func createAdminUser() {