Skip to content

Instantly share code, notes, and snippets.

@kacole2
Last active February 21, 2024 02:33
Show Gist options
  • Star 32 You must be signed in to star a gist
  • Fork 20 You must be signed in to fork a gist
  • Save kacole2/95e83ac84fec950b1a70b0853d6594dc to your computer and use it in GitHub Desktop.
Save kacole2/95e83ac84fec950b1a70b0853d6594dc to your computer and use it in GitHub Desktop.
Quick Start Harbor Installation Script on Ubuntu 18.04
#!/bin/bash
#Harbor on Ubuntu 18.04
#Prompt for the user to ask if the install should use the IP Address or Fully Qualified Domain Name of the Harbor Server
PS3='Would you like to install Harbor based on IP or FQDN? '
select option in IP FQDN
do
case $option in
IP)
IPorFQDN=$(hostname -I|cut -d" " -f 1)
break;;
FQDN)
IPorFQDN=$(hostname -f)
break;;
esac
done
# Housekeeping
apt update -y
swapoff --all
sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab
ufw disable #Do Not Do This In Production
echo "Housekeeping done"
#Install Latest Stable Docker Release
apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io
tee /etc/docker/daemon.json >/dev/null <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries" : ["$IPorFQDN:443","$IPorFQDN:80","0.0.0.0/0"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
groupadd docker
MAINUSER=$(logname)
usermod -aG docker $MAINUSER
systemctl daemon-reload
systemctl restart docker
echo "Docker Installation done"
#Install Latest Stable Docker Compose Release
COMPOSEVERSION=$(curl -s https://github.com/docker/compose/releases/latest/download 2>&1 | grep -Po [0-9]+\.[0-9]+\.[0-9]+)
curl -L "https://github.com/docker/compose/releases/download/$COMPOSEVERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
echo "Docker Compose Installation done"
#Install Latest Stable Harbor Release
HARBORVERSION=$(curl -s https://github.com/goharbor/harbor/releases/latest/download 2>&1 | grep -Po [0-9]+\.[0-9]+\.[0-9]+)
curl -s https://api.github.com/repos/goharbor/harbor/releases/latest | grep browser_download_url | grep online | cut -d '"' -f 4 | wget -qi -
tar xvf harbor-online-installer-v$HARBORVERSION.tgz
cd harbor
sed -i "s/reg.mydomain.com/$IPorFQDN/g" harbor.yml
./install.sh --with-clair --with-chartmuseum
echo -e "Harbor Installation Complete \n\nPlease log out and log in or run the command 'newgrp docker' to use Docker without sudo\n\nLogin to your harbor instance:\n docker login -u admin -p Harbor12345 $IPorFQDN"
@mkuendig
Copy link

mkuendig commented Mar 24, 2020

I can't get this to work. It fails during install.sh with error:

Docker Compose Installation done
harbor/prepare
harbor/LICENSE
harbor/install.sh
harbor/common.sh
harbor/harbor.yml
[Step 0]: checking if docker is installed ...
Note: docker version: 19.03.8
[Step 1]: checking docker-compose is installed ...
Note: docker-compose version: 1.25.4
[Step 2]: preparing environment ...
[Step 3]: preparing harbor configs ...
prepare base dir is set to /home/mkuendig/harbor
ERROR:root:Error: The protocol is https but attribute ssl_cert is not set

This is on a brand new ubuntu 18.04 on GCP.

commenting out the https section in the harbor.yaml file works and continues the script.

@kacole2
Copy link
Author

kacole2 commented Mar 24, 2020

@mkuendig . Yes, you need to comment out the https section. Sorry about not having that information.

@tthebst
Copy link

tthebst commented Apr 2, 2020

Hi,

I encountered the same problem as @mkuendig. I added a quick fix to the script. At line 63 you can add these commands, which will comment out the https section of the harbor.yml file.

sed -e '/port: 443/ s/^#*/#/' -i harbor.yml  
sed -e '/https:/ s/^#*/#/' -i harbor.yml  
sed -e '/certificate:*/ s/^#*/#/' -i harbor.yml  
sed -e '/private_key:*/ s/^#*/#/' -i harbor.yml  

With these lines added the script runs without problems on Ubuntu 1804 on GCP.

Tim

@tthebst
Copy link

tthebst commented Apr 2, 2020

Another fix would be to change the password of the script to "VMware12345" instead of "Harbor12345" to be consistent with the docs. This may save somebody some time...

@kacole2
Copy link
Author

kacole2 commented Apr 2, 2020

@tthebst thanks for the fix. I'll get that added. To be honest, the docs should be Harbor12345. Let's submit a PR to "de-VMware" this thing. :)

@tthebst
Copy link

tthebst commented Apr 2, 2020

Thanks. I will submit a PR

@mschuchard
Copy link

Could the quick start please be updated with the fixes? It still currently does not work as is, and the manual fixes have to be applied. Thanks!

@spartan195
Copy link

spartan195 commented Aug 10, 2020

Greetings, I know i'm a bit late but I encountered the same issues as you, let me upload the fixed script here.
Keep in mind this code is made to be executed from $HOME folder!

#!/bin/bash

#Harbor on Ubuntu 18.04

#Prompt for the user to ask if the install should use the IP Address or Fully Qualified Domain Name of the Harbor Server
PS3='Would you like to install Harbor based on IP or FQDN? '
select option in IP FQDN
do
    case $option in
        IP)
            IPorFQDN=$(hostname -I|cut -d" " -f 1)
            break;;
        FQDN)
            IPorFQDN=$(hostname -f)
            break;;
     esac
done

# Housekeeping
apt update -y
swapoff --all
sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab
ufw disable #Do Not Do This In Production
echo "Housekeeping done"

#Install Latest Stable Docker Release
apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io
tee /etc/docker/daemon.json >/dev/null <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "insecure-registries" : ["$IPorFQDN:443","$IPorFQDN:80","0.0.0.0/0"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
groupadd docker
MAINUSER=$(logname)
usermod -aG docker $MAINUSER
systemctl daemon-reload
systemctl restart docker
echo "Docker Installation done"

#Install Latest Stable Docker Compose Release
COMPOSEVERSION=$(curl -s https://github.com/docker/compose/releases/latest/download 2>&1 | grep -Po [0-9]+\.[0-9]+\.[0-9]+)
curl -L "https://github.com/docker/compose/releases/download/$COMPOSEVERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
echo "Docker Compose Installation done"

#Install Latest Stable Harbor Release
HARBORVERSION=$(curl -s https://github.com/goharbor/harbor/releases/latest/download 2>&1 | grep -Po [0-9]+\.[0-9]+\.[0-9]+)
curl -s https://api.github.com/repos/goharbor/harbor/releases/latest | grep browser_download_url | grep online | cut -d '"' -f 4 | wget -qi -
tar xvf harbor-online-installer-v$HARBORVERSION.tgz
sed -e '/port: 443/ s/^#*/#/' -i ~/harbor/harbor.yml
sed -e '/https:/ s/^#*/#/' -i ~/harbor/harbor.yml
sed -e '/certificate:*/ s/^#*/#/' -i ~/harbor/harbor.yml
sed -e '/private_key:*/ s/^#*/#/' -i ~/harbor/harbor.yml
cd harbor
sed -i "s/reg.mydomain.com/$IPorFQDN/g" ~/harbor/harbor.yml
./install.sh --with-clair --with-chartmuseum
echo -e "Harbor Installation Complete \n\nPlease log out and log in or run the command 'newgrp docker' to use Docker without sudo\n\nLogin to your harbor instance:\n docker login -u admin -p Harbor123456 $IPorFQDN"

@kcalmond
Copy link

Above script mod for no https doesn't work with current Harbor version (2.0.2). The tarball includes a ~/harbor/harbor.yml.tmpl instead of harbor.yml. You have to copy the template file into harbor.yml first. Also, I modified the regex's for the sed-e commands to elimate matching extraneous lines in harbor.yml. The sequence that worked for me is below, between the CHANGE bars:

...
tar xvf harbor-online-installer-v$HARBORVERSION.tgz
# CHANGE-----
cd harbor
cp harbor.yml.tmpl harbor.yml
sed -i "s/reg.mydomain.com/$IPorFQDN/g" ~/harbor/harbor.yml
sed -e '/port: 443$/ s/^#*/#/' -i ~/harbor/harbor.yml
sed -e '/https:$/ s/^#*/#/' -i ~/harbor/harbor.yml
sed -e '/\/your\/certificate\/path$/ s/^#*/#/' -i ~/harbor/harbor.yml
sed -e '/\/your\/private\/key\/path$/ s/^#*/#/' -i ~/harbor/harbor.yml
# -----CHANGE
# ./install.sh --with-clair --with-chartmuseum
...

@p-null
Copy link

p-null commented Sep 14, 2020

After running the script, I have problem with docker login:

Error response from daemon: Get http://xxx.xxx.xxx.xx/v2/: dial tcp xxx.xxx.xxx.xx:80: connect: connection refused

Anyone knows why?

@durai23
Copy link

durai23 commented Sep 29, 2020

Hi harbor,
please note this script currently outputs (after successful completion) default password as Harbor123456. This is incorrect. By trial and error (and from 2.1 docs as well) I tried Harbor12345 and only that worked. Please modify the script to reflect this.

@danielporto
Copy link

damn.. is not working. :-/

@danielporto
Copy link

@danielporto
Copy link

here is the whole script fixed. working with version 2.1.0
https://gist.github.com/danielporto/86463aeb2efc816f044695847167ae2a

@kacole2
Copy link
Author

kacole2 commented Oct 7, 2020

Hi all. This script has been abandoned because this is NOT the preferred way to install or operate Harbor. There is currently a Helm chart that takes care of the entire installation. There is also an Operator that will be released soon that will be the new successor of the Helm chart.

@alanmbarr
Copy link

Might be a good idea to take it off the harbor site if it's not meant to be used? https://goharbor.io/docs/2.1.0/install-config/quick-install-script/

@durai23
Copy link

durai23 commented Dec 9, 2020

@kacole2 Where can we find this helm chart or the Operator?

@lbiemans
Copy link

clair has been deprecated on Debian (bullseye?), ✖ Clair is deprecated please remove it from installation arguments !!!
Maybe this cen be removed from the installation file. For the rest it works pretty sweet on Debian :-)

@lubronzhan
Copy link

This doesn't work now since docker-compose's link is updated

@andrewd-sysdig
Copy link

andrewd-sysdig commented Nov 15, 2021

This doesn't work now since docker-compose's link is updated

Just add a v in front of $COMPOSEVERSION
curl -L "https://github.com/docker/compose/releases/download/v$COMPOSEVERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

I've forked and fixed it here: https://gist.github.com/andrewd-sysdig/4d712671053e2279a643f67e265fdbb0

I also had to create /var/log/harbor

@ron7
Copy link

ron7 commented Aug 21, 2022

If anyone visiting this thread needs an updated and fully working installer:
https://github.com/ron7/harbor_installer

  • tested on Ubuntu 18.04, 20.04 and 22.04
  • can run fully unattended
  • can take ENV variables
  • can be run multiple times (to reapply configs)

@Phoenix02-20
Copy link

After running the script, I have problem with docker login:

Error response from daemon: Get http://xxx.xxx.xxx.xx/v2/: dial tcp xxx.xxx.xxx.xx:80: connect: connection refused

Anyone knows why?

were you able to solve it? I am getting the same error.

@ron7
Copy link

ron7 commented Aug 31, 2023

After running the script, I have problem with docker login:

Error response from daemon: Get http://xxx.xxx.xxx.xx/v2/: dial tcp xxx.xxx.xxx.xx:80: connect: connection refused

Anyone knows why?

were you able to solve it? I am getting the same error.

You should be using https

@Phoenix02-20
Copy link

After running the script, I have problem with docker login:

Error response from daemon: Get http://xxx.xxx.xxx.xx/v2/: dial tcp xxx.xxx.xxx.xx:80: connect: connection refused

Anyone knows why?

were you able to solve it? I am getting the same error.

You should be using https

to use https I need to add certificate and key

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment