Git Product home page Git Product logo

docker-healthchecks's Introduction

linuxserver.io

Blog Discord Discourse Fleet GitHub Open Collective

The LinuxServer.io team brings you another container release featuring:

  • regular and timely application updates
  • easy user mappings (PGID, PUID)
  • custom base image with s6 overlay
  • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
  • regular security updates

Find us at:

  • Blog - all the things you can do with our containers including How-To guides, opinions and much more!
  • Discord - realtime support / chat with the community and the team.
  • Discourse - post on our community forum.
  • Fleet - an online web interface which displays all of our maintained images.
  • GitHub - view the source for all of our repositories.
  • Open Collective - please consider helping us by either donating or contributing to our budget

Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

Healthchecks is a watchdog for your cron jobs. It's a web server that listens for pings from your cron jobs, plus a web interface.

healthchecks

Supported Architectures

We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

Simply pulling lscr.io/linuxserver/healthchecks:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

The architectures supported by this image are:

Architecture Available Tag
x86-64 amd64-<version tag>
arm64 arm64v8-<version tag>
armhf

Application Setup

Access the WebUI at :8000. For more information, check out Healthchecks.

See here for a complete list of available environment variables.

Usage

To help you get started creating a container from this image you can either use docker-compose or the docker cli.

docker-compose (recommended, click here for more info)

---
services:
  healthchecks:
    image: lscr.io/linuxserver/healthchecks:latest
    container_name: healthchecks
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - SITE_ROOT=
      - SITE_NAME=
      - SUPERUSER_EMAIL=
      - SUPERUSER_PASSWORD=
      - ALLOWED_HOSTS= #optional
      - APPRISE_ENABLED=False #optional
      - CSRF_TRUSTED_ORIGINS= #optional
      - DEBUG=True #optional
      - DEFAULT_FROM_EMAIL= #optional
      - EMAIL_HOST= #optional
      - EMAIL_PORT= #optional
      - EMAIL_HOST_USER= #optional
      - EMAIL_HOST_PASSWORD= #optional
      - EMAIL_USE_TLS= #optional
      - INTEGRATIONS_ALLOW_PRIVATE_IPS= #optional
      - PING_EMAIL_DOMAIN= #optional
      - RP_ID= #optional
      - SECRET_KEY= #optional
      - SITE_LOGO_URL= #optional
    volumes:
      - /path/to/healthchecks/config:/config
    ports:
      - 8000:8000
      - 2525:2525 #optional
    restart: unless-stopped
docker run -d \
  --name=healthchecks \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Etc/UTC \
  -e SITE_ROOT= \
  -e SITE_NAME= \
  -e SUPERUSER_EMAIL= \
  -e SUPERUSER_PASSWORD= \
  -e ALLOWED_HOSTS= `#optional` \
  -e APPRISE_ENABLED=False `#optional` \
  -e CSRF_TRUSTED_ORIGINS= `#optional` \
  -e DEBUG=True `#optional` \
  -e DEFAULT_FROM_EMAIL= `#optional` \
  -e EMAIL_HOST= `#optional` \
  -e EMAIL_PORT= `#optional` \
  -e EMAIL_HOST_USER= `#optional` \
  -e EMAIL_HOST_PASSWORD= `#optional` \
  -e EMAIL_USE_TLS= `#optional` \
  -e INTEGRATIONS_ALLOW_PRIVATE_IPS= `#optional` \
  -e PING_EMAIL_DOMAIN= `#optional` \
  -e RP_ID= `#optional` \
  -e SECRET_KEY= `#optional` \
  -e SITE_LOGO_URL= `#optional` \
  -p 8000:8000 \
  -p 2525:2525 `#optional` \
  -v /path/to/healthchecks/config:/config \
  --restart unless-stopped \
  lscr.io/linuxserver/healthchecks:latest

Parameters

Containers are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

Parameter Function
-p 8000 Healthchecks Web UI
-p 2525 Port for inbound SMTP pings
-e PUID=1000 for UserID - see below for explanation
-e PGID=1000 for GroupID - see below for explanation
-e TZ=Etc/UTC specify a timezone to use, see this list.
-e SITE_ROOT= The site's top-level URL and the port it listens to if different than 80 or 443 (e.g., https://healthchecks.example.com:8000).
-e SITE_NAME= The site's name (e.g., "Example Corp HealthChecks").
-e SUPERUSER_EMAIL= Superuser email.
-e SUPERUSER_PASSWORD= Superuser password.
-e ALLOWED_HOSTS= A comma-separated list of valid hostnames for the server. Default is: *.
-e APPRISE_ENABLED=False Set to True to enable the Apprise integration (https://github.com/caronc/apprise).
-e CSRF_TRUSTED_ORIGINS= A list of trusted origins for unsafe requests (e.g. POST). Defaults to the value of SITE_ROOT.
-e DEBUG=True Set to False to disable. Debug mode relaxes CSRF protections and increases logging verbosity but should be disabled for production instances as it will impact performance and security.
-e DEFAULT_FROM_EMAIL= From email for alerts.
-e EMAIL_HOST= SMTP host.
-e EMAIL_PORT= SMTP port.
-e EMAIL_HOST_USER= SMTP user.
-e EMAIL_HOST_PASSWORD= SMTP password.
-e EMAIL_USE_TLS= Use TLS for SMTP (True or False).
-e INTEGRATIONS_ALLOW_PRIVATE_IPS= Defaults to False. Set to True to allow integrations to connect to private IP addresses.
-e PING_EMAIL_DOMAIN= The domain to use for generating ping email addresses. Defaults to localhost.
-e RP_ID= If using webauthn for 2FA set this to match your Healthchecks domain. Webauthn will only work over https.
-e SECRET_KEY= A secret key used for cryptographic signing. Will generate a random value if one is not supplied and save it to /config/local_settings.py.
-e SITE_LOGO_URL= Full URL to custom site logo.
-v /config Persistent config files.

Environment variables from files (Docker secrets)

You can set any environment variable from a file by using a special prepend FILE__.

As an example:

-e FILE__MYVAR=/run/secrets/mysecretvariable

Will set the environment variable MYVAR based on the contents of the /run/secrets/mysecretvariable file.

Umask for running applications

For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

User / Group Identifiers

When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

In this instance PUID=1000 and PGID=1000, to find yours use id your_user as below:

id your_user

Example output:

uid=1000(your_user) gid=1000(your_user) groups=1000(your_user)

Docker Mods

Docker Mods Docker Universal Mods

We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

Support Info

  • Shell access whilst the container is running:

    docker exec -it healthchecks /bin/bash
  • To monitor the logs of the container in realtime:

    docker logs -f healthchecks
  • Container version number:

    docker inspect -f '{{ index .Config.Labels "build_version" }}' healthchecks
  • Image version number:

    docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/healthchecks:latest

Updating Info

Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (noted in the relevant readme.md), we do not recommend or support updating apps inside the container. Please consult the Application Setup section above to see if it is recommended for the image.

Below are the instructions for updating containers:

Via Docker Compose

  • Update images:

    • All images:

      docker-compose pull
    • Single image:

      docker-compose pull healthchecks
  • Update containers:

    • All containers:

      docker-compose up -d
    • Single container:

      docker-compose up -d healthchecks
  • You can also remove the old dangling images:

    docker image prune

Via Docker Run

  • Update the image:

    docker pull lscr.io/linuxserver/healthchecks:latest
  • Stop the running container:

    docker stop healthchecks
  • Delete the container:

    docker rm healthchecks
  • Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your /config folder and settings will be preserved)

  • You can also remove the old dangling images:

    docker image prune

Image Update Notifications - Diun (Docker Image Update Notifier)

tip: We recommend Diun for update notifications. Other tools that automatically update containers unattended are not recommended or supported.

Building locally

If you want to make local modifications to these images for development purposes or just to customize the logic:

git clone https://github.com/linuxserver/docker-healthchecks.git
cd docker-healthchecks
docker build \
  --no-cache \
  --pull \
  -t lscr.io/linuxserver/healthchecks:latest .

The ARM variants can be built on x86_64 hardware using multiarch/qemu-user-static

docker run --rm --privileged multiarch/qemu-user-static:register --reset

Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

Versions

  • 24.01.24: - No longer write envs to local_settings.py. Envs will take precedence over any existing values in config file. Removed REGENERATE_SETTINGS as it is now obsolete.
  • 22.01.24: - Fix CSRF handling.
  • 23.12.23: - Rebase to Alpine 3.19.
  • 31.05.23: - Rebase to Alpine 3.18. Deprecate armhf.
  • 22.12.22: - Rebase to Alpine 3.17. Add extra deps for pycurl. Add INTEGRATIONS_ALLOW_PRIVATE_IPS.
  • 18.10.22: - Add curl-dev to fix broken pip builds.
  • 11.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
  • 27.09.22: - Fix sending of Email Reports
  • 08.01.22: - Fix CSRF setting for Django 4.0 (introduced in v1.25.0)
  • 11.11.21: - Add Apprise to Docker as in v1.24.0
  • 10.09.21: - Fix creation of superuser
  • 07.08.21: - Update custom logo handling to support changes in v1.22.0
  • 11.07.21: - Rebase to Alpine 3.14.
  • 18.05.21: - Add linuxserver wheel index.
  • 11.01.21: - Add libffi-dev to allow building of python cryptography lib.
  • 19.07.20: - Rebasing to alpine 3.12, fixed 'ALLOWED_HOSTS' bug, now defaults to wildcard
  • 19.12.19: - Rebasing to alpine 3.11.
  • 31.10.19: - Add postgres client and fix config for CSRF.
  • 23.10.19: - Allow to create superuser
  • 28.06.19: - Rebasing to alpine 3.10.
  • 12.04.19: - Rebase to Alpine 3.9.
  • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
  • 14.02.19: - Adding mysql libs needed for using a database.
  • 11.10.18: - adding pipeline logic and multi arching release
  • 15.11.17: - git pull is now in Dockerfile so each tagged container contains the same code version
  • 17.10.17: - Fixed local_settings.py output
  • 27.09.17: - Initial Release.

docker-healthchecks's People

Contributors

alex-phillips avatar aptalca avatar axilleas avatar chasebolt avatar chbmb avatar drizuid avatar fabiodcorreia avatar gunr2171 avatar homerr avatar immanuelfodor avatar j0nnymoe avatar kaysond avatar linuxserver-ci avatar lukasmrtvy avatar michaelsp avatar nemchik avatar neographophobic avatar nightah avatar roxedus avatar shiruken avatar solipsist01 avatar sparklyballs avatar technorabilia avatar thelamer avatar thespad avatar tobbenb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docker-healthchecks's Issues

Apprise Docker mod

Hi,

I needed Apprise to be installed in the Healthchecks container so I created a docker mod.

I'd like it to be added to the official repo or at least be mentionned in the README for other people that could be struggling with this like I did.

According to the docs, the steps to submit a PR are:

  1. Ask the team to create a new branch named - in this repo. Baseimage should be the name of the image the mod will be applied to. The new branch will be based on the template branch.

[... 8 other steps]

Could you create a new branch named docker-healthchecks-apprise-mod so that I can continue with the process ?

Not initially starting server on a fresh installation

linuxserver.io


Expected Behavior

I have a fresh installation on Ubuntu 22 with all latest libraries. When starting with docker compose up -d the log seems ok after I have applied some tweaks from other issues in the queue, e.g. setting COMPRESS_ENABLED = True and USE_X_FORWARDED_HOST = True in local_settings.py:

s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service 00-legacy: starting
s6-rc: info: service 00-legacy successfully started
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
cont-init: info: running /etc/cont-init.d/01-envfile
cont-init: info: /etc/cont-init.d/01-envfile exited 0
cont-init: info: running /etc/cont-init.d/02-tamper-check
cont-init: info: /etc/cont-init.d/02-tamper-check exited 0
cont-init: info: running /etc/cont-init.d/10-adduser

-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/


Brought to you by linuxserver.io
-------------------------------------

To support LSIO projects visit:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    1000
User gid:    1000
-------------------------------------

cont-init: info: /etc/cont-init.d/10-adduser exited 0
cont-init: info: running /etc/cont-init.d/30-config
New container detected. Setting up app folder and fixing permissions.
Operations to perform:
  Apply all migrations: accounts, admin, api, auth, contenttypes, payments, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying accounts.0001_initial... OK
  Applying accounts.0002_profile_ping_log_limit... OK
  Applying accounts.0003_profile_token... OK
  Applying accounts.0004_profile_api_key... OK
  Applying accounts.0005_auto_20160509_0801... OK
  Applying accounts.0006_profile_current_team... OK
  Applying accounts.0007_profile_check_limit... OK
  Applying accounts.0008_profile_bill_to... OK
  Applying accounts.0009_auto_20170714_1734... OK
  Applying accounts.0010_profile_team_limit... OK
  Applying accounts.0011_profile_sort... OK
  Applying accounts.0012_auto_20171014_1002... OK
  Applying accounts.0013_remove_profile_team_access_allowed... OK
  Applying accounts.0014_auto_20171227_1530... OK
  Applying accounts.0015_auto_20181029_1858... OK
  Applying accounts.0016_remove_profile_bill_to... OK
  Applying accounts.0017_auto_20190112_1426... OK
  Applying accounts.0018_auto_20190112_1426... OK
  Applying accounts.0019_project_badge_key... OK
  Applying accounts.0020_auto_20190112_1950... OK
  Applying accounts.0021_auto_20190112_2005... OK
  Applying accounts.0022_auto_20190114_0857... OK
  Applying accounts.0023_auto_20190117_1419... OK
  Applying accounts.0024_auto_20190119_1540... OK
  Applying accounts.0025_remove_member_team... OK
  Applying accounts.0026_auto_20190204_2042... OK
  Applying accounts.0027_profile_deletion_notice_date... OK
  Applying accounts.0028_auto_20191119_1346... OK
  Applying accounts.0029_remove_profile_current_project... OK
  Applying accounts.0030_member_transfer_request_date... OK
  Applying accounts.0031_auto_20200803_1413... OK
  Applying accounts.0032_auto_20200819_0757... OK
  Applying accounts.0033_member_rw... OK
  Applying accounts.0034_credential... OK
  Applying accounts.0035_profile_reports... OK
  Applying accounts.0036_fill_profile_reports... OK
  Applying accounts.0037_profile_tz... OK
  Applying accounts.0038_profile_theme... OK
  Applying accounts.0039_remove_profile_reports_allowed... OK
  Applying accounts.0040_auto_20210722_1244... OK
  Applying accounts.0041_fill_role... OK
  Applying accounts.0042_remove_member_rw... OK
  Applying accounts.0043_add_role_manager... OK
  Applying accounts.0044_auto_20210730_0942... OK
  Applying accounts.0045_auto_20210908_1257... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying api.0001_initial... OK
  Applying api.0002_auto_20150616_0732... OK
  Applying api.0003_auto_20150616_1249... OK
  Applying api.0004_auto_20150616_1319... OK
  Applying api.0005_auto_20150630_2021... OK
  Applying api.0006_check_grace... OK
  Applying api.0007_ping... OK
  Applying api.0008_auto_20150801_1213... OK
  Applying api.0009_auto_20150801_1250... OK
  Applying api.0010_channel... OK
  Applying api.0011_notification... OK
  Applying api.0012_auto_20150930_1922... OK
  Applying api.0013_auto_20151001_2029... OK
  Applying api.0014_auto_20151019_2039... OK
  Applying api.0015_auto_20151022_1008... OK
  Applying api.0016_auto_20151030_1107... OK
  Applying api.0017_auto_20151117_1032... OK
  Applying api.0018_remove_ping_body... OK
  Applying api.0019_check_tags... OK
  Applying api.0020_check_n_pings... OK
  Applying api.0021_ping_n... OK
  Applying api.0022_auto_20160130_2042... OK
  Applying api.0023_auto_20160131_1919... OK
  Applying api.0024_auto_20160203_2227... OK
  Applying api.0025_auto_20160216_1214... OK
  Applying api.0026_auto_20160415_1824... OK
  Applying api.0027_auto_20161213_1059... OK
  Applying api.0028_auto_20170305_1907... OK
  Applying api.0029_auto_20170507_1251... OK
  Applying api.0030_check_last_ping_body... OK
  Applying api.0031_auto_20170509_1320... OK
  Applying api.0032_auto_20170608_1158... OK
  Applying api.0033_auto_20170714_1715... OK
  Applying api.0034_auto_20171227_1530... OK
  Applying api.0035_auto_20171229_2008... OK
  Applying api.0036_auto_20180116_2243... OK
  Applying api.0037_auto_20180127_1215... OK
  Applying api.0038_auto_20180318_1306... OK
  Applying api.0039_remove_check_last_ping_body... OK
  Applying api.0040_auto_20180517_1336... OK
  Applying api.0041_check_desc... OK
  Applying api.0042_auto_20181029_1522... OK
  Applying api.0043_channel_name... OK
  Applying api.0044_auto_20181120_2004... OK
  Applying api.0045_flip... OK
  Applying api.0046_auto_20181218_1245... OK
  Applying api.0047_auto_20181225_2315... OK
  Applying api.0048_auto_20190102_0737... OK
  Applying api.0049_auto_20190102_0743... OK
  Applying api.0050_ping_kind... OK
  Applying api.0051_auto_20190104_0908... OK
  Applying api.0052_auto_20190104_1122... OK
  Applying api.0053_check_subject... OK
  Applying api.0054_auto_20190112_1427... OK
  Applying api.0055_auto_20190112_1427... OK
  Applying api.0056_auto_20190114_0857... OK
  Applying api.0057_auto_20190118_1319... OK
  Applying api.0058_auto_20190312_1716... OK
  Applying api.0059_auto_20190314_1744... OK
  Applying api.0060_tokenbucket... OK
  Applying api.0061_webhook_values... OK
  Applying api.0062_auto_20190720_1350... OK
  Applying api.0063_auto_20190903_0901... OK
  Applying api.0064_auto_20191119_1346... OK
  Applying api.0065_auto_20191127_1240... OK
  Applying api.0066_channel_last_error... OK
  Applying api.0067_last_error_values... OK
  Applying api.0068_auto_20200117_1023... OK
  Applying api.0069_auto_20200117_1227... OK
  Applying api.0070_auto_20200411_1310... OK
  Applying api.0071_check_manual_resume... OK
  Applying api.0072_auto_20200701_1007... OK
  Applying api.0073_auto_20200721_1000... OK
  Applying api.0074_auto_20200803_1411... OK
  Applying api.0075_auto_20200805_1004... OK
  Applying api.0076_auto_20201128_0951... OK
  Applying api.0077_auto_20210506_0755... OK
  Applying api.0078_sms_values... OK
  Applying api.0079_auto_20210907_0918... OK
  Applying api.0080_fill_slug... OK
  Applying api.0081_channel_last_notify... OK
  Applying api.0082_fill_last_notify... OK
  Applying api.0083_channel_disabled... OK
  Applying api.0084_ping_body_raw... OK
  Applying api.0085_ping_object_size... OK
  Applying api.0086_remove_check_last_ping_was_fail_and_more... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying payments.0001_initial... OK
  Applying payments.0002_subscription_plan_id... OK
  Applying payments.0003_subscription_address_id... OK
  Applying payments.0004_subscription_send_invoices... OK
  Applying payments.0005_subscription_plan_name... OK
  Applying payments.0006_subscription_invoice_email... OK
  Applying sessions.0001_initial... OK
Superuser created.
cont-init: info: /etc/cont-init.d/30-config exited 0
cont-init: info: running /etc/cont-init.d/90-custom-folders
cont-init: info: /etc/cont-init.d/90-custom-folders exited 0
cont-init: info: running /etc/cont-init.d/99-custom-files
[custom-init] no custom files found exiting...
cont-init: info: /etc/cont-init.d/99-custom-files exited 0
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
services-up: info: copying legacy longrun healthchecks (no readiness notification)
s6-rc: info: service legacy-services successfully started
s6-rc: info: service 99-ci-service-check: starting
[ls.io-init] done.
[uWSGI] getting INI configuration from uwsgi.ini
[uwsgi-static] added mapping for /static => static-collected
*** Starting uWSGI 2.0.19.1 (64bit) on [Wed Aug  3 07:36:13 2022] ***
compiled with version: 10.3.1 20210424 on 05 April 2021 18:18:03
os: Linux-5.15.0-43-generic #46-Ubuntu SMP Tue Jul 12 10:30:17 UTC 2022
nodename: 0755bd4758d0
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 12
current working directory: /app/healthchecks
detected binary path: /usr/sbin/uwsgi
your memory page size is 4096 bytes
detected max file descriptor number: 1048576
building mime-types dictionary from file /etc/mime.types...s6-rc: info: service 99-ci-service-check successfully started
1311 entry found
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.9.5 (default, Nov 24 2021, 21:19:13)  [GCC 10.3.1 20210424]
Python main interpreter initialized at 0x7eff5a2fac00
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 203184 bytes (198 KB) for 1 cores
*** Operational MODE: single process ***
running "exec:/usr/bin/python3 ./manage.py collectstatic --noinput" (pre app)...

319 static files copied to '/app/healthchecks/static-collected'.
running "exec:/usr/bin/python3 ./manage.py compress" (pre app)...
Compressing... done
Compressed 23 block(s) from 124 template(s) for 1 context(s).
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7eff5a2fac00 pid: 117 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 117)
spawned uWSGI worker 1 (pid: 128, cores: 1)
[uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py sendalerts" (uid: 1000 gid: 1000)

But the server is not responding to requests on port 8000. Looking into the container, it seems that nothing is listing on a TCP port and some processes haven't finished, which on an older installation are not there after having started the system:

root@0755bd4758d0:/# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0    208    60 ?        Ss   07:36   0:00 /package/admin/s6/command/s6-svscan -d4 -- /run/service
root          15  0.0  0.0    212    64 ?        S    07:36   0:00 s6-supervise s6-linux-init-shutdownd
root          17  0.0  0.0    204     4 ?        Ss   07:36   0:00 /package/admin/s6-linux-init/command/s6-linux-init-shutdownd -c /run/
root          26  0.0  0.0    212    64 ?        S    07:36   0:00 s6-supervise s6rc-oneshot-runner
root          27  0.0  0.0    212    68 ?        S    07:36   0:00 s6-supervise s6rc-fdholder
root          34  0.0  0.0    188     4 ?        Ss   07:36   0:00 /package/admin/s6/command/s6-ipcserverd -1 -- /package/admin/s6/comma
root         115  0.0  0.0    212    64 ?        S    07:36   0:00 s6-supervise healthchecks
abc          117  1.1  0.0  56448 50892 ?        Ss   07:36   0:00 /usr/sbin/uwsgi uwsgi.ini
abc          128  0.0  0.0  56448 41676 ?        S    07:36   0:00 /usr/sbin/uwsgi uwsgi.ini
abc          129  2.8  0.0  58044 54024 ?        Ss   07:36   0:01 /usr/bin/python3 ./manage.py sendalerts
root         131  0.1  0.0   2592  2288 pts/0    Ss   07:36   0:00 bash
root         144  0.0  0.0   1708   884 pts/0    R+   07:36   0:00 ps aux



root@0755bd4758d0:/# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  3      [ ]         STREAM     CONNECTED     7288581 
unix  3      [ ]         STREAM     CONNECTED     7288584 
unix  3      [ ]         STREAM     CONNECTED     7288585 
unix  3      [ ]         STREAM     CONNECTED     7288582 

I have no idea what's wrong here and hope for some advice.

Environment

OS: Ubuntu 22.04
CPU architecture: x86_64
How docker service was installed: apt-get

Command used to create docker container (run/create/compose/screenshot)

Used the provided docker-compose.yml and docker compose up -d

Docker logs

See above. The container seems to work correctly:

docker compose ps
NAME                                 COMMAND                  SERVICE             STATUS              PORTS
healthchecks_lakedrops-app-1         "/init"                  app                 running             8000/tcp

PUID/PGID Magic Not Working

Expected Behavior

Enter container as the user abc with uid and gid as passed in docker run command

Current Behavior

Enter container as root(0). su to abc, still root(0)

Steps to Reproduce

services-admin@datastore:(172.20.0.9)~/DockerServices/test$ id services-admin
uid=1001(services-admin) gid=1001(services-admin) groups=1001(services-admin),27(sudo),33(www-data),999(docker)

docker run --rm -it --name deleteme -v $PWD:/app -e PUID=id -u $USER -e PGID=id -g $USER lsiobase/ubuntu:latest /bin/bash

Environment

Ubuntu:18.04
x86_64

How docker service was installed:
apt-get remove docker docker-engine docker.io -yqq && apt-get update -qq

apt-get install -yqq
apt-transport-https
ca-certificates
curl
software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs)
stable"
apt-get update -qq

apt-get install -yqq docker-ce

Command used to create docker container (run/create/compose/screenshot)

docker run --rm -it --name deleteme -v $PWD:/app -e PUID=id -u $USER -e PGID=id -g $USER lsiobase/ubuntu:latest /bin/bash

Docker logs

N/A

Cannot open details: ZoneInfoNotFoundError at `/checks/<guid>/details/`

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

Cannot open details of the check when clicking on check's far-left three dots.

I have opened an issue on the official healthchecks repo as well, there you can see Traceback of the exception.

Expected Behavior

Details should be open but Server Error 500 has returned.

Steps To Reproduce

  1. Use linuxserver/healthchecks:latest image
  2. Create check
  3. Try to open details by clicking on the far-left three dots of one of the checks

Environment

  • OS:
 Distributor ID:	Ubuntu
 Description:	Ubuntu 22.04.2 LTS
 Release:	22.04
 Codename:	jammy
  • How docker service was installed:

    Manually by following the steps on the official Docker site

CPU architecture

x86-64

Docker creation

docker-compose.yml

  healthchecks:
    container_name: healthchecks
    depends_on:
      healthchecks-mysql:
        condition: service_healthy
    environment:
      DB: mysql
      DB_HOST: healthchecks-mysql
      DB_NAME: hc
      DB_PASSWORD: ...
      DB_PORT: 3306
      DB_USER: hc
      DEFAULT_FROM_EMAIL: ...
      DISCORD_CLIENT_ID: '123456789'
      DISCORD_CLIENT_SECRET: ...
      EMAIL_HOST: ...
      EMAIL_HOST_PASSWORD: ...
      EMAIL_HOST_USER: ...
      EMAIL_PORT: '587'
      EMAIL_USE_TLS: "True"
      PGID: '1000'
      PUID: '1000'
      SECRET_KEY: ...
      SITE_NAME: Alija Bobija's Healthchecks
      SITE_ROOT: ...
      SUPERUSER_EMAIL: ...
      SUPERUSER_PASSWORD: ...
      TZ: Europe/Sarajevo
    image: linuxserver/healthchecks:latest
    networks:
      abnet:
        ipv4_address: 172.24.0.104
    restart: unless-stopped
    volumes:
      - /.../healthchecks/config:/config:rw
  healthchecks-mysql:
    container_name: healthchecks-mysql
    environment:
      MYSQL_DATABASE: hc
      MYSQL_PASSWORD: ...
      MYSQL_ROOT_PASSWORD: ...
      MYSQL_USER: hc
      PGID: '1000'
      PUID: '1000'
      TZ: Europe/Sarajevo
    healthcheck:
      interval: 10s
      retries: 3
      start_period: 3s
      test: mysql --database="$$MYSQL_DATABASE" --host=localhost --user="$$MYSQL_USER"
        --password="$$MYSQL_PASSWORD" --execute="use $$MYSQL_DATABASE"
      timeout: 5s
    image: linuxserver/mariadb:alpine
    networks:
      - abnet
    restart: unless-stopped
    volumes:
      - /.../healthchecks-mysql/config:/config:rw

Container logs

docker-compose logs --tail 400 healthchecks
Attaching to healthchecks
healthchecks          |     while not self.shutdown and self.handle_one_report():
healthchecks          |                                 ^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 56, in handle_one_report
healthchecks          |     qq.update(next_report_date=profile.choose_next_report_date())
healthchecks          |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/accounts/models.py", line 331, in choose_next_report_date
healthchecks          |     dt = now().astimezone(ZoneInfo(self.tz))
healthchecks          |                           ^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 24, in load_tzdata
healthchecks          |     raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
healthchecks          | zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key UTC+1'
healthchecks          | [uwsgi-daemons] respawning "python3 ./manage.py sendreports --loop" (uid: 1000 gid: 1000)
healthchecks          | sendreports is now running
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 12, in load_tzdata
healthchecks          |     return resources.files(package_name).joinpath(resource_name).open("rb")
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 22, in files
healthchecks          |     return from_package(get_package(package))
healthchecks          |                         ^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 53, in get_package
healthchecks          |     resolved = resolve(package)
healthchecks          |                ^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 44, in resolve
healthchecks          |     return cand if isinstance(cand, types.ModuleType) else importlib.import_module(cand)
healthchecks          |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module
healthchecks          |     return _bootstrap._gcd_import(name[level:], package, level)
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1126, in _find_and_load_unlocked
healthchecks          |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked
healthchecks          | ModuleNotFoundError: No module named 'tzdata'
healthchecks          |
healthchecks          | During handling of the above exception, another exception occurred:
healthchecks          |
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/app/healthchecks/./manage.py", line 17, in <module>
healthchecks          |     raise e
healthchecks          |   File "/app/healthchecks/./manage.py", line 13, in <module>
healthchecks          |     execute_from_command_line(sys.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
healthchecks          |     utility.execute()
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
healthchecks          |     self.fetch_command(subcommand).run_from_argv(self.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 412, in run_from_argv
healthchecks          |     self.execute(*args, **cmd_options)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 458, in execute
healthchecks          |     output = self.handle(*args, **options)
healthchecks          |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 110, in handle
healthchecks          |     while not self.shutdown and self.handle_one_report():
healthchecks          |                                 ^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 56, in handle_one_report
healthchecks          |     qq.update(next_report_date=profile.choose_next_report_date())
healthchecks          |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/accounts/models.py", line 331, in choose_next_report_date
healthchecks          |     dt = now().astimezone(ZoneInfo(self.tz))
healthchecks          |                           ^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 24, in load_tzdata
healthchecks          |     raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
healthchecks          | zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key UTC+1'
healthchecks          | [uwsgi-daemons] throttling "python3 ./manage.py sendreports --loop" for 300 seconds
healthchecks          | [uwsgi-daemons] respawning "python3 ./manage.py sendreports --loop" (uid: 1000 gid: 1000)
healthchecks          | sendreports is now running
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 12, in load_tzdata
healthchecks          |     return resources.files(package_name).joinpath(resource_name).open("rb")
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 22, in files
healthchecks          |     return from_package(get_package(package))
healthchecks          |                         ^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 53, in get_package
healthchecks          |     resolved = resolve(package)
healthchecks          |                ^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 44, in resolve
healthchecks          |     return cand if isinstance(cand, types.ModuleType) else importlib.import_module(cand)
healthchecks          |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module
healthchecks          |     return _bootstrap._gcd_import(name[level:], package, level)
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1126, in _find_and_load_unlocked
healthchecks          |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked
healthchecks          | ModuleNotFoundError: No module named 'tzdata'
healthchecks          |
healthchecks          | During handling of the above exception, another exception occurred:
healthchecks          |
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/app/healthchecks/./manage.py", line 17, in <module>
healthchecks          |     raise e
healthchecks          |   File "/app/healthchecks/./manage.py", line 13, in <module>
healthchecks          |     execute_from_command_line(sys.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
healthchecks          |     utility.execute()
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
healthchecks          |     self.fetch_command(subcommand).run_from_argv(self.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 412, in run_from_argv
healthchecks          |     self.execute(*args, **cmd_options)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 458, in execute
healthchecks          |     output = self.handle(*args, **options)
healthchecks          |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 110, in handle
healthchecks          |     while not self.shutdown and self.handle_one_report():
healthchecks          |                                 ^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 56, in handle_one_report
healthchecks          |     qq.update(next_report_date=profile.choose_next_report_date())
healthchecks          |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/accounts/models.py", line 331, in choose_next_report_date
healthchecks          |     dt = now().astimezone(ZoneInfo(self.tz))
healthchecks          |                           ^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 24, in load_tzdata
healthchecks          |     raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
healthchecks          | zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key UTC+1'
healthchecks          | [uwsgi-daemons] respawning "python3 ./manage.py sendreports --loop" (uid: 1000 gid: 1000)
healthchecks          | sendreports is now running
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 12, in load_tzdata
healthchecks          |     return resources.files(package_name).joinpath(resource_name).open("rb")
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 22, in files
healthchecks          |     return from_package(get_package(package))
healthchecks          |                         ^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 53, in get_package
healthchecks          |     resolved = resolve(package)
healthchecks          |                ^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 44, in resolve
healthchecks          |     return cand if isinstance(cand, types.ModuleType) else importlib.import_module(cand)
healthchecks          |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module
healthchecks          |     return _bootstrap._gcd_import(name[level:], package, level)
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1126, in _find_and_load_unlocked
healthchecks          |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked
healthchecks          | ModuleNotFoundError: No module named 'tzdata'
healthchecks          |
healthchecks          | During handling of the above exception, another exception occurred:
healthchecks          |
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/app/healthchecks/./manage.py", line 17, in <module>
healthchecks          |     raise e
healthchecks          |   File "/app/healthchecks/./manage.py", line 13, in <module>
healthchecks          |     execute_from_command_line(sys.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
healthchecks          |     utility.execute()
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
healthchecks          |     self.fetch_command(subcommand).run_from_argv(self.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 412, in run_from_argv
healthchecks          |     self.execute(*args, **cmd_options)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 458, in execute
healthchecks          |     output = self.handle(*args, **options)
healthchecks          |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 110, in handle
healthchecks          |     while not self.shutdown and self.handle_one_report():
healthchecks          |                                 ^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 56, in handle_one_report
healthchecks          |     qq.update(next_report_date=profile.choose_next_report_date())
healthchecks          |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/accounts/models.py", line 331, in choose_next_report_date
healthchecks          |     dt = now().astimezone(ZoneInfo(self.tz))
healthchecks          |                           ^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 24, in load_tzdata
healthchecks          |     raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
healthchecks          | zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key UTC+1'
healthchecks          | [uwsgi-daemons] throttling "python3 ./manage.py sendreports --loop" for 300 seconds
healthchecks          | [uwsgi-daemons] respawning "python3 ./manage.py sendreports --loop" (uid: 1000 gid: 1000)
healthchecks          | sendreports is now running
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 12, in load_tzdata
healthchecks          |     return resources.files(package_name).joinpath(resource_name).open("rb")
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 22, in files
healthchecks          |     return from_package(get_package(package))
healthchecks          |                         ^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 53, in get_package
healthchecks          |     resolved = resolve(package)
healthchecks          |                ^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 44, in resolve
healthchecks          |     return cand if isinstance(cand, types.ModuleType) else importlib.import_module(cand)
healthchecks          |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module
healthchecks          |     return _bootstrap._gcd_import(name[level:], package, level)
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1126, in _find_and_load_unlocked
healthchecks          |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked
healthchecks          | ModuleNotFoundError: No module named 'tzdata'
healthchecks          |
healthchecks          | During handling of the above exception, another exception occurred:
healthchecks          |
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/app/healthchecks/./manage.py", line 17, in <module>
healthchecks          |     raise e
healthchecks          |   File "/app/healthchecks/./manage.py", line 13, in <module>
healthchecks          |     execute_from_command_line(sys.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
healthchecks          |     utility.execute()
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
healthchecks          |     self.fetch_command(subcommand).run_from_argv(self.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 412, in run_from_argv
healthchecks          |     self.execute(*args, **cmd_options)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 458, in execute
healthchecks          |     output = self.handle(*args, **options)
healthchecks          |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 110, in handle
healthchecks          |     while not self.shutdown and self.handle_one_report():
healthchecks          |                                 ^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 56, in handle_one_report
healthchecks          |     qq.update(next_report_date=profile.choose_next_report_date())
healthchecks          |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/accounts/models.py", line 331, in choose_next_report_date
healthchecks          |     dt = now().astimezone(ZoneInfo(self.tz))
healthchecks          |                           ^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 24, in load_tzdata
healthchecks          |     raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
healthchecks          | zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key UTC+1'
healthchecks          | [uwsgi-daemons] respawning "python3 ./manage.py sendreports --loop" (uid: 1000 gid: 1000)
healthchecks          | sendreports is now running
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 12, in load_tzdata
healthchecks          |     return resources.files(package_name).joinpath(resource_name).open("rb")
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 22, in files
healthchecks          |     return from_package(get_package(package))
healthchecks          |                         ^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 53, in get_package
healthchecks          |     resolved = resolve(package)
healthchecks          |                ^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 44, in resolve
healthchecks          |     return cand if isinstance(cand, types.ModuleType) else importlib.import_module(cand)
healthchecks          |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module
healthchecks          |     return _bootstrap._gcd_import(name[level:], package, level)
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1126, in _find_and_load_unlocked
healthchecks          |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked
healthchecks          | ModuleNotFoundError: No module named 'tzdata'
healthchecks          |
healthchecks          | During handling of the above exception, another exception occurred:
healthchecks          |
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/app/healthchecks/./manage.py", line 17, in <module>
healthchecks          |     raise e
healthchecks          |   File "/app/healthchecks/./manage.py", line 13, in <module>
healthchecks          |     execute_from_command_line(sys.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
healthchecks          |     utility.execute()
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
healthchecks          |     self.fetch_command(subcommand).run_from_argv(self.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 412, in run_from_argv
healthchecks          |     self.execute(*args, **cmd_options)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 458, in execute
healthchecks          |     output = self.handle(*args, **options)
healthchecks          |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 110, in handle
healthchecks          |     while not self.shutdown and self.handle_one_report():
healthchecks          |                                 ^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 56, in handle_one_report
healthchecks          |     qq.update(next_report_date=profile.choose_next_report_date())
healthchecks          |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/accounts/models.py", line 331, in choose_next_report_date
healthchecks          |     dt = now().astimezone(ZoneInfo(self.tz))
healthchecks          |                           ^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 24, in load_tzdata
healthchecks          |     raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
healthchecks          | zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key UTC+1'
healthchecks          | [uwsgi-daemons] throttling "python3 ./manage.py sendreports --loop" for 300 seconds
healthchecks          | [uwsgi-daemons] respawning "python3 ./manage.py sendreports --loop" (uid: 1000 gid: 1000)
healthchecks          | sendreports is now running
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 12, in load_tzdata
healthchecks          |     return resources.files(package_name).joinpath(resource_name).open("rb")
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 22, in files
healthchecks          |     return from_package(get_package(package))
healthchecks          |                         ^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 53, in get_package
healthchecks          |     resolved = resolve(package)
healthchecks          |                ^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 44, in resolve
healthchecks          |     return cand if isinstance(cand, types.ModuleType) else importlib.import_module(cand)
healthchecks          |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module
healthchecks          |     return _bootstrap._gcd_import(name[level:], package, level)
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1126, in _find_and_load_unlocked
healthchecks          |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked
healthchecks          | ModuleNotFoundError: No module named 'tzdata'
healthchecks          |
healthchecks          | During handling of the above exception, another exception occurred:
healthchecks          |
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/app/healthchecks/./manage.py", line 17, in <module>
healthchecks          |     raise e
healthchecks          |   File "/app/healthchecks/./manage.py", line 13, in <module>
healthchecks          |     execute_from_command_line(sys.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
healthchecks          |     utility.execute()
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
healthchecks          |     self.fetch_command(subcommand).run_from_argv(self.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 412, in run_from_argv
healthchecks          |     self.execute(*args, **cmd_options)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 458, in execute
healthchecks          |     output = self.handle(*args, **options)
healthchecks          |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 110, in handle
healthchecks          |     while not self.shutdown and self.handle_one_report():
healthchecks          |                                 ^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 56, in handle_one_report
healthchecks          |     qq.update(next_report_date=profile.choose_next_report_date())
healthchecks          |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/accounts/models.py", line 331, in choose_next_report_date
healthchecks          |     dt = now().astimezone(ZoneInfo(self.tz))
healthchecks          |                           ^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 24, in load_tzdata
healthchecks          |     raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
healthchecks          | zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key UTC+1'
healthchecks          | [uwsgi-daemons] respawning "python3 ./manage.py sendreports --loop" (uid: 1000 gid: 1000)
healthchecks          | sendreports is now running
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 12, in load_tzdata
healthchecks          |     return resources.files(package_name).joinpath(resource_name).open("rb")
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 22, in files
healthchecks          |     return from_package(get_package(package))
healthchecks          |                         ^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 53, in get_package
healthchecks          |     resolved = resolve(package)
healthchecks          |                ^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/resources/_common.py", line 44, in resolve
healthchecks          |     return cand if isinstance(cand, types.ModuleType) else importlib.import_module(cand)
healthchecks          |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module
healthchecks          |     return _bootstrap._gcd_import(name[level:], package, level)
healthchecks          |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1126, in _find_and_load_unlocked
healthchecks          |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
healthchecks          |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
healthchecks          |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
healthchecks          |   File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked
healthchecks          | ModuleNotFoundError: No module named 'tzdata'
healthchecks          |
healthchecks          | During handling of the above exception, another exception occurred:
healthchecks          |
healthchecks          | Traceback (most recent call last):
healthchecks          |   File "/app/healthchecks/./manage.py", line 17, in <module>
healthchecks          |     raise e
healthchecks          |   File "/app/healthchecks/./manage.py", line 13, in <module>
healthchecks          |     execute_from_command_line(sys.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
healthchecks          |     utility.execute()
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
healthchecks          |     self.fetch_command(subcommand).run_from_argv(self.argv)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 412, in run_from_argv
healthchecks          |     self.execute(*args, **cmd_options)
healthchecks          |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 458, in execute
healthchecks          |     output = self.handle(*args, **options)
healthchecks          |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 110, in handle
healthchecks          |     while not self.shutdown and self.handle_one_report():
healthchecks          |                                 ^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/api/management/commands/sendreports.py", line 56, in handle_one_report
healthchecks          |     qq.update(next_report_date=profile.choose_next_report_date())
healthchecks          |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks          |   File "/app/healthchecks/hc/accounts/models.py", line 331, in choose_next_report_date
healthchecks          |     dt = now().astimezone(ZoneInfo(self.tz))
healthchecks          |                           ^^^^^^^^^^^^^^^^^
healthchecks          |   File "/usr/lib/python3.11/zoneinfo/_common.py", line 24, in load_tzdata
healthchecks          |     raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
healthchecks          | zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key UTC+1'

Feature Request: Support Receiving Email Pings

Healthchecks application is designed to also accept email pings as well as http pings, but the container needs to be configured to listen for SMTP requests.

Official docs on it: https://github.com/healthchecks/healthchecks#receiving-emails


Expected Behavior

Container supports environment variable to enabling and configuring SMTPd in the container for SMTP Pings

Current Behavior

There is no support for SMTPd or SMTP Pings

Environment

OS: Ubuntu 18.04
CPU architecture: x86_64
How docker service was installed: apt repo

Command used to create docker container (run/create/compose/screenshot)

version: "2.1"
services:
  healthchecks:
    image: linuxserver/healthchecks
    container_name: healthchecks
    environment:
      - PUID=1000
      - PGID=1000
      - SITE_ROOT={REDACTED}
      - SITE_NAME={REDACTED}
      - DEFAULT_FROM_EMAIL={REDACTED}
      - EMAIL_HOST=192.168.1.28
      - EMAIL_PORT=2525
      - EMAIL_HOST_USER={REDACTED}
      - EMAIL_HOST_PASSWORD={REDACTED}
      - EMAIL_USE_TLS=False
      - SUPERUSER_EMAIL={REDACTED}
      - SUPERUSER_PASSWORD={REDACTED}
      - DOCKER_MODS=linuxserver/mods:healthchecks-apprise
      - SERVICE_TAGS=traefik.frontend.redirect.entryPoint=https,traefik.frontends.int.rule=Host:{{.ServiceName}}.int.{{.Domain}},traefik.frontends.ext.rule=Host:hc.{{.Domain}},traefik.frontend.headers.SSLRedirect=true,traefik.frontend.passHostHeader=true
      - SERVICE_NAME=healthchecks
    volumes:
      - ./config:/config
    ports:
      - 8000:8000
    restart: unless-stopped

Env vars might have wrong type

linuxserver.io

If I set PING_BODY_LIMIT=10000 in my environment variables, this init script here converts it to a python string.


Expected Behavior

The value has to be an integer, if not, python will throw an exception. But it is stored as a string in the python file /app/healthchecks/hc/local_settings.py.

Current Behavior

If I set PING_BODY_LIMIT=10000 in my environment variables, this init script here converts it to a python string.

Steps to Reproduce

  1. Set PING_BODY_LIMIT=10000 in your environment variables, generate the settings completely new (creating new container or set the setting to do that).
  2. Ping one of the checks, and get the error:
Internal Server Error: /ping/URL
hc_1                   | Traceback (most recent call last):
hc_1                   |   File "/usr/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
hc_1                   |     response = get_response(request)
hc_1                   |   File "/usr/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
hc_1                   |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
hc_1                   |   File "/usr/lib/python3.10/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
hc_1                   |     return view_func(*args, **kwargs)
hc_1                   |   File "/usr/lib/python3.10/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func
hc_1                   |     response = view_func(request, *args, **kwargs)
hc_1                   |   File "/app/healthchecks/./hc/api/views.py", line 53, in ping
hc_1                   |     body = request.body[: settings.PING_BODY_LIMIT]
hc_1                   | TypeError: slice indices must be integers or None or have an __index__ method

Command used to create docker container (run/create/compose/screenshot)

docker-compose up -d
with this particular env var

Docker logs

see above

Gotify integration broken since release v2.3-ls139

Expected Behavior

I've been using the Gotify integration for a while. You can test and integration using the integration tab of a project. This succeeds with versions prior to v2.3-ls139,

Current Behavior

With version v2.3-ls139 and v2.3-ls140, the Gotify integration always fails. For my test project, I get the message "Could not send a test notification. Connection failed." There is nothing of note in the logs, not even with Debug enabled.

Steps to Reproduce

  1. Setup a Gotify integration for a project.
  2. Use the "test" button on the integration tab.

Environment

OS: Ubuntu 22.04 LTS
CPU architecture: x86_64
How docker service was installed: OS repo via apt

Command used to create docker container (run/create/compose/screenshot)

----> section from docker-compose.yml
image: lscr.io/linuxserver/healthchecks
container_name: healthchecks
environment:
- PUID=${STNDUSERID}
- PGID=${STNDGROUPID}
- SITE_ROOT=https://healthchecks.${LOCALDOMAIN}:${LOCALPORT}
- SITE_NAME=Home Healthchecks
- DEFAULT_FROM_EMAIL=hc@${HOMEDOMAIN}
- SUPERUSER_EMAIL=${HEALTHCHECKSSUEMAIL}
- SUPERUSER_PASSWORD=${HEALTHCHECKSSUPASS}
- REGENERATE_SETTINGS=True
- DEBUG=True
volumes:
- ./healthchecks/config:/config
restart: unless-stopped

Docker logs

[pid: 175|app: 0|req: 2/45] 172.22.0.8 () {58 vars in 1239 bytes} [Sat Oct 22 15:55:24 2022] POST /integrations/0e2f3764-d07b-4b69-bddf-a94d6549cedd/test/ => generated 0 bytes in 497 msecs (HTTP/1.0 302) 10 headers in 554 bytes (1 switches on core 0)
[pid: 175|app: 0|req: 3/46] 172.22.0.8 () {52 vars in 1289 bytes} [Sat Oct 22 15:55:25 2022] GET /projects/8a287f56-2ca5-4f30-a8bb-e53a9bfdab60/integrations/ => generated 24915 bytes in 53 msecs (HTTP/1.0 200) 10 headers in 499 bytes (1 switches on core 0)

Other Comments

I'd be very happy to debug if you have something I could do to help.

[BUG] image does not start, prints realpath() of uwsgi.ini failed: No such file or directory [core/utils.c line 3662]

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

Image does not start, prints realpath() of uwsgi.ini failed: No such file or directory [core/utils.c line 3662]

Expected Behavior

Image should start.

Steps To Reproduce

  1. Run linuxserver/healthchecks:3.0.1 with default settings.
  2. Observe realpath() of uwsgi.ini failed: No such file or directory [core/utils.c line 3662]

Environment

- OS: Debian 12
- How docker service was installed: disto's packagemanager

CPU architecture

x86-64

Docker creation

yaml
---
version: "2.1"
services:
  healthchecks:
    image: linuxserver/healthchecks:3.0.1
    container_name: ...
    environment:
      - PUID=${HEALTHCHECKS_PUID}
      - PGID=${HEALTHCHECKS_PGID}
      - SITE_ROOT=${HEALTHCHECKS_SITE_ROOT}
      - SITE_NAME=${HEALTHCHECKS_SITE_NAME}
      - DEFAULT_FROM_EMAIL=${HEALTHCHECKS_DEFAULT_FROM_EMAIL}
      - EMAIL_HOST=${HEALTHCHECKS_EMAIL_HOST}
      - EMAIL_PORT=${HEALTHCHECKS_EMAIL_PORT}
      - EMAIL_USE_TLS=${HEALTHCHECKS_EMAIL_USE_TLS}
      - ALLOWED_HOSTS="[*]"
      - SUPERUSER_EMAIL=${HEALTHCHECKS_SUPERUSER_EMAIL}
      - SUPERUSER_PASSWORD=${HEALTHCHECKS_SUPERUSER_PASSWORD}
      - FORCE_HTTPS=False
      - DEBUG=True
      - REGENERATE_SETTINGS=True
    volumes:
      - ...:/config
    restart: unless-stopped
    networks:
      - proxy
      - mail
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.healthchecks.rule=Host(`...`)"
      - "traefik.http.services.healthchecks.loadbalancer.server.port=8000"

networks:
  proxy:
    external: true
  mail:
    external: true


### Container logs

```bash
Attaching to healthchecks
healthchecks | [migrations] started
healthchecks | [migrations] no migrations found
healthchecks | ───────────────────────────────────────
healthchecks |
healthchecks |       ██╗     ███████╗██╗ ██████╗
healthchecks |       ██║     ██╔════╝██║██╔═══██╗
healthchecks |       ██║     ███████╗██║██║   ██║
healthchecks |       ██║     ╚════██║██║██║   ██║
healthchecks |       ███████╗███████║██║╚██████╔╝
healthchecks |       ╚══════╝╚══════╝╚═╝ ╚═════╝
healthchecks |
healthchecks |    Brought to you by linuxserver.io
healthchecks | ───────────────────────────────────────
healthchecks |
healthchecks | To support LSIO projects visit:
healthchecks | https://www.linuxserver.io/donate/
healthchecks |
healthchecks | ───────────────────────────────────────
healthchecks | GID/UID
healthchecks | ───────────────────────────────────────
healthchecks |
healthchecks | User UID:    1000
healthchecks | User GID:    1000
healthchecks | ───────────────────────────────────────
healthchecks |
healthchecks | WARNING: CSRF_TRUSTED_ORIGINS is set to allow connections from all origins, this is insecure.
healthchecks | Migrations for 'api':
healthchecks |   hc/api/migrations/0101_alter_channel_kind.py
healthchecks |     - Alter field kind on channel
healthchecks | Migrations for 'payments':
healthchecks |   hc/payments/migrations/0009_remove_subscription_next_billing_date_and_more.py
healthchecks |     - Remove field next_billing_date from subscription
healthchecks |     - Remove field renew_notice_date from subscription
healthchecks |     - Remove field setup_date from subscription
healthchecks | Admin Command Error: ./manage.py makemigrations
healthchecks | Traceback (most recent call last):
healthchecks |   File "/app/healthchecks/./manage.py", line 13, in <module>
healthchecks |     execute_from_command_line(sys.argv)
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
healthchecks |     utility.execute()
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
healthchecks |     self.fetch_command(subcommand).run_from_argv(self.argv)
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 412, in run_from_argv
healthchecks |     self.execute(*args, **cmd_options)
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 458, in execute
healthchecks |     output = self.handle(*args, **options)
healthchecks |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 106, in wrapper
healthchecks |     res = handle_func(*args, **kwargs)
healthchecks |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/commands/makemigrations.py", line 259, in handle
healthchecks |     self.write_migration_files(changes)
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/commands/makemigrations.py", line 363, in write_migration_files
healthchecks |     with open(writer.path, "w", encoding="utf-8") as fh:
healthchecks |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks | PermissionError: [Errno 13] Permission denied: '/app/healthchecks/hc/payments/migrations/0009_remove_subscription_next_billing_date_and_more.py'
healthchecks | Traceback (most recent call last):
healthchecks |   File "/app/healthchecks/./manage.py", line 17, in <module>
healthchecks |     raise e
healthchecks |   File "/app/healthchecks/./manage.py", line 13, in <module>
healthchecks |     execute_from_command_line(sys.argv)
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
healthchecks |     utility.execute()
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
healthchecks |     self.fetch_command(subcommand).run_from_argv(self.argv)
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 412, in run_from_argv
healthchecks |     self.execute(*args, **cmd_options)
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 458, in execute
healthchecks |     output = self.handle(*args, **options)
healthchecks |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/base.py", line 106, in wrapper
healthchecks |     res = handle_func(*args, **kwargs)
healthchecks |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/commands/makemigrations.py", line 259, in handle
healthchecks |     self.write_migration_files(changes)
healthchecks |   File "/lsiopy/lib/python3.11/site-packages/django/core/management/commands/makemigrations.py", line 363, in write_migration_files
healthchecks |     with open(writer.path, "w", encoding="utf-8") as fh:
healthchecks |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
healthchecks | PermissionError: [Errno 13] Permission denied: '/app/healthchecks/hc/payments/migrations/0009_remove_subscription_next_billing_date_and_more.py'
healthchecks | Operations to perform:
healthchecks |   Apply all migrations: accounts, admin, api, auth, contenttypes, payments, sessions
healthchecks | Running migrations:
healthchecks |   Applying contenttypes.0001_initial... OK
healthchecks |   Applying auth.0001_initial... OK
healthchecks |   Applying accounts.0001_initial... OK
healthchecks |   Applying accounts.0002_profile_ping_log_limit... OK
healthchecks |   Applying accounts.0003_profile_token... OK
healthchecks |   Applying accounts.0004_profile_api_key... OK
healthchecks |   Applying accounts.0005_auto_20160509_0801... OK
healthchecks |   Applying accounts.0006_profile_current_team... OK
healthchecks |   Applying accounts.0007_profile_check_limit... OK
healthchecks |   Applying accounts.0008_profile_bill_to... OK
healthchecks |   Applying accounts.0009_auto_20170714_1734... OK
healthchecks |   Applying accounts.0010_profile_team_limit... OK
healthchecks |   Applying accounts.0011_profile_sort... OK
healthchecks |   Applying accounts.0012_auto_20171014_1002... OK
healthchecks |   Applying accounts.0013_remove_profile_team_access_allowed... OK
healthchecks |   Applying accounts.0014_auto_20171227_1530... OK
healthchecks |   Applying accounts.0015_auto_20181029_1858... OK
healthchecks |   Applying accounts.0016_remove_profile_bill_to... OK
healthchecks |   Applying accounts.0017_auto_20190112_1426... OK
healthchecks |   Applying accounts.0018_auto_20190112_1426... OK
healthchecks |   Applying accounts.0019_project_badge_key... OK
healthchecks |   Applying accounts.0020_auto_20190112_1950... OK
healthchecks |   Applying accounts.0021_auto_20190112_2005... OK
healthchecks |   Applying accounts.0022_auto_20190114_0857... OK
healthchecks |   Applying accounts.0023_auto_20190117_1419... OK
healthchecks |   Applying accounts.0024_auto_20190119_1540... OK
healthchecks |   Applying accounts.0025_remove_member_team... OK
healthchecks |   Applying accounts.0026_auto_20190204_2042... OK
healthchecks |   Applying accounts.0027_profile_deletion_notice_date... OK
healthchecks |   Applying accounts.0028_auto_20191119_1346... OK
healthchecks |   Applying accounts.0029_remove_profile_current_project... OK
healthchecks |   Applying accounts.0030_member_transfer_request_date... OK
healthchecks |   Applying accounts.0031_auto_20200803_1413... OK
healthchecks |   Applying accounts.0032_auto_20200819_0757... OK
healthchecks |   Applying accounts.0033_member_rw... OK
healthchecks |   Applying accounts.0034_credential... OK
healthchecks |   Applying accounts.0035_profile_reports... OK
healthchecks |   Applying accounts.0036_fill_profile_reports... OK
healthchecks |   Applying accounts.0037_profile_tz... OK
healthchecks |   Applying accounts.0038_profile_theme... OK
healthchecks |   Applying accounts.0039_remove_profile_reports_allowed... OK
healthchecks |   Applying accounts.0040_auto_20210722_1244... OK
healthchecks |   Applying accounts.0041_fill_role... OK
healthchecks |   Applying accounts.0042_remove_member_rw... OK
healthchecks |   Applying accounts.0043_add_role_manager... OK
healthchecks |   Applying accounts.0044_auto_20210730_0942... OK
healthchecks |   Applying accounts.0045_auto_20210908_1257... OK
healthchecks |   Applying accounts.0046_profile_deletion_scheduled_date... OK
healthchecks |   Applying accounts.0047_profile_over_limit_date... OK
healthchecks |   Applying accounts.0048_alter_profile_user... OK
healthchecks |   Applying admin.0001_initial... OK
healthchecks |   Applying admin.0002_logentry_remove_auto_add... OK
healthchecks |   Applying admin.0003_logentry_add_action_flag_choices... OK
healthchecks |   Applying api.0001_initial... OK
healthchecks |   Applying api.0002_auto_20150616_0732... OK
healthchecks |   Applying api.0003_auto_20150616_1249... OK
healthchecks |   Applying api.0004_auto_20150616_1319... OK
healthchecks |   Applying api.0005_auto_20150630_2021... OK
healthchecks |   Applying api.0006_check_grace... OK
healthchecks |   Applying api.0007_ping... OK
healthchecks |   Applying api.0008_auto_20150801_1213... OK
healthchecks |   Applying api.0009_auto_20150801_1250... OK
healthchecks |   Applying api.0010_channel... OK
healthchecks |   Applying api.0011_notification... OK
healthchecks |   Applying api.0012_auto_20150930_1922... OK
healthchecks |   Applying api.0013_auto_20151001_2029... OK
healthchecks |   Applying api.0014_auto_20151019_2039... OK
healthchecks |   Applying api.0015_auto_20151022_1008... OK
healthchecks |   Applying api.0016_auto_20151030_1107... OK
healthchecks |   Applying api.0017_auto_20151117_1032... OK
healthchecks |   Applying api.0018_remove_ping_body... OK
healthchecks |   Applying api.0019_check_tags... OK
healthchecks |   Applying api.0020_check_n_pings... OK
healthchecks |   Applying api.0021_ping_n... OK
healthchecks |   Applying api.0022_auto_20160130_2042... OK
healthchecks |   Applying api.0023_auto_20160131_1919... OK
healthchecks |   Applying api.0024_auto_20160203_2227... OK
healthchecks |   Applying api.0025_auto_20160216_1214... OK
healthchecks |   Applying api.0026_auto_20160415_1824... OK
healthchecks |   Applying api.0027_auto_20161213_1059... OK
healthchecks |   Applying api.0028_auto_20170305_1907... OK
healthchecks |   Applying api.0029_auto_20170507_1251... OK
healthchecks |   Applying api.0030_check_last_ping_body... OK
healthchecks |   Applying api.0031_auto_20170509_1320... OK
healthchecks |   Applying api.0032_auto_20170608_1158... OK
healthchecks |   Applying api.0033_auto_20170714_1715... OK
healthchecks |   Applying api.0034_auto_20171227_1530... OK
healthchecks |   Applying api.0035_auto_20171229_2008... OK
healthchecks |   Applying api.0036_auto_20180116_2243... OK
healthchecks |   Applying api.0037_auto_20180127_1215... OK
healthchecks |   Applying api.0038_auto_20180318_1306... OK
healthchecks |   Applying api.0039_remove_check_last_ping_body... OK
healthchecks |   Applying api.0040_auto_20180517_1336... OK
healthchecks |   Applying api.0041_check_desc... OK
healthchecks |   Applying api.0042_auto_20181029_1522... OK
healthchecks |   Applying api.0043_channel_name... OK
healthchecks |   Applying api.0044_auto_20181120_2004... OK
healthchecks |   Applying api.0045_flip... OK
healthchecks |   Applying api.0046_auto_20181218_1245... OK
healthchecks |   Applying api.0047_auto_20181225_2315... OK
healthchecks |   Applying api.0048_auto_20190102_0737... OK
healthchecks |   Applying api.0049_auto_20190102_0743... OK
healthchecks |   Applying api.0050_ping_kind... OK
healthchecks |   Applying api.0051_auto_20190104_0908... OK
healthchecks |   Applying api.0052_auto_20190104_1122... OK
healthchecks |   Applying api.0053_check_subject... OK
healthchecks |   Applying api.0054_auto_20190112_1427... OK
healthchecks |   Applying api.0055_auto_20190112_1427... OK
healthchecks |   Applying api.0056_auto_20190114_0857... OK
healthchecks |   Applying api.0057_auto_20190118_1319... OK
healthchecks |   Applying api.0058_auto_20190312_1716... OK
healthchecks |   Applying api.0059_auto_20190314_1744... OK
healthchecks |   Applying api.0060_tokenbucket... OK
healthchecks |   Applying api.0061_webhook_values... OK
healthchecks |   Applying api.0062_auto_20190720_1350... OK
healthchecks |   Applying api.0063_auto_20190903_0901... OK
healthchecks |   Applying api.0064_auto_20191119_1346... OK
healthchecks |   Applying api.0065_auto_20191127_1240... OK
healthchecks |   Applying api.0066_channel_last_error... OK
healthchecks |   Applying api.0067_last_error_values... OK
healthchecks |   Applying api.0068_auto_20200117_1023... OK
healthchecks |   Applying api.0069_auto_20200117_1227... OK
healthchecks |   Applying api.0070_auto_20200411_1310... OK
healthchecks |   Applying api.0071_check_manual_resume... OK
healthchecks |   Applying api.0072_auto_20200701_1007... OK
healthchecks |   Applying api.0073_auto_20200721_1000... OK
healthchecks |   Applying api.0074_auto_20200803_1411... OK
healthchecks |   Applying api.0075_auto_20200805_1004... OK
healthchecks |   Applying api.0076_auto_20201128_0951... OK
healthchecks |   Applying api.0077_auto_20210506_0755... OK
healthchecks |   Applying api.0078_sms_values... OK
healthchecks |   Applying api.0079_auto_20210907_0918... OK
healthchecks |   Applying api.0080_fill_slug... OK
healthchecks |   Applying api.0081_channel_last_notify... OK
healthchecks |   Applying api.0082_fill_last_notify... OK
healthchecks |   Applying api.0083_channel_disabled... OK
healthchecks |   Applying api.0084_ping_body_raw... OK
healthchecks |   Applying api.0085_ping_object_size... OK
healthchecks |   Applying api.0086_remove_check_last_ping_was_fail_and_more... OK
healthchecks |   Applying api.0087_check_failure_kw_check_filter_body_and_more... OK
healthchecks |   Applying api.0088_fill_kw... OK
healthchecks |   Applying api.0089_remove_check_subject_remove_check_subject_fail... OK
healthchecks |   Applying api.0090_alter_check_filter_subject... OK
healthchecks |   Applying api.0091_alter_check_filter_body... OK
healthchecks |   Applying api.0092_alter_check_success_kw... OK
healthchecks |   Applying api.0093_alter_check_failure_kw... OK
healthchecks |   Applying api.0094_ping_rid_alter_channel_kind... OK
healthchecks |   Applying api.0095_check_last_start_rid... OK
healthchecks |   Applying api.0096_check_start_kw_alter_channel_kind... OK
healthchecks |   Applying api.0097_alter_channel_kind... OK
healthchecks |   Applying api.0098_channel_last_notify_duration... OK
healthchecks |   Applying api.0099_alter_channel_disabled... OK
healthchecks |   Applying api.0100_opsgenie_values... OK
healthchecks |   Applying api.0101_alter_channel_kind... OK
healthchecks |   Applying contenttypes.0002_remove_content_type_name... OK
healthchecks |   Applying auth.0002_alter_permission_name_max_length... OK
healthchecks |   Applying auth.0003_alter_user_email_max_length... OK
healthchecks |   Applying auth.0004_alter_user_username_opts... OK
healthchecks |   Applying auth.0005_alter_user_last_login_null... OK
healthchecks |   Applying auth.0006_require_contenttypes_0002... OK
healthchecks |   Applying auth.0007_alter_validators_add_error_messages... OK
healthchecks |   Applying auth.0008_alter_user_username_max_length... OK
healthchecks |   Applying auth.0009_alter_user_last_name_max_length... OK
healthchecks |   Applying auth.0010_alter_group_name_max_length... OK
healthchecks |   Applying auth.0011_update_proxy_permissions... OK
healthchecks |   Applying auth.0012_alter_user_first_name_max_length... OK
healthchecks |   Applying payments.0001_initial... OK
healthchecks |   Applying payments.0002_subscription_plan_id... OK
healthchecks |   Applying payments.0003_subscription_address_id... OK
healthchecks |   Applying payments.0004_subscription_send_invoices... OK
healthchecks |   Applying payments.0005_subscription_plan_name... OK
healthchecks |   Applying payments.0006_subscription_invoice_email... OK
healthchecks |   Applying payments.0007_auto_20200727_1430... OK
healthchecks |   Applying payments.0008_subscription_setup_date... OK
healthchecks |   Applying sessions.0001_initial... OK
healthchecks | Superuser created.
healthchecks | [custom-init] No custom files found, skipping...
healthchecks | realpath() of uwsgi.ini failed: No such file or directory [core/utils.c line 3662]

Super User is unable to login on a newly created v1.22.0 container when created via environment variables

linuxserver.io

The super user on a newly created v1.22.0 container is unable to login. A Server Error 500 is returned after authenticating.


Expected Behavior

The superuser when created as part of initialising the container with the SUPERUSER_* environment variables can login.

Current Behavior

When the super user logs in a Server Error 500 is returned.

Steps to Reproduce

  1. Create a docker compose file, as outlined below
  2. Include the SUPERUSER_EMAIL and SUPERUSER_PASSWORD environment keys
  3. Start the container with docker-compose up --build
  4. Once started, browse to http://localhost:8001
  5. Sign In, and enter the email address and password from above. If it fails you will get a 500 server error, otherwise you will be directed to your dashboard.

Environment

OS: ubuntu
CPU architecture: x86_64
How docker service was installed: following steps outlined on in the official docker documentation

Command used to create docker container (run/create/compose/screenshot)

docker-compose up --build --detach

with the following docker-compose.yml file

version: '3.7'
services:
  healthchecks:
    image: linuxserver/healthchecks:version-v1.22.0
    container_name: healthchecks
    restart: unless-stopped
    ports:
      - 8001:8000
    environment:
      - PUID=1000
      - PGID=1000
      - SUPERUSER_EMAIL=<valid email address>
      - SUPERUSER_PASSWORD=<password>
      - SECRET_KEY=--
    volumes:
      - ./data/healthchecks:/config

Docker logs

Relevant snippet from log during startup

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 01-envfile: executing... 
[cont-init.d] 01-envfile: exited 0.
[cont-init.d] 10-adduser: executing... 

-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \ 
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/


Brought to you by linuxserver.io
-------------------------------------

To support LSIO projects visit:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    1000
User gid:    1000
-------------------------------------

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing... 
Operations to perform:
  Apply all migrations: accounts, admin, api, auth, contenttypes, payments, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying accounts.0001_initial... OK
  Applying accounts.0002_profile_ping_log_limit... OK
  Applying accounts.0003_profile_token... OK
  Applying accounts.0004_profile_api_key... OK
  Applying accounts.0005_auto_20160509_0801... OK
  Applying accounts.0006_profile_current_team... OK
  Applying accounts.0007_profile_check_limit... OK
  Applying accounts.0008_profile_bill_to... OK
  Applying accounts.0009_auto_20170714_1734... OK
  Applying accounts.0010_profile_team_limit... OK
  Applying accounts.0011_profile_sort... OK
  Applying accounts.0012_auto_20171014_1002... OK
  Applying accounts.0013_remove_profile_team_access_allowed... OK
  Applying accounts.0014_auto_20171227_1530... OK
  Applying accounts.0015_auto_20181029_1858... OK
  Applying accounts.0016_remove_profile_bill_to... OK
  Applying accounts.0017_auto_20190112_1426... OK
  Applying accounts.0018_auto_20190112_1426... OK
  Applying accounts.0019_project_badge_key... OK
  Applying accounts.0020_auto_20190112_1950... OK
  Applying accounts.0021_auto_20190112_2005... OK
  Applying accounts.0022_auto_20190114_0857... OK
  Applying accounts.0023_auto_20190117_1419... OK
  Applying accounts.0024_auto_20190119_1540... OK
  Applying accounts.0025_remove_member_team... OK
  Applying accounts.0026_auto_20190204_2042... OK
  Applying accounts.0027_profile_deletion_notice_date... OK
  Applying accounts.0028_auto_20191119_1346... OK
  Applying accounts.0029_remove_profile_current_project... OK
  Applying accounts.0030_member_transfer_request_date... OK
  Applying accounts.0031_auto_20200803_1413... OK
  Applying accounts.0032_auto_20200819_0757... OK
  Applying accounts.0033_member_rw... OK
  Applying accounts.0034_credential... OK
  Applying accounts.0035_profile_reports... OK
  Applying accounts.0036_fill_profile_reports... OK
  Applying accounts.0037_profile_tz... OK
  Applying accounts.0038_profile_theme... OK
  Applying accounts.0039_remove_profile_reports_allowed... OK
  Applying accounts.0040_auto_20210722_1244... OK
  Applying accounts.0041_fill_role... OK
  Applying accounts.0042_remove_member_rw... OK
  Applying accounts.0043_add_role_manager... OK
  Applying accounts.0044_auto_20210730_0942... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying api.0001_initial... OK
  Applying api.0002_auto_20150616_0732... OK
  Applying api.0003_auto_20150616_1249... OK
  Applying api.0004_auto_20150616_1319... OK
  Applying api.0005_auto_20150630_2021... OK
  Applying api.0006_check_grace... OK
  Applying api.0007_ping... OK
  Applying api.0008_auto_20150801_1213... OK
  Applying api.0009_auto_20150801_1250... OK
  Applying api.0010_channel... OK
  Applying api.0011_notification... OK
  Applying api.0012_auto_20150930_1922... OK
  Applying api.0013_auto_20151001_2029... OK
  Applying api.0014_auto_20151019_2039... OK
  Applying api.0015_auto_20151022_1008... OK
  Applying api.0016_auto_20151030_1107... OK
  Applying api.0017_auto_20151117_1032... OK
  Applying api.0018_remove_ping_body... OK
  Applying api.0019_check_tags... OK
  Applying api.0020_check_n_pings... OK
  Applying api.0021_ping_n... OK
  Applying api.0022_auto_20160130_2042... OK
  Applying api.0023_auto_20160131_1919... OK
  Applying api.0024_auto_20160203_2227... OK
  Applying api.0025_auto_20160216_1214... OK
  Applying api.0026_auto_20160415_1824... OK
  Applying api.0027_auto_20161213_1059... OK
  Applying api.0028_auto_20170305_1907... OK
  Applying api.0029_auto_20170507_1251... OK
  Applying api.0030_check_last_ping_body... OK
  Applying api.0031_auto_20170509_1320... OK
  Applying api.0032_auto_20170608_1158... OK
  Applying api.0033_auto_20170714_1715... OK
  Applying api.0034_auto_20171227_1530... OK
  Applying api.0035_auto_20171229_2008... OK
  Applying api.0036_auto_20180116_2243... OK
  Applying api.0037_auto_20180127_1215... OK
  Applying api.0038_auto_20180318_1306... OK
  Applying api.0039_remove_check_last_ping_body... OK
  Applying api.0040_auto_20180517_1336... OK
  Applying api.0041_check_desc... OK
  Applying api.0042_auto_20181029_1522... OK
  Applying api.0043_channel_name... OK
  Applying api.0044_auto_20181120_2004... OK
  Applying api.0045_flip... OK
  Applying api.0046_auto_20181218_1245... OK
  Applying api.0047_auto_20181225_2315... OK
  Applying api.0048_auto_20190102_0737... OK
  Applying api.0049_auto_20190102_0743... OK
  Applying api.0050_ping_kind... OK
  Applying api.0051_auto_20190104_0908... OK
  Applying api.0052_auto_20190104_1122... OK
  Applying api.0053_check_subject... OK
  Applying api.0054_auto_20190112_1427... OK
  Applying api.0055_auto_20190112_1427... OK
  Applying api.0056_auto_20190114_0857... OK
  Applying api.0057_auto_20190118_1319... OK
  Applying api.0058_auto_20190312_1716... OK
  Applying api.0059_auto_20190314_1744... OK
  Applying api.0060_tokenbucket... OK
  Applying api.0061_webhook_values... OK
  Applying api.0062_auto_20190720_1350... OK
  Applying api.0063_auto_20190903_0901... OK
  Applying api.0064_auto_20191119_1346... OK
  Applying api.0065_auto_20191127_1240... OK
  Applying api.0066_channel_last_error... OK
  Applying api.0067_last_error_values... OK
  Applying api.0068_auto_20200117_1023... OK
  Applying api.0069_auto_20200117_1227... OK
  Applying api.0070_auto_20200411_1310... OK
  Applying api.0071_check_manual_resume... OK
  Applying api.0072_auto_20200701_1007... OK
  Applying api.0073_auto_20200721_1000... OK
  Applying api.0074_auto_20200803_1411... OK
  Applying api.0075_auto_20200805_1004... OK
  Applying api.0076_auto_20201128_0951... OK
  Applying api.0077_auto_20210506_0755... OK
  Applying api.0078_sms_values... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying payments.0001_initial... OK
  Applying payments.0002_subscription_plan_id... OK
  Applying payments.0003_subscription_address_id... OK
  Applying payments.0004_subscription_send_invoices... OK
  Applying payments.0005_subscription_plan_name... OK
  Applying payments.0006_subscription_invoice_email... OK
  Applying sessions.0001_initial... OK
Superuser created.
[cont-init.d] 30-config: exited 0.
[cont-init.d] 90-custom-folders: executing... 
[cont-init.d] 90-custom-folders: exited 0.
[cont-init.d] 99-custom-files: executing... 
[custom-init] no custom files found exiting...
[cont-init.d] 99-custom-files: exited 0.
[cont-init.d] done.

At the login page when it fails

[pid: 295|app: 0|req: 11/43] 192.168.2.5 () {42 vars in 906 bytes} [Fri Sep 10 05:37:09 2021] POST /accounts/login/ => generated 145 bytes in 237 msecs (HTTP/1.1 500) 7 headers in 226 bytes (1 switches on core 0)

Sendgrid Emails don't work

linuxserver.io


Expected Behavior

The email integration should work.

Current Behavior

Email notification is not working. While it works in my local machine using same environments.

Steps to Reproduce

  1. Setup docker environment in cloud (using yetiapp.cloud)
  2. Go to the integrations, email & hit Send Test! Email
  3. You don't get an email
  4. I'm using Sendgrid to send email. using SSL:465

Here is my smtp creds for local_settings.py:

DEFAULT_FROM_EMAIL = "[email protected]"
EMAIL_HOST = "smtp.sendgrid.net"
EMAIL_HOST_PASSWORD = "my random password"
EMAIL_HOST_USER = "apikey"
EMAIL_PORT = "465"
EMAIL_USE_TLS = False
EMAIL_USE_SSL = True

Environment

OS: Ubuntu 20.04.4 LTS
CPU architecture: x86_64
How docker service was installed:
sudo apt install docker.io

Command used to create docker container (run/create/compose/screenshot)

docker-compose up -d

CONTAINER ID   IMAGE                                     COMMAND   CREATED        STATUS        PORTS                      NAMES
bf66ab9af796   lscr.io/linuxserver/healthchecks:latest   "/init"   17 hours ago   Up 17 hours   127.0.0.1:8080->8000/tcp   healthchecks

Docker logs

image
Full Log: healthchecks_docker_log.log

[BUG] Checks show as late after a minute regardless of grace time.

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

212298033-5464bcce-e6bb-4568-9ef2-bb490449ad42

Waited for checks to arrive and noticed that despite a check at 9am and 10am (GMT) the interface stated the cron was late after just a few minutes (This check is late last ping was 26 minuted ago)

212298377-6c6139cb-f8d6-409a-82e1-6faac62a8063

Expected Behavior

The check should not show "late" until at least 1 hour has passed since the last check.

Steps To Reproduce

Created check with:

  • comma separated cron hours 0 9,10,11,12,13,14,15,16,17 * * *
  • Time Zone: Europe/London
  • Grace Time: 1 hour

Environment

- OS: Ubuntu 20.04
- How docker service was installed: `sudo snap install docker` (Docker version 20.10.12, build 20.10.12-0ubuntu2~20.04.1)
- Server clock: UTC

local_settings.py

DEFAULT_FROM_EMAIL = "[email protected]"
SITE_NAME = "XXX Service Monitor"
SITE_ROOT = "https://monitor.xxxxxxxxxxxxx.tv"
CSRF_TRUSTED_ORIGINS = ["https://monitor.xxxxxxxxxxxxx.tv", "http://xxx.xxx.xxx.xxx:8000"]
SECRET_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TELEGRAM_BOT_NAME = "xxxxxxxxxxx"
TELEGRAM_TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
DEBUG = False

Nginx

server {
    server_name monitor.xxxxxxxxxxxxx.tv;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/monitor.xxxxxxxxxxxxx.tv/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/monitor.xxxxxxxxxxxxx.tv/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = monitor.xxxxxxxxxxxxx.tv) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    listen [::]:80;
    server_name monitor.xxxxxxxxxxxxx.tv;
    return 404; # managed by Certbot
}

CPU architecture

x86-64

Docker creation

version: "2.1"
services:
  healthchecks:
    image: lscr.io/linuxserver/healthchecks:latest
    container_name: healthchecks
    environment:
      - PUID=1000
      - PGID=1000
      - SITE_ROOT=https://monitor.xxxxxxxxxxxxx.tv
      - SITE_NAME=XXX Service Monitor
      - [email protected]
      - EMAIL_HOST=
      - EMAIL_PORT=
      - EMAIL_HOST_USER=
      - EMAIL_HOST_PASSWORD=
      - EMAIL_USE_TLS=
      - [email protected]
      - SUPERUSER_PASSWORD=xxxxxxxxxxxxxx
      - DEFAULT_FROM_EMAIL = "[email protected]"
    volumes:
      - /root/hcio/config:/config
    ports:
      - 8000:8000
      - 2525:2525 #optional
    restart: unless-stopped

Container logs

[uwsgi-daemons] stopping daemon (pid: 150): /usr/bin/python3 ./manage.py sendalerts
Terminated, finishing...
Terminated, finishing...
Sent 0 alert(s).
[uwsgi-daemons] stopping daemon (pid: 151): /usr/bin/python3 ./manage.py sendreports --loop
Terminated, finishing...
Done.
[uwsgi-daemons] stopping daemon (pid: 152): /usr/bin/python3 ./manage.py smtpd --port 2525
...brutally killing workers...
worker 1 buried after 1 seconds
binary reloading uWSGI...
chdir() to /app/healthchecks
closing all non-uwsgi socket fds > 2 (max_fd = 10000)...
found fd 3 mapped to socket 0 (:8000)
running /usr/sbin/uwsgi
[uWSGI] getting INI configuration from uwsgi.ini
[uwsgi-static] added mapping for /static => static-collected
*** Starting uWSGI 2.0.21 (64bit) on [Tue Jan 17 05:24:32 2023] ***
compiled with version: 12.2.1 20220924 on 09 November 2022 12:47:28
os: Linux-5.4.0-122-generic #138-Ubuntu SMP Wed Jun 22 15:00:31 UTC 2022
nodename: 33840a0be85a
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /app/healthchecks
detected binary path: /usr/sbin/uwsgi
your processes number limit is 3772
your memory page size is 4096 bytes
detected max file descriptor number: 10000
building mime-types dictionary from file /etc/mime.types...1323 entry found
lock engine: pthread robust mutexes
thunder lock: enabled
uwsgi socket 0 inherited INET address :8000 fd 3
Python version: 3.10.9 (main, Dec 12 2022, 17:52:15) [GCC 12.2.1 20220924]
Python main interpreter initialized at 0x7f87db8a2b40
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 203184 bytes (198 KB) for 1 cores
*** Operational MODE: single process ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7f87db8a2b40 pid: 128 (default app)
*** uWSGI is running in multiple interpreter mode ***
gracefully (RE)spawned uWSGI master process (pid: 128)
spawned uWSGI worker 1 (pid: 168, cores: 1)
[uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py sendalerts" (uid: 1000 gid: 1000)
[uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py smtpd --port 2525" (uid: 1000 gid: 1000)
[uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py sendreports --loop" (uid: 1000 gid: 1000)
sendalerts is now running
sendreports is now running
Starting SMTP listener on 0.0.0.0:2525 ...
[migrations] started
[migrations] no migrations found
usermod: no changes

-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/


Brought to you by linuxserver.io
-------------------------------------

To support LSIO projects visit:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    1000
User gid:    1000
-------------------------------------

No changes detected
Operations to perform:
  Apply all migrations: accounts, admin, api, auth, contenttypes, payments, sessions
Running migrations:
  No migrations to apply.
Superuser creation skipped. Already exists.
[custom-init] No custom files found, skipping...
[uWSGI] getting INI configuration from uwsgi.ini
[uwsgi-static] added mapping for /static => static-collected
*** Starting uWSGI 2.0.21 (64bit) on [Tue Jan 17 05:24:44 2023] ***
compiled with version: 12.2.1 20220924 on 09 November 2022 12:47:28
os: Linux-5.4.0-122-generic #138-Ubuntu SMP Wed Jun 22 15:00:31 UTC 2022
nodename: 33840a0be85a
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /app/healthchecks
detected binary path: /usr/sbin/uwsgi
your processes number limit is 3772
your memory page size is 4096 bytes
detected max file descriptor number: 10000
building mime-types dictionary from file /etc/mime.types...1323 entry found
lock engine: pthread robust mutexes
thunder lock: enabled
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.10.9 (main, Dec 12 2022, 17:52:15) [GCC 12.2.1 20220924]
Python main interpreter initialized at 0x7fed5c680b40
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 203184 bytes (198 KB) for 1 cores
*** Operational MODE: single process ***
[ls.io-init] done.
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7fed5c680b40 pid: 128 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 128)
spawned uWSGI worker 1 (pid: 149, cores: 1)
[uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py sendalerts" (uid: 1000 gid: 1000)
[uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py sendreports --loop" (uid: 1000 gid: 1000)
[uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py smtpd --port 2525" (uid: 1000 gid: 1000)
sendalerts is now running
sendreports is now running
Starting SMTP listener on 0.0.0.0:2525 ...
[pid: 149|app: 0|req: 1/1] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:25:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 212 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 2/2] xxx.xxx.xxx.xxx () {50 vars in 980 bytes} [Tue Jan 17 05:26:08 2023] GET /admin/api/channel/ => generated 0 bytes in 67 msecs (HTTP/1.0 302) 11 headers in 423 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 3/3] xxx.xxx.xxx.xxx () {50 vars in 1017 bytes} [Tue Jan 17 05:26:08 2023] GET /admin/login/?next=/admin/api/channel/ => generated 8053 bytes in 20 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 4/4] xxx.xxx.xxx.xxx () {56 vars in 1154 bytes} [Tue Jan 17 05:26:10 2023] POST /admin/login/?next=/admin/api/channel/ => generated 0 bytes in 405 msecs (HTTP/1.0 302) 11 headers in 555 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 5/5] xxx.xxx.xxx.xxx () {50 vars in 963 bytes} [Tue Jan 17 05:26:11 2023] GET / => generated 8575 bytes in 30 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 6/6] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:26:14 2023] GET /?refresh=1 => generated 78 bytes in 14 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 7/7] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:26:17 2023] GET /?refresh=1 => generated 78 bytes in 15 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 8/8] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:26:19 2023] GET /?refresh=1 => generated 78 bytes in 14 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 9/9] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:26:22 2023] GET /?refresh=1 => generated 78 bytes in 15 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 10/10] xxx.xxx.xxx.xxx () {50 vars in 938 bytes} [Tue Jan 17 05:26:22 2023] GET /admin/ => generated 11121 bytes in 33 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 11/11] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:26:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 14 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 12/12] xxx.xxx.xxx.xxx () {50 vars in 968 bytes} [Tue Jan 17 05:26:24 2023] GET /admin/api/channel/ => generated 13947 bytes in 38 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 13/13] xxx.xxx.xxx.xxx () {46 vars in 825 bytes} [Tue Jan 17 05:26:24 2023] GET /admin/jsi18n/ => generated 3343 bytes in 7 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 14/14] xxx.xxx.xxx.xxx () {46 vars in 842 bytes} [Tue Jan 17 05:26:24 2023] GET /favicon.ico => generated 179 bytes in 6 msecs (HTTP/1.0 404) 8 headers in 267 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 15/15] xxx.xxx.xxx.xxx () {50 vars in 938 bytes} [Tue Jan 17 05:26:26 2023] GET /admin/ => generated 11121 bytes in 18 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 16/16] xxx.xxx.xxx.xxx () {50 vars in 968 bytes} [Tue Jan 17 05:26:31 2023] GET /admin/api/channel/ => generated 13947 bytes in 23 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 17/17] xxx.xxx.xxx.xxx () {46 vars in 825 bytes} [Tue Jan 17 05:26:31 2023] GET /admin/jsi18n/ => generated 3343 bytes in 6 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 18/18] xxx.xxx.xxx.xxx () {50 vars in 988 bytes} [Tue Jan 17 05:26:33 2023] GET /admin/api/channel/add/ => generated 15847 bytes in 45 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 19/19] xxx.xxx.xxx.xxx () {46 vars in 829 bytes} [Tue Jan 17 05:26:33 2023] GET /admin/jsi18n/ => generated 3343 bytes in 61 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 20/20] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:27:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 24 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 21/21] 164.90.206.99 () {26 vars in 389 bytes} [Tue Jan 17 05:27:50 2023] GET / => generated 0 bytes in 1 msecs (HTTP/1.1 302) 9 headers in 289 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 22/22] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:28:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 14 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 23/23] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:29:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 14 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 24/24] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:30:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 16 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 25/25] xxx.xxx.xxx.xxx () {56 vars in 1110 bytes} [Tue Jan 17 05:30:52 2023] POST /admin/api/channel/add/ => generated 16233 bytes in 44 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 26/26] xxx.xxx.xxx.xxx () {46 vars in 829 bytes} [Tue Jan 17 05:30:53 2023] GET /admin/jsi18n/ => generated 3343 bytes in 7 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 27/27] xxx.xxx.xxx.xxx () {46 vars in 846 bytes} [Tue Jan 17 05:30:53 2023] GET /favicon.ico => generated 179 bytes in 6 msecs (HTTP/1.0 404) 8 headers in 267 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 28/28] xxx.xxx.xxx.xxx () {48 vars in 972 bytes} [Tue Jan 17 05:30:57 2023] GET /admin/api/check/?_popup=1 => generated 79889 bytes in 186 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 29/29] xxx.xxx.xxx.xxx () {56 vars in 1110 bytes} [Tue Jan 17 05:31:01 2023] POST /admin/api/channel/add/ => generated 0 bytes in 21 msecs (HTTP/1.0 302) 12 headers in 720 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 30/30] xxx.xxx.xxx.xxx () {50 vars in 1264 bytes} [Tue Jan 17 05:31:02 2023] GET /admin/api/channel/6/change/ => generated 16545 bytes in 37 msecs (HTTP/1.0 200) 12 headers in 608 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 31/31] xxx.xxx.xxx.xxx () {46 vars in 834 bytes} [Tue Jan 17 05:31:02 2023] GET /admin/jsi18n/ => generated 3343 bytes in 7 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 32/32] xxx.xxx.xxx.xxx () {46 vars in 851 bytes} [Tue Jan 17 05:31:02 2023] GET /favicon.ico => generated 179 bytes in 8 msecs (HTTP/1.0 404) 8 headers in 267 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 33/33] xxx.xxx.xxx.xxx () {50 vars in 953 bytes} [Tue Jan 17 05:31:06 2023] GET / => generated 8574 bytes in 28 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/34] xxx.xxx.xxx.xxx () {46 vars in 840 bytes} [Tue Jan 17 05:31:06 2023] GET /static/img/logo.png => generated 1159 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 112 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 34/35] xxx.xxx.xxx.xxx () {50 vars in 1032 bytes} [Tue Jan 17 05:31:07 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/ => generated 351058 bytes in 152 msecs (HTTP/1.0 200) 10 headers in 544 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 35/36] xxx.xxx.xxx.xxx () {50 vars in 1097 bytes} [Tue Jan 17 05:31:09 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/integrations/ => generated 18501 bytes in 39 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/37] xxx.xxx.xxx.xxx () {46 vars in 933 bytes} [Tue Jan 17 05:31:09 2023] GET /static/img/integrations/telegram.png => generated 2756 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 112 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 36/38] xxx.xxx.xxx.xxx () {48 vars in 989 bytes} [Tue Jan 17 05:31:14 2023] GET /integrations/b9bbcd32-aa53-4a39-aa4d-0c260495e6da/checks/ => generated 65305 bytes in 25 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 37/39] xxx.xxx.xxx.xxx () {56 vars in 1222 bytes} [Tue Jan 17 05:31:20 2023] POST /projects/b59281a7-a076-4010-b832-0e3c2c634e19/integrations/ => generated 0 bytes in 129 msecs (HTTP/1.0 302) 9 headers in 333 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 38/40] xxx.xxx.xxx.xxx () {50 vars in 1103 bytes} [Tue Jan 17 05:31:20 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/integrations/ => generated 18504 bytes in 21 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 39/41] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:31:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 12 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 40/42] xxx.xxx.xxx.xxx () {56 vars in 1212 bytes} [Tue Jan 17 05:31:24 2023] POST /integrations/b9bbcd32-aa53-4a39-aa4d-0c260495e6da/test/ => generated 0 bytes in 529 msecs (HTTP/1.0 302) 10 headers in 512 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 41/43] xxx.xxx.xxx.xxx () {50 vars in 1237 bytes} [Tue Jan 17 05:31:24 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/integrations/ => generated 18668 bytes in 25 msecs (HTTP/1.0 200) 10 headers in 496 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 42/44] xxx.xxx.xxx.xxx () {38 vars in 790 bytes} [Tue Jan 17 05:31:26 2023] GET /cloaked/b06679d4ce4c70d253c47f8191bb6fb0e4acc332/ => generated 0 bytes in 1 msecs (HTTP/1.0 302) 9 headers in 345 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 43/45] xxx.xxx.xxx.xxx () {38 vars in 833 bytes} [Tue Jan 17 05:31:26 2023] GET /accounts/login/?next=/cloaked/b06679d4ce4c70d253c47f8191bb6fb0e4acc332/ => generated 8053 bytes in 5 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 44/46] xxx.xxx.xxx.xxx () {38 vars in 766 bytes} [Tue Jan 17 05:31:26 2023] GET /accounts/login/ => generated 8053 bytes in 6 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 45/47] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:32:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 14 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 46/48] xxx.xxx.xxx.xxx () {50 vars in 997 bytes} [Tue Jan 17 05:32:57 2023] GET /admin/ => generated 11124 bytes in 21 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 47/49] xxx.xxx.xxx.xxx () {50 vars in 968 bytes} [Tue Jan 17 05:32:59 2023] GET /admin/api/channel/ => generated 14697 bytes in 26 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 48/50] xxx.xxx.xxx.xxx () {46 vars in 825 bytes} [Tue Jan 17 05:32:59 2023] GET /admin/jsi18n/ => generated 3343 bytes in 6 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/51] xxx.xxx.xxx.xxx () {46 vars in 891 bytes} [Tue Jan 17 05:32:59 2023] GET /static/admin/img/tooltag-add.svg => generated 331 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 115 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 49/52] xxx.xxx.xxx.xxx () {50 vars in 998 bytes} [Tue Jan 17 05:33:08 2023] GET /admin/api/channel/6/change/ => generated 16817 bytes in 40 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 50/53] xxx.xxx.xxx.xxx () {46 vars in 834 bytes} [Tue Jan 17 05:33:08 2023] GET /admin/jsi18n/ => generated 3343 bytes in 7 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 51/54] xxx.xxx.xxx.xxx () {46 vars in 851 bytes} [Tue Jan 17 05:33:08 2023] GET /favicon.ico => generated 179 bytes in 6 msecs (HTTP/1.0 404) 8 headers in 267 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 52/55] xxx.xxx.xxx.xxx () {50 vars in 989 bytes} [Tue Jan 17 05:33:17 2023] GET /admin/api/channel/ => generated 14697 bytes in 26 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 53/56] xxx.xxx.xxx.xxx () {46 vars in 825 bytes} [Tue Jan 17 05:33:18 2023] GET /admin/jsi18n/ => generated 3343 bytes in 6 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 54/57] xxx.xxx.xxx.xxx () {50 vars in 988 bytes} [Tue Jan 17 05:33:21 2023] GET /admin/api/channel/add/ => generated 15847 bytes in 29 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 55/58] xxx.xxx.xxx.xxx () {46 vars in 829 bytes} [Tue Jan 17 05:33:21 2023] GET /admin/jsi18n/ => generated 3343 bytes in 7 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 56/59] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:33:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 14 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 57/60] xxx.xxx.xxx.xxx () {48 vars in 1012 bytes} [Tue Jan 17 05:33:36 2023] GET /admin/accounts/project/?_to_field=id&_popup=1 => generated 5521 bytes in 32 msecs (HTTP/1.0 200) 11 headers in 509 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 58/61] xxx.xxx.xxx.xxx () {56 vars in 1110 bytes} [Tue Jan 17 05:33:44 2023] POST /admin/api/channel/add/ => generated 16237 bytes in 37 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 59/62] xxx.xxx.xxx.xxx () {46 vars in 829 bytes} [Tue Jan 17 05:33:45 2023] GET /admin/jsi18n/ => generated 3343 bytes in 9 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 60/63] xxx.xxx.xxx.xxx () {46 vars in 846 bytes} [Tue Jan 17 05:33:45 2023] GET /favicon.ico => generated 179 bytes in 7 msecs (HTTP/1.0 404) 8 headers in 267 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 61/64] xxx.xxx.xxx.xxx () {48 vars in 972 bytes} [Tue Jan 17 05:33:48 2023] GET /admin/api/check/?_popup=1 => generated 79889 bytes in 177 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/65] xxx.xxx.xxx.xxx () {46 vars in 874 bytes} [Tue Jan 17 05:33:49 2023] GET /static/css/admin/checks.css => generated 224 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 110 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 62/66] xxx.xxx.xxx.xxx () {56 vars in 1110 bytes} [Tue Jan 17 05:33:53 2023] POST /admin/api/channel/add/ => generated 0 bytes in 21 msecs (HTTP/1.0 302) 12 headers in 721 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 63/67] xxx.xxx.xxx.xxx () {50 vars in 1265 bytes} [Tue Jan 17 05:33:53 2023] GET /admin/api/channel/7/change/ => generated 16549 bytes in 34 msecs (HTTP/1.0 200) 12 headers in 608 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 64/68] xxx.xxx.xxx.xxx () {46 vars in 834 bytes} [Tue Jan 17 05:33:53 2023] GET /admin/jsi18n/ => generated 3343 bytes in 6 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 65/69] xxx.xxx.xxx.xxx () {50 vars in 953 bytes} [Tue Jan 17 05:34:00 2023] GET / => generated 8581 bytes in 34 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/70] xxx.xxx.xxx.xxx () {46 vars in 875 bytes} [Tue Jan 17 05:34:00 2023] GET /static/CACHE/css/output.805e95f3f85c.css => generated 146419 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 113 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 66/71] xxx.xxx.xxx.xxx () {50 vars in 1032 bytes} [Tue Jan 17 05:34:01 2023] GET /projects/787a0e6b-ea2f-433d-be93-72926c55fa88/checks/ => generated 33000 bytes in 27 msecs (HTTP/1.0 200) 10 headers in 543 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 67/72] xxx.xxx.xxx.xxx () {50 vars in 1097 bytes} [Tue Jan 17 05:34:03 2023] GET /projects/787a0e6b-ea2f-433d-be93-72926c55fa88/integrations/ => generated 18505 bytes in 20 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/73] xxx.xxx.xxx.xxx () {46 vars in 933 bytes} [Tue Jan 17 05:34:03 2023] GET /static/img/integrations/telegram.png => generated 2756 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 112 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 68/74] xxx.xxx.xxx.xxx () {48 vars in 989 bytes} [Tue Jan 17 05:34:08 2023] GET /integrations/c23a56c7-084d-4aff-9216-38739cfb6017/checks/ => generated 919 bytes in 9 msecs (HTTP/1.0 200) 9 headers in 396 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 69/75] xxx.xxx.xxx.xxx () {56 vars in 1221 bytes} [Tue Jan 17 05:34:11 2023] POST /projects/787a0e6b-ea2f-433d-be93-72926c55fa88/integrations/ => generated 0 bytes in 14 msecs (HTTP/1.0 302) 9 headers in 333 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 70/76] xxx.xxx.xxx.xxx () {50 vars in 1103 bytes} [Tue Jan 17 05:34:11 2023] GET /projects/787a0e6b-ea2f-433d-be93-72926c55fa88/integrations/ => generated 18506 bytes in 20 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 71/77] xxx.xxx.xxx.xxx () {56 vars in 1212 bytes} [Tue Jan 17 05:34:14 2023] POST /integrations/c23a56c7-084d-4aff-9216-38739cfb6017/test/ => generated 0 bytes in 547 msecs (HTTP/1.0 302) 10 headers in 512 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 72/78] xxx.xxx.xxx.xxx () {38 vars in 790 bytes} [Tue Jan 17 05:34:14 2023] GET /cloaked/10610e8e1e8192a2f1870b6527dab26cf0e07d8f/ => generated 0 bytes in 1 msecs (HTTP/1.0 302) 9 headers in 345 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 73/79] xxx.xxx.xxx.xxx () {38 vars in 833 bytes} [Tue Jan 17 05:34:14 2023] GET /accounts/login/?next=/cloaked/10610e8e1e8192a2f1870b6527dab26cf0e07d8f/ => generated 8053 bytes in 5 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 74/80] xxx.xxx.xxx.xxx () {38 vars in 766 bytes} [Tue Jan 17 05:34:14 2023] GET /accounts/login/ => generated 8053 bytes in 5 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 75/81] xxx.xxx.xxx.xxx () {50 vars in 1237 bytes} [Tue Jan 17 05:34:14 2023] GET /projects/787a0e6b-ea2f-433d-be93-72926c55fa88/integrations/ => generated 18670 bytes in 27 msecs (HTTP/1.0 200) 10 headers in 496 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 76/82] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:34:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 13 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 77/83] xxx.xxx.xxx.xxx () {50 vars in 985 bytes} [Tue Jan 17 05:34:26 2023] GET / => generated 8581 bytes in 26 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/84] xxx.xxx.xxx.xxx () {46 vars in 840 bytes} [Tue Jan 17 05:34:27 2023] GET /static/img/logo.png => generated 1159 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 112 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 78/85] xxx.xxx.xxx.xxx () {50 vars in 1032 bytes} [Tue Jan 17 05:34:28 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/ => generated 350488 bytes in 153 msecs (HTTP/1.0 200) 10 headers in 544 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 79/86] xxx.xxx.xxx.xxx () {50 vars in 1085 bytes} [Tue Jan 17 05:34:28 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/ => generated 350488 bytes in 135 msecs (HTTP/1.0 200) 9 headers in 399 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 80/87] xxx.xxx.xxx.xxx () {50 vars in 979 bytes} [Tue Jan 17 05:34:31 2023] GET / => generated 8581 bytes in 25 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 81/88] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:34:34 2023] GET /?refresh=1 => generated 78 bytes in 14 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 82/89] xxx.xxx.xxx.xxx () {50 vars in 938 bytes} [Tue Jan 17 05:34:35 2023] GET /admin/ => generated 11111 bytes in 19 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/90] xxx.xxx.xxx.xxx () {46 vars in 957 bytes} [Tue Jan 17 05:34:35 2023] GET /static/admin/fonts/Roboto-Regular-webfont.woff => generated 85876 bytes in 1 msecs via sendfile() (HTTP/1.0 200) 3 headers in 113 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 83/91] xxx.xxx.xxx.xxx () {50 vars in 978 bytes} [Tue Jan 17 05:34:49 2023] GET /admin/accounts/profile/ => generated 16622 bytes in 41 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 84/92] xxx.xxx.xxx.xxx () {46 vars in 830 bytes} [Tue Jan 17 05:34:49 2023] GET /admin/jsi18n/ => generated 3343 bytes in 7 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 85/93] xxx.xxx.xxx.xxx () {50 vars in 995 bytes} [Tue Jan 17 05:34:50 2023] GET /admin/accounts/project/ => generated 12084 bytes in 27 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 86/94] xxx.xxx.xxx.xxx () {46 vars in 830 bytes} [Tue Jan 17 05:34:51 2023] GET /admin/jsi18n/ => generated 3343 bytes in 7 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 87/95] xxx.xxx.xxx.xxx () {46 vars in 847 bytes} [Tue Jan 17 05:34:51 2023] GET /favicon.ico => generated 179 bytes in 7 msecs (HTTP/1.0 404) 8 headers in 267 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 88/96] xxx.xxx.xxx.xxx () {50 vars in 1055 bytes} [Tue Jan 17 05:34:56 2023] GET /projects/09973b83-3e2b-40e3-b12d-02ba9937bfdf/checks/ => generated 36705 bytes in 33 msecs (HTTP/1.0 200) 10 headers in 543 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/97] xxx.xxx.xxx.xxx () {46 vars in 915 bytes} [Tue Jan 17 05:34:56 2023] GET /static/img/apple-touch-180.png => generated 733 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 111 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 89/98] xxx.xxx.xxx.xxx () {48 vars in 1032 bytes} [Tue Jan 17 05:35:00 2023] GET /projects/09973b83-3e2b-40e3-b12d-02ba9937bfdf/checks/status/ => generated 164 bytes in 8 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 90/99] xxx.xxx.xxx.xxx () {48 vars in 1032 bytes} [Tue Jan 17 05:35:02 2023] GET /projects/09973b83-3e2b-40e3-b12d-02ba9937bfdf/checks/status/ => generated 164 bytes in 8 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 91/100] xxx.xxx.xxx.xxx () {50 vars in 1083 bytes} [Tue Jan 17 05:35:04 2023] GET /checks/306dfdd0-9140-4d58-be55-a6c19ac83a9e/details/ => generated 60486 bytes in 53 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 92/101] xxx.xxx.xxx.xxx () {48 vars in 1013 bytes} [Tue Jan 17 05:35:05 2023] GET /checks/306dfdd0-9140-4d58-be55-a6c19ac83a9e/status/ => generated 904 bytes in 13 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 93/102] xxx.xxx.xxx.xxx () {48 vars in 1020 bytes} [Tue Jan 17 05:35:07 2023] GET /checks/306dfdd0-9140-4d58-be55-a6c19ac83a9e/status/?u=1 => generated 187 bytes in 10 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 94/103] xxx.xxx.xxx.xxx () {48 vars in 1020 bytes} [Tue Jan 17 05:35:10 2023] GET /checks/306dfdd0-9140-4d58-be55-a6c19ac83a9e/status/?u=1 => generated 187 bytes in 13 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 95/104] xxx.xxx.xxx.xxx () {50 vars in 1084 bytes} [Tue Jan 17 05:35:12 2023] GET /projects/09973b83-3e2b-40e3-b12d-02ba9937bfdf/checks/ => generated 36705 bytes in 25 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 96/105] xxx.xxx.xxx.xxx () {50 vars in 979 bytes} [Tue Jan 17 05:35:14 2023] GET / => generated 8573 bytes in 25 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/106] xxx.xxx.xxx.xxx () {46 vars in 840 bytes} [Tue Jan 17 05:35:14 2023] GET /static/img/logo.png => generated 1159 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 112 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 97/107] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:35:17 2023] GET /?refresh=1 => generated 78 bytes in 15 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 98/108] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:35:20 2023] GET /?refresh=1 => generated 78 bytes in 15 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 99/109] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:35:23 2023] GET /?refresh=1 => generated 78 bytes in 15 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 100/110] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:35:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 14 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 101/111] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:35:26 2023] GET /?refresh=1 => generated 78 bytes in 19 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 102/112] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:35:29 2023] GET /?refresh=1 => generated 78 bytes in 14 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 103/113] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:35:32 2023] GET /?refresh=1 => generated 78 bytes in 15 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 104/114] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:35:35 2023] GET /?refresh=1 => generated 78 bytes in 15 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 105/115] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:35:38 2023] GET /?refresh=1 => generated 78 bytes in 19 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 106/116] xxx.xxx.xxx.xxx () {50 vars in 960 bytes} [Tue Jan 17 05:35:41 2023] GET /accounts/profile/ => generated 14241 bytes in 32 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 107/117] xxx.xxx.xxx.xxx () {50 vars in 993 bytes} [Tue Jan 17 05:35:52 2023] GET /accounts/two_factor/totp/ => generated 6298 bytes in 28 msecs (HTTP/1.0 200) 10 headers in 542 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 108/118] xxx.xxx.xxx.xxx () {56 vars in 1118 bytes} [Tue Jan 17 05:36:12 2023] POST /accounts/two_factor/totp/ => generated 6472 bytes in 16 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 109/119] xxx.xxx.xxx.xxx () {50 vars in 985 bytes} [Tue Jan 17 05:36:18 2023] GET /accounts/profile/ => generated 14241 bytes in 17 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 110/120] xxx.xxx.xxx.xxx () {50 vars in 993 bytes} [Tue Jan 17 05:36:21 2023] GET /accounts/two_factor/totp/ => generated 6298 bytes in 16 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 111/121] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:36:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 19 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/122] xxx.xxx.xxx.xxx () {42 vars in 689 bytes} [Tue Jan 17 05:36:34 2023] GET /static/img/logo.png => generated 1159 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 112 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 112/123] xxx.xxx.xxx.xxx () {56 vars in 1119 bytes} [Tue Jan 17 05:36:43 2023] POST /accounts/two_factor/totp/ => generated 0 bytes in 17 msecs (HTTP/1.0 302) 10 headers in 444 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 113/124] xxx.xxx.xxx.xxx () {50 vars in 1001 bytes} [Tue Jan 17 05:36:43 2023] GET /accounts/two_factor/totp/ => generated 7536 bytes in 50 msecs (HTTP/1.0 200) 10 headers in 542 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 114/125] xxx.xxx.xxx.xxx () {56 vars in 1118 bytes} [Tue Jan 17 05:37:15 2023] POST /accounts/two_factor/totp/ => generated 0 bytes in 15 msecs (HTTP/1.0 302) 10 headers in 436 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 115/126] xxx.xxx.xxx.xxx () {50 vars in 985 bytes} [Tue Jan 17 05:37:15 2023] GET /accounts/profile/ => generated 14185 bytes in 28 msecs (HTTP/1.0 200) 10 headers in 543 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 116/127] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:37:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 15 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 117/128] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:38:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 12 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 118/129] xxx.xxx.xxx.xxx () {56 vars in 1092 bytes} [Tue Jan 17 05:39:14 2023] POST /accounts/logout/ => generated 0 bytes in 9 msecs (HTTP/1.0 302) 10 headers in 373 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 119/130] xxx.xxx.xxx.xxx () {50 vars in 899 bytes} [Tue Jan 17 05:39:14 2023] GET / => generated 0 bytes in 1 msecs (HTTP/1.0 302) 9 headers in 289 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 120/131] xxx.xxx.xxx.xxx () {50 vars in 929 bytes} [Tue Jan 17 05:39:14 2023] GET /accounts/login/ => generated 8053 bytes in 6 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 121/132] xxx.xxx.xxx.xxx () {56 vars in 1045 bytes} [Tue Jan 17 05:39:17 2023] POST /accounts/login/ => generated 0 bytes in 377 msecs (HTTP/1.0 302) 10 headers in 450 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 122/133] xxx.xxx.xxx.xxx () {50 vars in 1003 bytes} [Tue Jan 17 05:39:17 2023] GET /accounts/login/two_factor/totp/ => generated 3848 bytes in 10 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 123/134] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:39:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 12 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 124/135] xxx.xxx.xxx.xxx () {56 vars in 1136 bytes} [Tue Jan 17 05:39:27 2023] POST /accounts/login/two_factor/totp/ => generated 0 bytes in 34 msecs (HTTP/1.0 302) 11 headers in 555 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 125/136] xxx.xxx.xxx.xxx () {50 vars in 957 bytes} [Tue Jan 17 05:39:27 2023] GET / => generated 8573 bytes in 24 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 126/137] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:39:30 2023] GET /?refresh=1 => generated 78 bytes in 15 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 127/138] xxx.xxx.xxx.xxx () {48 vars in 878 bytes} [Tue Jan 17 05:39:33 2023] GET /?refresh=1 => generated 78 bytes in 14 msecs (HTTP/1.0 200) 8 headers in 251 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 128/139] xxx.xxx.xxx.xxx () {50 vars in 1032 bytes} [Tue Jan 17 05:39:34 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/ => generated 350489 bytes in 138 msecs (HTTP/1.0 200) 10 headers in 544 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 129/140] xxx.xxx.xxx.xxx () {48 vars in 1032 bytes} [Tue Jan 17 05:39:38 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/status/ => generated 16005 bytes in 30 msecs (HTTP/1.0 200) 8 headers in 254 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 130/141] xxx.xxx.xxx.xxx () {48 vars in 1032 bytes} [Tue Jan 17 05:39:41 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/status/ => generated 16005 bytes in 30 msecs (HTTP/1.0 200) 8 headers in 254 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 131/142] xxx.xxx.xxx.xxx () {48 vars in 1032 bytes} [Tue Jan 17 05:39:44 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/status/ => generated 16005 bytes in 87 msecs (HTTP/1.0 200) 8 headers in 254 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 132/143] xxx.xxx.xxx.xxx () {48 vars in 1032 bytes} [Tue Jan 17 05:39:47 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/status/ => generated 16005 bytes in 27 msecs (HTTP/1.0 200) 8 headers in 254 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 133/144] xxx.xxx.xxx.xxx () {48 vars in 1032 bytes} [Tue Jan 17 05:39:50 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/status/ => generated 16005 bytes in 29 msecs (HTTP/1.0 200) 8 headers in 254 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 134/145] xxx.xxx.xxx.xxx () {48 vars in 1032 bytes} [Tue Jan 17 05:39:53 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/status/ => generated 16005 bytes in 40 msecs (HTTP/1.0 200) 8 headers in 254 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 135/146] xxx.xxx.xxx.xxx () {48 vars in 1032 bytes} [Tue Jan 17 05:39:56 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/status/ => generated 16005 bytes in 29 msecs (HTTP/1.0 200) 8 headers in 254 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 136/147] xxx.xxx.xxx.xxx () {48 vars in 1041 bytes} [Tue Jan 17 05:39:59 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/status/ => generated 16005 bytes in 29 msecs (HTTP/1.0 200) 8 headers in 254 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 137/148] xxx.xxx.xxx.xxx () {48 vars in 1041 bytes} [Tue Jan 17 05:40:02 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/status/ => generated 16014 bytes in 61 msecs (HTTP/1.0 200) 8 headers in 254 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 138/149] xxx.xxx.xxx.xxx () {48 vars in 986 bytes} [Tue Jan 17 05:40:05 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/last_ping/ => generated 737 bytes in 18 msecs (HTTP/1.0 200) 8 headers in 260 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 139/150] xxx.xxx.xxx.xxx () {48 vars in 1041 bytes} [Tue Jan 17 05:40:05 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/status/ => generated 16014 bytes in 27 msecs (HTTP/1.0 200) 8 headers in 254 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 140/151] xxx.xxx.xxx.xxx () {48 vars in 1041 bytes} [Tue Jan 17 05:40:08 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/status/ => generated 16014 bytes in 52 msecs (HTTP/1.0 200) 8 headers in 254 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 141/152] xxx.xxx.xxx.xxx () {48 vars in 1041 bytes} [Tue Jan 17 05:40:11 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/status/ => generated 16014 bytes in 28 msecs (HTTP/1.0 200) 8 headers in 254 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 142/153] xxx.xxx.xxx.xxx () {56 vars in 1204 bytes} [Tue Jan 17 05:40:13 2023] POST /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/name/ => generated 0 bytes in 14 msecs (HTTP/1.0 302) 9 headers in 336 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 143/154] xxx.xxx.xxx.xxx () {50 vars in 1111 bytes} [Tue Jan 17 05:40:13 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/checks/?tag=NEXT => generated 353445 bytes in 138 msecs (HTTP/1.0 200) 9 headers in 399 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/155] xxx.xxx.xxx.xxx () {46 vars in 924 bytes} [Tue Jan 17 05:40:14 2023] GET /static/img/apple-touch-180.png => generated 733 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 111 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 144/156] xxx.xxx.xxx.xxx () {50 vars in 1092 bytes} [Tue Jan 17 05:40:15 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/details/ => generated 60989 bytes in 29 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/157] xxx.xxx.xxx.xxx () {46 vars in 914 bytes} [Tue Jan 17 05:40:15 2023] GET /static/img/apple-touch-180.png => generated 733 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 111 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 145/158] xxx.xxx.xxx.xxx () {48 vars in 1013 bytes} [Tue Jan 17 05:40:16 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/ => generated 5370 bytes in 25 msecs (HTTP/1.0 200) 8 headers in 253 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 146/159] xxx.xxx.xxx.xxx () {48 vars in 1052 bytes} [Tue Jan 17 05:40:18 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673933963.958632 => generated 223 bytes in 12 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 147/160] xxx.xxx.xxx.xxx () {48 vars in 1052 bytes} [Tue Jan 17 05:40:21 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673933963.958632 => generated 223 bytes in 13 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 148/161] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:40:22 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 16 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 149/162] xxx.xxx.xxx.xxx () {48 vars in 1052 bytes} [Tue Jan 17 05:40:24 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673933963.958632 => generated 5358 bytes in 24 msecs (HTTP/1.0 200) 8 headers in 253 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 150/163] xxx.xxx.xxx.xxx () {48 vars in 974 bytes} [Tue Jan 17 05:40:25 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/transfer/ => generated 2456 bytes in 13 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 151/164] xxx.xxx.xxx.xxx () {48 vars in 1052 bytes} [Tue Jan 17 05:40:27 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 217 bytes in 15 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 152/165] xxx.xxx.xxx.xxx () {48 vars in 1052 bytes} [Tue Jan 17 05:40:30 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 217 bytes in 14 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 153/166] xxx.xxx.xxx.xxx () {48 vars in 1052 bytes} [Tue Jan 17 05:40:33 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 218 bytes in 15 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 154/167] xxx.xxx.xxx.xxx () {48 vars in 1052 bytes} [Tue Jan 17 05:40:36 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 218 bytes in 13 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 155/168] xxx.xxx.xxx.xxx () {48 vars in 1052 bytes} [Tue Jan 17 05:40:39 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 218 bytes in 13 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 156/169] xxx.xxx.xxx.xxx () {48 vars in 1052 bytes} [Tue Jan 17 05:40:42 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 218 bytes in 13 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 157/170] xxx.xxx.xxx.xxx () {48 vars in 1052 bytes} [Tue Jan 17 05:40:45 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 218 bytes in 13 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 158/171] xxx.xxx.xxx.xxx () {48 vars in 1052 bytes} [Tue Jan 17 05:40:48 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 218 bytes in 13 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 159/172] xxx.xxx.xxx.xxx () {50 vars in 1101 bytes} [Tue Jan 17 05:40:51 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/details/?urls=slug => generated 61699 bytes in 63 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/173] xxx.xxx.xxx.xxx () {46 vars in 924 bytes} [Tue Jan 17 05:40:52 2023] GET /static/img/apple-touch-180.png => generated 733 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 111 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 160/174] xxx.xxx.xxx.xxx () {48 vars in 1023 bytes} [Tue Jan 17 05:40:52 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/ => generated 5365 bytes in 22 msecs (HTTP/1.0 200) 8 headers in 253 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 161/175] xxx.xxx.xxx.xxx () {50 vars in 1111 bytes} [Tue Jan 17 05:40:54 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/details/?urls=uuid => generated 60984 bytes in 35 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 162/176] xxx.xxx.xxx.xxx () {48 vars in 1023 bytes} [Tue Jan 17 05:40:55 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/ => generated 5365 bytes in 26 msecs (HTTP/1.0 200) 8 headers in 253 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 163/177] xxx.xxx.xxx.xxx () {48 vars in 1062 bytes} [Tue Jan 17 05:40:58 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 218 bytes in 13 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 164/178] xxx.xxx.xxx.xxx () {48 vars in 1062 bytes} [Tue Jan 17 05:41:01 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 223 bytes in 14 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 165/179] xxx.xxx.xxx.xxx () {48 vars in 1062 bytes} [Tue Jan 17 05:41:04 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 223 bytes in 13 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 166/180] xxx.xxx.xxx.xxx () {48 vars in 1062 bytes} [Tue Jan 17 05:41:07 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 223 bytes in 12 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 167/181] xxx.xxx.xxx.xxx () {48 vars in 1062 bytes} [Tue Jan 17 05:41:10 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 223 bytes in 14 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 168/182] xxx.xxx.xxx.xxx () {48 vars in 1062 bytes} [Tue Jan 17 05:41:13 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 223 bytes in 15 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 169/183] xxx.xxx.xxx.xxx () {48 vars in 1062 bytes} [Tue Jan 17 05:41:16 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 223 bytes in 12 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 170/184] xxx.xxx.xxx.xxx () {48 vars in 1062 bytes} [Tue Jan 17 05:41:19 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 223 bytes in 13 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 171/185] xxx.xxx.xxx.xxx () {48 vars in 1062 bytes} [Tue Jan 17 05:41:22 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 223 bytes in 17 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 172/186] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:41:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 13 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 173/187] xxx.xxx.xxx.xxx () {48 vars in 1062 bytes} [Tue Jan 17 05:41:25 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934022.939958 => generated 5364 bytes in 22 msecs (HTTP/1.0 200) 8 headers in 253 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 174/188] xxx.xxx.xxx.xxx () {48 vars in 1062 bytes} [Tue Jan 17 05:41:28 2023] GET /checks/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5/status/?u=1673934083.010471 => generated 217 bytes in 13 msecs (HTTP/1.0 200) 8 headers in 252 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 175/189] xxx.xxx.xxx.xxx () {50 vars in 1106 bytes} [Tue Jan 17 05:41:28 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/integrations/ => generated 18571 bytes in 23 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/190] xxx.xxx.xxx.xxx () {46 vars in 933 bytes} [Tue Jan 17 05:41:28 2023] GET /static/img/integrations/telegram.png => generated 2756 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 112 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 176/191] xxx.xxx.xxx.xxx () {50 vars in 1097 bytes} [Tue Jan 17 05:41:33 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/add_email/ => generated 8536 bytes in 24 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 177/192] xxx.xxx.xxx.xxx () {56 vars in 1212 bytes} [Tue Jan 17 05:41:46 2023] POST /projects/b59281a7-a076-4010-b832-0e3c2c634e19/add_email/ => generated 0 bytes in 32 msecs (HTTP/1.0 302) 9 headers in 333 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 178/193] xxx.xxx.xxx.xxx () {50 vars in 1100 bytes} [Tue Jan 17 05:41:47 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/integrations/ => generated 22955 bytes in 25 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 179/194] xxx.xxx.xxx.xxx () {56 vars in 1212 bytes} [Tue Jan 17 05:41:52 2023] POST /integrations/579a284c-f1ef-48f7-8f87-d97cdf67d9ed/test/ => generated 0 bytes in 21 msecs (HTTP/1.0 302) 10 headers in 555 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 180/195] xxx.xxx.xxx.xxx () {50 vars in 1280 bytes} [Tue Jan 17 05:41:52 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/integrations/ => generated 23343 bytes in 22 msecs (HTTP/1.0 200) 10 headers in 496 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 181/196] xxx.xxx.xxx.xxx () {50 vars in 1095 bytes} [Tue Jan 17 05:42:00 2023] GET /integrations/579a284c-f1ef-48f7-8f87-d97cdf67d9ed/edit/ => generated 8592 bytes in 17 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 182/197] xxx.xxx.xxx.xxx () {50 vars in 993 bytes} [Tue Jan 17 05:42:05 2023] GET /admin/ => generated 11111 bytes in 20 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 183/198] xxx.xxx.xxx.xxx () {50 vars in 968 bytes} [Tue Jan 17 05:42:06 2023] GET /admin/api/channel/ => generated 16179 bytes in 27 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 184/199] xxx.xxx.xxx.xxx () {46 vars in 825 bytes} [Tue Jan 17 05:42:07 2023] GET /admin/jsi18n/ => generated 3343 bytes in 9 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/200] xxx.xxx.xxx.xxx () {46 vars in 876 bytes} [Tue Jan 17 05:42:07 2023] GET /static/admin/img/icon-no.svg => generated 560 bytes in 1 msecs via sendfile() (HTTP/1.0 200) 3 headers in 115 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 185/201] xxx.xxx.xxx.xxx () {50 vars in 998 bytes} [Tue Jan 17 05:42:11 2023] GET /admin/api/channel/8/change/ => generated 16820 bytes in 44 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 186/202] xxx.xxx.xxx.xxx () {46 vars in 834 bytes} [Tue Jan 17 05:42:12 2023] GET /admin/jsi18n/ => generated 3343 bytes in 7 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 187/203] xxx.xxx.xxx.xxx () {56 vars in 1126 bytes} [Tue Jan 17 05:42:17 2023] POST /admin/api/channel/8/change/ => generated 0 bytes in 46 msecs (HTTP/1.0 302) 12 headers in 729 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 188/204] xxx.xxx.xxx.xxx () {50 vars in 1278 bytes} [Tue Jan 17 05:42:17 2023] GET /admin/api/channel/8/change/ => generated 17077 bytes in 46 msecs (HTTP/1.0 200) 12 headers in 608 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 189/205] xxx.xxx.xxx.xxx () {46 vars in 834 bytes} [Tue Jan 17 05:42:18 2023] GET /admin/jsi18n/ => generated 3343 bytes in 7 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 190/206] xxx.xxx.xxx.xxx () {46 vars in 851 bytes} [Tue Jan 17 05:42:18 2023] GET /favicon.ico => generated 179 bytes in 6 msecs (HTTP/1.0 404) 8 headers in 267 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 191/207] xxx.xxx.xxx.xxx () {50 vars in 989 bytes} [Tue Jan 17 05:42:20 2023] GET /admin/api/channel/ => generated 16164 bytes in 38 msecs (HTTP/1.0 200) 11 headers in 510 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 192/208] xxx.xxx.xxx.xxx () {46 vars in 825 bytes} [Tue Jan 17 05:42:20 2023] GET /admin/jsi18n/ => generated 3343 bytes in 8 msecs (HTTP/1.0 200) 8 headers in 269 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 193/209] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:42:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 13 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 194/210] xxx.xxx.xxx.xxx () {50 vars in 1103 bytes} [Tue Jan 17 05:42:32 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/integrations/ => generated 23178 bytes in 23 msecs (HTTP/1.0 200) 9 headers in 398 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/211] xxx.xxx.xxx.xxx () {46 vars in 921 bytes} [Tue Jan 17 05:42:32 2023] GET /static/img/apple-touch-180.png => generated 733 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 111 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 195/212] xxx.xxx.xxx.xxx () {56 vars in 1212 bytes} [Tue Jan 17 05:42:36 2023] POST /integrations/579a284c-f1ef-48f7-8f87-d97cdf67d9ed/test/ => generated 0 bytes in 34 msecs (HTTP/1.0 302) 10 headers in 512 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 196/213] xxx.xxx.xxx.xxx () {50 vars in 1237 bytes} [Tue Jan 17 05:42:36 2023] GET /projects/b59281a7-a076-4010-b832-0e3c2c634e19/integrations/ => generated 23083 bytes in 28 msecs (HTTP/1.0 200) 10 headers in 496 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 197/214] xxx.xxx.xxx.xxx () {48 vars in 974 bytes} [Tue Jan 17 05:42:55 2023] GET /cloaked/c8a5c5cc0a2644f0ead695a0042bfe24fadd4af5/ => generated 179 bytes in 13 msecs (HTTP/1.0 404) 8 headers in 267 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 198/215] xxx.xxx.xxx.xxx () {48 vars in 1072 bytes} [Tue Jan 17 05:43:17 2023] GET /integrations/579a284c-f1ef-48f7-8f87-d97cdf67d9ed/verify/fba6a41457c0f2425ed99e37e02b22299897536c/ => generated 5655 bytes in 17 msecs (HTTP/1.0 200) 9 headers in 397 bytes (1 switches on core 0)
[pid: 149|app: -1|req: -1/216] xxx.xxx.xxx.xxx () {46 vars in 960 bytes} [Tue Jan 17 05:43:17 2023] GET /static/img/apple-touch-180.png => generated 733 bytes in 0 msecs via sendfile() (HTTP/1.0 200) 3 headers in 111 bytes (0 switches on core 0)
[pid: 149|app: 0|req: 199/217] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:43:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 18 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 200/218] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:44:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 16 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 201/219] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:45:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 17 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)
[pid: 149|app: 0|req: 202/220] xxx.xxx.xxx.xxx () {22 vars in 320 bytes} [Tue Jan 17 05:46:23 2023] GET /ping/a9cd20f7-ac04-4eae-9cc5-28f084f2a9c5 => generated 2 bytes in 15 msecs (HTTP/1.0 200) 12 headers in 426 bytes (1 switches on core 0)

Container crashes when using MySQL db due to missing mysqlclient package

linuxserver.io

Docker x86-64 image running.
When enabling MySQL database (ENV DB=mysql) with healthchecks options the container crash at startup.

Host is Centos 7 Docker X86_64.

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 10-adduser: executing... 
-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \ 
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/
Brought to you by linuxserver.io
We gratefully accept donations at:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------
User uid:    1001
User gid:    1001
-------------------------------------
[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing... 
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 15, in <module>
    import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3.6/site-packages/django/core/management/__init__.py", line 357, in execute
    django.setup()
  File "/usr/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/lib/python3.6/site-packages/django/apps/registry.py", line 112, in populate
    app_config.import_models()
  File "/usr/lib/python3.6/site-packages/django/apps/config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/usr/lib/python3.6/site-packages/django/contrib/auth/models.py", line 2, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/usr/lib/python3.6/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
    class AbstractBaseUser(models.Model):
  File "/usr/lib/python3.6/site-packages/django/db/models/base.py", line 101, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/usr/lib/python3.6/site-packages/django/db/models/base.py", line 305, in add_to_class
    value.contribute_to_class(cls, name)
  File "/usr/lib/python3.6/site-packages/django/db/models/options.py", line 203, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/usr/lib/python3.6/site-packages/django/db/__init__.py", line 33, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/usr/lib/python3.6/site-packages/django/db/utils.py", line 202, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/usr/lib/python3.6/site-packages/django/db/utils.py", line 110, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 20, in <module>
    ) from err
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
[cont-init.d] 30-config: exited 1.
[cont-init.d] done.
[services.d] starting services
[uWSGI] getting INI configuration from uwsgi.ini
[uwsgi-static] added mapping for /static => static-collected
*** Starting uWSGI 2.0.17 (64bit) on [Wed Feb 13 16:56:24 2019] ***
compiled with version: 6.4.0 on 01 May 2018 17:28:25
os: Linux-3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018
nodename: 251f09f44363
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 4
current working directory: /app/healthchecks
detected binary path: /usr/sbin/uwsgi
your memory page size is 4096 bytes
detected max file descriptor number: 65536
[services.d] done.
building mime-types dictionary from file /etc/mime.types...1183 entry found
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.6.6 (default, Aug 24 2018, 05:04:18)  [GCC 6.4.0]
Python main interpreter initialized at 0x55b556c724c0
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 145840 bytes (142 KB) for 1 cores
*** Operational MODE: single process ***
running "exec:/usr/bin/python3 ./manage.py collectstatic --noinput" (pre app)...
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 15, in <module>
    import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3.6/site-packages/django/core/management/__init__.py", line 357, in execute
    django.setup()
  File "/usr/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/lib/python3.6/site-packages/django/apps/registry.py", line 112, in populate
    app_config.import_models()
  File "/usr/lib/python3.6/site-packages/django/apps/config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/usr/lib/python3.6/site-packages/django/contrib/auth/models.py", line 2, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/usr/lib/python3.6/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
    class AbstractBaseUser(models.Model):
  File "/usr/lib/python3.6/site-packages/django/db/models/base.py", line 101, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/usr/lib/python3.6/site-packages/django/db/models/base.py", line 305, in add_to_class
    value.contribute_to_class(cls, name)
  File "/usr/lib/python3.6/site-packages/django/db/models/options.py", line 203, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/usr/lib/python3.6/site-packages/django/db/__init__.py", line 33, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/usr/lib/python3.6/site-packages/django/db/utils.py", line 202, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/usr/lib/python3.6/site-packages/django/db/utils.py", line 110, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 20, in <module>
    ) from err
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
command "/usr/bin/python3 ./manage.py collectstatic --noinput" exited with non-zero code: 1
Wed Feb 13 16:56:26 2019 - FATAL hook failed, destroying instance
SIGINT/SIGQUIT received...killing workers...
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 15, in <module>
    import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "./hc/wsgi.py", line 16, in <module>
    application = get_wsgi_application()
  File "/usr/lib/python3.6/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
    django.setup(set_prefix=False)
  File "/usr/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/lib/python3.6/site-packages/django/apps/registry.py", line 112, in populate
    app_config.import_models()
  File "/usr/lib/python3.6/site-packages/django/apps/config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/lib/python3.6/site-packages/django/contrib/auth/models.py", line 2, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/usr/lib/python3.6/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
    class AbstractBaseUser(models.Model):
  File "/usr/lib/python3.6/site-packages/django/db/models/base.py", line 101, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/usr/lib/python3.6/site-packages/django/db/models/base.py", line 305, in add_to_class
    value.contribute_to_class(cls, name)
  File "/usr/lib/python3.6/site-packages/django/db/models/options.py", line 203, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/usr/lib/python3.6/site-packages/django/db/__init__.py", line 33, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/usr/lib/python3.6/site-packages/django/db/utils.py", line 202, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/usr/lib/python3.6/site-packages/django/db/utils.py", line 110, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 20, in <module>
    ) from err
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 224)
spawned uWSGI worker 1 (pid: 241, cores: 1)
[uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py sendalerts" (uid: 1001 gid: 1001)
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 15, in <module>
    import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3.6/site-packages/django/core/management/__init__.py", line 357, in execute
    django.setup()
  File "/usr/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/lib/python3.6/site-packages/django/apps/registry.py", line 112, in populate
    app_config.import_models()
  File "/usr/lib/python3.6/site-packages/django/apps/config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/usr/lib/python3.6/site-packages/django/contrib/auth/models.py", line 2, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/usr/lib/python3.6/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
    class AbstractBaseUser(models.Model):
  File "/usr/lib/python3.6/site-packages/django/db/models/base.py", line 101, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/usr/lib/python3.6/site-packages/django/db/models/base.py", line 305, in add_to_class
    value.contribute_to_class(cls, name)
  File "/usr/lib/python3.6/site-packages/django/db/models/options.py", line 203, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/usr/lib/python3.6/site-packages/django/db/__init__.py", line 33, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/usr/lib/python3.6/site-packages/django/db/utils.py", line 202, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/usr/lib/python3.6/site-packages/django/db/utils.py", line 110, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 20, in <module>
    ) from err
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
daemon "/usr/bin/python3 ./manage.py sendalerts" (pid: 242) annihilated

To fix install mysqlclient "pip install mysqlclient --user" in the dockerfile as done in: https://github.com/galexrt/docker-healthchecks/blob/master/Dockerfile

As suggestion please document all env variables or reference official documentation from https://github.com/healthchecks/healthchecks

I did not check if a similar issue arises for PostgresSQL

Cheers,
Jacq

Thanks, team linuxserver.io

Unable to add HTTP_COOKIE due to uwsgi buffer size

linuxserver.io


Expected Behavior

Checks can be created normally.

Current Behavior

When trying to add a check the browser returns ERR_EMPTY RESPONSE and the log warns about buffer size. I've tried increasing it repeatedly in /etc/uwsgi/uwsgi.ini with no effects.

Steps to Reproduce

  1. Create the docker container with the default settings
  2. Access the webui
  3. Create a check

Environment

OS: Raspbian Buster / Docker version 20.10.7, build f0df350
CPU architecture: arm32
How docker service was installed: Official docker repo

Command used to create docker container (run/create/compose/screenshot)

docker run -d
--name=healthchecks
-e PUID=1000
-e PGID=1000
-e SITE_ROOT=<SITE_ROOT>
-e SITE_NAME=<SITE_NAME>
-e DEFAULT_FROM_EMAIL=<DEFAULT_FROM_EMAIL>
-e EMAIL_HOST=<EMAIL_HOST>
-e EMAIL_PORT=<EMAIL_PORT>
-e EMAIL_HOST_USER=<EMAIL_HOST_USER>
-e EMAIL_HOST_PASSWORD=<EMAIL_HOST_PASSWORD>
-e EMAIL_USE_TLS=
-e ALLOWED_HOSTS=<ALLOWED_HOSTS>
-e SUPERUSER_EMAIL=<SUPERUSER_EMAIL>
-e SUPERUSER_PASSWORD=<SUPERUSER_PASSWORD>
-e REGENERATE_SETTINGS=True/False
-p 8000:8000
-v :/config
--restart unless-stopped
ghcr.io/linuxserver/healthchecks

Docker logs

ALLOWED_HOSTS env var is written twice and setting multiple hosts isn't possible

linuxserver.io

  1. ALLOWED_HOSTS get written twice into the config file!
    1. In 30-config#L17, it is added to the variables which get written to the config file in the for loop
    2. In 30-config#L39, it gets written an additional time encapsulated in "[ ... ]".
  2. Setting additional hosts, as documented doesn't work because the string gets encapsulated in at least "...", preventing interpretation as an array.

Relevant line from docker-compose.yml:

      - ALLOWED_HOSTS=["healthchecks.example.com","healthchecks.example.xyz"]

Relevant parts from generated config:

...
ALLOWED_HOSTS = "["healthchecks.example.com","healthchecks.example.xyz"]"
...
ALLOWED_HOSTS = ["["healthchecks.example.com","healthchecks.example.xyz"]"]
...

Expected Behavior

Generate a valid config

  • containing ALLOWED_HOSTS only once
  • and allowing multiple hosts in ALLOWED_HOSTS or updated documentation to allow only one.

Current Behavior

Invalid config as shown above.

Steps to Reproduce

  1. Set ALLOWED_HOSTS to multiple hostnames. E.g.: ["test.com","test2.com"]
  2. Start container
  3. Watch errors flying by

Environment

**OS:**Ubuntu 20.04
CPU architecture: x86_64
How docker service was installed: from the official docker repo

Command used to create docker container (run/create/compose/screenshot)

see above :)

Docker logs

healthchecks    | *** Operational MODE: single process ***
healthchecks    | running "exec:/usr/bin/python3 ./manage.py collectstatic --noinput" (pre app)...
healthchecks    | Traceback (most recent call last):
healthchecks    |   File "/app/healthchecks/./manage.py", line 10, in <module>
healthchecks    |     execute_from_command_line(sys.argv)
healthchecks    |   File "/usr/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
healthchecks    |     utility.execute()
healthchecks    |   File "/usr/lib/python3.9/site-packages/django/core/management/__init__.py", line 363, in execute
healthchecks    |     settings.INSTALLED_APPS
healthchecks    |   File "/usr/lib/python3.9/site-packages/django/conf/__init__.py", line 82, in __getattr__
healthchecks    |     self._setup(name)
healthchecks    |   File "/usr/lib/python3.9/site-packages/django/conf/__init__.py", line 69, in _setup
healthchecks    |     self._wrapped = Settings(settings_module)
healthchecks    |   File "/usr/lib/python3.9/site-packages/django/conf/__init__.py", line 170, in __init__
healthchecks    |     mod = importlib.import_module(self.SETTINGS_MODULE)
healthchecks    |   File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
healthchecks    |     return _bootstrap._gcd_import(name[level:], package, level)
healthchecks    |   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
healthchecks    |   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
healthchecks    |   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
healthchecks    |   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
healthchecks    |   File "<frozen importlib._bootstrap_external>", line 855, in exec_module
healthchecks    |   File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
healthchecks    |   File "/app/healthchecks/hc/settings.py", line 279, in <module>
healthchecks    |     from .local_settings import *
healthchecks    |   File "/app/healthchecks/hc/local_settings.py", line 4
healthchecks    |     ALLOWED_HOSTS = "["healthchecks.example.com","healthchecks.example.xyz"]""
healthchecks    |                        ^
healthchecks    | SyntaxError: invalid syntax

Debug mode always enabled

Using the current image, there is no way to disable debug mode. The environment variable DEBUG is set to False. local_settings.py also has DEBUG set to False.

The frontend keeps saying Running in debug mode, do not use in production.

I see no other options to disable debug?

I'm deploying with Ansible, here is the code:

- name: Ensure Cronhealth container is running
  docker_container:
    name: cronhealth
    image: linuxserver/healthchecks
    state: started
    restart_policy: unless-stopped
    ports:
      - "127.0.0.1:8000:8000"
    networks:
      - name: "{{ traefik_network }}"
    volumes:
      - /home/docker/cronhealth/data:/config
    env:
      PUID: "1000"
      PGID: "1000"
      DEBUG: "False"
      SITE_NAME: "Cron health"
      SITE_ROOT: "xxx"
      EMAIL_HOST: "xxx"
      EMAIL_PORT: "587"
      EMAIL_USE_TLS: "True"
      EMAIL_HOST_USER: "xxx"
      EMAIL_HOST_PASSWORD: "xxx"
      DEFAULT_FROM_EMAIL: "xxx"
      ALLOWED_HOSTS: "cronhealth.xxx"
    purge_networks: yes
    labels:
      traefik.enable: "true"
      traefik.backend: "cronhealth"
      traefik.frontend.rule: "Host:xxx"
      traefik.port: "8000"`

Can't use SMTP server with no username/password

If I set these env vars:

      - [email protected]
      - EMAIL_HOST=10.7.1.2
      - EMAIL_PORT=25
      - EMAIL_USE_TLS=False

and try to use email notifications via an SMTP server that does not require authentication, it fails with this exception:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner
    self.run()
  File "/app/healthchecks/./hc/lib/emails.py", line 28, in run
    msg.send()
  File "/usr/lib/python3.9/site-packages/django/core/mail/message.py", line 284, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/usr/lib/python3.9/site-packages/django/core/mail/backends/smtp.py", line 102, in send_messages
    new_conn_created = self.open()
  File "/usr/lib/python3.9/site-packages/django/core/mail/backends/smtp.py", line 69, in open
    self.connection.login(self.username, self.password)
  File "/usr/lib/python3.9/smtplib.py", line 711, in login
    raise SMTPNotSupportedError(
smtplib.SMTPNotSupportedError: SMTP AUTH extension not supported by server.

The issue is in these lines:

HC_CONF[EMAIL_HOST_USER]=${EMAIL_HOST_USER-username}
HC_CONF[EMAIL_HOST_PASSWORD]=${EMAIL_HOST_PASSWORD-password}

which writes username and password to local_settings.py if those env vars aren't set. (I've never seen a - parameter expansion so I think it's a typo'd :-? ).This is different from healthchecks behavior which defaults to empty strings.

I think a workaround is to explicitly set the env vars as empty strings, but I'll also submit a PR to change the defaults to empty strings so it matches upstream behavior.

Changes to environment variables are not persisted to local_settings.py file

Expected Behavior

The documentation for this image tells me to customize the image by setting environment variables (-e EMAIL_HOST=abcd, etc). I can see, on the first deployment, that these values are inserted into the local_settings.py file, which is saved to wherever I volumed the /config folder.

That's all well and good. But let's say down the line I want to change, for example, my SMTP password.

Again, taking the documentation into consideration, I'd expect that all I'd need to do is (I'm using a docker-compose file) modify the environment variable values in the compose file and run docker-compose up -d.

Current Behavior

The local_settings.py file is never updated with the latest environment variable values. The application continues to use the settings from the first deployment.

If the local_settings.py file already exists (which because it is part of the persistent directory, it should be after the first deployment), the file will not be modified during container boot-up, even if the keys in the file differ from the user provided environment variables.

This can be see from this line, which only checks if the file exists, and if yes, does nothing.

Steps to Reproduce

  1. Make a file /tmp/hc/local_settings.py with this content:
    EMAIL_HOST = "smtp.example.com"
    DEFAULT_FROM_EMAIL = "[email protected]"
    BASE_URL = "hc.example.com"
    EMAIL_USE_TLS = True
    SITE_ROOT = "https://hc.example.com"
    DEBUG = False
    EMAIL_PORT = "587"
    SITE_NAME = "Example HealthChecks"
    ALLOWED_HOSTS = "*"
    EMAIL_HOST_PASSWORD = "abcdefghijk"
    EMAIL_HOST_USER = "[email protected]"
    ALLOWED_HOSTS = ["*"]
    CSRF_TRUSTED_ORIGINS = ["hc.example.com"]
    PING_ENDPOINT = SITE_ROOT + "/ping/"
    
  2. Run the command:
docker run \
  -d \
  --name=healthchecks \
  -e PUID=1000 \
  -e PGID=1000 \
  -e SITE_ROOT="new.example.com" \
  -e SITE_NAME="New Site Name" \
  -e DEFAULT_FROM_EMAIL="[email protected]" \
  -e EMAIL_HOST="newsmtp.example.com" \
  -e EMAIL_PORT="111" \
  -e EMAIL_HOST_USER="[email protected]" \
  -e EMAIL_HOST_PASSWORD="qwerty" \
  -e EMAIL_USE_TLS="True" \
  -e ALLOWED_HOSTS="*" \
  -e SUPERUSER_EMAIL="[email protected]" \
  -e SUPERUSER_PASSWORD="super_qwerty" \
  -p 8000:8000 \
  -v /tmp/hc:/config \
  linuxserver/healthchecks
  1. Wait for the container to boot and the website to become accessible.
  2. Review the contents of the /tmp/hc/local_settings.py file. The contents should not have changed to the new values.

Environment

OS: Arch Linux
CPU architecture: x86_64
How docker service was installed: See above command example.

[Bug] Missing MySQL libraries

linuxserver.io

If you are new to Docker or this application our issue tracker is ONLY used for reporting bugs or requesting features. Please use our discord server for general support.


Expected Behavior

Healthchecks should be able to connect to a MySQL server.

Current Behavior

Healthchecks fails with the following error:

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.  
Did you install mysqlclient?

Steps to Reproduce

  1. docker run -e DB=mysql linuxserver/healthchecks will make Healthchecks/Django try to import the MySQLdb library on startup

Environment

OS: MacOS
CPU architecture: x86_64
How docker service was installed: Official installer

Proposed fix

Readd the installation of mariadb-connector-c in the runtime packages step and installation of mysqlclient with pip

Docker logs

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 01-envfile: executing... 
[cont-init.d] 01-envfile: exited 0.
[cont-init.d] 10-adduser: executing... 
usermod: no changes

-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \ 
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/


Brought to you by linuxserver.io
We gratefully accept donations at:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    911
User gid:    911
-------------------------------------

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing... 
/var/run/s6/etc/cont-init.d/30-config: line 30: https://healthchecks.example.com/: No such file or directory
/var/run/s6/etc/cont-init.d/30-config: line 30: =: command not found
Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 16, in <module>
    import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3.7/site-packages/django/core/management/__init__.py", line 377, in execute
    django.setup()
  File "/usr/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/usr/lib/python3.7/site-packages/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/usr/lib/python3.7/site-packages/django/contrib/auth/models.py", line 2, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/usr/lib/python3.7/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
    class AbstractBaseUser(models.Model):
  File "/usr/lib/python3.7/site-packages/django/db/models/base.py", line 121, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/usr/lib/python3.7/site-packages/django/db/models/base.py", line 325, in add_to_class
    value.contribute_to_class(cls, name)
  File "/usr/lib/python3.7/site-packages/django/db/models/options.py", line 208, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/usr/lib/python3.7/site-packages/django/db/__init__.py", line 28, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/usr/lib/python3.7/site-packages/django/db/utils.py", line 207, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/usr/lib/python3.7/site-packages/django/db/utils.py", line 111, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 21, in <module>
    ) from err
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?

Env var not getting regenerated properly

linuxserver.io


Expected Behavior

Environment variables should get correctly regenerated if REGENERATE_SETTINGS=True

Current Behavior

The env var EMAIL_HOST_PASSWORD is not getting regenerated properly:

EMAIL_HOST_PASSWORD = "xxxxxEMAIL_HOST_PASSWORD = "xxxxxxxxxxxxxxxxx"

Steps to Reproduce

  1. docker-compose up -d
  2. docker-compose down
  3. docker-compose up -d with REGENERATE_SETTINGS=True
  4. docker logs -f <container_name>

Environment

OS: Manjaro Linux
CPU architecture: x86_64
How docker service was installed: from the distro repo

Command used to create docker container (run/create/compose/screenshot)

docker-compose up -d

Docker logs

unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 313)
spawned uWSGI worker 1 (pid: 329, cores: 1)
[uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py sendalerts" (uid: 1000 gid: 1000)
Traceback (most recent call last):
  File "/app/healthchecks/./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3.9/site-packages/django/core/management/__init__.py", line 363, in execute
    settings.INSTALLED_APPS
  File "/usr/lib/python3.9/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/usr/lib/python3.9/site-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/lib/python3.9/site-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 855, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/app/healthchecks/hc/settings.py", line 279, in <module>
    from .local_settings import *
  File "/app/healthchecks/hc/local_settings.py", line 6
    EMAIL_HOST_PASSWORD = "xxxxxEMAIL_HOST_PASSWORD = "xxxxxxxxxxxxxxxxx"
                                                       ^
SyntaxError: invalid syntax
daemon "/usr/bin/python3 ./manage.py sendalerts" (pid: 330) annihilated

Unable to run under Raspberry Pi 2. s6-applyuidgid: fatal error.

Unable to run container under Raspberry Pi2. Logs shows the following issue:
s6-applyuidgid: fatal: unable to exec /usr/sbin/uwsgi: No such file or directory

The same config/docker compose file working fine on Synology NAS(Intel).

Thanks.

Extended log:

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing...
Operations to perform:
Apply all migrations: accounts, admin, api, auth, contenttypes, payments, sessions
Running migrations:
No migrations to apply.
[cont-init.d] 30-config: exited 0.
[cont-init.d] done.
[services.d] starting services
s6-applyuidgid: fatal: unable to exec /usr/sbin/uwsgi: No such file or directory
[services.d] done.
s6-applyuidgid: fatal: unable to exec /usr/sbin/uwsgi: No such file or directory
s6-applyuidgid: fatal: unable to exec /usr/sbin/uwsgi: No such file or directory

Docker-compose file:

version: "3.6"
services:
HealthChecks:
image: linuxserver/healthchecks
container_name: HealthChecks
network_mode: "bridge"
restart: always
environment:
- PUID=1000
- PGID=1000
- DEBUG=False
- SITE_ROOT=https://dsfsdfsdfs
- SITE_NAME=Server's HealthChecks
- DEFAULT_FROM_EMAIL=sdfsdfsdf
- EMAIL_HOST=smtp.gmail.com
- EMAIL_PORT=587
- EMAIL_HOST_USER=sdfsdfsdfsdf
- EMAIL_HOST_PASSWORD=sdfsdfsdfsdf
- EMAIL_USE_TLS=True
- ALLOWED_HOSTS=sdfsdfsdf
- PUSHOVER_API_TOKEN=sdfsdfsdfsdf
- PUSHOVER_SUBSCRIPTION_URL=sdfsdfdsfsdfsdf
volumes:
- /Dockers/HealthChecks:/config
ports:
- 8020:8000
#mem_limit: 4096m

[BUG] Wrong documentation for CSRF_TRUSTED_ORIGINS

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

From the README

## Note on `CSRF_TRUSTED_ORIGINS`

On first run (or any startup where `REGENERATE_SETTINGS=true`) we will set `CSRF_TRUSTED_ORIGINS` to match the value of `SITE_ROOT`. If you need different/additional origins, you will need to edit `/config/local_settings.py` and add them yourself. Note that setting `REGENERATE_SETTINGS=true` will overwrite any changes on startup.

Expected Behavior

However, the behaviour has changed since this commit bd0cb9e

Please update the readme docs with an example that CSRF_TRUSTED_ORIGINS has to be manually set, and that it takes in only a str and not a list (different behaviour from django's CSRF_TRUSTED_ORIGINS)

Steps To Reproduce

Works

SITE_ROOT=https://my-healthchecks-app.abc.com
CSRF_TRUSTED_ORIGINS=https://my-healthchecks-app.abc.com

Does not work

SITE_ROOT=https://my-healthchecks-app.abc.com
CSRF_TRUSTED_ORIGINS=["https://my-healthchecks-app.abc.com"]
SITE_ROOT=https://my-healthchecks-app.abc.com
# creates container with CSRF_TRUSTED_ORIGINS=[]

Environment

No response

CPU architecture

x86-64

Docker creation

version: "3"
  web:
    image: linuxserver/healthchecks:amd64-version-v3.0.1
    environment:
      - SITE_ROOT=https://my-healthchecks-app.abc.com
      - SITE_NAME=Healthchecks
      - DEBUG=True
      - ALLOWED_HOSTS=["localhost","my-healthchecks-app.abc.com"]
      - [email protected]
      - REGENERATE_SETTINGS=True
      - [email protected]
      - SUPERUSER_PASSWORD=somepass
      - EMAIL_USE_VERIFICATION=False
      - REGISTRATION_OPEN=False
      - REMOTE_USER_HEADER=HTTP_X_EMAIL
      - CSRF_TRUSTED_ORIGINS=["https://my-healthchecks-app.abc.com"]
    ports:
      - 8000:8000

Container logs

SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/app/healthchecks/manage.py", line 17, in <module>
    raise e
  File "/app/healthchecks/manage.py", line 13, in <module>
    execute_from_command_line(sys.argv)
  File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/lsiopy/lib/python3.11/site-packages/django/core/management/__init__.py", line 382, in execute
    settings.INSTALLED_APPS
  File "/lsiopy/lib/python3.11/site-packages/django/conf/__init__.py", line 102, in __getattr__
    self._setup(name)
  File "/lsiopy/lib/python3.11/site-packages/django/conf/__init__.py", line 89, in _setup
    self._wrapped = Settings(settings_module)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/lsiopy/lib/python3.11/site-packages/django/conf/__init__.py", line 217, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/app/healthchecks/hc/settings.py", line 338, in <module>
    from .local_settings import *  # noqa: F403
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/healthchecks/hc/local_settings.py", line 9
    CSRF_TRUSTED_ORIGINS = ["["https://my-healthchecks-app.abc.com"]"

[HELP] App served from subdirectory (ex https://domain.tld/hc)

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

I have not been able to set up the docker image to work on a subdirectory of a given FQDN. The intented goal is to have several instances of Healthchecks running under the same FQDN like:

I feel like it's related to Healthchecks directly (the way Django is set up) but I might be missing something, hence the question here.
Has anybody succeeded ?

I am running it behind a Traefik and can provide any configurations needed.

Thanks a lot.

Expected Behavior

No response

Steps To Reproduce

Tried setting FORCE_SCRIPT_NAME = "/xxxx" in the local_settings.py file without success.

Environment

- OS: Rocky Linux 9.1
- Docker: installed from Docker repo, latest version (Docker version 23.0.4, build f480fb1)
- Using traefik, configured correctly for plenty other services

CPU architecture

x86-64

Docker creation

version: "3"
name: ${APP_NAME}

networks:
  traefik:
    external: true

services:
  app:
    image: docker.io/linuxserver/healthchecks:v2.8.1-ls166
    restart: unless-stopped
    logging:
      options:
        max-size: 10m
        max-file: 3
    env_file:
      - .env
    volumes:
      - ${APP_VOLUMES}/config:/config
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.${APP_NAME}-router.entrypoints=https"
      - "traefik.http.routers.${APP_NAME}-router.rule=Host(`${APP_FQDN}`) && Path(`/${APP_NAME}`)"
      - "traefik.http.services.${APP_NAME}-service.loadbalancer.server.port=8000"

...


### Container logs

```bash
No error or warning in the container logs

E-mails silently fail to send, enabling blocking results in 504

linuxserver.io

I'm running in docker and no matter what configuration I try e-mails simply silently fail to send. I tried BLOCKING_EMAILS which resulted in the page eventually timing out when trying to send an e-mail.

Nothing appears in the logs in any case.

I've tried Mailgun, Gmail and Sendmail, all have the same result. The services have no record of receiving an e-mail from the app.

Would appreciate any help! This app looks exactly like what I want, but e-mails really need to work.

My docker-compose:

version: "2"
services:
healthchecks:
image: linuxserver/healthchecks
container_name: healthchecks
environment:
- PUID=1003
- PGID=1001
- SITE_ROOT=https://health.skyraker.ca
- SITE_NAME=Skyraker Health Check
- DEFAULT_FROM_EMAIL=
- EMAIL_HOST=smtp.mailgun.org
- EMAIL_PORT=465
- EMAIL_HOST_USER=
- EMAIL_HOST_PASSWORD=
- EMAIL_USE_TLS=True
- REGISTRATION_OPEN=False
- DEBUG=True
volumes:
- /home/ben/healthchecks:/config
ports:
- 13005:8000
restart: unless-stopped

And my local_settings.py:

EMAIL_PORT = "25" //Experimenting with other ports
EMAIL_HOST = "smtp.mailgun.org"
EMAIL_USE_TLS = "False" // Experimenting with configurations
EMAIL_HOST_USER = ""
SITE_ROOT = "https://health.skyraker.ca"
SITE_NAME = "Skyraker Health Check"
DEBUG = "True"
EMAIL_HOST_PASSWORD = ""
DEFAULT_FROM_EMAIL = ""
BLOCKING_EMAILS = "True" // Results in eventually getting a 504

Host: Linux skyraker.ca 4.15.0-52-generic #56-Ubuntu SMP Tue Jun 4 22:49:08 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "./hc/lib/emails.py", line 23, in run
msg.send()
File "/usr/lib/python3.6/site-packages/django/core/mail/message.py", line 291, in send
return self.get_connection(fail_silently).send_messages([self])
File "/usr/lib/python3.6/site-packages/django/core/mail/backends/smtp.py", line 103, in send_messages
new_conn_created = self.open()
File "/usr/lib/python3.6/site-packages/django/core/mail/backends/smtp.py", line 63, in open
self.connection = self.connection_class(self.host, self.port, **connection_params)
File "/usr/lib/python3.6/smtplib.py", line 251, in init
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.6/smtplib.py", line 338, in connect
(code, msg) = self.getreply()
File "/usr/lib/python3.6/smtplib.py", line 394, in getreply
raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed

No

Thanks, team linuxserver.io

Healthchecks v1.22.0 introduces Whitenoise and so web interface won't start with debug=False

linuxserver.io


Expected Behavior

Web interface starts up fine with debug=False

Current Behavior

Server Error (500) is shown on the main page.

The issue is related to healthchecks/healthchecks#548 and healthchecks/healthchecks@e642799

Steps to Reproduce

  1. Start the latest docker image
  2. Visit the web interface
  3. White page with black error text is shown: Server Error (500)

Environment

OS: CentOS Stream
CPU architecture: x86_64
How docker service was installed: Official, unrelated to the issue

Image: https://github.com/linuxserver/docker-healthchecks/pkgs/container/healthchecks/6262292

Command used to create docker container (run/create/compose/screenshot)

Kubernetes deployment with debug env var set to False

Docker logs

...
*** Operational MODE: single process ***
running "exec:/usr/bin/python3 ./manage.py collectstatic --noinput" (pre app)...
Traceback (most recent call last):
  File "/app/healthchecks/./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/python3.9/site-packages/django/core/management/__init__.py", line
419, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3.9/site-packages/django/core/management/__init__.py", line
413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python3.9/site-packages/django/core/management/base.py", line 354,
 in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/lib/python3.9/site-packages/django/core/management/base.py", line 398,
 in execute
    output = self.handle(*args, **options)
  File "/usr/lib/python3.9/site-packages/django/contrib/staticfiles/management/comm
ands/collectstatic.py", line 187, in handle
    collected = self.collect()
  File "/usr/lib/python3.9/site-packages/django/contrib/staticfiles/management/comm
ands/collectstatic.py", line 114, in collect
    handler(path, prefixed_path, storage)
  File "/usr/lib/python3.9/site-packages/django/contrib/staticfiles/management/comm
ands/collectstatic.py", line 347, in copy_file
    with source_storage.open(path) as source_file:
  File "/usr/lib/python3.9/site-packages/django/core/files/storage.py", line 38, in
 open
    return self._open(name, mode)
  File "/usr/lib/python3.9/site-packages/django/core/files/storage.py", line 238, i
n _open
    return File(open(self.path(name), mode))
FileNotFoundError: [Errno 2] No such file or directory: '/app/healthchecks/static/i
mg/[email protected]'
command "/usr/bin/python3 ./manage.py collectstatic --noinput" exited with non-zero
 code: 1
Sat Aug  7 18:42:50 2021 - FATAL hook failed, destroying instance
SIGINT/SIGQUIT received...killing workers...
WSGI app 0 (mountpoint='') ready in 5 seconds on interpreter 0x7ff112869bf0 pid: 31
4 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 314)
spawned uWSGI worker 1 (pid: 330, cores: 1)
[uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py sendalerts" (uid: 1100 gid:
1100)
...

Pings are received fine, just the web interface is broken due to the new static file collection fails. I don't have a custom logo set up and run with debug=False (prod mode). Please adjust the image to support the new static file serving lib, Whitenoise, when running in prod mode.

Email Reports not working, because sendreports is not started

linuxserver.io


Expected Behavior

Reports should be sent periodically if activated

Current Behavior

Reports not send. See
healthchecks/healthchecks#706 (comment)

Where a healthchecks-dev confirms the issue with the linuxserver-container

Steps to Reproduce

See link above

Environment

OS:
CPU architecture: x86_64/arm32/arm64
How docker service was installed:

Command used to create docker container (run/create/compose/screenshot)

Docker logs

Or is this container dead? Nobody seems to maintain it anymore.

[BUG] CSRF_TRUSTED_ORIGINS

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

Does anyone have a working compose for this tool? I've been trying to get it running for a few hours and there is no way to do so.

https://pastebin.com/kRPbbXTf

Expected Behavior

Working container

Steps To Reproduce

Starting container.

Environment

- OS: Ubuntu Server 22 VM
- How docker service was installed: standard instalation via cli.

CPU architecture

x86-64

Docker creation

version: "2.1"
services:
  healthchecks:
    image: lscr.io/linuxserver/healthchecks:latest
    container_name: healthchecks
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Amsterdam
      - SITE_ROOT=https://healthchecks.my.domain/
      - SITE_NAME=HealthChecks
      
      - [email protected]
      - EMAIL_HOST=smtp.gmail.com
      - EMAIL_PORT=587 # 465 or 587
      - [email protected]
      - EMAIL_HOST_PASSWORD=pass
      - EMAIL_USE_TLS=True # True or False
      - [email protected]
      - SUPERUSER_PASSWORD=pass
      
      #- REGENERATE_SETTINGS= #optional
      #- ALLOWED_HOSTS= #optional
      - APPRISE_ENABLED=True # True or False
      - DEBUG=False #optional
      #- INTEGRATIONS_ALLOW_PRIVATE_IPS= #optional
      #- PING_EMAIL_DOMAIN= #optional
      #- SECRET_KEY= #optional
      #- SITE_LOGO_URL= #optional
    volumes:
      - /docker/healthchecks:/config
    ports:
      - 2626:8000
      - 2525:2525 #optional
    restart: unless-stopped
    
    networks:
      - traefik_default
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.healthchecks.entrypoints=web, websecure"
      - "traefik.http.routers.healthchecks.tls=true"
      - "traefik.http.routers.healthchecks.tls.certresolver=production"
      - "traefik.http.routers.healthchecks.rule=Host(`healthchecks.my.domain`)"


networks:
  traefik_default:
    external:
      name: traefik_default

Container logs

[migrations] started
[migrations] no migrations found
───────────────────────────────────────
      ██╗     ███████╗██╗ ██████╗ 
      ██║     ██╔════╝██║██╔═══██╗
      ██║     ███████╗██║██║   ██║
      ██║     ╚════██║██║██║   ██║
      ███████╗███████║██║╚██████╔╝
      ╚══════╝╚══════╝╚═╝ ╚═════╝ 
   Brought to you by linuxserver.io
───────────────────────────────────────
To support LSIO projects visit:
https://www.linuxserver.io/donate/
───────────────────────────────────────
GID/UID
───────────────────────────────────────
User UID:    1000
User GID:    1000
───────────────────────────────────────
SystemCheckError: System check identified some issues:
ERRORS:
?: (4_0.E001) As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme (usually http:// or https://) but found . See the release notes for details.
SystemCheckError: System check identified some issues:
ERRORS:
?: (4_0.E001) As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme (usually http:// or https://) but found . See the release notes for details.
Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/lib/python3.10/site-packages/django/db/backends/sqlite3/base.py", line 357, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: auth_user
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/app/healthchecks/manage.py", line 17, in <module>
    raise e
  File "/app/healthchecks/manage.py", line 13, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3.10/site-packages/django/core/management/__init__.py", line 440, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python3.10/site-packages/django/core/management/base.py", line 402, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/lib/python3.10/site-packages/django/core/management/base.py", line 448, in execute
    output = self.handle(*args, **options)
  File "/usr/lib/python3.10/site-packages/django/core/management/commands/shell.py", line 127, in handle
    exec(sys.stdin.read(), globals())
  File "<string>", line 7, in <module>
  File "/usr/lib/python3.10/site-packages/django/db/models/query.py", line 621, in count
    return self.query.get_count(using=self.db)
  File "/usr/lib/python3.10/site-packages/django/db/models/sql/query.py", line 559, in get_count
    return obj.get_aggregation(using, ["__count"])["__count"]
  File "/usr/lib/python3.10/site-packages/django/db/models/sql/query.py", line 544, in get_aggregation
    result = compiler.execute_sql(SINGLE)
  File "/usr/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1398, in execute_sql
    cursor.execute(sql, params)
  File "/usr/lib/python3.10/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
  File "/usr/lib/python3.10/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/lib/python3.10/site-packages/django/db/backends/utils.py", line 84, in _execute
    with self.db.wrap_database_errors:
  File "/usr/lib/python3.10/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/lib/python3.10/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/lib/python3.10/site-packages/django/db/backends/sqlite3/base.py", line 357, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: auth_user
s6-rc: warning: unable to start service init-healthchecks-config: command exited 1

Debug mode always enabled

linuxserver.io


Expected Behavior

Debug mode is disabled by default.

Current Behavior

Debug currently enabled from start and requires manual disabling by adding DEBUG=False to local_settings.py.

Previous issue #18

Steps to Reproduce

  1. Create container with Docker Compose.
  2. Run container.

Relevant part of Docker Compose:

healthchecks:
image: linuxserver/healthchecks:2.0.1
container_name: healthchecks
volumes:
- ./healthchecks:/config
environment:
- SITE_ROOT=https://domain.com:8000
- SUPERUSER_EMAIL=email
- SUPERUSER_PASSWORD=password
ports:
- 8000:8000
restart: unless-stopped

Environment

OS: Fedora Server
CPU architecture: x64
How docker service was installed:

Docker repo

Command used to create docker container (run/create/compose/screenshot)

docker-compose up -d

Docker logs

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing...
Operations to perform:
Apply all migrations: accounts, admin, api, auth, contenttypes, payments, sessions
Running migrations:
No migrations to apply.
Superuser creation skipped. Already exists.
[cont-init.d] 30-config: exited 0.
[cont-init.d] 90-custom-folders: executing...
[cont-init.d] 90-custom-folders: exited 0.
[cont-init.d] 99-custom-files: executing...
[custom-init] no custom files found exiting...
[cont-init.d] 99-custom-files: exited 0.
[cont-init.d] done.
[services.d] starting services
[uWSGI] getting INI configuration from uwsgi.ini
[uwsgi-static] added mapping for /static => static-collected
*** Starting uWSGI 2.0.19.1 (64bit) on [Thu Apr 28 19:50:47 2022] ***
compiled with version: 10.3.1 20210424 on 05 April 2021 18:18:03
os: Linux-4.18.0-348.7.1.el8_5.x86_64 #1 SMP Wed Dec 22 13:25:12 UTC 2021
nodename: 451eb25b67ca
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /app/healthchecks
detected binary path: /usr/sbin/uwsgi
your memory page size is 4096 bytes
detected max file descriptor number: 1048576
building mime-types dictionary from file /etc/mime.types...1311 entry found
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.9.5 (default, Nov 24 2021, 21:19:13) [GCC 10.3.1 20210424]
Python main interpreter initialized at 0x7f4a15e57bf0
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 203184 bytes (198 KB) for 1 cores
*** Operational MODE: single process ***
running "exec:/usr/bin/python3 ./manage.py collectstatic --noinput" (pre app)...
[services.d] done.

0 static files copied to '/app/healthchecks/static-collected', 314 unmodified.
running "exec:/usr/bin/python3 ./manage.py compress" (pre app)...
CommandError: Compressor is disabled. Set the COMPRESS_ENABLED setting or use --force to override.
command "/usr/bin/python3 ./manage.py compress" exited with non-zero code: 1
Thu Apr 28 19:50:48 2022 - FATAL hook failed, destroying instance
SIGINT/SIGQUIT received...killing workers...
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x7f4a15e57bf0 pid: 299 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 299)
spawned uWSGI worker 1 (pid: 316, cores: 1)

CSRF issue

Linked to upstream issue #239.

Forbidden (403)
CSRF verification failed. Request aborted.

Reason given for failure:

    Referer checking failed - https://domain.name.tld/accounts/login/ does not match any trusted origins.

Add documenation for hosting healthchecks on subdirectory

linuxserver.io

If you are new to Docker or this application our issue tracker is ONLY used for reporting bugs or requesting features. Please use our discord server for general support.


Expected Behavior

It should be possible to host this on the subdirectory of a website e.g https://example.org/hc

Current Behavior

Currently I can set up docker (or podman) to run the image and proxy it via apache/nginx to a subdirectory on the main website -- I will get the initial page but all references within it will be hooked off the root of the site.

Steps to Reproduce

  1. Run up image.
  2. Use nginx to proxy, for instance using:

upstream healthchecks { server 127.0.0.1:8080; }

and within server:
location /hc/ { proxy_headers_hash_max_size 512; proxy_headers_hash_bucket_size 64; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; add_header Front-End-Https on; proxy_pass http://healthchecks/; }
3. Access the website via http://hostname/hc
4. You'll see the issue above replicated.

Environment

OS:
Ubuntu 18.04.4 LTS
podman version 1.8.0
CPU architecture: x86_64/arm32/arm64
x86_64
How docker service was installed:

Command used to create docker container (run/create/compose/screenshot)

version: "3" services: healthchecks: image: linuxserver/healthchecks container_name: hc environment:

Docker logs

This isn't directly docker (or podman) related. This is related to this ticket here on the healthchecks repo: healthchecks/healthchecks#273 it is possible to support the same thing by setting the FORCE_SCRIPT_NAME and STATIC_URL variables as in the final reply there - it would be good to add these as documented settings (happy to do that if you will merge the request)

Any hope for a new build?

Wondering if there are any plans to update this image to include new features, like Pushover or SMS.

Thanks!

Invalid HTTP request size when running locally built docker image

linuxserver.io


Expected Behavior

When building the docker image locally using the provided command:

git clone https://github.com/linuxserver/docker-healthchecks.git
cd docker-healthchecks
docker build \
  --no-cache \
  --pull \
  -t ghcr.io/linuxserver/healthchecks:latest .

I expect the same docker-compose.yml file I use to run the image from docker hub to run the same way. My docker compose file is the following:

version: "2.1"
services:
  healthchecks:
    image: luixal/healthchecks
    container_name: healthchecks-luixal
    environment:
      - PUID=1000
      - PGID=1000
      - SITE_ROOT=http://localhost:8000
      - SITE_NAME=localhost
      - [email protected]
      - SUPERUSER_PASSWORD=9874292et56
    ports:
      - 8000:8000
    restart: unless-stopped

Current Behavior

When I run the image from docker hub, Healthchecks runs ok, but I suffer the Error 500 bug when logging in (present in issue #74 and peding merge of solution provided in PR #75 ).

I built the image locally using the branch of that PR using the provided command but, when running the local built image (with the same docker compose file) I get this error when trying to load the page on the browser:

healthchecks-luixal | invalid HTTP request size (max 4096)...skip
healthchecks-luixal | invalid HTTP request size (max 4096)...skip
...

After that, I tried building the image from the master branch in this repo, but I still get the same error.

Steps to Reproduce

  1. Clone the repo.
  2. Build the docker image.
  3. Run it with the docker-compose file provided above
  4. Access the webapp using the browser.

Environment

OS: Debian 5.10.46-4 (2021-08-03) Kernel 5.10.0-8-amd64
CPU architecture: x86_64
How docker service was installed: Official docker repo.

Command used to create docker container (run/create/compose/screenshot)

docker-compose up using the compose file provided above.

Docker logs

Creating healthchecks-luixal ... done
Attaching to healthchecks-luixal
healthchecks-luixal | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
healthchecks-luixal | [s6-init] ensuring user provided files have correct perms...exited 0.
healthchecks-luixal | [fix-attrs.d] applying ownership & permissions fixes...
healthchecks-luixal | [fix-attrs.d] done.
healthchecks-luixal | [cont-init.d] executing container initialization scripts...
healthchecks-luixal | [cont-init.d] 01-envfile: executing... 
healthchecks-luixal | [cont-init.d] 01-envfile: exited 0.
healthchecks-luixal | [cont-init.d] 10-adduser: executing... 
healthchecks-luixal | 
healthchecks-luixal | -------------------------------------
healthchecks-luixal |           _         ()
healthchecks-luixal |          | |  ___   _    __
healthchecks-luixal |          | | / __| | |  /  \ 
healthchecks-luixal |          | | \__ \ | | | () |
healthchecks-luixal |          |_| |___/ |_|  \__/
healthchecks-luixal | 
healthchecks-luixal | 
healthchecks-luixal | Brought to you by linuxserver.io
healthchecks-luixal | -------------------------------------
healthchecks-luixal | 
healthchecks-luixal | To support LSIO projects visit:
healthchecks-luixal | https://www.linuxserver.io/donate/
healthchecks-luixal | -------------------------------------
healthchecks-luixal | GID/UID
healthchecks-luixal | -------------------------------------
healthchecks-luixal | 
healthchecks-luixal | User uid:    1000
healthchecks-luixal | User gid:    1000
healthchecks-luixal | -------------------------------------
healthchecks-luixal | 
healthchecks-luixal | [cont-init.d] 10-adduser: exited 0.
healthchecks-luixal | [cont-init.d] 30-config: executing... 
healthchecks-luixal | Operations to perform:
healthchecks-luixal |   Apply all migrations: accounts, admin, api, auth, contenttypes, payments, sessions
healthchecks-luixal | Running migrations:
healthchecks-luixal |   Applying contenttypes.0001_initial... OK
healthchecks-luixal |   Applying auth.0001_initial... OK
healthchecks-luixal |   Applying accounts.0001_initial... OK
healthchecks-luixal |   Applying accounts.0002_profile_ping_log_limit... OK
healthchecks-luixal |   Applying accounts.0003_profile_token... OK
healthchecks-luixal |   Applying accounts.0004_profile_api_key... OK
healthchecks-luixal |   Applying accounts.0005_auto_20160509_0801... OK
healthchecks-luixal |   Applying accounts.0006_profile_current_team... OK
healthchecks-luixal |   Applying accounts.0007_profile_check_limit... OK
healthchecks-luixal |   Applying accounts.0008_profile_bill_to... OK
healthchecks-luixal |   Applying accounts.0009_auto_20170714_1734... OK
healthchecks-luixal |   Applying accounts.0010_profile_team_limit... OK
healthchecks-luixal |   Applying accounts.0011_profile_sort... OK
healthchecks-luixal |   Applying accounts.0012_auto_20171014_1002... OK
healthchecks-luixal |   Applying accounts.0013_remove_profile_team_access_allowed... OK
healthchecks-luixal |   Applying accounts.0014_auto_20171227_1530... OK
healthchecks-luixal |   Applying accounts.0015_auto_20181029_1858... OK
healthchecks-luixal |   Applying accounts.0016_remove_profile_bill_to... OK
healthchecks-luixal |   Applying accounts.0017_auto_20190112_1426... OK
healthchecks-luixal |   Applying accounts.0018_auto_20190112_1426... OK
healthchecks-luixal |   Applying accounts.0019_project_badge_key... OK
healthchecks-luixal |   Applying accounts.0020_auto_20190112_1950... OK
healthchecks-luixal |   Applying accounts.0021_auto_20190112_2005... OK
healthchecks-luixal |   Applying accounts.0022_auto_20190114_0857... OK
healthchecks-luixal |   Applying accounts.0023_auto_20190117_1419... OK
healthchecks-luixal |   Applying accounts.0024_auto_20190119_1540... OK
healthchecks-luixal |   Applying accounts.0025_remove_member_team... OK
healthchecks-luixal |   Applying accounts.0026_auto_20190204_2042... OK
healthchecks-luixal |   Applying accounts.0027_profile_deletion_notice_date... OK
healthchecks-luixal |   Applying accounts.0028_auto_20191119_1346... OK
healthchecks-luixal |   Applying accounts.0029_remove_profile_current_project... OK
healthchecks-luixal |   Applying accounts.0030_member_transfer_request_date... OK
healthchecks-luixal |   Applying accounts.0031_auto_20200803_1413... OK
healthchecks-luixal |   Applying accounts.0032_auto_20200819_0757... OK
healthchecks-luixal |   Applying accounts.0033_member_rw... OK
healthchecks-luixal |   Applying accounts.0034_credential... OK
healthchecks-luixal |   Applying accounts.0035_profile_reports... OK
healthchecks-luixal |   Applying accounts.0036_fill_profile_reports... OK
healthchecks-luixal |   Applying accounts.0037_profile_tz... OK
healthchecks-luixal |   Applying accounts.0038_profile_theme... OK
healthchecks-luixal |   Applying accounts.0039_remove_profile_reports_allowed... OK
healthchecks-luixal |   Applying accounts.0040_auto_20210722_1244... OK
healthchecks-luixal |   Applying accounts.0041_fill_role... OK
healthchecks-luixal |   Applying accounts.0042_remove_member_rw... OK
healthchecks-luixal |   Applying accounts.0043_add_role_manager... OK
healthchecks-luixal |   Applying accounts.0044_auto_20210730_0942... OK
healthchecks-luixal |   Applying admin.0001_initial... OK
healthchecks-luixal |   Applying admin.0002_logentry_remove_auto_add... OK
healthchecks-luixal |   Applying admin.0003_logentry_add_action_flag_choices... OK
healthchecks-luixal |   Applying api.0001_initial... OK
healthchecks-luixal |   Applying api.0002_auto_20150616_0732... OK
healthchecks-luixal |   Applying api.0003_auto_20150616_1249... OK
healthchecks-luixal |   Applying api.0004_auto_20150616_1319... OK
healthchecks-luixal |   Applying api.0005_auto_20150630_2021... OK
healthchecks-luixal |   Applying api.0006_check_grace... OK
healthchecks-luixal |   Applying api.0007_ping... OK
healthchecks-luixal |   Applying api.0008_auto_20150801_1213... OK
healthchecks-luixal |   Applying api.0009_auto_20150801_1250... OK
healthchecks-luixal |   Applying api.0010_channel... OK
healthchecks-luixal |   Applying api.0011_notification... OK
healthchecks-luixal |   Applying api.0012_auto_20150930_1922... OK
healthchecks-luixal |   Applying api.0013_auto_20151001_2029... OK
healthchecks-luixal |   Applying api.0014_auto_20151019_2039... OK
healthchecks-luixal |   Applying api.0015_auto_20151022_1008... OK
healthchecks-luixal |   Applying api.0016_auto_20151030_1107... OK
healthchecks-luixal |   Applying api.0017_auto_20151117_1032... OK
healthchecks-luixal |   Applying api.0018_remove_ping_body... OK
healthchecks-luixal |   Applying api.0019_check_tags... OK
healthchecks-luixal |   Applying api.0020_check_n_pings... OK
healthchecks-luixal |   Applying api.0021_ping_n... OK
healthchecks-luixal |   Applying api.0022_auto_20160130_2042... OK
healthchecks-luixal |   Applying api.0023_auto_20160131_1919... OK
healthchecks-luixal |   Applying api.0024_auto_20160203_2227... OK
healthchecks-luixal |   Applying api.0025_auto_20160216_1214... OK
healthchecks-luixal |   Applying api.0026_auto_20160415_1824... OK
healthchecks-luixal |   Applying api.0027_auto_20161213_1059... OK
healthchecks-luixal |   Applying api.0028_auto_20170305_1907... OK
healthchecks-luixal |   Applying api.0029_auto_20170507_1251... OK
healthchecks-luixal |   Applying api.0030_check_last_ping_body... OK
healthchecks-luixal |   Applying api.0031_auto_20170509_1320... OK
healthchecks-luixal |   Applying api.0032_auto_20170608_1158... OK
healthchecks-luixal |   Applying api.0033_auto_20170714_1715... OK
healthchecks-luixal |   Applying api.0034_auto_20171227_1530... OK
healthchecks-luixal |   Applying api.0035_auto_20171229_2008... OK
healthchecks-luixal |   Applying api.0036_auto_20180116_2243... OK
healthchecks-luixal |   Applying api.0037_auto_20180127_1215... OK
healthchecks-luixal |   Applying api.0038_auto_20180318_1306... OK
healthchecks-luixal |   Applying api.0039_remove_check_last_ping_body... OK
healthchecks-luixal |   Applying api.0040_auto_20180517_1336... OK
healthchecks-luixal |   Applying api.0041_check_desc... OK
healthchecks-luixal |   Applying api.0042_auto_20181029_1522... OK
healthchecks-luixal |   Applying api.0043_channel_name... OK
healthchecks-luixal |   Applying api.0044_auto_20181120_2004... OK
healthchecks-luixal |   Applying api.0045_flip... OK
healthchecks-luixal |   Applying api.0046_auto_20181218_1245... OK
healthchecks-luixal |   Applying api.0047_auto_20181225_2315... OK
healthchecks-luixal |   Applying api.0048_auto_20190102_0737... OK
healthchecks-luixal |   Applying api.0049_auto_20190102_0743... OK
healthchecks-luixal |   Applying api.0050_ping_kind... OK
healthchecks-luixal |   Applying api.0051_auto_20190104_0908... OK
healthchecks-luixal |   Applying api.0052_auto_20190104_1122... OK
healthchecks-luixal |   Applying api.0053_check_subject... OK
healthchecks-luixal |   Applying api.0054_auto_20190112_1427... OK
healthchecks-luixal |   Applying api.0055_auto_20190112_1427... OK
healthchecks-luixal |   Applying api.0056_auto_20190114_0857... OK
healthchecks-luixal |   Applying api.0057_auto_20190118_1319... OK
healthchecks-luixal |   Applying api.0058_auto_20190312_1716... OK
healthchecks-luixal |   Applying api.0059_auto_20190314_1744... OK
healthchecks-luixal |   Applying api.0060_tokenbucket... OK
healthchecks-luixal |   Applying api.0061_webhook_values... OK
healthchecks-luixal |   Applying api.0062_auto_20190720_1350... OK
healthchecks-luixal |   Applying api.0063_auto_20190903_0901... OK
healthchecks-luixal |   Applying api.0064_auto_20191119_1346... OK
healthchecks-luixal |   Applying api.0065_auto_20191127_1240... OK
healthchecks-luixal |   Applying api.0066_channel_last_error... OK
healthchecks-luixal |   Applying api.0067_last_error_values... OK
healthchecks-luixal |   Applying api.0068_auto_20200117_1023... OK
healthchecks-luixal |   Applying api.0069_auto_20200117_1227... OK
healthchecks-luixal |   Applying api.0070_auto_20200411_1310... OK
healthchecks-luixal |   Applying api.0071_check_manual_resume... OK
healthchecks-luixal |   Applying api.0072_auto_20200701_1007... OK
healthchecks-luixal |   Applying api.0073_auto_20200721_1000... OK
healthchecks-luixal |   Applying api.0074_auto_20200803_1411... OK
healthchecks-luixal |   Applying api.0075_auto_20200805_1004... OK
healthchecks-luixal |   Applying api.0076_auto_20201128_0951... OK
healthchecks-luixal |   Applying api.0077_auto_20210506_0755... OK
healthchecks-luixal |   Applying api.0078_sms_values... OK
healthchecks-luixal |   Applying contenttypes.0002_remove_content_type_name... OK
healthchecks-luixal |   Applying auth.0002_alter_permission_name_max_length... OK
healthchecks-luixal |   Applying auth.0003_alter_user_email_max_length... OK
healthchecks-luixal |   Applying auth.0004_alter_user_username_opts... OK
healthchecks-luixal |   Applying auth.0005_alter_user_last_login_null... OK
healthchecks-luixal |   Applying auth.0006_require_contenttypes_0002... OK
healthchecks-luixal |   Applying auth.0007_alter_validators_add_error_messages... OK
healthchecks-luixal |   Applying auth.0008_alter_user_username_max_length... OK
healthchecks-luixal |   Applying auth.0009_alter_user_last_name_max_length... OK
healthchecks-luixal |   Applying auth.0010_alter_group_name_max_length... OK
healthchecks-luixal |   Applying auth.0011_update_proxy_permissions... OK
healthchecks-luixal |   Applying auth.0012_alter_user_first_name_max_length... OK
healthchecks-luixal |   Applying payments.0001_initial... OK
healthchecks-luixal |   Applying payments.0002_subscription_plan_id... OK
healthchecks-luixal |   Applying payments.0003_subscription_address_id... OK
healthchecks-luixal |   Applying payments.0004_subscription_send_invoices... OK
healthchecks-luixal |   Applying payments.0005_subscription_plan_name... OK
healthchecks-luixal |   Applying payments.0006_subscription_invoice_email... OK
healthchecks-luixal |   Applying sessions.0001_initial... OK
healthchecks-luixal | Superuser created.
healthchecks-luixal | [cont-init.d] 30-config: exited 0.
healthchecks-luixal | [cont-init.d] 90-custom-folders: executing... 
healthchecks-luixal | [cont-init.d] 90-custom-folders: exited 0.
healthchecks-luixal | [cont-init.d] 99-custom-files: executing... 
healthchecks-luixal | [custom-init] no custom files found exiting...
healthchecks-luixal | [cont-init.d] 99-custom-files: exited 0.
healthchecks-luixal | [cont-init.d] done.
healthchecks-luixal | [services.d] starting services
healthchecks-luixal | [services.d] done.
healthchecks-luixal | [uWSGI] getting INI configuration from uwsgi.ini
healthchecks-luixal | [uwsgi-static] added mapping for /static => static-collected
healthchecks-luixal | *** Starting uWSGI 2.0.19.1 (64bit) on [Sun Sep 26 12:12:16 2021] ***
healthchecks-luixal | compiled with version: 10.3.1 20210424 on 05 April 2021 18:18:03
healthchecks-luixal | os: Linux-5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03)
healthchecks-luixal | nodename: c0d9f746395e
healthchecks-luixal | machine: x86_64
healthchecks-luixal | clock source: unix
healthchecks-luixal | pcre jit disabled
healthchecks-luixal | detected number of CPU cores: 8
healthchecks-luixal | current working directory: /app/healthchecks
healthchecks-luixal | detected binary path: /usr/sbin/uwsgi
healthchecks-luixal | your memory page size is 4096 bytes
healthchecks-luixal | detected max file descriptor number: 1048576
healthchecks-luixal | building mime-types dictionary from file /etc/mime.types...1311 entry found
healthchecks-luixal | lock engine: pthread robust mutexes
healthchecks-luixal | thunder lock: disabled (you can enable it with --thunder-lock)
healthchecks-luixal | uwsgi socket 0 bound to TCP address :8000 fd 3
healthchecks-luixal | Python version: 3.9.5 (default, May 12 2021, 20:44:22)  [GCC 10.3.1 20210424]
healthchecks-luixal | Python main interpreter initialized at 0x7f0eb7021bf0
healthchecks-luixal | python threads support enabled
healthchecks-luixal | your server socket listen backlog is limited to 100 connections
healthchecks-luixal | your mercy for graceful operations on workers is 60 seconds
healthchecks-luixal | mapped 145840 bytes (142 KB) for 1 cores
healthchecks-luixal | *** Operational MODE: single process ***
healthchecks-luixal | running "exec:/usr/bin/python3 ./manage.py collectstatic --noinput" (pre app)...
healthchecks-luixal | 
healthchecks-luixal | 317 static files copied to '/app/healthchecks/static-collected'.
healthchecks-luixal | running "exec:/usr/bin/python3 ./manage.py compress" (pre app)...
healthchecks-luixal | Compressing... done
healthchecks-luixal | Compressed 24 block(s) from 126 template(s) for 0 context(s).
healthchecks-luixal | WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x7f0eb7021bf0 pid: 281 (default app)
healthchecks-luixal | *** uWSGI is running in multiple interpreter mode ***
healthchecks-luixal | spawned uWSGI master process (pid: 281)
healthchecks-luixal | spawned uWSGI worker 1 (pid: 298, cores: 1)
healthchecks-luixal | [uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py sendalerts" (uid: 1000 gid: 1000)
healthchecks-luixal | invalid HTTP request size (max 4096)...skip
healthchecks-luixal | invalid HTTP request size (max 4096)...skip
healthchecks-luixal | invalid HTTP request size (max 4096)...skip
healthchecks-luixal | invalid HTTP request size (max 4096)...skip

[Bug] Unable to use postgres as database

Problem

In the Dockerfile, postgresql-dev is added build-dependencies and removed afterward which causes

django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: Error loading shared library libpq.so.5: No such file or directory (needed by /usr/lib/python3.6/site-packages/psycopg2/_psycopg.cpython-36m-x86_64-linux-gnu.so)

if you set the database to postgres. I will expect similar issue to mysql.

failed to start: CommandError: Compressor is disabled. Set the COMPRESS_ENABLED setting or use --force to override.

linuxserver.io


Expected Behavior

When deployed using portainer with docker-composer, it should run smoothly.

Current Behavior

The server fails to start. The log message says:

running "exec:/usr/bin/python3 ./manage.py collectstatic --noinput" (pre app)...
314 static files copied to '/app/healthchecks/static-collected'.
running "exec:/usr/bin/python3 ./manage.py compress" (pre app)...
CommandError: Compressor is disabled. Set the COMPRESS_ENABLED setting or use --force to override.
command "/usr/bin/python3 ./manage.py compress" exited with non-zero code: 1
Sat Dec 25 03:24:37 2021 - FATAL hook failed, destroying instance

Steps to Reproduce

  1. use the following composer file

# https://hub.docker.com/r/linuxserver/healthchecks
# https://healthchecks.io/docs/self_hosted/

version: "2.1"
services:
  healthchecks:
    image: lscr.io/linuxserver/healthchecks
    container_name: healthchecks
    environment:
      - PUID=1000
      - PGID=1000
      - SITE_ROOT=localhost:9001
      - SITE_NAME=Health Check


      - [email protected]
      - EMAIL_HOST=example.com
      - EMAIL_PORT=465
      - EMAIL_HOST_USER=root
      - EMAIL_HOST_PASSWORD=xxxxxx
      - EMAIL_USE_TLS=True # <True or False>
      
      #- ALLOWED_HOSTS=<ALLOWED_HOSTS>
      - [email protected]
      - SUPERUSER_PASSWORD=xxxxxx
      
      #- REGENERATE_SETTINGS=False # True/False #optional
      #- SITE_LOGO_URL=<SITE_LOGO_URL> #optional
      #- SECRET_KEY=<SECRET_KEY> #optional
    volumes:
      - /data/docker/healthcheck:/config
    ports:
      - "127.0.0.1:9001:8000"
    restart: unless-stopped
    ```

2. deploy the stack using portainer
3. go to the log, I can see that the server fails to start

## Environment
**OS:** ubuntu
**CPU architecture:** x86_64
**How docker service was installed:** `sudo apt install docker.io`


## Command used to create docker container (run/create/compose/screenshot)

I use portainer and clicked "deploy the stack."

## Docker logs

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 01-envfile: executing...
[cont-init.d] 01-envfile: exited 0.
[cont-init.d] 10-adduser: executing...


      _         ()
     | |  ___   _    __
     | | / __| | |  /  \
     | | \__ \ | | | () |
     |_| |___/ |_|  \__/

Brought to you by linuxserver.io

To support LSIO projects visit:
https://www.linuxserver.io/donate/

GID/UID

User uid: 1000
User gid: 1000

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing...
New container detected. Setting up app folder and fixing permissions.
Operations to perform:
Apply all migrations: accounts, admin, api, auth, contenttypes, payments, sessions
Running migrations:
No migrations to apply.
Superuser creation skipped. Already exists.
[cont-init.d] 30-config: exited 0.
[cont-init.d] 90-custom-folders: executing...
[cont-init.d] 90-custom-folders: exited 0.
[cont-init.d] 99-custom-files: executing...
[custom-init] no custom files found exiting...
[cont-init.d] 99-custom-files: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
[uWSGI] getting INI configuration from uwsgi.ini
[uwsgi-static] added mapping for /static => static-collected
*** Starting uWSGI 2.0.19.1 (64bit) on [Sat Dec 25 03:57:02 2021] ***
compiled with version: 10.3.1 20210424 on 05 April 2021 18:18:03
os: Linux-5.13.0-22-generic #22-Ubuntu SMP Fri Nov 5 13:21:36 UTC 2021
nodename: c79c0d627af2
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 24
current working directory: /app/healthchecks
detected binary path: /usr/sbin/uwsgi
your memory page size is 4096 bytes
detected max file descriptor number: 1048576
building mime-types dictionary from file /etc/mime.types...1311 entry found
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.9.5 (default, Nov 24 2021, 21:19:13) [GCC 10.3.1 20210424]
Python main interpreter initialized at 0x7f65d8127bf0
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 203184 bytes (198 KB) for 1 cores
*** Operational MODE: single process ***
running "exec:/usr/bin/python3 ./manage.py collectstatic --noinput" (pre app)...

314 static files copied to '/app/healthchecks/static-collected'.
running "exec:/usr/bin/python3 ./manage.py compress" (pre app)...
CommandError: Compressor is disabled. Set the COMPRESS_ENABLED setting or use --force to override.
command "/usr/bin/python3 ./manage.py compress" exited with non-zero code: 1
Sat Dec 25 03:57:03 2021 - FATAL hook failed, destroying instance
SIGINT/SIGQUIT received...killing workers...
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x7f65d8127bf0 pid: 285 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 285)
spawned uWSGI worker 1 (pid: 302, cores: 1)
[uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py sendalerts" (uid: 1000 gid: 1000)

[BUG] Cannot close registrations

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

I have been trying to close registration for my local healthchecks instance. I used the REGISTRATION_OPEN flag and set it to false, but it does not seem to have an effect.

I'll also note I see REGISTRATION_OPEN = False in config/local_settings.py too, but I still see the sign in on the landing page.

image

Expected Behavior

No login available

No response

Steps To Reproduce

Use the YAML above
run docker compose up -d --force-recreate
navigate to the IP of the host
still see the signup

Environment

- OS: Debian GNU/Linux 12 (bookworm)
- How docker service was installed:

sudo apt install docker

CPU architecture

x86-64

Docker creation

version: "3"
services:
  healthchecks:
    image: linuxserver/healthchecks:amd64-latest
    container_name: healthchecks
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - SITE_ROOT=https://health.local
      - SITE_NAME=HealthChecks
      - DEFAULT_FROM_EMAIL
      - EMAIL_HOST=smtp.gmail.com
      - EMAIL_PORT=587
      - EMAIL_HOST_USER
      - EMAIL_HOST_PASSWORD
      - EMAIL_USE_TLS=True
      - SUPERUSER_EMAIL
      - SUPERUSER_PASSWORD
      - DEBUG=False
      - SITE_LOGO_URL=https://pbs.twimg.com/profile_images/1055543716201615365/geMDWaHV_400x400.jpg
      - REGISTRATION_OPEN=False
    volumes:
      - /home/user/healthchecks/config:/config
    ports:
      - 8000:8000
      - 2525:2525
    restart: unless-stopped


### Container logs

```bash
docker logs healthchecks
[migrations] started
[migrations] no migrations found
───────────────────────────────────────

      ██╗     ███████╗██╗ ██████╗
      ██║     ██╔════╝██║██╔═══██╗
      ██║     ███████╗██║██║   ██║
      ██║     ╚════██║██║██║   ██║
      ███████╗███████║██║╚██████╔╝
      ╚══════╝╚══════╝╚═╝ ╚═════╝

   Brought to you by linuxserver.io
───────────────────────────────────────

To support LSIO projects visit:
https://www.linuxserver.io/donate/

───────────────────────────────────────
GID/UID
───────────────────────────────────────

User UID:    1000
User GID:    1000
───────────────────────────────────────

No changes detected
Operations to perform:
  Apply all migrations: accounts, admin, api, auth, contenttypes, payments, sessions
Running migrations:
  No migrations to apply.
Superuser creation skipped. Already exists.
[custom-init] No custom files found, skipping...
[uWSGI] getting INI configuration from uwsgi.ini
[uwsgi-static] added mapping for /static => static-collected
*** Starting uWSGI 2.0.21 (64bit) on [Fri Jul 21 02:22:40 2023] ***
compiled with version: 12.2.1 20220924 on 28 April 2023 21:13:09
os: Linux-6.2.16-4-pve #1 SMP PREEMPT_DYNAMIC PVE 6.2.16-5 (2023-07-14T17:53Z)
nodename: 9217676fd78d
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 2
current working directory: /app/healthchecks
detected binary path: /usr/sbin/uwsgi
your memory page size is 4096 bytes
detected max file descriptor number: 10000
building mime-types dictionary from file /etc/mime.types...1390 entry found
lock engine: pthread robust mutexes
thunder lock: enabled
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.11.4 (main, Jun  9 2023, 02:29:05) [GCC 12.2.1 20220924]
PEP 405 virtualenv detected: /lsiopy
Set PythonHome to /lsiopy
Python main interpreter initialized at 0x7f05cd3e0638
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 203184 bytes (198 KB) for 1 cores
*** Operational MODE: single process ***
[ls.io-init] done.
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x7f05cd3e0638 pid: 145 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 145)
spawned uWSGI worker 1 (pid: 169, cores: 1)
[uwsgi-daemons] spawning "python3 ./manage.py sendalerts" (uid: 1000 gid: 1000)
[uwsgi-daemons] spawning "python3 ./manage.py smtpd --port 2525" (uid: 1000 gid: 1000)
[uwsgi-daemons] spawning "python3 ./manage.py sendreports --loop" (uid: 1000 gid: 1000)
Starting SMTP listener on 0.0.0.0:2525 ...
sendalerts is now running
sendreports is now running

Container init file appends env vars to `local_settings.py` even if they already exist when REGENERATE_SETTINGS is true

See:

if [ ! -f "/config/local_settings.py" ] || [[ ${HC_CONF[REGENERATE_SETTINGS]} == True ]]; then
# sed in values or skip if value not set
for KEY in "${!HC_CONF[@]}"; do
if [[ ! ${HC_CONF[$KEY]} == "" ]]; then
if [[ ${HC_CONF[$KEY]} == False ]] || [[ ${HC_CONF[$KEY]} == True ]]; then
echo "$KEY = ${HC_CONF[$KEY]}" >> /config/local_settings.py
else
echo "$KEY = \"${HC_CONF[$KEY]}\"" >> /config/local_settings.py
fi
fi
done
echo "ALLOWED_HOSTS = [\"${HC_CONF[ALLOWED_HOSTS]}\"]" >> /config/local_settings.py
echo "CSRF_TRUSTED_ORIGINS = [\"${HC_CONF[BASE_URL]}\"]" >> /config/local_settings.py
echo "PING_ENDPOINT = SITE_ROOT + \"/ping/\"" >> /config/local_settings.py
fi

The comment mentions using sed, but it just appends the vars to the end of the file. So if you have REGENERATE_SETTINGS enabled (which I do so the file is completely defined by my env vars in docker-compose.yml), it repeats the contents of the file every time the container starts.

I can fix this in my PR for #69

SECRET_KEY env var not getting added to local_settings.py

linuxserver.io


Expected Behavior

The SECRET_KEY env var is generated and added to local_settings.py or if set then that value is added to local_settings.py.
If it was generated by the container it should not be replaced when REGENERATE_SETTINGS=True unless it is set to something different in the docker-compose.yml file or docker run command.

Current Behavior

The SECRET_KEY env var is never added to the local_settings.py file and I can't tell if it is even generated.

Steps to Reproduce

  1. docker-compose up -d with SECRET_KEY env var set
  2. check website
  3. see debug banner (pasted below as a screenshot)

Environment

OS: Ubuntu Server 20.04.3 LTS (Focal Fossa)
CPU architecture: x86_64
How docker service was installed: from the distro repo

Command used to create docker container (run/create/compose/screenshot)

docker-compose up -d

Docker logs

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 01-envfile: executing...
[cont-init.d] 01-envfile: exited 0.
[cont-init.d] 10-adduser: executing...

-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/


Brought to you by linuxserver.io
-------------------------------------

To support LSIO projects visit:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    1000
User gid:    1000
-------------------------------------

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing...
New container detected. Setting up app folder and fixing permissions.
Operations to perform:
  Apply all migrations: accounts, admin, api, auth, contenttypes, payments, sessions
Running migrations:
  No migrations to apply.
Superuser creation skipped. Already exists.
[cont-init.d] 30-config: exited 0.
[cont-init.d] 90-custom-folders: executing...
[cont-init.d] 90-custom-folders: exited 0.
[cont-init.d] 99-custom-files: executing...
[custom-init] no custom files found exiting...
[cont-init.d] 99-custom-files: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
[uWSGI] getting INI configuration from uwsgi.ini
[uwsgi-static] added mapping for /static => static-collected
*** Starting uWSGI 2.0.19.1 (64bit) on [Wed Nov  3 18:04:23 2021] ***
compiled with version: 10.3.1 20210424 on 05 April 2021 18:18:03
os: Linux-5.4.0-89-generic #100-Ubuntu SMP Fri Sep 24 14:50:10 UTC 2021
nodename: f2efc190f26a
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 4
current working directory: /app/healthchecks
detected binary path: /usr/sbin/uwsgi
your memory page size is 4096 bytes
detected max file descriptor number: 1048576
building mime-types dictionary from file /etc/mime.types...1311 entry found
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.9.5 (default, May 12 2021, 20:44:22)  [GCC 10.3.1 20210424]
Python main interpreter initialized at 0x7fc72837f7e0
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 203184 bytes (198 KB) for 1 cores
*** Operational MODE: single process ***
running "exec:/usr/bin/python3 ./manage.py collectstatic --noinput" (pre app)...

318 static files copied to '/app/healthchecks/static-collected'.
running "exec:/usr/bin/python3 ./manage.py compress" (pre app)...
CommandError: Compressor is disabled. Set the COMPRESS_ENABLED setting or use --force to override.
command "/usr/bin/python3 ./manage.py compress" exited with non-zero code: 1
Wed Nov  3 18:04:25 2021 - FATAL hook failed, destroying instance
SIGINT/SIGQUIT received...killing workers...
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x7fc72837f7e0 pid: 299 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 299)
spawned uWSGI worker 1 (pid: 316, cores: 1)
[uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py sendalerts" (uid: 1000 gid: 1000)

Screenshot

image

Bad request - Error 400

Here is an error I encountered with its solution.

Expected Behavior

When using the docker-compose.yml file below and starting it with docker-compose up the application should work.

version: '2'
services:
  healthchecks:
    container_name: 'healthchecks'
    image: linuxserver/healthchecks:latest
    environment:
      - PUID=1000
      - PGID=1000
      - ALLOWED_HOSTS=["*"]
      - DEBUG=True
    volumes:
      - ./healthchecks_data:/config
    networks:
      host-macvlan-net:
        ipv4_address: 10.0.6.10
networks:
  host-macvlan-net:
    external:
      name: host-macvlan-net

Current Behavior

The docker seems to start properly without yielding errors but trying to access the application returns 400 errors.

GET / => generated 143 bytes in 85 msecs (HTTP/1.1 400) 2 headers in 86 bytes (1 switches on core 0)

This is usually a sign that "ALLOWED_HOSTS" is not properly configured but I did include the environment variable in the docker-compose file.

Solution

The mounted volume /config contains a file local_settings.py that seems to take precedence over the environment variables :

EMAIL_HOST = "smtp.gmail.com"
DEFAULT_FROM_EMAIL = "[email protected]"
BASE_URL = "healthchecks.example.com"
EMAIL_USE_TLS = True
SITE_ROOT = "https://healthchecks.example.com"
DEBUG = False
EMAIL_PORT = "587"
SITE_NAME = "healthchecks"
EMAIL_HOST_PASSWORD = "password"
EMAIL_HOST_USER = "username"
ALLOWED_HOSTS = ["healthchecks.example.com"]
CSRF_TRUSTED_ORIGINS = ["healthchecks.example.com"]

The solution is to modify the parameters directly in this file. Hope this saves some time for someone else.

[BUG] OperationalError at /accounts/login/ no such table: api_tokenbucket

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

The webui throws the error when trying to setup a user account after installation

OperationalError at /accounts/login/
no such table: api_tokenbucket

Expected Behavior

Account creation

Steps To Reproduce

  1. docker-compose up -d
  2. browser to webui
  3. setup account

Environment

- OS: Ubuntu 20.04
- How docker service was installed: apt

CPU architecture

x86-64

Docker creation

---
version: "2.1"
services:
  healthchecks:
    image: lscr.io/linuxserver/healthchecks:latest
    container_name: healthchecks
    environment:
      - PUID=1000
      - PGID=1000
      - SITE_ROOT=
      - SITE_NAME=
      - DEFAULT_FROM_EMAIL=
      - EMAIL_HOST=
      - EMAIL_PORT=
      - EMAIL_HOST_USER=
      - EMAIL_HOST_PASSWORD=
      - EMAIL_USE_TLS=
      - SUPERUSER_EMAIL=
      - SUPERUSER_PASSWORD=
      - REGENERATE_SETTINGS= #optional
      - ALLOWED_HOSTS= #optional
      - APPRISE_ENABLED= #optional
      - DEBUG= #optional
      - INTEGRATIONS_ALLOW_PRIVATE_IPS= #optional
      - PING_EMAIL_DOMAIN= #optional
      - SECRET_KEY= #optional
      - SITE_LOGO_URL= #optional
    volumes:
      - /path/to/data:/config
    ports:
      - 8000:8000
      - 2525:2525 #optional
    restart: unless-stopped

Container logs

ERRORS:
?: (4_0.E001) As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme (usually http:// or https://) but found . See the release notes for details.
[uwsgi-daemons] throttling "/usr/bin/python3 ./manage.py sendalerts" for 63 seconds
[uwsgi-daemons] throttling "/usr/bin/python3 ./manage.py smtpd --port 2525" for 63 seconds
[uwsgi-daemons] throttling "/usr/bin/python3 ./manage.py sendreports --loop" for 63 seconds
[pid: 150|app: 0|req: 7/7] 192.168.0.18 () {36 vars in 720 bytes} [Fri Feb 17 02:23:45 2023] GET / => generated 0 bytes in 0 msecs (HTTP/1.1 302) 9 headers in 289 bytes (1 switches on core 0)
[pid: 150|app: 0|req: 8/8] 192.168.0.18 () {36 vars in 750 bytes} [Fri Feb 17 02:23:45 2023] GET /accounts/login/ => generated 11104 bytes in 3 msecs (HTTP/1.1 200) 9 headers in 398 bytes (1 switches on core 0)
Internal Server Error: /accounts/login/
Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/lib/python3.10/site-packages/django/db/backends/sqlite3/base.py", line 357, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: api_tokenbucket

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/usr/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/app/healthchecks/./hc/accounts/views.py", line 159, in login
    if magic_form.is_valid():
  File "/usr/lib/python3.10/site-packages/django/forms/forms.py", line 205, in is_valid
    return self.is_bound and not self.errors
  File "/usr/lib/python3.10/site-packages/django/forms/forms.py", line 200, in errors
    self.full_clean()
  File "/usr/lib/python3.10/site-packages/django/forms/forms.py", line 437, in full_clean
    self._clean_fields()
  File "/usr/lib/python3.10/site-packages/django/forms/forms.py", line 452, in _clean_fields
    value = getattr(self, "clean_%s" % name)()
  File "/app/healthchecks/./hc/accounts/forms.py", line 63, in clean_identity
    if not TokenBucket.authorize_login_email(v):
  File "/app/healthchecks/./hc/api/models.py", line 1172, in authorize_login_email
    return TokenBucket.authorize(value, 20, 3600)
  File "/app/healthchecks/./hc/api/models.py", line 1126, in authorize
    obj, created = TokenBucket.objects.get_or_create(value=value)
  File "/usr/lib/python3.10/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/usr/lib/python3.10/site-packages/django/db/models/query.py", line 929, in get_or_create
    return self.get(**kwargs), False
  File "/usr/lib/python3.10/site-packages/django/db/models/query.py", line 646, in get
    num = len(clone)
  File "/usr/lib/python3.10/site-packages/django/db/models/query.py", line 376, in __len__
    self._fetch_all()
  File "/usr/lib/python3.10/site-packages/django/db/models/query.py", line 1867, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/lib/python3.10/site-packages/django/db/models/query.py", line 87, in __iter__
    results = compiler.execute_sql(
  File "/usr/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1398, in execute_sql
    cursor.execute(sql, params)
  File "/usr/lib/python3.10/site-packages/django/db/backends/utils.py", line 103, in execute
    return super().execute(sql, params)
  File "/usr/lib/python3.10/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
  File "/usr/lib/python3.10/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/lib/python3.10/site-packages/django/db/backends/utils.py", line 84, in _execute
    with self.db.wrap_database_errors:
  File "/usr/lib/python3.10/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/lib/python3.10/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/lib/python3.10/site-packages/django/db/backends/sqlite3/base.py", line 357, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: api_tokenbucket
[pid: 150|app: 0|req: 9/9] 192.168.0.18 () {46 vars in 949 bytes} [Fri Feb 17 02:23:49 2023] POST /accounts/login/ => generated 168774 bytes in 87 msecs (HTTP/1.1 500) 8 headers in 282 bytes (3 switches on core 0)
[uwsgi-daemons] respawning "/usr/bin/python3 ./manage.py sendalerts" (uid: 1000 gid: 1000)
[uwsgi-daemons] respawning "/usr/bin/python3 ./manage.py smtpd --port 2525" (uid: 1000 gid: 1000)
[uwsgi-daemons] respawning "/usr/bin/python3 ./manage.py sendreports --loop" (uid: 1000 gid: 1000)
SystemCheckError: System check identified some issues:

ERRORS:
?: (4_0.E001) As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme (usually http:// or https://) but found . See the release notes for details.
SystemCheckError: System check identified some issues:

ERRORS:
?: (4_0.E001) As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme (usually http:// or https://) but found . See the release notes for details.
SystemCheckError: System check identified some issues:

ERRORS:
?: (4_0.E001) As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme (usually http:// or https://) but found . See the release notes for details.
[uwsgi-daemons] respawning "/usr/bin/python3 ./manage.py sendalerts" (uid: 1000 gid: 1000)
[uwsgi-daemons] respawning "/usr/bin/python3 ./manage.py smtpd --port 2525" (uid: 1000 gid: 1000)
[uwsgi-daemons] respawning "/usr/bin/python3 ./manage.py sendreports --loop" (uid: 1000 gid: 1000)
SystemCheckError: System check identified some issues:

ERRORS:
?: (4_0.E001) As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme (usually http:// or https://) but found . See the release notes for details.
SystemCheckError: System check identified some issues:

ERRORS:
?: (4_0.E001) As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme (usually http:// or https://) but found . See the release notes for details.
SystemCheckError: System check identified some issues:

ERRORS:
?: (4_0.E001) As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme (usually http:// or https://) but found . See the release notes for details.
[uwsgi-daemons] throttling "/usr/bin/python3 ./manage.py sendalerts" for 65 seconds
[uwsgi-daemons] throttling "/usr/bin/python3 ./manage.py smtpd --port 2525" for 65 seconds
[uwsgi-daemons] throttling "/usr/bin/python3 ./manage.py sendreports --loop" for 65 seconds

[BUG] Postgres dependencies are not installed

linuxserver.io

Expected Behavior

When configuring a postgres database in local_settings.py, we should be able to use that database.

Current Behavior

When running python3 manage.py migrate to instanciate the database, we get the following error :

Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 20, in <module>
    import psycopg2 as Database
  File "/usr/lib/python3.7/site-packages/psycopg2/__init__.py", line 50, in <module>
    from psycopg2._psycopg import (                     # noqa
ImportError: Error loading shared library libpq.so.5: No such file or directory (needed by /usr/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-x86_64-linux-gnu.so)

Steps to Reproduce

  1. Install Healthchecks docker image
  2. Configure a valid postgres database in /config/local_settings.py
  3. Try to instantiate the postgres database by running python3 manage.py migrate in /app/healthchecks

Environment

OS: Ubuntu 18.03
CPU architecture: x86_64
How docker service was installed: K8S cluster

Proposed fix

Adding postgresql-dev to the dockerfile

SITE_ROOT set but emails still being generated with `example.com`

Expected Behavior

With SITE_ROOT set expecting that email links use that for links.

Current Behavior

Emails using default example.com

Steps to Reproduce

Environment

OS: Ubuntu 20.04
CPU architecture: x86_64
How docker service was installed: apt install docker

Command used to create docker container (run/create/compose/screenshot)

docker-compose up --detach

config.yml:

healthchecks:
    container_name: healthchecks
    image: linuxserver/healthchecks
    restart: unless-stopped
    volumes:
      - /nfs/docker/healthchecks:/config
    environment:
      - PGID=1000
      - PUID=1000
      - SITE_ROOT=https://healthchecks.subdomain.domain.com
      - SITE_NAME="DalanHealthyChecks"
      - [email protected]
      - EMAIL_HOST=smtp.emailapi.net
      - EMAIL_PORT=587
      - EMAIL_HOST_USER=apikey
      - EMAIL_HOST_PASSWORD="holdontoyourbutts"
      - EMAIL_USE_TLS=True

Docker logs

Can't login to fresh install

linuxserver.io


Expected Behavior

Able to login

Current Behavior

OperationalError at /accounts/login/

Steps to Reproduce

  1. Fresh install with docker compose
  2. Login

Environment

OS: Ubuntu 20.04
CPU architecture: x86_64
How docker service was installed: lsio repo

Command used to create docker container (run/create/compose/screenshot)

version: "2.1"
services:
  healthchecks:
    image: lscr.io/linuxserver/healthchecks
    container_name: healthchecks
    environment:
      - PUID=1000
      - PGID=1000
      - SITE_ROOT=redacted.my.domain
      - SITE_NAME=redacted
      - DEFAULT_FROM_EMAIL=redacted
      - EMAIL_HOST=redacted
      - EMAIL_PORT=redacted
      - EMAIL_HOST_USER=redacted
      - EMAIL_HOST_PASSWORD=redacted
      - EMAIL_USE_TLS=True
      - ALLOWED_HOSTS=["*"]
      - SUPERUSER_EMAIL=redacted
      - SUPERUSER_PASSWORD=redacted
    volumes:
      - ./data:/config
    ports:
      - 8000:8000
    restart: unless-stopped

Docker logs

healthchecks  | Internal Server Error: /accounts/login/
healthchecks  | Traceback (most recent call last):
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/backends/utils.py", line 85, in _execute
healthchecks  |     return self.cursor.execute(sql, params)
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/backends/sqlite3/base.py", line 416, in execute
healthchecks  |     return Database.Cursor.execute(self, query, params)
healthchecks  | sqlite3.OperationalError: no such table: api_tokenbucket
healthchecks  | 
healthchecks  | The above exception was the direct cause of the following exception:
healthchecks  | 
healthchecks  | Traceback (most recent call last):
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
healthchecks  |     response = get_response(request)
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
healthchecks  |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
healthchecks  |   File "/app/healthchecks/./hc/accounts/views.py", line 156, in login
healthchecks  |     if form.is_valid():
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/forms/forms.py", line 190, in is_valid
healthchecks  |     return self.is_bound and not self.errors
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/forms/forms.py", line 185, in errors
healthchecks  |     self.full_clean()
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/forms/forms.py", line 405, in full_clean
healthchecks  |     self._clean_form()
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/forms/forms.py", line 426, in _clean_form
healthchecks  |     cleaned_data = self.clean()
healthchecks  |   File "/app/healthchecks/./hc/accounts/forms.py", line 88, in clean
healthchecks  |     if not TokenBucket.authorize_login_password(username):
healthchecks  |   File "/app/healthchecks/./hc/api/models.py", line 961, in authorize_login_password
healthchecks  |     return TokenBucket.authorize(value, 20, 3600 * 24)
healthchecks  |   File "/app/healthchecks/./hc/api/models.py", line 914, in authorize
healthchecks  |     obj, created = TokenBucket.objects.get_or_create(value=value)
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
healthchecks  |     return getattr(self.get_queryset(), name)(*args, **kwargs)
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/models/query.py", line 588, in get_or_create
healthchecks  |     return self.get(**kwargs), False
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/models/query.py", line 435, in get
healthchecks  |     num = len(clone)
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/models/query.py", line 262, in __len__
healthchecks  |     self._fetch_all()
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/models/query.py", line 1354, in _fetch_all
healthchecks  |     self._result_cache = list(self._iterable_class(self))
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/models/query.py", line 51, in __iter__
healthchecks  |     results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1202, in execute_sql
healthchecks  |     cursor.execute(sql, params)
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/backends/utils.py", line 99, in execute
healthchecks  |     return super().execute(sql, params)
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/backends/utils.py", line 67, in execute
healthchecks  |     return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
healthchecks  |     return executor(sql, params, many, context)
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/backends/utils.py", line 85, in _execute
healthchecks  |     return self.cursor.execute(sql, params)
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
healthchecks  |     raise dj_exc_value.with_traceback(traceback) from exc_value
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/backends/utils.py", line 85, in _execute
healthchecks  |     return self.cursor.execute(sql, params)
healthchecks  |   File "/usr/lib/python3.9/site-packages/django/db/backends/sqlite3/base.py", line 416, in execute
healthchecks  |     return Database.Cursor.execute(self, query, params)
healthchecks  | django.db.utils.OperationalError: no such table: api_tokenbucket

Symlink /usr/bin/python to /usr/bin/python3

linuxserver.io

Application manage.py doesn't work due to python not recognition. The simple solution is to symlink /usr/bin/python to /usr/bin/python3 ln -s /usr/bin/python3 /usr/bin/python in Dockerfile.


Expected Behavior

~$ docker exec -it healthchecks /app/healthchecks/manage.py
Type 'manage.py help <subcommand>' for help on a specific subcommand.

Available subcommands:
…

Current Behavior

~$ docker exec -it healthchecks /app/healthchecks/manage.py
env: ‘python’: No such file or directory

Steps to Reproduce

Try to run manage.py subcommand from official linuxserver/healthchecks image

Environment

OS: Alpine Linux 3.13
CPU architecture: x86_64
How docker service was installed: latest from official repo linuxserver/healthchecks

Container timezone causes wrong time attributes from API

linuxserver.io


Expected Behavior

When I'm in the Europe/Berlin timezone
and I query the API via curl -X GET --header "X-Api-Key: <token>" http://<instance:port>/api/v1/checks/<uuid>
then I expect the last_ping attribute to be in the Europe/Berlin timezone

Current Behavior

  • last_ping attribute from does not return time in my timezone. It is one hour off

Steps to Reproduce

  1. Start docker container
  2. Configure check
  3. Create API token
  4. Query check via curl -X GET --header "X-Api-Key: <token>" http://<instance:port>/api/v1/checks/<uuid>

Discussion and proposed solution

  • I assume the API uses the timezone set in the container
  • I propose to add an environment variable TZ=Europe/Berlin that allows to change the timezone of the container

Environment

OS: RaspberryPi OS (buster)
CPU architecture: arm32
How docker service was installed: from the official docker repo

Command used to create docker container (run/create/compose/screenshot)

Docker logs

Exception Value: no such table: django_session

linuxserver.io


Expected Behavior

I should be able to connect to the interface

Current Behavior

I was registering my account after the first init, then it throws no such table: django_session

Steps to Reproduce

  1. Fresh install with this docker-compose
  2. Try to register
  3. It fails

Environment

OS: Docker
CPU architecture: x86_64
How docker service was installed:

Command used to create docker container (run/create/compose/screenshot)

healthchecksio:
    image: linuxserver/healthchecks:2.0.1
    container_name: pprod_healthchecksio
    restart: unless-stopped
    environment:
      - SITE_ROOT=healthchecksio.fr
      - SITE_NAME=Monitoring CronTab
      - [email protected]
      - SUPERUSER_PASSWORD=INeedToGenerateAPasswordHere
      - REGENERATE_SETTINGS=True
      - PUID=1000
      - PGID=1000
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.healthchecksio-pprod-router.entrypoints=websecure"
      - "traefik.http.routers.healthchecksio-pprod-router.rule=Host(`healthchecksio-dependencies-scan...`,`healthchecksio-dependencies-scan-..`)"
      - "traefik.http.routers.healthchecksio-pprod-router.service=healthchecksio-pprod-service"
      - "traefik.http.routers.healthchecksio-pprod-router.tls=true"
      - "traefik.http.services.healthchecksio-pprod-service.loadbalancer.server.port=8000"
    volumes:
      - ./healthchecksio:/config
    networks:
      - proxy

Docker logs

$CSRF_HOST Related Bash Error

Expected Behavior

No errors in the Docker log when running the container.

Current Behavior

Docker logs contain errors when running the container.

Docker logs contain the following errors when running the container:

/var/run/s6/etc/cont-init.d/30-config: line 30: https://our.url.com/: No such file or directory
/var/run/s6/etc/cont-init.d/30-config: line 30: =: command not found

Line 30 is:

$CSRF_HOST = $(${HC_CONF[SITE_ROOT]}/)

It was introduced as part of Issue #22.

Frankly I have no idea what that line is supposed to do. Dereferencing a variable left of the = and passing a URL to a subshell just doesn't make sense to me. I am far from a Bash expert though.

The subshell produces the first error since there is no directory named https://our.url.com/. Even if it were to exist, the result would be -bash: https://our.url.com/: Is a directory. The variable $CSRF_HOST is empty / undefined and Bash then attempts to execute = as a command which does not exist.

I have done extensive research but can't find any reference to "$CSRF_HOST" (literally, Google returns 0 results). Closest I have come is the documentation of the CSRF protection module of Django 3 but I have found no mention of that variable.

So... I don't know, is that line simply wrong?

The service is running despite the errors... I haven't tested any functionality yet though.

Steps to Reproduce

Simply start the container as below.

Environment

OS: Linux HOST 4.9.0-12-amd64 #​1 SMP Debian 4.9.210-1 (2020-01-20) x86_64 GNU/Linux
CPU architecture: x86_64
How docker service was installed: This way.

Command used to create docker container (run/create/compose/screenshot)

docker stack deploy -c hc.yml healthchecks

version: "3.8"
services:
  healthchecks:
    image: linuxserver/healthchecks
    environment:
      - PUID=1000
      - PGID=1000
      - SITE_ROOT=https://our.url.com
      - SITE_NAME=Our Name
      - DEFAULT_FROM_EMAIL=Our Email
      - EMAIL_HOST=Our SMTP Host
      - EMAIL_PORT=587
      - EMAIL_HOST_USER=Our SMTP User
      - FILE__EMAIL_HOST_PASSWORD=/run/secrets/smtp_pw
      - EMAIL_USE_TLS=True
      - ALLOWED_HOSTS=["*"]
      - SUPERUSER_EMAIL=Our Superuser Email
      - FILE__SUPERUSER_PASSWORD=/run/secrets/superuser_pw
    volumes:
      - data:/config
    ports:
      - 8000:8000
    deploy:
      restart_policy: 
        condition: on-failure
    secrets:
      - smtp_pw
      - superuser_pw

volumes:
  data:

secrets:
  smtp_pw: 
    file: ./smtp_pw
  superuser_pw:
    file: ./superuser_pw

Docker logs

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 01-envfile: executing... 
[env-init] EMAIL_HOST_PASSWORD set from FILE__EMAIL_HOST_PASSWORD
[env-init] SUPERUSER_PASSWORD set from FILE__SUPERUSER_PASSWORD
[cont-init.d] 01-envfile: exited 0.
[cont-init.d] 10-adduser: executing... 

-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \ 
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/


Brought to you by linuxserver.io
-------------------------------------

To support LSIO projects visit:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    1000
User gid:    1000
-------------------------------------

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing... 
/var/run/s6/etc/cont-init.d/30-config: line 30: https://rone.fim.uni-passau.de/: No such file or directory
/var/run/s6/etc/cont-init.d/30-config: line 30: =: command not found
Operations to perform:
  Apply all migrations: accounts, admin, api, auth, contenttypes, payments, sessions
Running migrations:
[...]

Telegram integration

linuxserver.io


Expected Behavior

Hi! Guys, who can explaine me 'bout telegram integration steps, I added token and bot name via variables, open my hc and try to add this integration, but, after send /start to my bot, nothing happens in chat. What I do wrong or how I can set webhook via manage.py?

Current Behavior

Nothing happens in bot chat

Steps to Reproduce

  1. register bot
  2. add variables with token and bot name
  3. add integration
  4. send /start to bot

No way to stop application from connecting to mail server with auth

Expected Behavior

I want to configure Healthchecks to connect to my mail server without authenticating. In my docker-compose.yaml I tried leaving out the username and password parameters and I tried setting them to empty strings. I would expect either of these configurations to run Healthchecks without those environment variables set. If that were the case then Healthchecks would connect to the mail server without trying to authenticate.

Current Behavior

/root/etc/cont-init.d/30-config defines defaults for email host user and password

HC_CONF[EMAIL_HOST_USER]=${EMAIL_HOST_USER:-username}
HC_CONF[EMAIL_HOST_PASSWORD]=${EMAIL_HOST_PASSWORD:-password}

which in turn makes it impossible to connect without authentication. There is an error "SMTP AUTH extension not supported by server." in the logs.

Steps to Reproduce

  1. Create docker application using provided docker-compose file, using a valid email server that does not require authentication for EMAIL_HOST and the correct port for EMAIL_PORT
  2. Proceed to home page
  3. Click to link to "Sign Up" for new account
  4. Enter a valid email address and submit form
  5. Notice error in log file
  6. Connect to Docker container
  7. cat config/local_settings.py
  8. Notice EMAIL_HOST_PASSWORD = "password" and EMAIL_HOST_USER = "username" as dictated by values from 30-config file

Environment

OS: Docker
CPU architecture: x86_64

Command used to create docker container (run/create/compose/screenshot)

Docker Compose file:

---
version: "3"
services:
  healthchecks:
    image: linuxserver/healthchecks:latest
    container_name: healthchecks
    restart: always
    expose:
        - 8000
    ports:
        - 8000:8000

    environment:
      - HC_DEBUG=False
      - DEBUG=False
      - HC_HOST=0.0.0.0
      - HC_SECRET_KEY=${HC_SECRET_KEY}
      - HC_PING_EMAIL_DOMAIN=<**REDACTED**>
      - EMAIL_HOST=<**REDACTED**>
      - EMAIL_PORT=25
      - EMAIL_USE_TLS=False
     #- [email protected]
     #- HC_EMAIL_HOST_PASSWORD=YOUR_PASSWORD
      - HC_ALLOWED_HOSTS=["*"]
      - DB=${DB}
      - DB_SSLMODE=disable
      - DB_HOST=${DB_HOST}
      - DB_PORT=${DB_PORT}
      - DB_NAME=${DB_NAME}
      - DB_USER=${DB_USER}
      - DB_PASSWORD=${DB_PASSWORD}

Docker logs

healthchecks    | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
healthchecks    | [s6-init] ensuring user provided files have correct perms...exited 0.
healthchecks    | [fix-attrs.d] applying ownership & permissions fixes...
healthchecks    | [fix-attrs.d] done.
healthchecks    | [cont-init.d] executing container initialization scripts...
healthchecks    | [cont-init.d] 01-envfile: executing...
healthchecks    | [cont-init.d] 01-envfile: exited 0.
healthchecks    | [cont-init.d] 10-adduser: executing...
healthchecks    | usermod: no changes
healthchecks    |
healthchecks    | -------------------------------------
healthchecks    |           _         ()
healthchecks    |          | |  ___   _    __
healthchecks    |          | | / __| | |  /  \
healthchecks    |          | | \__ \ | | | () |
healthchecks    |          |_| |___/ |_|  \__/
healthchecks    |
healthchecks    |
healthchecks    | Brought to you by linuxserver.io
healthchecks    | -------------------------------------
healthchecks    |
healthchecks    | To support LSIO projects visit:
healthchecks    | https://www.linuxserver.io/donate/                                                                                                                                                                        healthchecks    | -------------------------------------
healthchecks    | GID/UID
healthchecks    | -------------------------------------
healthchecks    |
healthchecks    | User uid:    911
healthchecks    | User gid:    911
healthchecks    | -------------------------------------
healthchecks    |
healthchecks    | [cont-init.d] 10-adduser: exited 0.
healthchecks    | [cont-init.d] 30-config: executing...
healthchecks    | ln: failed to create symbolic link '/app/healthchecks/hc.sqlite': File exists
healthchecks    | Operations to perform:
healthchecks    |   Apply all migrations: accounts, admin, api, auth, contenttypes, payments, sessions
healthchecks    | Running migrations:
healthchecks    |   No migrations to apply.
healthchecks    | [cont-init.d] 30-config: exited 0.
healthchecks    | [cont-init.d] 99-custom-files: executing...
healthchecks    | [custom-init] no custom files found exiting...
healthchecks    | [cont-init.d] 99-custom-files: exited 0.
healthchecks    | [cont-init.d] done.
healthchecks    | [services.d] starting services
healthchecks    | [uWSGI] getting INI configuration from uwsgi.ini
healthchecks    | [services.d] done.
healthchecks    | [uwsgi-static] added mapping for /static => static-collected
healthchecks    | *** Starting uWSGI 2.0.18 (64bit) on [Tue Sep  1 01:55:06 2020] ***
healthchecks    | compiled with version: 9.3.0 on 17 April 2020 16:07:02
healthchecks    | os: Linux-5.4.55-1-pve #1 SMP PVE 5.4.55-1 (Mon, 10 Aug 2020 10:26:27 +0200)
healthchecks    | nodename: c784382d6b05
healthchecks    | machine: x86_64
healthchecks    | clock source: unix
healthchecks    | pcre jit disabled
healthchecks    | detected number of CPU cores: 4
healthchecks    | current working directory: /app/healthchecks
healthchecks    | detected binary path: /usr/sbin/uwsgi
healthchecks    | your memory page size is 4096 bytes
healthchecks    | detected max file descriptor number: 1048576
healthchecks    | building mime-types dictionary from file /etc/mime.types...1293 entry found
healthchecks    | lock engine: pthread robust mutexes
healthchecks    | thunder lock: disabled (you can enable it with --thunder-lock)
healthchecks    | uwsgi socket 0 bound to TCP address :8000 fd 3
healthchecks    | Python version: 3.8.5 (default, Jul 20 2020, 23:11:29)  [GCC 9.3.0]
healthchecks    | Python main interpreter initialized at 0x559135fcea80
healthchecks    | python threads support enabled
healthchecks    | your server socket listen backlog is limited to 100 connections
healthchecks    | your mercy for graceful operations on workers is 60 seconds
healthchecks    | mapped 145840 bytes (142 KB) for 1 cores
healthchecks    | *** Operational MODE: single process ***
healthchecks    | running "exec:/usr/bin/python3 ./manage.py collectstatic --noinput" (pre app)...
healthchecks    |
healthchecks    | 0 static files copied to '/app/healthchecks/static-collected', 314 unmodified.
healthchecks    | running "exec:/usr/bin/python3 ./manage.py compress" (pre app)...
healthchecks    | Compressing... done
healthchecks    | Compressed 20 block(s) from 104 template(s) for 0 context(s).
healthchecks    | WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x559135fcea80 pid: 269 (default app)
healthchecks    | *** uWSGI is running in multiple interpreter mode ***
healthchecks    | spawned uWSGI master process (pid: 269)
healthchecks    | spawned uWSGI worker 1 (pid: 289, cores: 1)
healthchecks    | [uwsgi-daemons] spawning "/usr/bin/python3 ./manage.py sendalerts" (uid: 911 gid: 911)
healthchecks    | [pid: 289|app: 0|req: 1/1] 192.168.1.132 () {44 vars in 1163 bytes} [Tue Sep  1 01:55:25 2020] POST /accounts/signup/ => generated 73 bytes in 712 msecs (HTTP/1.1 200) 7 headers in 285 bytes (1 switches on core 0)
healthchecks    | Exception in thread Thread-1:
healthchecks    | Traceback (most recent call last):
healthchecks    |   File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
healthchecks    |     self.run()
healthchecks    |   File "./hc/lib/emails.py", line 23, in run
healthchecks    |     msg.send()
healthchecks    |   File "/usr/lib/python3.8/site-packages/django/core/mail/message.py", line 276, in send
healthchecks    |     return self.get_connection(fail_silently).send_messages([self])
healthchecks    |   File "/usr/lib/python3.8/site-packages/django/core/mail/backends/smtp.py", line 102, in send_messages
healthchecks    |     new_conn_created = self.open()
healthchecks    |   File "/usr/lib/python3.8/site-packages/django/core/mail/backends/smtp.py", line 69, in open
healthchecks    |     self.connection.login(self.username, self.password)
healthchecks    |   File "/usr/lib/python3.8/smtplib.py", line 700, in login
healthchecks    |     raise SMTPNotSupportedError(
healthchecks    | smtplib.SMTPNotSupportedError: SMTP AUTH extension not supported by server.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.