首页 > 其他分享 >15分钟学 Go 第 44 天: 项目部署基础

15分钟学 Go 第 44 天: 项目部署基础

时间:2024-11-08 10:44:29浏览次数:5  
标签:容器 15 部署 44 go Go 8080 Docker

第44天:项目部署基础

学习目标

在这一课中,我们将学习如何部署Go应用程序。重点包括:

  1. Go应用的构建与打包
  2. 选择合适的部署环境
  3. 使用Docker容器化Go应用
  4. 云平台部署基础
  5. 常见问题与调试方法

1. Go应用的构建与打包

1.1 构建应用

在部署之前,首先需要构建Go应用。这里的构建是指将代码编译成可执行文件。

使用以下命令构建你的Go项目:

go build -o myapp main.go

这会生成myapp可执行文件。

1.2 目录结构

一个典型的Go项目目录结构如下:

myapp/
│
├── main.go         // 入口文件
├── go.mod          // 模块定义文件
├── go.sum          // 依赖文件
├── cmd/            // 命令行工具
│   ├── server.go
│   └── ...
├── pkg/            // 可复用的库代码
├── internal/       // 内部应用逻辑
└── deployments/     // 部署相关文件

1.3 示例代码

下面是一个简单的HTTP服务器示例:

// main.go
package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("Server starting on :8080")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        fmt.Println("Failed to start server:", err)
    }
}

1.4 运行示例代码

将上面的代码保存为main.go,然后在终端中运行以下指令:

go run main.go

打开浏览器,访问 http://localhost:8080,你应该会看到“Hello, World!”的提示。


2. 选择合适的部署环境

部署Go应用时,可以选择多种环境,如:

部署方式描述优点缺点
本地服务器在本地或自有服务器上运行控制力强运维成本高
虚拟专用服务器(VPS)租用虚拟机,部署应用灵活性高需自行管理
容器化(Docker)使用Docker容器打包和运行应用一致的运行环境学习曲线
云平台如AWS、Google Cloud、Azure等扩展性好,易于管理成本可能较高

3. 使用Docker容器化Go应用

3.1 Docker简介

Docker是一个开源平台,允许开发者将应用及其依赖打包成容器。这些容器可以在任何安装了Docker的环境中运行。

3.2 创建Dockerfile

在项目根目录创建一个Dockerfile,内容如下:

# 使用官方的Go镜像作为基础镜像
FROM golang:1.20 AS builder

# 设置工作目录
WORKDIR /app

# 将go.mod和go.sum复制到工作目录
COPY go.mod go.sum ./

# 下载依赖
RUN go mod download

# 将代码复制到容器中
COPY . .

# 编译应用
RUN go build -o myapp main.go

# 使用轻量级的Alpine镜像作为运行时
FROM alpine:latest

# 设置工作目录
WORKDIR /root/

# 将构建的应用复制到运行时镜像
COPY --from=builder /app/myapp .

# 暴露端口
EXPOSE 8080

# 运行应用
CMD ["./myapp"]

3.3 构建Docker镜像

使用以下命令构建Docker镜像:

docker build -t myapp .

3.4 运行Docker容器

构建完成后,运行以下命令启动容器:

docker run -p 8080:8080 myapp

3.5 测试容器

打开浏览器,访问 http://localhost:8080,你应该同样会看到“Hello, World!”的提示。

3.6 Docker运行流程图

构建容器 运行容器 接收请求 处理请求 返回响应

4. 云平台部署基础

4.1 选择云平台

常见的云服务提供商包括:AWS、Google Cloud、Azure等。选择合适的平台,考虑如下因素:

  • 成本
  • 支持的开发工具
  • 文档和社区支持
  • 数据库和存储选项

4.2 AWS部署示例

4.2.1 创建EC2实例
  1. 登录到AWS管理控制台。
  2. 创建一个新的EC2实例,选择适合的操作系统(例如Ubuntu)。
  3. 配置安全组,确保在入站规则中允许8080端口。
4.2.2 连接到实例

使用SSH连接到新创建的EC2实例:

ssh -i "your-key.pem" ubuntu@your-ec2-instance-ip
4.2.3 安装Docker

在EC2实例中运行以下命令安装Docker:

sudo apt-get update
sudo apt-get install docker.io
sudo systemctl start docker
sudo systemctl enable docker
4.2.4 部署Go应用

将Docker镜像推送到Docker Hub(或其他私有仓库),然后在EC2实例中运行:

docker run -p 8080:8080 myapp

访问 http://your-ec2-instance-ip:8080 查看效果。


5. 常见问题与调试方法

5.1 常见问题

  • 应用无法启动:查看容器日志,使用 docker logs <CONTAINER_ID> 获取详细信息。
  • 端口未打开:确保云服务的入站规则允许访问所使用的端口。

5.2 调试方法

使用以下命令查看容器状态:

docker ps -a

进入容器进行手动调试:

docker exec -it <CONTAINER_ID> /bin/sh

总结

今天我们学习了如何构建和部署Go应用,包括本地部署、Docker容器化以及云平台部署的方法。掌握这些技能后,你将能够更方便地把自己的应用发布到生产环境。接下来几天,我们将深入探讨监控和日志,这对于维护应用的稳定至关重要。

参考资料

通过这一节的学习,希望大家对Go应用的部署有了更深刻的理解,并能够熟练运用相关知识进行项目的实际部署。继续加油,我们下一节见!


怎么样今天的内容还满意吗?再次感谢观众老爷的观看,关注GZH:凡人的AI工具箱,回复666,送您价值199的AI大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!

标签:容器,15,部署,44,go,Go,8080,Docker
From: https://blog.csdn.net/weixin_40780178/article/details/143617069

相关文章

  • P5479 [BJOI2015] 隐身术 题解
    题目传送门前置知识后缀数组简介|字符串哈希|二分解法考虑分别计算出编辑距离恰好等于\(k_{0}\in[0,k]\)的答案。观察在编辑距离的存在下,长度差至多为\(k\)。考虑设\(f_{i,j}\)表示最大的\(x\)使得\(s_{1\simx}\)和\(t_{1\simx+j}\)可以在\(i\)次编......
  • golang 数组切片
    golang基础数组+切片packagemainimport( "fmt")//数组切片学习funcmain(){ //数组的初始化方式 nums1:=[3]int{1,2,3}//指定长度,全部初始化 fmt.Println("nums1:",nums1) nums2:=[5]int{1,2,3}//指定长度,部分初始化 fmt.Println("nums2:",nums2)......
  • ABB机器人IRB4400减速机维修故障类型
    ABB机器人IRB4400是一款在工业领域广泛应用的机器人型号,其ABB机器人IRB4400齿轮箱作为关键的动力传输部件,对于机器人的精确运动和高效工作起着至关重要的作用。通过及时的进行维修和保养,可以延长齿轮箱的使用寿命,提高机器人的工作效率和稳定性。一、ABB工业机器人减速机齿轮磨......
  • 计算机毕业设计Python+图神经网络手机推荐系统 手机价格预测 手机可视化 手机数据分析
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......
  • 中文版定位修改软件 AnyGo for Mac GPS虚拟定位软件安装资源
    AnyGo是一款专业的虚拟定位软件,专为Mac系统设计,功能强大且易于使用。它能够模拟GPS位置,让用户自定义虚拟位置并应用到手机等移动设备上。AnyGo支持多种定位模式,如单点、线路和往返模式,满足用户在不同场景下的定位需求。其界面简洁直观,操作灵活方便,与多种位置相关的应用程序兼容,如......
  • The 3rd Universal Cup. Stage 15: Chengdu 解题集
    A.ArrowaRow我们把整个序列划分成若干个形似\(\text{>>>>..>>}\)的连续段,并尝试用一个最右边连通块里最左边的\(\text{>>>}\)去覆盖掉左边不和它在一个段里的所有\(\text{>}\),如果最右边的连续段长度小于2或者没有连续段则肯定无解。对于在同一个连续段里其他的\(\te......
  • 想更换网站logo要怎么修改
    更换网站Logo通常涉及以下几个步骤:准备新Logo:确保新Logo的尺寸和格式符合网站的要求。常见的Logo格式有PNG、JPEG、SVG等。上传新Logo:通过FTP工具或网站后台管理界面将新Logo上传到服务器上的指定目录。修改HTML/CSS代码:打开网站的HTML文件,找到当前Logo的引用路......
  • #473. 编辑 & P5479 [BJOI2015] 隐身术
    模拟赛出到加强版了,一点不会所以记录下。枚举每个后缀。设\(f_{i,j}\)为操作\(i\)次,长度增加\(j\),即插入的次数减删除的次数,所能匹配到的最大位置。也就是\(A\)的前\(f_{i,j}\)位匹配\(B\)的前\(f_{i,j}+j\)位。考虑转移。假如已经操作完了,那显然有\(f_{i,j}\ge......
  • SP15637 GNYR04H - Mr Youngs Picture Permutations 解析
    SP15637GNYR04H-MrYoungsPicturePermutations解析题目链接分析题目性质大意就是给\(k\)排然后每个数列单调,每个横列单调,求满足这样排列的方案数。我们发现:与其为每个位置分配某个学生不如考虑将每个学生分给某个位置。思路根据以上,不妨设:\(f_{a_1,a_2,a_3,a_4,a_5}......
  • 代码随想录算法训练营第九天|LeetCode151.翻转字符串里的单词、卡码网:55.右旋转字符串
    前言打卡代码随想录算法训练营第49期第九天︿( ̄︶ ̄)︿首先十分推荐学算法的同学可以先了解一下代码随想录,可以在B站卡哥B站账号、代码随想录官方网站代码随想录了解,卡哥清晰易懂的算法教学让我直接果断关注,也十分有缘和第49期的训练营大家庭一起进步。今日题目LeetCode151翻转字......