Skip to content

oxmix/container-ship

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Container Ship

Go Report Card CI Status Docker Pulls Ship Docker Pulls Cargo

Deployment of containers type master-workers fits for multiple regions, minimum settings, access controls and opening ports.

Introduce a New Container Ship v2

  • New interface NMV – Nodes Manifests Variables
  • Full controls panel in web
  • Now cargo-deployer on golang with support multiple workers
  • Support simple canary deployment

Preview

Try fast start

  1. git clone https://github.com/oxmix/container-ship.git
  2. cd container-ship/example && ./start
  3. open http://localhost:8080

Mini Wiki

Apply deployment manifest

$parentHostname is variable hostname parent/internal node, option if needs

curl -kX POST https://ship.domain.tld/deployment --data-binary @- << 'EOF'
space: my-project
name: test-deployment
containers:
  - name: test-nginx
    from: nginx
    hostname: $parentHostname
    stop-timeout: 30
    ports:
      - 8080:80
EOF

Magic environment

  • update node
  • auto replace in each manifest deployment if set equal node and variables {}
curl -kX POST https://ship.domain.tld/deployment --data-binary @- << 'EOF'
space: example
name: magick-envs-deployment
containers:
  - name: nginx
    from: nginx
    ports:
      - 8081:80
    environment:
      - PASS={{SECRET_PASS}}
EOF

Shared environment for all containers

  • declared at deployment level, applied to every container below
  • container-level env with the same key overrides the shared one
  • supports magic variables {{...}} the same way as container env
curl -kX POST https://ship.domain.tld/deployment --data-binary @- << 'EOF'
space: example
name: shared-envs-deployment
environment:
  - LOG_LEVEL=info
  - SHARED_SECRET={{PROJECT_SHARED_SECRET}}
containers:
  - name: api-1
    from: nginx
    environment:
      - UNIQUE_FOR_API1=x
  - name: api-2
    from: nginx
    environment:
      - UNIQUE_FOR_API2=y
EOF

Manual raise master daemon container-ship

mkdir $(pwd)/assets && \
docker run -d --name container-ship \
  -v $(pwd)/assets:/assets \
  -p 127.0.0.1:8080:8080 \
  -e ENDPOINT=http://localhost:8080 \
  -e CARGO_NAME=cargo-deployer \
  -e CARGO_FROM=oxmix/cargo-deployer:latest \
  --restart always \
  --log-driver json-file \
  --log-opt max-size=64k \
oxmix/container-ship

Logs alert to telegram

Telegram credentials are passed via env:

docker run ... \
  ...
  -e NOTIFY_TG_TOKEN=... \
  -e NOTIFY_TG_CHAT_ID=... \
  ...
oxmix/container-ship

Match and ignore patterns are loaded from files inside the mounted assets/:

  • ./assets/notify-match.list — patterns that trigger an alert
  • ./assets/notify-ignore.list — patterns that suppress an alert

Format — one rule per line, [container|]pattern:

  • without container| prefix — rule applies to any container
  • container must match the full container name (e.g. ship.mumble-voip)
  • pattern — case-insensitive substring against the log line, may freely contain :
  • blank lines and lines starting with # are ignored

Example notify-match.list:

# golang
fatal error:
panic:
# php
PHP Parse error
PHP Fatal error
PHP Warning
PHP Notice
# node
Error:
EvalError:
RangeError:
ReferenceError:
SyntaxError:
TypeError:
URIError:

Example notify-ignore.list:

ship.mumble-voip|SSL handshake
ship.mumble-voip|Connection timeout
# global silence
debug log

If notify-match.list is missing or empty — alerts are disabled.

Deployment through file

curl -kX POST https://ship.domain.tld/deployment --data-binary "@test-deployment.yaml"

Example Logs

  • Showing logs realtime from container with support json pretty

Preview

Packages

 
 
 

Contributors