Vit*_*aev 5 deployment static-files go docker
我正在开发一个包含一些静态文件(配置和html模板)的小型Web应用程序:
??? Dockerfile
??? manifest.json
??? session
? ??? config.go
? ??? handlers.go
? ??? restapi_client.go
??? templates
? ??? header.tmpl
? ??? index.tmpl
??? webserver.go
Run Code Online (Sandbox Code Playgroud)
例如,代码中的模板是使用本地路径发现的(这是一个好习惯吗?):
func init() {
templates = template.Must(template.ParseGlob("templates/*.tmpl"))
}
Run Code Online (Sandbox Code Playgroud)
Docker容器用于应用程序部署.正如您在中看到的Dockerfile,我必须复制/go/bin目录中的所有静态文件:
FROM golang:latest
ENV PORT=8000
ADD . /go/src/webserver/
RUN go install webserver
RUN go get webserver
# Copy static files
RUN cp -r /go/src/webserver/templates /go/bin/templates
RUN cp -r /go/src/webserver/manifest.json /go/bin/manifest.json
EXPOSE $PORT
ENTRYPOINT cd /go/bin && PORT=$PORT REDIRECT=mailtest-1.dev.search.km /go/bin/webserver -manifest=manifest.json
Run Code Online (Sandbox Code Playgroud)
我认为这种解决方法应该被认为是不正确的,因为它违反了标准的Linux约定(单独存储可执行文件和各种数据文件).如果有人也使用Docker进行Golang Web应用程序部署,请分享您的经验:
既然你传递一个相对的路径名template.ParseGlob,它会寻找相对于当前工作目录模板,你设置/go/bin你的ENTRYPOINT.
我建议修改你Dockerfile的使用WORKDIR指令来设置工作目录/go/src/webserver,这样可以避免复制文件/go/bin,例如:
FROM golang:latest
ADD . /go/src/webserver
WORKDIR /go/src/webserver
RUN go get
RUN go install
ENV PORT=8000
ENV REDIRECT=mailtest-1.dev.search.km
EXPOSE 8000
ENTRYPOINT /go/bin/webserver -manifest=manifest.json
Run Code Online (Sandbox Code Playgroud)
您还可以考虑使用Flynn来部署和管理您的应用程序(请参阅此处了解部署Go Web应用程序的演练).
| 归档时间: |
|
| 查看次数: |
2121 次 |
| 最近记录: |