#!/bin/bash
#
#**************************************************************************************
#Author: Noise Lys
#QQ: 578110218
#Date: 2021-05-30
#Filename: install_harbor.sh
#URL: https://www.cnblogs.com/noise/
#Description: The test script
#Copyright (C): 2021 All rights reserved
#**************************************************************************************
OS_VERSION=`cat /etc/os-release | sed 's/"/=/g' | awk -F[=]+ 'NR==3{print $2}'`
COLOR="echo -e \\033[1;31m"
END="\033[m"
HARBOR_VERSION=1.7.6
IPADDR=`hostname -I|awk '{print $1}'`
HARBOR_ADMIN_PASSWORD=123456
IP_CLIENT1=10.0.0.101
IP_CLIENT2=10.0.0.102
IP_CLIENT3=10.0.0.103
# install docker
install_docker(){
${COLOR}"START to install docker"${END}
sleep 1
if [[ ${OS_VERSION} = "centos" ]];then
COLOR="echo -e \\033[1;31m"
END="\033[m"
VERSION="19.03.5-3.EL7"
rm -rf /etc/yum.repos.d/*
wget -P /etc/yum.repos.d/ https://mirrors.aliyun.com/repo/Centos-7.repo || { ${COLOR}"BaseOS:Can't access the internet,please check your connection!"${END};exit;}
wget -P /etc/yum.repos.d/ https://mirrors.aliyun.com/repo/epel-7.repo || { ${COLOR}"Epel:Can't access the internet,please check your connection!"${END};exit;}
wget -P /etc/yum.repos.d/ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo || { ${COLOR}"Docker-ce:Can't access the internet,please check your connection!"${END};exit;}
yum clean all
yum -y install docker-ce || { ${COLOR}"Base,Extras yum sources is unavailable, please check yum sources"${END};exit;}
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://u5qp98hs.mirror.aliyuncs.com"]
}
EOF
systemctl enable --now docker
docker version && ${COLOR}"Docker install succesfully"${END} || ${COLOR}"Docker install failed"${END}
else
# ubuntu
apt update
apt -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt -y update
apt -y install docker-ce
systemctl enable --now docker
docker version && ${COLOR}"Docker install succesfully"${END} || ${COLOR}"Docker install failed"${END}
fi
reboot
}
#install docker-compose
install_docker_compose(){
${COLOR}"START to install docker compose"${END}
sleep 1
curl -L https://github.com/docker/compose/releases/download/1.25.3/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose && ${COLOR}"wget docker compose successfully!"${END} || ${COLOR}"wget docker compose failed!"${END}
chmod +x /usr/bin/docker-compose
docker-compose --version && ${COLOR}"Docker Compose installed successfully!" ${END} || ${COLOR}"Docker Compose installed failed!" ${END}
}
#install Harbor
install_harbor(){
${COLOR}"START to install harbor"${END}
sleep 1
read -p "please select offline(y) or online(n):" HARBOR_PACKAGES
${COLOR}"deafult download packages from online!"${END}
if [[ ${HARBOR_PACKAGES} = "Y"||${HARBOR_PACKAGES} = "y" ]]; then
${COLOR}"when you selected offline, please use rz to save the packages to /data/!"${END}
sleep 5
else
wget https://github.com/goharbor/harbor/releases/download/v${HARBOR_VERSION}/harbor-offline-installer-v${HARBOR_VERSION}.tgz && ${COLOR}"wget harbor successfully!"${END} || ${COLOR}"wget harbor failed!"${END}
fi
mkdir /apps
tar xvf harbor-offline-installer-v${HARBOR_VERSION}.tgz -C /apps/
sed -i.bak -e 's/^hostname =.*/hostname = '''${IPADDR}'''/' -e 's/^harbor_admin_password =.*/harbor_admin_password = '''${HARBOR_ADMIN_PASSWORD}'''/' /apps/harbor/harbor.cfg
if [[ ${OS_VERSION} = "centos" ]];then
yum -y install python2 &>/dev/null && ${COLOR}"python installed successfully!"${END} || ${COLOR}"python installed failed!"${END}
else
apt -y install python &>/dev/null && ${COLOR}"python installed successfully!"${END} || ${COLOR}"python installed failed!"${END}
fi
ln -s /usr/bin/python2.7 /usr/bin/python &>/dev/null
/apps/harbor/install.sh && ${COLOR}"Harbor installed successfully!"${END} || ${COLOR}"Harbor installed failed!"${END}
}
#install service
install_harbor_service(){
cat > /lib/systemd/system/harbor.service<<EOF
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor
[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml down
[Install]
WantedBy=multi-user.target
EOF
sed -i.bk -e 's@^ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock.*@ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry '''${IP_CLIENT1}''' --insecure-registry '''${IP_CLIENT2}''' --insecure-registry '''${IP_CLIENT3}'''@' /lib/systemd/system/docker.service
systemctl daemon-reload
systemctl enable harbor && ${COLOR}"Harbor service successfully!"${END} || ${COLOR}"Harbor service failed!"${END}
reboot
}
${COLOR}"========================"${END}
${COLOR}"step 1 : install docker!"${END}
${COLOR}"========================"${END}
if [[ ${OS_VERSION} = "centos" ]];then
rpm -ql docker-ce &>/dev/null && ${COLOR}"docker already installed!"${END} || install_docker
else
dpkg -s docker-ce &>/dev/null && ${COLOR}"docker already installed!"${END} || install_docker
fi
${COLOR}"========================"${END}
${COLOR}"step 2 : install docker compose!"${END}
${COLOR}"========================"${END}
docker-compose --version &>/dev/null && ${COLOR}"docker compose already installed!"${END} || install_docker_compose
${COLOR}"========================"${END}
${COLOR}"step 3 : install harbor!"${END}
${COLOR}"========================"${END}
install_harbor
${COLOR}"========================"${END}
${COLOR}"step 4 : install harbor service!"${END}
${COLOR}"========================"${END}
install_harbor_service