页面好看的蛋糕网站,人力资源公司名字大全,word可以做招聘网站吗,优品惠网站建设需求一、上传你的go项目如#xff1a;这是我的项目目录可以直接进行拖拽二、在虚拟机上创建这样的目录结构~/GoProJect/pro1/test01 我这样是为了确保导入包的路径正确#xff0c;确保项目能正常运行。然后就把common\server\user\vin 这四个文件拖到 test01目录下#xff0c;还…一、上传你的go项目如这是我的项目目录可以直接进行拖拽二、在虚拟机上创建这样的目录结构~/GoProJect/pro1/test01 我这样是为了确保导入包的路径正确确保项目能正常运行。然后就把common\server\user\vin 这四个文件拖到 test01目录下还有go.mod和go.sum也放到test01目录下三、构建Dockerfile文件注意也是放在test01目录下当然也可以放在其他目录不过这样更方便# 构建阶段 # 多阶段构建第一阶段专门用于编译 # 基础镜像golang:1.21-alpine 包含go编译环境的轻量级 Alpine Linux # 别名As builder 给这个阶段命令方便第二阶段引用 FROM golang:1.21-alpine AS builder # 设置工作目录容器默认的工作目录 WORKDIR /app # 设置Go模块代理国内加速 ENV GOPROXYhttps://goproxy.cn,direct # 复制go.mod和go.sum文件 COPY go.mod go.sum ./ # 下载依赖 RUN go mod download # 复制所有源代码 COPY . . # 编译Go程序 - 修改为你的main.go路径 # CGO_ENABLED0禁用CGO生成纯Go的静态二进制文件 # GOOSlinux目标操作系统为Linux # GOARCHamd64目标CPU架构为x86_64 RUN CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -o /app/chat-server ./server/ # 运行阶段 FROM alpine:latest WORKDIR /app # 安装必要的包 # ca-certificates HTTPS证书 tzdata 时区数据 RUN apk --no-cache add ca-certificates tzdata # 设置时区可选 ENV TZAsia/Shanghai # 从构建阶段复制可执行文件 COPY --frombuilder /app/chat-server . # 创建必要的目录结构用于日志等 RUN mkdir -p /app/logs # 声明容器端口 EXPOSE 8080 # 运行程序 CMD [./chat-server]四、构建docker-compose.yml 文件version: 3.8 services: chat-server: build: . container_name: chat-server restart: unless-stopped ports: - 8080:8080 environment: DB_HOST: mysql DB_PORT: 3306 DB_USER: root DB_PASSWORD: root DB_NAME: chatroom depends_on: mysql: condition: service_healthy networks: - chat-net mysql: image: mysql:8.0 container_name: chat-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: chatroom healthcheck: test: [CMD, mysqladmin, ping, -h, 127.0.0.1] interval: 3s timeout: 5s retries: 10 volumes: - mysql_data:/var/lib/mysql - ./mysql-init:/docker-entrypoint-initdb.d ports: - 3307:3306 networks: - chat-net networks: chat-net: driver: bridge volumes: mysql_data:五、数据库初始化创建数据库初始化脚本# 创建数据库初始化脚本 mkdir -p mysql-init cat mysql-init/init.sql EOF CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); EOF六、修改服务端数据库的连接func InitDB() error { var err error // 从环境变量读取配置Docker Compose设置 dbHost : os.Getenv(DB_HOST) dbPort : os.Getenv(DB_PORT) dbUser : os.Getenv(DB_USER) dbPassword : os.Getenv(DB_PASSWORD) dbName : os.Getenv(DB_NAME) // 设置默认值 if dbHost { dbHost localhost } if dbPort { dbPort 3306 } if dbUser { dbUser root } if dbPassword { dbPassword root } if dbName { dbName chatroom } // 构建DSN dsn : fmt.Sprintf(%s:%stcp(%s:%s)/%s?charsetutf8mb4parseTimetrue, dbUser, dbPassword, dbHost, dbPort, dbName) fmt.Printf(正在连接数据库: %s%s:%s\n, dbUser, dbHost, dbPort) // 重试连接 for i : 0; i 10; i { db, err sql.Open(mysql, dsn) if err ! nil { fmt.Printf(连接失败重试 %d/10: %v\n, i1, err) time.Sleep(3 * time.Second) continue } err db.Ping() if err ! nil { fmt.Printf(Ping失败重试 %d/10: %v\n, i1, err) db.Close() time.Sleep(3 * time.Second) continue } fmt.Println(数据库连接成功) return nil } return fmt.Errorf(无法连接数据库: %v, err) }注意主要是增加了环境变量的配置当运行时可以读取到设置的环境变量如果没有就按照默认的七、启动服务1.构建镜像docker-compose build --no-cache2.启动服务docker-compose up --build -d3.检查状态docker-compose logs -f chat-server因该可以看到数据库连接成功4.在test01目录下go run user/user.go 就可以正常进行登录或注册了