Move docker healthcheck into dedicated script.
This commit is contained in:
		
							parent
							
								
									00c9ad12bd
								
							
						
					
					
						commit
						a469ca0461
					
				
					 2 changed files with 26 additions and 11 deletions
				
			
		
							
								
								
									
										24
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								Dockerfile
									
									
									
									
									
								
							|  | @ -7,25 +7,29 @@ | ||||||
| # Alpine build image to build Conduit's statically compiled binary | # Alpine build image to build Conduit's statically compiled binary | ||||||
| FROM alpine:3.14 as builder | FROM alpine:3.14 as builder | ||||||
| 
 | 
 | ||||||
|  | # Install packages needed for building all crates | ||||||
|  | RUN apk add --no-cache \ | ||||||
|  |         cargo \ | ||||||
|  |         openssl-dev | ||||||
|  | 
 | ||||||
| # Specifies if the local project is build or if Conduit gets build | # Specifies if the local project is build or if Conduit gets build | ||||||
| # from the official git repository. Defaults to the git repo. | # from the official git repository. Defaults to the git repo. | ||||||
| ARG LOCAL=false | ARG LOCAL=false | ||||||
| # Specifies which revision/commit is build. Defaults to HEAD | # Specifies which revision/commit is build. Defaults to HEAD | ||||||
| ARG GIT_REF=origin/master | ARG GIT_REF=origin/master | ||||||
| 
 | 
 | ||||||
| # Install packages needed for building all crates |  | ||||||
| RUN apk add --no-cache \ |  | ||||||
|         cargo \ |  | ||||||
|         openssl-dev |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| # Copy project files from current folder | # Copy project files from current folder | ||||||
| COPY . . | COPY . . | ||||||
| # Build it from the copied local files or from the official git repository | # Build it from the copied local files or from the official git repository | ||||||
| RUN if [[ $LOCAL == "true" ]]; then \ | RUN if [[ $LOCAL == "true" ]]; then \ | ||||||
|  |         mv ./docker/healthcheck.sh . ; \ | ||||||
|  |         echo "Building from local source..." ; \ | ||||||
|         cargo install --path . ; \ |         cargo install --path . ; \ | ||||||
|     else \ |     else \ | ||||||
|         cargo install --git "https://gitlab.com/famedly/conduit.git" --rev ${GIT_REF}; \ |         echo "Building revision '${GIT_REF}' from online source..." ; \ | ||||||
|  |         cargo install --git "https://gitlab.com/famedly/conduit.git" --rev ${GIT_REF} ; \ | ||||||
|  |         echo "Loadings healthcheck script from online source..." ; \ | ||||||
|  |         wget "https://gitlab.com/famedly/conduit/-/raw/${GIT_REF#origin/}/docker/healthcheck.sh" ; \ | ||||||
|     fi |     fi | ||||||
| 
 | 
 | ||||||
| ########################## RUNTIME IMAGE ########################## | ########################## RUNTIME IMAGE ########################## | ||||||
|  | @ -64,6 +68,7 @@ EXPOSE 6167 | ||||||
| # /srv/conduit and create data folder for database | # /srv/conduit and create data folder for database | ||||||
| RUN mkdir -p /srv/conduit/.local/share/conduit | RUN mkdir -p /srv/conduit/.local/share/conduit | ||||||
| COPY --from=builder /root/.cargo/bin/conduit /srv/conduit/ | COPY --from=builder /root/.cargo/bin/conduit /srv/conduit/ | ||||||
|  | COPY --from=builder ./healthcheck.sh /srv/conduit/ | ||||||
| 
 | 
 | ||||||
| # Add www-data user and group with UID 82, as used by alpine | # Add www-data user and group with UID 82, as used by alpine | ||||||
| # https://git.alpinelinux.org/aports/tree/main/nginx/nginx.pre-install | # https://git.alpinelinux.org/aports/tree/main/nginx/nginx.pre-install | ||||||
|  | @ -82,10 +87,7 @@ RUN apk add --no-cache \ | ||||||
|         libgcc |         libgcc | ||||||
| 
 | 
 | ||||||
| # Test if Conduit is still alive, uses the same endpoint as Element | # Test if Conduit is still alive, uses the same endpoint as Element | ||||||
| HEALTHCHECK --start-period=5s \ | HEALTHCHECK --start-period=5s --interval=60s CMD ./healthcheck.sh | ||||||
|     CMD curl --fail -s "http://localhost:$(grep -m1 -o 'port\s=\s[0-9]*' conduit.toml | grep -m1 -o '[0-9]*')/_matrix/client/versions" || \ |  | ||||||
|         curl -k --fail -s "https://localhost:$(grep -m1 -o 'port\s=\s[0-9]*' conduit.toml | grep -m1 -o '[0-9]*')/_matrix/client/versions" || \ |  | ||||||
|         exit 1 |  | ||||||
| 
 | 
 | ||||||
| # Set user to www-data | # Set user to www-data | ||||||
| USER www-data | USER www-data | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								docker/healthcheck.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								docker/healthcheck.sh
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | # If the port is not specified as env var, take it from the config file | ||||||
|  | if [ -z ${CONDUIT_PORT} ]; then | ||||||
|  |   CONDUIT_PORT=$(grep -m1 -o 'port\s=\s[0-9]*' conduit.toml | grep -m1 -o '[0-9]*') | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | # The actual health check. | ||||||
|  | # We try to first get a response on HTTP and when that fails on HTTPS and when that fails, we exit with code 1. | ||||||
|  | # TODO: Change this to a single curl call. Do we have a config value that we can check for that? | ||||||
|  | curl --fail -s "http://localhost:${CONDUIT_PORT}/_matrix/client/versions" || \ | ||||||
|  |     curl -k --fail -s "https://localhost:${CONDUIT_PORT}/_matrix/client/versions" || \ | ||||||
|  |     exit 1 | ||||||
		Loading…
	
		Reference in a new issue