Skip to content

Palleri/DCW

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DCW (dockcheck-web) with exporters

A webpage showing available image updates for your running containers.

Checking for new images at startup, once a day and via the button "Check for updates".

If dont want gui, just ignore publishing ports.
working on a non-gui version.

Exporter (multiple hosts)

Palleri/DCW-exporter

A script checking updates for docker images without the need of pulling - then having the option to auto-update.

All cred goes to Mag37 making this amazing script!

This image use dockcheck provided by Mag37.

Dependencies:

regclient/regctl (Licensed under Apache-2.0 License)

inotify-tools (Licensed under GPL-2.0 License)

APPRISE (Licensed under BSD 3-Clause License)


docker-compose.yml

version: '3.2'
services:
  dcw:
    container_name: dcw
    image: 'palleri/dcw:latest'
    hostname: DCW                    # optional, the hostname will be displayed in the ui
    restart: unless-stopped
    ports:
      - '80:80'
      - '5432:5432' # only required with exporters // communication between DCW and exporters
    volumes:
      - ./data:/var/www/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      TOKEN: superSecretPassw0rd                        # required // Also used by the exporter
      NOTIFY: "true"                                    # optional
      NOTIFY_URLS: "discord:https://Dockcheck@xxxxx/xxxxxx"   # optional
      NOTIFY_DEBUG: true                                # optional
      HTTP_PROXY: "https://proxy.homelab.net:3128"       # optional
      HTTPS_PROXY: "https://proxy.homelab.net:3128"      # optional
      EXCLUDE: "nginx,plex,prowlarr"                    # optional // Exclude containers from being checked for updates
      CRON_TIME: "12:56"                                # optional

The container and exporter are communicating via port tcp/5432

Security concern

For more security add the :ro to volumes docker.sock

Use with care, make sure you keep this container safe and do not publish on the internet.

Notifications

This image use apprise for notifications

Environment variables

Set NOTIFY: true to enable notifications

Set NOTIFY_DEBUG: true to enable DEBUG mode. Be carefull, your tokens and passwords might be visible in docker logs

Set NOTIFY_URLS: "tgram:https://0123456789:RandomLettersAndNumbers-2morestuff-123456789"

Set EXCLUDE: "nginx,plex,prowlarr" if you want to exclude containers from being checked for updates Use the name on each container in comma separated variable

Setup Example for Telegram

Start a chat with @BotFather and follow the guided steps.
Create a new bot: /newbot
Nickname: PumpkinsInShorts Username: CuriousPlumber
Note down the token replied: Use this token to access the HTTP API:
0123456789:RandomLettersAndNumbers-2morestuff

Now create a new group in Telegram, invite the bot with it's username @CuriousPlumber
When in the group, note down the end of the url, eg web.telegram.org/z/#-123456789 -> -123456789
If only using the phone app, invite @RawDataBot to the group and it'll post the id.

Then finally combine the token + the ID of the chatgroup, in this example:
0123456789:RandomLettersAndNumbers-2morestuff-123456789
Add that row to the docker-compose.yml

version: '3.2'
services:
  ...
    environment:
      NOTIFY: "true"
      NOTIFY_URLS: "tgram:https://0123456789:RandomLettersAndNumbers-2morestuff-123456789"
  ...

Setup Example for Discord

Remove the api/webhook from https://discord.com/api/webhooks/xxxxx/xxxxxx
To this discord:https://xxxxx/xxxxxx

Or use it as it is https://discord.com/api/webhooks/xxxxx/xxxxxx

version: '3.2'
services:
  ...
    environment:
      NOTIFY: "true"
      NOTIFY_URLS: "discord:https://Dockcheck-web@xxxxx/xxxxxx"
  ...

Example for multiple urls

version: '3.2'
services:
  ...
    environment:
      NOTIFY: "true"
      NOTIFY_URLS: "discord:https://Dockcheck-web@xxxxx/xxxxxx tgram:https://0123456789:RandomLettersAndNumbers-2morestuff-123456789"
  ...

Tested

Service Tested Result
Discord 2023-02-24 ✔️
Mail 2023-02-24 ✔️
Telegram 2023-02-24 ✔️
Gotify 2023-02-25 ✔️
Matrix 2023-02-26 ✔️
HomeAssistant 2023-02-26 ✔️
Notification Service Service ID Default Port Example Syntax
Apprise API apprise:https:// or apprises:https:// (TCP) 80 or 443 apprise:https://hostname/Token
AWS SES ses:https:// (TCP) 443 ses:https://user@domain/AccessKeyID/AccessSecretKey/RegionName
ses:https://user@domain/AccessKeyID/AccessSecretKey/RegionName/email1/email2/emailN
Bark bark:https:// (TCP) 80 or 443 bark:https://hostname
bark:https://hostname/device_key
bark:https://hostname/device_key1/device_key2/device_keyN
Boxcar boxcar:https:// (TCP) 443 boxcar:https://hostname
boxcar:https://hostname/@tag
boxcar:https://hostname/device_token
boxcar:https://hostname/device_token1/device_token2/device_tokenN
boxcar:https://hostname/@tag/@tag2/device_token
Discord discord:https:// (TCP) 443 discord:https://webhook_id/webhook_token
discord:https://avatar@webhook_id/webhook_token
Emby emby:https:// or embys:https:// (TCP) 8096 emby:https://user@hostname/
emby:https://user:password@hostname
Enigma2 enigma2:https:// or enigma2s:https:// (TCP) 80 or 443 enigma2:https://hostname
Faast faast:https:// (TCP) 443 faast:https://authorizationtoken
FCM fcm:https:// (TCP) 443 fcm:https://project@apikey/DEVICE_ID
fcm:https://project@apikey/#TOPIC
fcm:https://project@apikey/DEVICE_ID1/#topic1/#topic2/DEVICE_ID2/
Flock flock:https:// (TCP) 443 flock:https://token
flock:https://botname@token
flock:https://app_token/u:userid
flock:https://app_token/g:channel_id
flock:https://app_token/u:userid/g:channel_id
Gitter gitter:https:// (TCP) 443 gitter:https://token/room
gitter:https://token/room1/room2/roomN
Google Chat gchat:https:// (TCP) 443 gchat:https://workspace/key/token
Gotify gotify:https:// or gotifys:https:// (TCP) 80 or 443 gotify:https://hostname/token
gotifys:https://hostname/token?priority=high
Growl growl:https:// (UDP) 23053 growl:https://hostname
growl:https://hostname:portno
growl:https://password@hostname
growl:https://password@hostname:port
Note: you can also use the get parameter version which can allow the growl request to behave using the older v1.x protocol. An example would look like: growl:https://hostname?version=1
Guilded guilded:https:// (TCP) 443 guilded:https://webhook_id/webhook_token
guilded:https://avatar@webhook_id/webhook_token
Home Assistant hassio:https:// or hassios:https:// (TCP) 8123 or 443 hassio:https://hostname/accesstoken
hassio:https://user@hostname/accesstoken
hassio:https://user:password@hostname:port/accesstoken
hassio:https://hostname/optional/path/accesstoken
IFTTT ifttt:https:// (TCP) 443 ifttt:https://webhooksID/Event
ifttt:https://webhooksID/Event1/Event2/EventN
ifttt:https://webhooksID/Event1/?+Key=Value
ifttt:https://webhooksID/Event1/?-Key=value1
Join join:https:// (TCP) 443 join:https://apikey/device
join:https://apikey/device1/device2/deviceN/
join:https://apikey/group
join:https://apikey/groupA/groupB/groupN
join:https://apikey/DeviceA/groupA/groupN/DeviceN/
KODI kodi:https:// or kodis:https:// (TCP) 8080 or 443 kodi:https://hostname
kodi:https://user@hostname
kodi:https://user:password@hostname:port
Kumulos kumulos:https:// (TCP) 443 kumulos:https://apikey/serverkey
LaMetric Time lametric:https:// (TCP) 443 lametric:https://apikey@device_ipaddr
lametric:https://apikey@hostname:port
lametric:https://client_id@client_secret
Line line:https:// (TCP) 443 line:https://Token@User
line:https://Token/User1/User2/UserN
Mailgun mailgun:https:// (TCP) 443 mailgun:https://user@hostname/apikey
mailgun:https://user@hostname/apikey/email
mailgun:https://user@hostname/apikey/email1/email2/emailN
mailgun:https://user@hostname/apikey/?name="From%20User"
Mastodon mastodon:https:// or mastodons:https:// (TCP) 80 or 443 mastodon:https://access_key@hostname
mastodon:https://access_key@hostname/@user
mastodon:https://access_key@hostname/@user1/@user2/@userN
Matrix matrix:https:// or matrixs:https:// (TCP) 80 or 443 matrix:https://hostname
matrix:https://user@hostname
matrixs:https://user:pass@hostname:port/#room_alias
matrixs:https://user:pass@hostname:port/!room_id
matrixs:https://user:pass@hostname:port/#room_alias/!room_id/#room2
matrixs:https://token@hostname:port/?webhook=matrix
matrix:https://user:token@hostname/?webhook=slack&format=markdown
Mattermost mmost:https:// or mmosts:https:// (TCP) 8065 mmost:https://hostname/authkey
mmost:https://hostname:80/authkey
mmost:https://user@hostname:80/authkey
mmost:https://hostname/authkey?channel=channel
mmosts:https://hostname/authkey
mmosts:https://user@hostname/authkey
Microsoft Teams msteams:https:// (TCP) 443 msteams:https://TokenA/TokenB/TokenC/
Misskey misskey:https:// or misskeys:https:// (TCP) 80 or 443 misskey:https://access_token@hostname
MQTT mqtt:https:// or mqtts:https:// (TCP) 1883 or 8883 mqtt:https://hostname/topic
mqtt:https://user@hostname/topic
mqtts:https://user:pass@hostname:9883/topic
Nextcloud ncloud:https:// or nclouds:https:// (TCP) 80 or 443 ncloud:https://adminuser:pass@host/User
nclouds:https://adminuser:pass@host/User1/User2/UserN
NextcloudTalk nctalk:https:// or nctalks:https:// (TCP) 80 or 443 nctalk:https://user:pass@host/RoomId
nctalks:https://user:pass@host/RoomId1/RoomId2/RoomIdN
Notica notica:https:// (TCP) 443 notica:https://Token/
Notifico notifico:https:// (TCP) 443 notifico:https://ProjectID/MessageHook/
ntfy ntfy:https:// (TCP) 80 or 443 ntfy:https://topic/
ntfys:https://topic/
Office 365 o365:https:// (TCP) 443 o365:https://TenantID:AccountEmail/ClientID/ClientSecret
o365:https://TenantID:AccountEmail/ClientID/ClientSecret/TargetEmail
o365:https://TenantID:AccountEmail/ClientID/ClientSecret/TargetEmail1/TargetEmail2/TargetEmailN
OneSignal onesignal:https:// (TCP) 443 onesignal:https://AppID@APIKey/PlayerID
onesignal:https://TemplateID:AppID@APIKey/UserID
onesignal:https://AppID@APIKey/#IncludeSegment
onesignal:https://AppID@APIKey/Email
Opsgenie opsgenie:https:// (TCP) 443 opsgenie:https://APIKey
opsgenie:https://APIKey/UserID
opsgenie:https://APIKey/#Team
opsgenie:https://APIKey/*Schedule
opsgenie:https://APIKey/^Escalation
PagerDuty pagerduty:https:// (TCP) 443 pagerduty:https://IntegrationKey@ApiKey
pagerduty:https://IntegrationKey@ApiKey/Source/Component
PagerTree pagertree:https:// (TCP) 443 pagertree:https://integration_id
ParsePlatform parsep:https:// or parseps:https:// (TCP) 80 or 443 parsep:https://AppID:MasterKey@Hostname
parseps:https://AppID:MasterKey@Hostname
PopcornNotify popcorn:https:// (TCP) 443 popcorn:https://ApiKey/ToPhoneNo
popcorn:https://ApiKey/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/
popcorn:https://ApiKey/ToEmail
popcorn:https://ApiKey/ToEmail1/ToEmail2/ToEmailN/
popcorn:https://ApiKey/ToPhoneNo1/ToEmail1/ToPhoneNoN/ToEmailN
Prowl prowl:https:// (TCP) 443 prowl:https://apikey
prowl:https://apikey/providerkey
PushBullet pbul:https:// (TCP) 443 pbul:https://accesstoken
pbul:https://accesstoken/#channel
pbul:https://accesstoken/A_DEVICE_ID
pbul:https://accesstoken/[email protected]
pbul:https://accesstoken/#channel/#channel2/[email protected]/DEVICE
Pushjet pjet:https:// or pjets:https:// (TCP) 80 or 443 pjet:https://hostname/secret
pjet:https://hostname:port/secret
pjets:https://secret@hostname/secret
pjets:https://hostname:port/secret
Push (Techulus) push:https:// (TCP) 443 push:https://apikey/
Pushed pushed:https:// (TCP) 443 pushed:https://appkey/appsecret/
pushed:https://appkey/appsecret/#ChannelAlias
pushed:https://appkey/appsecret/#ChannelAlias1/#ChannelAlias2/#ChannelAliasN
pushed:https://appkey/appsecret/@UserPushedID
pushed:https://appkey/appsecret/@UserPushedID1/@UserPushedID2/@UserPushedIDN
Pushover pover:https:// (TCP) 443 pover:https://user@token
pover:https://user@token/DEVICE
pover:https://user@token/DEVICE1/DEVICE2/DEVICEN
Note: you must specify both your user_id and token
PushSafer psafer:https:// or psafers:https:// (TCP) 80 or 443 psafer:https://privatekey
psafers:https://privatekey/DEVICE
psafer:https://privatekey/DEVICE1/DEVICE2/DEVICEN
Reddit reddit:https:// (TCP) 443 reddit:https://user:password@app_id/app_secret/subreddit
reddit:https://user:password@app_id/app_secret/sub1/sub2/subN
Rocket.Chat rocket:https:// or rockets:https:// (TCP) 80 or 443 rocket:https://user:password@hostname/RoomID/Channel
rockets:https://user:password@hostname:443/#Channel1/#Channel1/RoomID
rocket:https://user:password@hostname/#Channel
rocket:https://webhook@hostname
rockets:https://webhook@hostname/@User/#Channel
Ryver ryver:https:// (TCP) 443 ryver:https://Organization/Token
ryver:https://botname@Organization/Token
SendGrid sendgrid:https:// (TCP) 443 sendgrid:https://APIToken:FromEmail/
sendgrid:https://APIToken:FromEmail/ToEmail
sendgrid:https://APIToken:FromEmail/ToEmail1/ToEmail2/ToEmailN/
ServerChan schan:https:// (TCP) 443 schan:https://sendkey/
Signal API signal:https:// or signals:https:// (TCP) 80 or 443 signal:https://hostname:port/FromPhoneNo
signal:https://hostname:port/FromPhoneNo/ToPhoneNo
signal:https://hostname:port/FromPhoneNo/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/
SimplePush spush:https:// (TCP) 443 spush:https://apikey
spush:https://salt:password@apikey
spush:https://apikey?event=Apprise
Slack slack:https:// (TCP) 443 slack:https://TokenA/TokenB/TokenC/
slack:https://TokenA/TokenB/TokenC/Channel
slack:https://botname@TokenA/TokenB/TokenC/Channel
slack:https://user@TokenA/TokenB/TokenC/Channel1/Channel2/ChannelN
SMTP2Go smtp2go:https:// (TCP) 443 smtp2go:https://user@hostname/apikey
smtp2go:https://user@hostname/apikey/email
smtp2go:https://user@hostname/apikey/email1/email2/emailN
smtp2go:https://user@hostname/apikey/?name="From%20User"
Streamlabs strmlabs:https:// (TCP) 443 strmlabs:https://AccessToken/
strmlabs:https://AccessToken/?name=name&identifier=identifier&amount=0&currency=USD
SparkPost sparkpost:https:// (TCP) 443 sparkpost:https://user@hostname/apikey
sparkpost:https://user@hostname/apikey/email
sparkpost:https://user@hostname/apikey/email1/email2/emailN
sparkpost:https://user@hostname/apikey/?name="From%20User"
Spontit spontit:https:// (TCP) 443 spontit:https://UserID@APIKey/
spontit:https://UserID@APIKey/Channel
spontit:https://UserID@APIKey/Channel1/Channel2/ChannelN
Syslog syslog:https:// (UDP) 514 (if hostname specified) syslog:https://
syslog:https://Facility
syslog:https://hostname
syslog:https://hostname/Facility
Telegram tgram:https:// (TCP) 443 tgram:https://bottoken/ChatID
tgram:https://bottoken/ChatID1/ChatID2/ChatIDN
Twitter twitter:https:// (TCP) 443 twitter:https://CKey/CSecret/AKey/ASecret
twitter:https://user@CKey/CSecret/AKey/ASecret
twitter:https://CKey/CSecret/AKey/ASecret/User1/User2/User2
twitter:https://CKey/CSecret/AKey/ASecret?mode=tweet
Twist twist:https:// (TCP) 443 twist:https://pasword:login
twist:https://password:login/#channel
twist:https://password:login/#team:channel
twist:https://password:login/#team:channel1/channel2/#team3:channel
XBMC xbmc:https:// or xbmcs:https:// (TCP) 8080 or 443 xbmc:https://hostname
xbmc:https://user@hostname
xbmc:https://user:password@hostname:port
Webex Teams (Cisco) wxteams:https:// (TCP) 443 wxteams:https://Token
Zulip Chat zulip:https:// (TCP) 443 zulip:https://botname@Organization/Token
zulip:https://botname@Organization/Token/Stream
zulip:https://botname@Organization/Token/Email

Mail

This is what worked for me

TODO List

TODO Tested Result Implemented
ARM64 and AMD64 Support 2023-02-23 ✔️ 2023-02-23
Slim version without webgui (Only notifications) 2023-02-24 ✔️ 2023-02-26

Future ideas

Feature Timeline Stage
Update via webgui Unknown (Need Help)
Multiple hosts one gui 2023-03-* Alpha
  • Update via webui
    • Need help with how to make docker.sock recreate docker-compose without the need for docker-compose.yml
      • Docker remote API good or bad?

Bugs and fixes

Description Date Status
Cronjob not working properly 2023-01-28 ✔️
Script not running correctly 2023-01-29 ✔️
Hanging processes 2023-01-29 ✔️
Not displaying in ascending order 2023-01-29 ✔️
Blank/error text on index while script is running 2023-01-29 ✔️
Redirect error while checking for update 2023-01-31 ✔️

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published