Set up a Linux build environment
As an open source product, we encourage users to edit our code and submit patches to it. This article explains how to set up a local environment on Linux so you can build your own copy of Portainer and test your changes.
Dependencies
- Docker CE is the Docker application that runs on your machine to enable the use of Docker features. The latest version is not a requirement for this development stack, however we recommend staying up to date with the latest improvements and security fixes. 
- Yarn is a package manager for installing new software packages on your system, and is used to run the Portainer development environment. 
- Node.JS is a JavaScript package used when building applications that leverage networking, such as Portainer. Version 18 or later is required. 
- Golang is the open source language that we use to build the majority of Portainer software. Version 1.18 of Golang is required. 
- Wget is a package used to retrieve files using common internet protocols such as HTTP and FTP. 
Part 1: Installing Docker
Step 1: Configure the Docker repository
First, update your system's packages using this command:
sudo apt-get updateNext, install the required packages to use repos over HTTPS:
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-commonNow install the official GPG key for Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -Use this fingerprint to confirm that you have the correct key:
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
sudo apt-key fingerprint 0EBFCD88The correct output should be:
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <[email protected]>
sub   rsa4096 2017-02-22 [S]And finally, use the following command to set up the stable repository:
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"Step 2: Install Docker
First, update your system's packages using this command:
sudo apt-get updateNext, install Docker and its associated packages:
sudo apt-get install docker-ce docker-ce-cli containerd.ioFinally, verify that Docker was correctly installed and is running on your system. This command should download a test image that you can run in a container, print an informational message for then exit out of.
sudo docker run hello-worldPart 2: Installing Yarn
Run this command in the terminal to configure the Yarn repository on your system:
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.listUpdate your system's packages and install Yarn using this command:
sudo apt-get update && sudo apt-get install yarnFinally, run this command in the terminal to confirm that the Yarn installation was a success:
yarn --versionThe current version of Yarn should print out in your terminal, indicating that that it installed successfully and is running on your system.
Part 3: Installing or updating Node.JS
First, install or update to the latest version of Node.JS by running this command in the terminal:
nvm install nodeFinally, check if Node is installed on your system:
node --versionThe latest version of Node.JS should now print out.
Part 4: Installing Golang using a Linux tar file
First, download the appropriate version of Go for your system. Navigate to where it was downloaded then extract it to the /usr/local directory using this command:
sudo tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gzNext, add /usr/local/go/bin to the PATH environment variable inside your shell profile. Here's an example using bash:
echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrcAnd finally, follow the Test your installation section in Golang's official documentation to ensure that Go installed correctly.
Part 5: Installing Wget
To install Wget on Linux, simply run the apt-get install wget command in the terminal.
Was this helpful?
