由於之後我们会解说到像是Gin搭配RDBMS或是Gin搭配Cache....等,因此在这章节我们将会写好我们gin example所要用到的Dockerfile以及搭配的docker-compose。
FROM golang:latest
RUN mkdir -p /usr/local/go/src/ironman-2021
WORKDIR /usr/local/go/src/ironman-2021
ADD . /usr/local/go/src/ironman-2021
RUN go mod download
RUN go build ./main.go
EXPOSE 8080
CMD ["./main"]
$GOPATH
之下go mod download
,下载所有用到的第三方套件main.go
主程序档对docker不熟者可以去参考我去年的铁人赛文章,连结在此
https://ithelp.ithome.com.tw/users/20129737/ironman/3501
前半部分都是围绕着docker以及docker-compose解说
version: '3.5'
services:
postgresql:
container_name: postgresql
image: postgres:12.7
healthcheck:
test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root" ]
timeout: 45s
interval: 10s
retries: 10
ports:
- "5432:5432"
environment:
- POSTGRES_USER=root
- POSTGRES_PASSWORD=password
- APP_DB_USER=ironman
- APP_DB_PASS=password
- APP_DB_NAME=gorm
volumes:
- ./db:/docker-entrypoint-initdb.d/
networks:
- backend-bridge
restart: always
redis:
container_name: redis
image: redis:latest
ports:
- "6379:6379"
networks:
- backend-bridge
restart: always
ironman-2021:
container_name: ironman-2021
ports:
- "8080:8080"
build:
context: ./
dockerfile: Dockerfile
command: ./main
restart: always
networks:
- backend-bridge
depends_on:
- postgresql
- redis
networks:
backend-bridge:
driver: bridge
volumes:
data: {}
env
extension file的形式汇入,而这个container会在之後的gorm
篇章使用到。以上部分也是如有不懂可以参考我去年铁人赛文章!
https://ithelp.ithome.com.tw/users/20129737/ironman/3501
前半部分都是围绕着docker以及docker-compose解说
最後则是main.go部分,它与day-16 branch比起来多了汇入.env
变数的部分!
package main
import (
"github.com/gin-gonic/gin"
"github.com/joho/godotenv"
"ironman-2021/app/config"
"os"
)
func main() {
envErr := godotenv.Load()
if envErr != nil {
panic(envErr)
}
port := os.Getenv("PORT")
app := gin.Default()
app.GET("/hc", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "health check",
})
})
config.RouteUsers(app)
err := app.Run(":" + port)
if err != nil {
panic(err)
}
}
.env
档案的存在,没有的话会出现 Error loading .env file
的错误,有的话则接下来就能读取.env
之中的变数资料。这章节我们做了许许多多未来後端开发的事前准备,像是下个章节解说gorm时所要用到的postgresql
,以及所需吃到环境变数的godotenv
等,这也让我们往後的开发事半功倍。
这章节的程序码也会放在下方连结~
https://github.com/Neskem/Ironman-2021/tree/Day-17
今天我们要来讨论高并发下的资料库考量 Day03_高并发下的资料库考量 ...
tags: tags: 2021IT #18数据上的各种距离(3) 夹角余弦(Cosine) 几何中...
object + collection 指的是 object 里面的某 Property 的资料型态...
前言 在昨天的文章介绍了 Nginx 的基本观念以及 Nginx container 的内部操作,今...
机器学习的路上仍然需要撰写程序来达到我们期望的效果,在前面的文章中,我们已经介绍了从机器学习的基本...