برای deploy روش های زیادی وجود داره که اغلب وارد پیچیدگی هایی میشن. من تصمیم دارم کوتاه و ساده در موردش بنویسم و از تنظیمات جانبی اون صرف نظر میکنم.
در مرحله اول به یک http server نیاز داریم. من خودم مخالف استفاده از فریمورک های golang هستم ولی الان دم دسته و مثال رو با gin انجام میدم. شما هر طور خواستین بنویسید.
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
router := gin.Default()
router.GET("/", func(context *gin.Context) {
context.JSON(http.StatusOK, gin.H{
"status": "OK",
})
})
router.Run(":8080")
}
به Dockerfile نیاز داریم. پیشفرض به پورت 8080 گوش میده و app رو اجرا میکنه(پورت http server هم روی 8080 ست شده).
FROM golang:1.13
ENV APP_NAME app
ENV PORT 8080
WORKDIR /go/src/app
CMD ./${APP_NAME}
EXPOSE ${PORT}
و در انتها docker-compose.yml رو مینویسیم. به volumes دقت کنید. کنار docker-compose باید http server که پیشفرض app هست وجود داشته باشه. میتونید پورت و نام فایل رو داخل docker-compose در قسمت environment تغییر بدین.
version: '3'
services:
golang:
build:
context: .
dockerfile: Dockerfile
image: app/golang
environment:
- APP_NAME=server
ports:
- "8080:8080"
volumes:
- ./:/go/src/app
مورد دیگه ای نداره docker-compose build و بعدش docker-compose up کنید.
ehsan@elik310:~/go/src/job$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------
app_golang_1 /bin/sh -c ./${APP_NAME} Up 0.0.0.0:8080->8080/tcp
docker