Spaces:
Runtime error
Runtime error
Upload 15 files
Browse files- .env.example +2 -1
- Dockerfile +39 -39
- database/database.go +22 -6
- 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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() {
|