Skip to content

SloCompTech/portainer-deployer

Repository files navigation

portainer-deployer

NodeJS application that deploys/updates portainer stack with new version of containers.

Usage

export PORTAINER_API="http://localhost:9000/api"

# Development
npm run start:dev

# Production
npm run start

# Development run commands
DISABLE_AUTH=1 PORTAINER_API=http://localhost:9000/api npm run start:dev
PORTAINER_API=http://localhost:9000/api npm run start:dev

Docker

Build

docker build -t <tag> .

Run

docker create \
  --name=deployer \
  -e PORTAINER_API="http://localhost:9000/api" \
  -e TZ=Europe/Ljubljana \
  -p 3000:3000 \
  --restart unless-stopped \
  slocomptech/portainer-deployer

Docker compose

version: "2"
services:
  portainer-deployer:
    image: slocomptech/portainer-deployer
    container_name: portainer-deployer
    environment:
      - PORTAINER_API="http://localhost:9000/api"
      - TZ=Europe/Ljubljana
    ports:
      - "3000:3000"
    restart: unless-stopped

Parameters

Parameter Function
-e DISABLE_AUTH=true Disable authentication
-e PORTAINER_API=http(s)://<url>/api Portainer API URL (required)
-e PORTAINER_USER=<username> Portainer (default) username
-e PORTAINER_PASS=<password> Portainer (default) password
-e CONFIG=<path to config file> Custom config file path.
-e LOG_LEVEL=verbose Enable app output see docs
-e FAIL_MODE=hard What to do if services fail.
-e PUID=1000 for UserID - see below for explanation
-e PGID=1000 for GroupID - see below for explanation
-e SKIP_APP=true Don't start app, useful for development.
-e TZ=Europe/London Specify a timezone to use EG Europe/London.
-v <path>:/config All the config files reside here.
-p 3000:3000 Expose port

Request

Request metod is POST and depends on handler, but in general request looks like

{
  "handler": "default", /* Handler name, if omitted default is 'default' */
  "data": {
    /* Data send to handler */
  }
}

Authentication

Authenitcation of app is linked to portainer API login, so it hasn't any internal authentication mechanisms. But there are multiple ways of authentication:

  • Header Authorization: Bearer <Portainer auth token>
  • Header Authorization: Basic <base64 encoded user:pass>
  • No headers, set PORTAINER_USER, PORTAINER_PASS environment variables.

Handlers

Default handler

Default handler changes value of existing environment variables of stack and triggers redeploy.

{
  "data": {
    "stack": "<stack name>",
    "env": {
      "<varname>": "<value>"
    }
  }
}

About

NodeJS application that deploys/updates portainer stack with new version of containers

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published