目录结构
└─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"]