mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-22 18:25:56 +01:00
182 lines
4.4 KiB
Bash
182 lines
4.4 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
#docker version: 1.11.2
|
||
|
#docker-compose version: 1.7.1
|
||
|
#Harbor version: 0.4.0
|
||
|
|
||
|
set +e
|
||
|
set -o noglob
|
||
|
|
||
|
#
|
||
|
# Set Colors
|
||
|
#
|
||
|
|
||
|
bold=$(tput bold)
|
||
|
underline=$(tput sgr 0 1)
|
||
|
reset=$(tput sgr0)
|
||
|
|
||
|
red=$(tput setaf 1)
|
||
|
green=$(tput setaf 76)
|
||
|
white=$(tput setaf 7)
|
||
|
tan=$(tput setaf 202)
|
||
|
blue=$(tput setaf 25)
|
||
|
|
||
|
#
|
||
|
# Headers and Logging
|
||
|
#
|
||
|
|
||
|
underline() { printf "${underline}${bold}%s${reset}\n" "$@"
|
||
|
}
|
||
|
h1() { printf "\n${underline}${bold}${blue}%s${reset}\n" "$@"
|
||
|
}
|
||
|
h2() { printf "\n${underline}${bold}${white}%s${reset}\n" "$@"
|
||
|
}
|
||
|
debug() { printf "${white}%s${reset}\n" "$@"
|
||
|
}
|
||
|
info() { printf "${white}➜ %s${reset}\n" "$@"
|
||
|
}
|
||
|
success() { printf "${green}✔ %s${reset}\n" "$@"
|
||
|
}
|
||
|
error() { printf "${red}✖ %s${reset}\n" "$@"
|
||
|
}
|
||
|
warn() { printf "${tan}➜ %s${reset}\n" "$@"
|
||
|
}
|
||
|
bold() { printf "${bold}%s${reset}\n" "$@"
|
||
|
}
|
||
|
note() { printf "\n${underline}${bold}${blue}Note:${reset} ${blue}%s${reset}\n" "$@"
|
||
|
}
|
||
|
|
||
|
set -e
|
||
|
set +o noglob
|
||
|
|
||
|
usage=$'Please set hostname and other necessary attributes in harbor.cfg first. DO NOT use localhost or 127.0.0.1 for hostname, because Harbor needs to be accessed by external clients.'
|
||
|
item=0
|
||
|
|
||
|
while [ $# -gt 0 ]; do
|
||
|
case $1 in
|
||
|
--help)
|
||
|
note "$usage"
|
||
|
exit 0;;
|
||
|
*)
|
||
|
note "$usage"
|
||
|
exit 1;;
|
||
|
esac
|
||
|
shift || true
|
||
|
done
|
||
|
|
||
|
workdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||
|
cd $workdir
|
||
|
|
||
|
# The hostname in harbor.cfg has not been modified
|
||
|
if grep 'hostname = reg.mydomain.com' &> /dev/null harbor.cfg
|
||
|
then
|
||
|
warn "$usage"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
function check_docker {
|
||
|
if ! docker --version &> /dev/null
|
||
|
then
|
||
|
error "Need to install docker(1.10.0+) first and run this script again."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# docker has been installed and check its version
|
||
|
if [[ $(docker --version) =~ (([0-9]+).([0-9]+).([0-9]+)) ]]
|
||
|
then
|
||
|
docker_version=${BASH_REMATCH[1]}
|
||
|
docker_version_part1=${BASH_REMATCH[2]}
|
||
|
docker_version_part2=${BASH_REMATCH[3]}
|
||
|
|
||
|
# the version of docker does not meet the requirement
|
||
|
if [ "$docker_version_part1" -lt 1 ] || ([ "$docker_version_part1" -eq 1 ] && [ "$docker_version_part2" -lt 10 ])
|
||
|
then
|
||
|
error "Need to upgrade docker package to 1.10.0+."
|
||
|
exit 1
|
||
|
else
|
||
|
note "docker version: $docker_version"
|
||
|
fi
|
||
|
else
|
||
|
error "Failed to parse docker version."
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function check_dockercompose {
|
||
|
if ! docker-compose --version &> /dev/null
|
||
|
then
|
||
|
error "Need to install docker-compose(1.7.1+) by yourself first and run this script again."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# docker-compose has been installed, check its version
|
||
|
if [[ $(docker-compose --version) =~ (([0-9]+).([0-9]+).([0-9]+)) ]]
|
||
|
then
|
||
|
docker_compose_version=${BASH_REMATCH[1]}
|
||
|
docker_compose_version_part1=${BASH_REMATCH[2]}
|
||
|
docker_compose_version_part2=${BASH_REMATCH[3]}
|
||
|
|
||
|
# the version of docker-compose does not meet the requirement
|
||
|
if [ "$docker_compose_version_part1" -lt 1 ] || ([ "$docker_compose_version_part1" -eq 1 ] && [ "$docker_compose_version_part2" -lt 6 ])
|
||
|
then
|
||
|
error "Need to upgrade docker-compose package to 1.7.1+."
|
||
|
exit 1
|
||
|
else
|
||
|
note "docker-compose version: $docker_compose_version"
|
||
|
fi
|
||
|
else
|
||
|
error "Failed to parse docker-compose version."
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
h2 "[Step $item]: checking installation environment ..."; let item+=1
|
||
|
check_docker
|
||
|
check_dockercompose
|
||
|
|
||
|
if [ -f harbor*.tgz ]
|
||
|
then
|
||
|
h2 "[Step $item]: loading Harbor images ..."; let item+=1
|
||
|
docker load -i ./harbor*.tgz
|
||
|
fi
|
||
|
echo ""
|
||
|
|
||
|
h2 "[Step $item]: preparing environment ..."; let item+=1
|
||
|
if [ -n "$host" ]
|
||
|
then
|
||
|
sed "s/^hostname = .*/hostname = $host/g" -i ./harbor.cfg
|
||
|
fi
|
||
|
./prepare
|
||
|
echo ""
|
||
|
|
||
|
h2 "[Step $item]: checking existing instance of Harbor ..."; let item+=1
|
||
|
if [ -n "$(docker-compose -f docker-compose*.yml ps -q)" ]
|
||
|
then
|
||
|
note "stopping existing Harbor instance ..."
|
||
|
docker-compose -f docker-compose*.yml down
|
||
|
fi
|
||
|
echo ""
|
||
|
|
||
|
h2 "[Step $item]: starting Harbor ..."
|
||
|
docker-compose -f docker-compose*.yml up -d
|
||
|
|
||
|
protocol=http
|
||
|
hostname=reg.mydomain.com
|
||
|
|
||
|
if [[ $(cat ./harbor.cfg) =~ ui_url_protocol[[:blank:]]*=[[:blank:]]*(https?) ]]
|
||
|
then
|
||
|
protocol=${BASH_REMATCH[1]}
|
||
|
fi
|
||
|
|
||
|
if [[ $(grep 'hostname[[:blank:]]*=' ./harbor.cfg) =~ hostname[[:blank:]]*=[[:blank:]]*(.*) ]]
|
||
|
then
|
||
|
hostname=${BASH_REMATCH[1]}
|
||
|
fi
|
||
|
echo ""
|
||
|
|
||
|
success $"----Harbor has been installed and started successfully.----
|
||
|
|
||
|
Now you should be able to visit the admin portal at ${protocol}://${hostname}.
|
||
|
For more details, please visit https://github.com/vmware/harbor .
|
||
|
"
|