Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
29aa370a
Unverified
Commit
29aa370a
authored
Jun 07, 2019
by
neil
Committed by
GitHub
Jun 07, 2019
Browse files
Merge pull request #2313 from Neilpang/docker
support deploy docker
parents
6650072f
951bd3a5
Changes
3
Hide whitespace changes
Inline
Side-by-side
Dockerfile
View file @
29aa370a
...
...
@@ -8,6 +8,7 @@ RUN apk update -f \
curl
\
socat
\
tzdata
\
tar
\
&&
rm
-rf
/var/cache/apk/
*
ENV
LE_CONFIG_HOME /acme.sh
...
...
acme.sh
View file @
29aa370a
...
...
@@ -2078,6 +2078,28 @@ _readdomainconf() {
_read_conf
"
$DOMAIN_CONF
"
"
$1
"
}
#key value base64encode
_savedeployconf
()
{
_savedomainconf
"SAVED_
$1
"
"
$2
"
"
$3
"
#remove later
_cleardomainconf
"
$1
"
}
#key
_getdeployconf
()
{
_rac_key
=
"
$1
"
_rac_value
=
"
$(
eval echo
\$
"
$_rac_key
"
)
"
if
[
"
$_rac_value
"
]
;
then
if
_startswith
"
$_rac_value
"
'"'
&&
_endswith
"
$_rac_value
"
'"'
;
then
_debug2
"trim quotation marks"
eval
"export
$_rac_key
=
$_rac_value
"
fi
return
0
# do nothing
fi
_saved
=
$(
_readdomainconf
"SAVED_
$_rac_key
"
)
eval
"export
$_rac_key
=
$_saved
"
}
#_saveaccountconf key value base64encode
_saveaccountconf
()
{
_save_conf
"
$ACCOUNT_CONF_PATH
"
"
$@
"
...
...
deploy/docker.sh
0 → 100755
View file @
29aa370a
#!/usr/bin/env sh
#DEPLOY_DOCKER_CONTAINER_LABEL="xxxxxxx"
#DEPLOY_DOCKER_CONTAINER_KEY_FILE="/path/to/key.pem"
#DEPLOY_DOCKER_CONTAINER_CERT_FILE="/path/to/cert.pem"
#DEPLOY_DOCKER_CONTAINER_CA_FILE="/path/to/ca.pem"
#DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE="/path/to/fullchain.pem"
#DEPLOY_DOCKER_CONTAINER_RELOAD_CMD="service nginx force-reload"
_DEPLOY_DOCKER_WIKI
=
"https://github.com/Neilpang/acme.sh/wiki/deploy-to-docker-containers"
_DOCKER_HOST_DEFAULT
=
"/var/run/docker.sock"
docker_deploy
()
{
_cdomain
=
"
$1
"
_ckey
=
"
$2
"
_ccert
=
"
$3
"
_cca
=
"
$4
"
_cfullchain
=
"
$5
"
_debug _cdomain
"
$_cdomain
"
_getdeployconf DEPLOY_DOCKER_CONTAINER_LABEL
_debug2 DEPLOY_DOCKER_CONTAINER_LABEL
"
$DEPLOY_DOCKER_CONTAINER_LABEL
"
if
[
-z
"
$DEPLOY_DOCKER_CONTAINER_LABEL
"
]
;
then
_err
"The DEPLOY_DOCKER_CONTAINER_LABEL variable is not defined, we use this label to find the container."
_err
"See:
$_DEPLOY_DOCKER_WIKI
"
fi
_savedeployconf DEPLOY_DOCKER_CONTAINER_LABEL
"
$DEPLOY_DOCKER_CONTAINER_LABEL
"
if
[
"
$DOCKER_HOST
"
]
;
then
_saveaccountconf DOCKER_HOST
"
$DOCKER_HOST
"
fi
if
_exists docker
&&
docker version |
grep
-i
docker
>
/dev/null
;
then
_info
"Using docker command"
export
_USE_DOCKER_COMMAND
=
1
else
export
_USE_DOCKER_COMMAND
=
fi
export
_USE_UNIX_SOCKET
=
if
[
-z
"
$_USE_DOCKER_COMMAND
"
]
;
then
export
_USE_REST
=
if
[
"
$DOCKER_HOST
"
]
;
then
_debug
"Try use docker host:
$DOCKER_HOST
"
export
_USE_REST
=
1
else
export
_DOCKER_SOCK
=
"
$_DOCKER_HOST_DEFAULT
"
_debug
"Try use
$_DOCKER_SOCK
"
if
[
!
-e
"
$_DOCKER_SOCK
"
]
||
[
!
-w
"
$_DOCKER_SOCK
"
]
;
then
_err
"
$_DOCKER_SOCK
is not available"
return
1
fi
export
_USE_UNIX_SOCKET
=
1
if
!
_exists
"curl"
;
then
_err
"Please install curl first."
_err
"We need curl to work."
return
1
fi
if
!
_check_curl_version
;
then
return
1
fi
fi
fi
_getdeployconf DEPLOY_DOCKER_CONTAINER_KEY_FILE
_debug2 DEPLOY_DOCKER_CONTAINER_KEY_FILE
"
$DEPLOY_DOCKER_CONTAINER_KEY_FILE
"
if
[
"
$DEPLOY_DOCKER_CONTAINER_KEY_FILE
"
]
;
then
_savedeployconf DEPLOY_DOCKER_CONTAINER_KEY_FILE
"
$DEPLOY_DOCKER_CONTAINER_KEY_FILE
"
fi
_getdeployconf DEPLOY_DOCKER_CONTAINER_CERT_FILE
_debug2 DEPLOY_DOCKER_CONTAINER_CERT_FILE
"
$DEPLOY_DOCKER_CONTAINER_CERT_FILE
"
if
[
"
$DEPLOY_DOCKER_CONTAINER_CERT_FILE
"
]
;
then
_savedeployconf DEPLOY_DOCKER_CONTAINER_CERT_FILE
"
$DEPLOY_DOCKER_CONTAINER_CERT_FILE
"
fi
_getdeployconf DEPLOY_DOCKER_CONTAINER_CA_FILE
_debug2 DEPLOY_DOCKER_CONTAINER_CA_FILE
"
$DEPLOY_DOCKER_CONTAINER_CA_FILE
"
if
[
"
$DEPLOY_DOCKER_CONTAINER_CA_FILE
"
]
;
then
_savedeployconf DEPLOY_DOCKER_CONTAINER_CA_FILE
"
$DEPLOY_DOCKER_CONTAINER_CA_FILE
"
fi
_getdeployconf DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE
_debug2 DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE
"
$DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE
"
if
[
"
$DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE
"
]
;
then
_savedeployconf DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE
"
$DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE
"
fi
_getdeployconf DEPLOY_DOCKER_CONTAINER_RELOAD_CMD
_debug2 DEPLOY_DOCKER_CONTAINER_RELOAD_CMD
"
$DEPLOY_DOCKER_CONTAINER_RELOAD_CMD
"
if
[
"
$DEPLOY_DOCKER_CONTAINER_RELOAD_CMD
"
]
;
then
_savedeployconf DEPLOY_DOCKER_CONTAINER_RELOAD_CMD
"
$DEPLOY_DOCKER_CONTAINER_RELOAD_CMD
"
fi
_cid
=
"
$(
_get_id
"
$DEPLOY_DOCKER_CONTAINER_LABEL
"
)
"
_info
"Container id:
$_cid
"
if
[
-z
"
$_cid
"
]
;
then
_err
"can not find container id"
return
1
fi
if
[
"
$DEPLOY_DOCKER_CONTAINER_KEY_FILE
"
]
;
then
if
!
_docker_cp
"
$_cid
"
"
$_ckey
"
"
$DEPLOY_DOCKER_CONTAINER_KEY_FILE
"
;
then
return
1
fi
fi
if
[
"
$DEPLOY_DOCKER_CONTAINER_CERT_FILE
"
]
;
then
if
!
_docker_cp
"
$_cid
"
"
$_ccert
"
"
$DEPLOY_DOCKER_CONTAINER_CERT_FILE
"
;
then
return
1
fi
fi
if
[
"
$DEPLOY_DOCKER_CONTAINER_CA_FILE
"
]
;
then
if
!
_docker_cp
"
$_cid
"
"
$_cca
"
"
$DEPLOY_DOCKER_CONTAINER_CA_FILE
"
;
then
return
1
fi
fi
if
[
"
$DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE
"
]
;
then
if
!
_docker_cp
"
$_cid
"
"
$_cfullchain
"
"
$DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE
"
;
then
return
1
fi
fi
if
[
"
$DEPLOY_DOCKER_CONTAINER_RELOAD_CMD
"
]
;
then
if
!
_docker_exec
"
$_cid
"
"
$DEPLOY_DOCKER_CONTAINER_RELOAD_CMD
"
;
then
return
1
fi
fi
return
0
}
#label
_get_id
()
{
_label
=
"
$1
"
if
[
"
$_USE_DOCKER_COMMAND
"
]
;
then
docker ps
-f
label
=
"
$_label
"
--format
"{{.ID}}"
elif
[
"
$_USE_REST
"
]
;
then
_err
"Not implemented yet."
return
1
elif
[
"
$_USE_UNIX_SOCKET
"
]
;
then
_req
=
"{
\"
label
\"
:[
\"
$_label
\"
]}"
_debug2 _req
"
$_req
"
_req
=
"
$(
printf
"%s"
"
$_req
"
| _url_encode
)
"
_debug2 _req
"
$_req
"
listjson
=
"
$(
_curl_unix_sock
"
${
_DOCKER_SOCK
:-
$_DOCKER_HOST_DEFAULT
}
"
GET
"/containers/json?filters=
$_req
"
)
"
_debug2
"listjson"
"
$listjson
"
echo
"
$listjson
"
|
tr
'{,'
'\n'
|
grep
-i
'"id":'
| _head_n 1 |
cut
-d
'"'
-f
4
else
_err
"Not implemented yet."
return
1
fi
}
#id cmd
_docker_exec
()
{
_eargs
=
"
$*
"
_debug2
"_docker_exec
$_eargs
"
_dcid
=
"
$1
"
shift
if
[
"
$_USE_DOCKER_COMMAND
"
]
;
then
docker
exec
-i
"
$_dcid
"
sh
-c
"
$*
"
elif
[
"
$_USE_REST
"
]
;
then
_err
"Not implemented yet."
return
1
elif
[
"
$_USE_UNIX_SOCKET
"
]
;
then
_cmd
=
"
$*
"
#_cmd="$(printf "%s" "$_cmd" | sed 's/ /","/g')"
_debug2 _cmd
"
$_cmd
"
#create exec instance:
cjson
=
"
$(
_curl_unix_sock
"
$_DOCKER_SOCK
"
POST
"/containers/
$_dcid
/exec"
"{
\"
Cmd
\"
: [
\"
sh
\"
,
\"
-c
\"
,
\"
$_cmd
\"
]}"
)
"
_debug2 cjson
"
$cjson
"
execid
=
"
$(
echo
"
$cjson
"
|
cut
-d
'"'
-f
4
)
"
_debug execid
"
$execid
"
ejson
=
"
$(
_curl_unix_sock
"
$_DOCKER_SOCK
"
POST
"/exec/
$execid
/start"
"{
\"
Detach
\"
: false,
\"
Tty
\"
: false}"
)
"
_debug2 ejson
"
$ejson
"
if
[
"
$ejson
"
]
;
then
_err
"
$ejson
"
return
1
fi
else
_err
"Not implemented yet."
return
1
fi
}
#id from to
_docker_cp
()
{
_dcid
=
"
$1
"
_from
=
"
$2
"
_to
=
"
$3
"
_info
"Copying file from
$_from
to
$_to
"
_dir
=
"
$(
dirname
"
$_to
"
)
"
_debug2 _dir
"
$_dir
"
if
!
_docker_exec
"
$_dcid
"
mkdir
-p
"
$_dir
"
;
then
_err
"Can not create dir:
$_dir
"
return
1
fi
if
[
"
$_USE_DOCKER_COMMAND
"
]
;
then
if
[
"
$DEBUG
"
]
&&
[
"
$DEBUG
"
-ge
"2"
]
;
then
_docker_exec
"
$_dcid
"
tee
"
$_to
"
<
"
$_from
"
else
_docker_exec
"
$_dcid
"
tee
"
$_to
"
<
"
$_from
"
>
/dev/null
fi
if
[
"
$?
"
=
"0"
]
;
then
_info
"Success"
return
0
else
_info
"Error"
return
1
fi
elif
[
"
$_USE_REST
"
]
;
then
_err
"Not implemented yet."
return
1
elif
[
"
$_USE_UNIX_SOCKET
"
]
;
then
_frompath
=
"
$_from
"
if
_startswith
"
$_frompath
"
'/'
;
then
_frompath
=
"
$(
echo
"
$_from
"
|
cut
-b
2-
)
"
#remove the first '/' char
fi
_debug2
"_frompath"
"
$_frompath
"
_toname
=
"
$(
basename
"
$_to
"
)
"
_debug2
"_toname"
"
$_toname
"
if
!
tar
--transform
=
"s,
$_frompath
,
$_toname
,"
-cz
"
$_from
"
2>/dev/null | _curl_unix_sock
"
$_DOCKER_SOCK
"
PUT
"/containers/
$_dcid
/archive?noOverwriteDirNonDir=1&path=
$(
printf
"%s"
"
$_dir
"
| _url_encode
)
"
'@-'
"Content-Type: application/octet-stream"
;
then
_err
"copy error"
return
1
fi
return
0
else
_err
"Not implemented yet."
return
1
fi
}
#sock method endpoint data content-type
_curl_unix_sock
()
{
_socket
=
"
$1
"
_method
=
"
$2
"
_endpoint
=
"
$3
"
_data
=
"
$4
"
_ctype
=
"
$5
"
if
[
-z
"
$_ctype
"
]
;
then
_ctype
=
"Content-Type: application/json"
fi
_debug _data
"
$_data
"
_debug2
"url"
"http://localhost
$_endpoint
"
if
[
"
$_CURL_NO_HOST
"
]
;
then
_cux_url
=
"http:
$_endpoint
"
else
_cux_url
=
"http://localhost
$_endpoint
"
fi
if
[
"
$DEBUG
"
]
&&
[
"
$DEBUG
"
-ge
"2"
]
;
then
curl
-vvv
--silent
--unix-socket
"
$_socket
"
-X
"
$_method
"
--data-binary
"
$_data
"
--header
"
$_ctype
"
"
$_cux_url
"
else
curl
--silent
--unix-socket
"
$_socket
"
-X
"
$_method
"
--data-binary
"
$_data
"
--header
"
$_ctype
"
"
$_cux_url
"
fi
}
_check_curl_version
()
{
_cversion
=
"
$(
curl
-V
|
grep
'^curl '
|
cut
-d
' '
-f
2
)
"
_debug2
"_cversion"
"
$_cversion
"
_major
=
"
$(
_getfield
"
$_cversion
"
1
'.'
)
"
_debug2
"_major"
"
$_major
"
_minor
=
"
$(
_getfield
"
$_cversion
"
2
'.'
)
"
_debug2
"_minor"
"
$_minor
"
if
[
"
$_major$_minor
"
-lt
"740"
]
;
then
_err
"curl v
$_cversion
doesn't support unit socket"
return
1
fi
if
[
"
$_major$_minor
"
-lt
"750"
]
;
then
_debug
"Use short host name"
export
_CURL_NO_HOST
=
1
else
export
_CURL_NO_HOST
=
fi
return
0
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment