2016-11-02 10:29:12 +01:00
## Introduction
2017-04-16 14:44:19 +02:00
This guide provides instructions for developers to build and run Harbor from source code.
2016-11-02 10:29:12 +01:00
2016-11-10 09:10:39 +01:00
## Step 1: Prepare for a build environment for Harbor
2016-11-04 08:25:06 +01:00
2019-08-08 08:08:34 +02:00
Harbor is deployed as several Docker containers and most of the code is written in Go language. The build environment requires Docker, Docker Compose and golang development environment. Please install the below prerequisites:
2016-11-02 10:29:12 +01:00
Software | Required Version
----------------------|--------------------------
2018-12-14 05:50:41 +01:00
docker | 17.05 +
2019-08-08 08:08:34 +02:00
docker-compose | 1.23.0 +
2016-11-02 10:29:12 +01:00
git | 1.9.1 +
make | 3.81 +
2017-04-16 14:44:19 +02:00
golang* | 1.7.3 +
*optional, required only if you use your own Golang environment.
2016-11-02 10:29:12 +01:00
2016-11-10 09:10:39 +01:00
## Step 2: Getting the source code
2016-11-02 10:29:12 +01:00
```sh
2018-08-14 12:47:39 +02:00
$ git clone https://github.com/goharbor/harbor
2016-11-02 10:29:12 +01:00
```
2017-01-04 07:10:13 +01:00
## Step 3: Building and installing Harbor
2016-11-02 10:29:12 +01:00
2016-11-03 10:50:40 +01:00
### Configuration
2017-04-16 14:44:19 +02:00
Edit the file **make/harbor.cfg** and make necessary configuration changes such as hostname, admin password and mail server. Refer to ** [Installation and Configuration Guide ](installation_guide.md#configuring-harbor )** for more info.
2016-11-02 10:29:12 +01:00
```sh
$ cd harbor
$ vi make/harbor.cfg
```
2017-04-16 14:44:19 +02:00
2016-11-10 09:10:39 +01:00
### Compiling and Running
2016-11-03 10:50:40 +01:00
2016-11-10 09:10:39 +01:00
You can compile the code by one of the three approaches:
2016-11-03 10:50:40 +01:00
2018-10-07 23:41:37 +02:00
#### I. Build with official Golang image
2016-11-02 10:29:12 +01:00
2018-10-07 23:41:37 +02:00
* Get official Golang image from docker hub:
2016-11-02 10:29:12 +01:00
```sh
2019-06-26 23:38:48 +02:00
$ docker pull golang:1.12.5
2016-11-02 10:29:12 +01:00
```
2017-04-16 14:44:19 +02:00
* Build, install and bring up Harbor without Notary:
```sh
2019-06-26 23:38:48 +02:00
$ make install GOBUILDIMAGE=golang:1.12.5 COMPILETAG=compile_golangimage
2017-04-16 14:44:19 +02:00
```
* Build, install and bring up Harbor with Notary:
2016-11-02 10:29:12 +01:00
```sh
2019-06-26 23:38:48 +02:00
$ make install GOBUILDIMAGE=golang:1.12.5 COMPILETAG=compile_golangimage NOTARYFLAG=true
2016-11-02 10:29:12 +01:00
```
2017-08-01 08:35:08 +02:00
* Build, install and bring up Harbor with Clair:
```sh
2019-06-26 23:38:48 +02:00
$ make install GOBUILDIMAGE=golang:1.12.5 COMPILETAG=compile_golangimage CLAIRFLAG=true
2017-08-01 08:35:08 +02:00
```
2016-11-10 09:10:39 +01:00
#### II. Compile code with your own Golang environment, then build Harbor
2016-11-02 10:29:12 +01:00
2016-11-10 09:10:39 +01:00
* Move source code to $GOPATH
2016-11-02 10:29:12 +01:00
```sh
2018-08-14 12:47:39 +02:00
$ mkdir $GOPATH/src/github.com/goharbor/
2016-11-02 10:29:12 +01:00
$ cd ..
2018-08-14 12:47:39 +02:00
$ mv harbor $GOPATH/src/github.com/goharbor/.
2016-11-02 10:29:12 +01:00
```
2017-08-01 08:35:08 +02:00
* Build, install and run Harbor without Notary and Clair:
2016-11-02 10:29:12 +01:00
```sh
2018-08-14 12:47:39 +02:00
$ cd $GOPATH/src/github.com/goharbor/harbor
2016-11-02 10:29:12 +01:00
$ make install
```
2017-04-16 14:44:19 +02:00
2017-08-01 08:35:08 +02:00
* Build, install and run Harbor with Notary and Clair:
2016-11-02 10:29:12 +01:00
```sh
2018-08-14 12:47:39 +02:00
$ cd $GOPATH/src/github.com/goharbor/harbor
2017-08-01 08:35:08 +02:00
$ make install -e NOTARYFLAG=true CLAIRFLAG=true
2017-04-16 14:44:19 +02:00
```
2017-08-01 08:35:08 +02:00
2016-11-10 09:10:39 +01:00
### Verify your installation
2016-11-03 10:50:40 +01:00
2017-04-16 14:44:19 +02:00
If everything worked properly, you can get the below message:
2016-11-03 10:50:40 +01:00
```sh
...
2017-04-16 14:44:19 +02:00
Start complete. You can visit harbor now.
2016-11-03 10:50:40 +01:00
```
2016-11-04 08:25:06 +01:00
2016-11-10 09:10:39 +01:00
Refer to [Installation and Configuration Guide ](installation_guide.md#managing-harbors-lifecycle ) for more information about managing your Harbor instance.
2016-11-03 10:50:40 +01:00
2016-11-10 09:10:39 +01:00
## Appendix
2016-11-02 10:29:12 +01:00
* Using the Makefile
2016-11-10 09:10:39 +01:00
The `Makefile` contains these configurable parameters:
2016-11-02 10:29:12 +01:00
Variable | Description
-------------------|-------------
BASEIMAGE | Container base image, default: photon
DEVFLAG | Build model flag, default: dev
COMPILETAG | Compile model flag, default: compile_normal (local golang build)
2017-04-16 14:44:19 +02:00
NOTARYFLAG | Notary mode flag, default: false
2017-08-01 08:42:56 +02:00
CLAIRFLAG | Clair mode flag, default: false
2017-04-16 14:44:19 +02:00
HTTPPROXY | NPM http proxy for Clarity UI builder
2016-11-10 09:22:08 +01:00
REGISTRYSERVER | Remote registry server IP address
2016-11-02 10:29:12 +01:00
REGISTRYUSER | Remote registry server user name
REGISTRYPASSWORD | Remote registry server user password
REGISTRYPROJECTNAME| Project name on remote registry server
2018-03-21 06:03:49 +01:00
VERSIONTAG | Harbor images tag, default: dev
PKGVERSIONTAG | Harbor online and offline version tag, default:dev
2016-11-02 10:29:12 +01:00
2016-11-10 09:16:36 +01:00
* Predefined targets:
2016-11-02 10:29:12 +01:00
2016-11-10 09:10:39 +01:00
Target | Description
2016-11-02 10:29:12 +01:00
--------------------|-------------
2017-04-16 14:44:19 +02:00
all | prepare env, compile binaries, build images and install images
2016-11-02 10:29:12 +01:00
prepare | prepare env
compile | compile ui and jobservice code
2018-09-08 13:11:44 +02:00
compile_portal | compile portal code
2016-11-02 10:29:12 +01:00
compile_ui | compile ui binary
compile_jobservice | compile jobservice binary
2016-11-10 09:22:08 +01:00
build | build Harbor docker images (default: using build_photon)
build_photon | build Harbor docker images from Photon OS base image
install | compile binaries, build images, prepare specific version of compose file and startup Harbor instance
2017-04-16 14:44:19 +02:00
start | startup Harbor instance (set NOTARYFLAG=true when with Notary)
down | shutdown Harbor instance (set NOTARYFLAG=true when with Notary)
2016-11-02 10:29:12 +01:00
package_online | prepare online install package
package_offline | prepare offline install package
pushimage | push Harbor images to specific registry server
clean all | remove binary, Harbor images, specific version docker-compose file, specific version tag and online/offline install package
cleanbinary | remove ui and jobservice binary
2017-04-16 14:44:19 +02:00
cleanimage | remove Harbor images
cleandockercomposefile | remove specific version docker-compose
2016-11-04 08:25:06 +01:00
cleanversiontag | remove specific version tag
2016-11-02 10:29:12 +01:00
cleanpackage | remove online/offline install package
#### EXAMPLE:
2016-11-10 09:10:39 +01:00
#### Push Harbor images to specific registry server
2016-11-02 10:29:12 +01:00
```sh
$ make pushimage -e DEVFLAG=false REGISTRYSERVER=[$SERVERADDRESS] REGISTRYUSER=[$USERNAME] REGISTRYPASSWORD=[$PASSWORD] REGISTRYPROJECTNAME=[$PROJECTNAME]
```
2016-11-10 09:10:39 +01:00
**Note** : need add "/" on end of REGISTRYSERVER. If REGISTRYSERVER is not set, images will be pushed directly to Docker Hub.
2016-11-02 10:29:12 +01:00
```sh
$ make pushimage -e DEVFLAG=false REGISTRYUSER=[$USERNAME] REGISTRYPASSWORD=[$PASSWORD] REGISTRYPROJECTNAME=[$PROJECTNAME]
```
2016-11-10 09:10:39 +01:00
#### Clean up binaries and images of a specific version
2016-11-02 10:29:12 +01:00
```sh
$ make clean -e VERSIONTAG=[TAG]
```
2017-04-16 14:44:19 +02:00
**Note** : If new code had been added to Github, the git commit TAG will change. Better use this command to clean up images and files of previous TAG.
2016-11-02 10:29:12 +01:00
2016-11-10 09:10:39 +01:00
#### By default, the make process create a development build. To create a release build of Harbor, set the below flag to false.
2016-11-02 10:29:12 +01:00
```sh
$ make XXXX -e DEVFLAG=false
```