-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
105 lines (82 loc) · 2.78 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
include .env
define check_arg
@[ ${1} ] || ( echo ">> ${2} is not set, use: ${2}=value"; exit 1 )
endef
CMD_CD_APP_PATH='cd ${APP_PATH}'
CMD_BUILD_IMAGE='${CMD_CD_APP_PATH} && docker build --force-rm --no-cache --build-arg appname=${APP_NAME} -t ${APP_NAME} .'
CMD_RUN_CONTAINER='${CMD_CD_APP_PATH} && docker run --restart always -v $${PWD}/config:/app/config -v $${PWD}/data:/app/data --name ${APP_NAME} -d ${APP_NAME}'
CMD_RESTART_CONTAINER='docker restart ${APP_NAME}'
CMD_RM_CONTAINER='docker rm ${APP_NAME} -f'
CMD_RM_IMAGE='docker rmi ${APP_NAME} -f'
CMD_STOP_CONTAINER='docker stop ${APP_NAME}'
CMD_LOGS_CONTAINER='docker logs -f --tail=100 ${APP_NAME}'
appname:
@echo Application named: ${APP_NAME}
run: appname build.local
@./${APP_NAME}
clean:
@rm -rf ${APP_NAME}
@echo clean: OK!
build.local: clean
@go build -o ${APP_NAME}
@echo build.local: OK!
build.linux: clean
@GOOS=linux GOARCH=amd64 go build -o ${APP_NAME}
@echo build.linux: OK!
# Remote rules below
## Create application directory on remote production server
mkdir.apppath:
@ssh ${USER}@${HOST} mkdir -p ${APP_PATH}
## Upload app binary file
upload.bin: build.linux
@scp ./${APP_NAME} ${USER}@${HOST}:${APP_PATH}
## Upload dockerfile
upload.dockerfile:
@scp ./Dockerfile ${USER}@${HOST}:${APP_PATH}
## Upload app config
upload.config:
@scp ./config/config.yaml ${USER}@${HOST}:${APP_PATH}/config
## Upload tube config
upload.tube.config:
$(call check_arg, ${tube}, tube)
@scp ./config/${tube}.config.yaml ${USER}@${HOST}:${APP_PATH}/config
# Create data, config folders
create.data.and.config:
@ssh ${USER}@${HOST} mkdir -p ${APP_PATH}/data
@ssh ${USER}@${HOST} mkdir -p ${APP_PATH}/config
## Upload all app needed files
upload.all: mkdir.apppath
@make upload.bin
@make upload.dockerfile
@make create.data.and.config
@make upload.config
@echo upload: OK!
## Build docker image remotely
remote.build.docker.image:
@ssh ${USER}@${HOST} ${CMD_BUILD_IMAGE}
## Run container remotely
remote.run.docker.conatainer:
@ssh ${USER}@${HOST} ${CMD_RUN_CONTAINER}
## Stop container remotely
remote.stop.docker.conatainer:
@ssh ${USER}@${HOST} ${CMD_STOP_CONTAINER}
## Remove container remotely
remote.remove.docker.conatainer:
@ssh ${USER}@${HOST} ${CMD_RM_CONTAINER}
## Remove image remotely
remote.remove.docker.image:
@ssh ${USER}@${HOST} ${CMD_RM_IMAGE}
## Restart container remotely
remote.restart.docker.conatainer:
@ssh ${USER}@${HOST} ${CMD_RESTART_CONTAINER}
## Fully reload project remotely
remote.project.restart:
@make remote.stop.docker.conatainer
@make remote.remove.docker.conatainer
@make remote.remove.docker.image
@make remote.build.docker.image
@make remote.run.docker.conatainer
@echo project restart: OK!
## View logs for the container
remote.logs.docker.conatainer:
@ssh ${USER}@${HOST} ${CMD_LOGS_CONTAINER}