目录结构

└─demo
   go.mod
   go.sum
   main.go
编译

目标:编译项目得到可执行文件 app

cd demo
#编译出支持当前系统的可执行文件
go build -o app .

# 交叉编译
# Mac下编译Linux, Windows平台的64位可执行文件:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app .
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o app .

# Linux下编译Mac, Windows平台的64位可执行文件:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o app .
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o app .

# Windows下编译Mac, Linux平台的64位可执行文件:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o app .
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app .

GOOS:目标可执行程序运行操作系统,支持 darwin,freebsd,linux,windows GOARCH:目标可执行程序操作系统构架,包括 386,amd64,arm

部署

通过编译我们得到了可执行文件 app, 下面只需要把它设置为后台守护进程即可

  • nohup ./app &
  • 或者使用supervisor

然后就可以通过程序监听的端口访问了,如:localhost:8000

如果不想直接暴露端口,可以使用nginx反向代理,如:客户访问app.cw.net,nginx代理到8000端口

docker部署

构建镜像,一个项目一个容器

Dockerfile

FROM golang:1.16 AS build
WORKDIR /go/src/demo
COPY . .

RUN go build -o app .

#FROM build AS development
#RUN apt-get update \
#    && apt-get install -y git
#CMD ["go", "run", "main.go"]

FROM alpine:3.12
EXPOSE 8000
COPY --from=build /go/src/demo/app /app
CMD ["/app"]