احسان رضایی

یک توسعه دهنده، شاید هم نه.


استقرار وب اپلیکیشن golang با استفاده از docker-compose

در golang , / تاریخ ارسال 1398/11/17 - 22:13 / 0 نظر / 16 بازدید / آخرین ویرایش 1399/01/07 - 16:08

برای 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

 

ارسال نظر