Git Product home page Git Product logo

zoneminder-base's Introduction

Zoneminder Container

Docker Build DockerHub Pulls Status

Maintenance Mode Notice

I do not personally use this and as such will have limited time to invest into this project. Basic things will be fixed, however larger issues from either changes from Zoneminder or otherwise will likely not be fixed. If there is substantial demand for a new feature/improvement, I will consider implementing it if I have time. Sponsoring me and noting this is the reason you are doing so will help me invest more time into this as well.

Why

This is an automatically updating ZoneMinder container built using s6-overlay with full support for all things containers. This aims to be the container that will never die as things will automatically keep themselves up to date and allow for easy selection/testing of various ZoneMinder versions.

This container aims to follow all of the best practices of being a container meaning that the software and persistent data are separated, with the container remaining static. This means the container can easily be updated/restored provided the persistent data volumes are backed up.

Not only does this aim to follow all of the best practices, but this also aims to be the easiest container with nearly everything configurable through environment variables or automatically/preconfigured for you!

There is also full support for multi-server setups with automation to link all servers!

How

  1. Install Docker and docker-compose
  2. Download docker-compose.yml or docker-compose-multi.yml depending on single/multi server setups.
  3. Download .env
  4. Place all these files in the same folder and configure .env and the yml files as you please.
  5. Run docker-compose up -d to start.

NOTE: The default docker-compose.yml files use the latest tag which runs the latest release build of ZoneMinder.

Defining a Version

  1. Replace latest in the docker-compose.yml file with any ZoneMinder version you would like to run. You can find all available releases here. Ex. 1.36.1

Note: For those new to Docker, these values are known as the container tag.

Available Tags

  • branch_name: This is the branch name of this repository, not Zoneminder.
  • release: References the latest release
  • latest: Same as release
  • nightly: Nightly builds from master on Zoneminder

Updates

  1. Replace the tag with the new version to update to, or for latest, simply continue to the next step.
  2. docker-compose pull
  3. docker-compose up -d

Helpful Info

Logs are rotated according to the TAI64N standard

/data is not included in fix-permissions because it takes a substantial amount of time to run for the events folder when there are a large number of files

The web interface is accessible at the root directory. Do not use the /zm subdirectory to access the interface.

Issues:

  • Tell me?

Future Containers:

  1. eventserver-base (Currently WIP)
  • Install ZM Event Server
  • Automatically enable Event Server and modify Servers table entry to enable Event Server
  1. eventserver-mlapi-base
  • Install YOLO ML Models without opencv
  1. eventserver-mlapi
  • Build and install standard opencv
  1. eventserver-mlapi-cuda
  • Develop autobuilding opencv with cuda support container

zoneminder-base's People

Contributors

alexyao2015 avatar dependabot[bot] avatar eastygh avatar khimaros 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zoneminder-base's Issues

ZM never receives readiness notification from mariadb

I've followed the instructions to the letter (I think) three times now and always end up with exactly the same issue. Zoneminder won't start because it's waiting for mariadb. I'm using your mariadb and zoneminder containers and nothing hinky that I can find. The only thing I changed was the timezone and email address and password.

Environment:

root@zoneminder:/home/terri# docker --version
Docker version 20.10.12, build 20.10.12-0ubuntu4
root@zoneminder:/home/terri# docker-compose --version
docker-compose version 1.29.2, build unknown
root@zoneminder:/home/terri# 
root@zoneminder:/home/terri# uname -a
Linux zoneminder 5.15.0-53-generic #59-Ubuntu SMP Mon Oct 17 18:53:30 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

Startup log is as follows:

root@zoneminder:/home/terri# docker-compose up
Creating network "terri_zoneminder" with the default driver
Creating terri_db_1 ... done
Creating terri_zoneminder_1 ... done
Attaching to terri_db_1, terri_zoneminder_1
db_1          | 2022-11-30 13:16:57-05:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.10.2+maria~ubu2204 started.
db_1          | 2022-11-30 13:16:57-05:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
db_1          | 2022-11-30 13:16:57-05:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.10.2+maria~ubu2204 started.
db_1          | 2022-11-30 13:16:58-05:00 [Note] [Entrypoint]: MariaDB upgrade not required
db_1          | 2022-11-30 13:16:58 0 [Note] mariadbd (server 10.10.2-MariaDB-1:10.10.2+maria~ubu2204) starting as process 1 ...
db_1          | 2022-11-30 13:16:58 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
db_1          | 2022-11-30 13:16:58 0 [Note] InnoDB: Number of transaction pools: 1
db_1          | 2022-11-30 13:16:58 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
db_1          | 2022-11-30 13:16:58 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
db_1          | 2022-11-30 13:16:58 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
db_1          | 2022-11-30 13:16:58 0 [Note] InnoDB: Completed initialization of buffer pool
db_1          | 2022-11-30 13:16:58 0 [Note] InnoDB: File system buffers for log disabled (block size=4096 bytes)
db_1          | 2022-11-30 13:16:58 0 [Note] InnoDB: 128 rollback segments are active.
db_1          | 2022-11-30 13:16:58 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
db_1          | 2022-11-30 13:16:58 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
db_1          | 2022-11-30 13:16:58 0 [Note] InnoDB: log sequence number 46590; transaction id 14
db_1          | 2022-11-30 13:16:58 0 [Note] Plugin 'FEEDBACK' is disabled.
db_1          | 2022-11-30 13:16:58 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
db_1          | 2022-11-30 13:16:58 0 [Warning] You need to use --log-bin to make --expire-logs-days or --binlog-expire-logs-seconds work.
db_1          | 2022-11-30 13:16:58 0 [Note] InnoDB: Buffer pool(s) load completed at 221130 13:16:58
zoneminder_1  | s6-rc: info: service s6rc-oneshot-runner: starting
db_1          | 2022-11-30 13:16:58 0 [Note] Server socket created on IP: '0.0.0.0'.
db_1          | 2022-11-30 13:16:58 0 [Note] Server socket created on IP: '::'.
zoneminder_1  | s6-rc: info: service s6rc-oneshot-runner successfully started
zoneminder_1  | s6-rc: info: service fix-attrs: starting
db_1          | 2022-11-30 13:16:58 0 [Note] mariadbd: ready for connections.
db_1          | Version: '10.10.2-MariaDB-1:10.10.2+maria~ubu2204'  socket: '/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
zoneminder_1  | s6-rc: info: service fix-attrs successfully started
zoneminder_1  | s6-rc: info: service legacy-cont-init: starting
zoneminder_1  | cont-init: info: running /etc/cont-init.d/00-reconfigure-user.sh
zoneminder_1  | 2022-11-30 13:16:58.548468313 [reconfigure-user] INFO Setting permissions for user www-data
zoneminder_1  | 2022-11-30 13:16:58.572401535 [reconfigure-user] INFO Setting permissions for user nobody at /log
zoneminder_1  | cont-init: info: /etc/cont-init.d/00-reconfigure-user.sh exited 0
zoneminder_1  | cont-init: info: running /etc/cont-init.d/10-log-config.sh
zoneminder_1  | 2022-11-30 13:16:58.600016369 [log-config] INFO Configuring log rotation with a maximum of 20 logs and a max log size of 1000000 bytes
zoneminder_1  | cont-init: info: /etc/cont-init.d/10-log-config.sh exited 0
zoneminder_1  | cont-init: info: running /etc/cont-init.d/20-system-config.sh
zoneminder_1  | 2022-11-30 13:16:58.621900695 [system-config] INFO Setting system timezone to America/New_York
zoneminder_1  | 2022-11-30 13:16:58.634429591 [system-config] INFO Configuring PHP Time
zoneminder_1  | 2022-11-30 13:16:58.762518056 [system-config] INFO Applying PHP Optimizations
zoneminder_1  | 2022-11-30 13:16:58.796195240 [system-config] INFO Redirecting PHP Logs to stdout
zoneminder_1  | cont-init: info: /etc/cont-init.d/20-system-config.sh exited 0
zoneminder_1  | cont-init: info: running /etc/cont-init.d/30-zm-config.sh
zoneminder_1  | 2022-11-30 13:16:58.817647084 [zm-config] INFO Configuring ZoneMinder db Settings
zoneminder_1  | cont-init: info: /etc/cont-init.d/30-zm-config.sh exited 0
zoneminder_1  | cont-init: info: running /etc/cont-init.d/40-msmtp-config.sh
zoneminder_1  | 2022-11-30 13:16:58.859180874 [msmtp-config] INFO Configuring msmtp settings...
zoneminder_1  | cont-init: info: /etc/cont-init.d/40-msmtp-config.sh exited 0
zoneminder_1  | cont-init: info: running /etc/cont-init.d/50-nginx-config.sh
zoneminder_1  | 2022-11-30 13:16:58.908461005 [nginx-config] INFO Configuring nginx settings...
zoneminder_1  | cont-init: info: /etc/cont-init.d/50-nginx-config.sh exited 0
zoneminder_1  | s6-rc: info: service legacy-cont-init successfully started
zoneminder_1  | s6-rc: info: service legacy-services: starting
zoneminder_1  | services-up: info: copying legacy longrun fcgiwrap (no readiness notification)
zoneminder_1  | services-up: info: copying legacy longrun mariadb (no readiness notification)
zoneminder_1  | services-up: info: copying legacy longrun mariadb-configure (no readiness notification)
zoneminder_1  | services-up: info: copying legacy longrun nginx (no readiness notification)
zoneminder_1  | services-up: info: copying legacy longrun php-fpm (no readiness notification)
zoneminder_1  | services-up: info: copying legacy longrun socklog (no readiness notification)
zoneminder_1  | services-up: info: copying legacy longrun zoneminder (no readiness notification)
zoneminder_1  | s6-rc: info: service legacy-services successfully started
zoneminder_1  | [fcgiwrap] 2022-11-30 13:16:59.095142756 INFO Starting fcgiwrap...
zoneminder_1  | [mariadb-configure] 2022-11-30 13:16:59.123923347 INFO Waiting for MariaDB to start
zoneminder_1  | [zoneminder-service] 2022-11-30 13:16:59.112575458 INFO Waiting for Socklog to start
zoneminder_1  | [mariadb] 2022-11-30 13:16:59.101948294 INFO Waiting for Mariadb to start
zoneminder_1  | [nginx] 2022-11-30 13:16:59.089712403 INFO Waiting for ZoneMinder to start
zoneminder_1  | [php-fpm] 2022-11-30 13:16:59.131325307 INFO Starting PHP-fpm...
zoneminder_1  | [zoneminder-service] 2022-11-30 13:16:59.184847309 INFO Waiting for MariaDB to start

Mariadb armhf support

Hi,

This is great, but would like to run this on my RPI. However, MariaDB doesn't provide a ARMHF version of Mariadb. However, linuxserver/mariadb does. Although, simply changing the image doesn't allow the dockerfile to work.

Request to Add libcurl4 Package for cURL Support in Zoneminder Docker

I am an avid user of your Zoneminder Docker image and I have come across an issue regarding cURL support. The ESP32 Camera documentation specifies that in order to use the camera as a source in Zoneminder, the source type should be set to cURL (HTTP(S) only) and the URL should be configured as "http://ESP_IP_ADDRESS:8080/".

Unfortunately, the current version of the Zoneminder Docker image does not include support for cURL out of the box. However, I have discovered that after logging into the Docker image and manually installing the libcurl4 package, cURL support is enabled and I am able to use the ESP32 Camera as a source successfully.

Therefore, I kindly request that you consider adding the libcurl4 package to the Zoneminder Docker image by default. This addition will greatly benefit users like me who rely on cURL for their camera sources.

Thank you for your attention to this matter, and I appreciate your efforts in maintaining the Zoneminder Docker repository.

Zoneminder container forever waiting for MariaDB to start

I tried to deploy your image on my RPI4 with Raspbian OS.
But as far as there is no official mariadb image for linux/arm/v7 architecture I tried to use linuxserver/mariadb image.
Everything seems fine, except for the one problem.
Your image wait for MariaDB start using s6-svwait
etc/services.d/mariadb-configure/run:

echo "Waiting for MariaDB to start" | info
# Wait for db to be up before configuring
/bin/s6-svwait -U /var/run/s6/services/mariadb

But the linuxserver image does not have s6-svwait integration so zoneminder container just waits forever.

I tried to change this code to

echo "Waiting for MariaDB to start" | info
# Wait for db to be up before configuring
while ! /bin/nc -z "${MYSQL_HOST}" 3306 do sleep 5; done

and rebuild the image, but the resulting image fails all the time, dunno why.

# docker logs -f zoneminder
standard_init_linux.go:228: exec user process caused: exec format error
standard_init_linux.go:228: exec user process caused: exec format error
standard_init_linux.go:228: exec user process caused: exec format error

Maybe you can suggest something or make your image independent from s6-svwait (as far as I can see it is used only for one purpose, which can be easily replaced)?
Also tried to run the image with biarms/mysql:5.7.30 image, it got working but "Got signal 11 (Segmentation fault), crashing" error appeared all the time after adding a monitor. Some googling bring me to the idea that the root of the issue is MySQL instead of MariaDB.

Any ideas are appreciated, as your image seem to be the most up-to-date and well assembled for linux/arm/v7, but because of the simple check everything is useless...

latest tagged?

Is there a way to specify the latest officially tagged versoin? Right now latest seems to be the latest build, 1.37.x.

I'm using image: ghcr.io/zoneminder-containers/zoneminder-base:1.36.8, but would love to get 1.36.10 when it comes out in a few days without updating my tags.

event streaming fails with error

this is the error see in the debug logs:

2021-06-11 09:51:24.698051651  local1.warn: Jun 11 09:51:24 zms_e4[8135]: WAR [zms_e4] [Unable to send raw frame 1: Resource temporarily unavailable rc 746]
2021-06-11 09:51:24.698205908  local1.info: Jun 11 09:51:24 zms_e4[8135]: INF [zms_e4] [Unable to send raw frame 1: Broken pipe]
2021-06-11 09:51:24.698298759  local1.err: Jun 11 09:51:24 zms_e4[8135]: ERR [zms_e4] [Can't send /data/events/1/2021-06-11/4/00001-capture.jpg: Broken pipe]

the referenced capture.jpg is present and readable.

Basic Install - ProxMox LXC Debian 11 Container

Basic Install on ProxMox LXC Debian 11 Container:

New Container with Debian 11 Template:

  • 8GB Storage
  • 4 CPU
  • 4096 RAM
  • 512MB Swap
  • Added Feature: keyctl

Apt Upgrade

Installed Docker and Docker-Composer

mkdir zm
cd zm
Downloaded docker-compose.yml
Downloaded .env
Made no config changes to .env or yml file
Ran docker-compose up -d

Results:

963c0525af26: Pull complete
Digest: sha256:fd2eebd74100f9df71fceed7e86b05728a945cc0b093aa74289243aac7fa14fc
Status: Downloaded newer image for ghcr.io/zoneminder-containers/zoneminder-base:latest
Creating zm_db_1 ... error

ERROR: for zm_db_1 Cannot start service db: OCI runtime create failed: container_linux.go:367: starting container process caused: process_linux.go:495: container init caused: process_linux.go:458: setting cgroup config for procHooks process caused: can't load program: operation not permitted: unknown

ERROR: for db Cannot start service db: OCI runtime create failed: container_linux.go:367: starting container process caused: process_linux.go:495: container init caused: process_linux.go:458: setting cgroup config for procHooks process caused: can't load program: operation not permitted: unknown
ERROR: Encountered errors while bringing up the project.
root@zm:~/zm#

Did same process with Ubuntu 22.04 and it works. This seems to be an issue with Debian 11.

Please advise and thank you!

Got an error reading communication packets

Hello, i'm trying to get the Zoneminder container working in a Raspberry Pi, OS: Debian 11 bullseye, Kernel: aarch64 Linux 5.10.63-v8+.
I followed every step in the readme file, many times, and always getting the same error when trying to connect to the Zoneminder web page, it shows 404 Not Found.
The only thing I changed in the .env file was the timezone, I did not touch the rest.

When seeing the logs in portainer I get this for the zoneminder container:
[nginx] 2021/12/29 17:06:03 [error] 1161#1161: *1 open() "/var/www/html/zm" failed (2: No such file or directory), client: 192.168.1.100, server: , request: "GET /zm HTTP/1.1", host: "192.168.1.14"
[nginx] 192.168.1.100 - - [29/Dec/2021:17:06:03 -0300] "GET /zm HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0" "-"

And when I restart the zoneminder container, the mariadb container log shows:
2021-12-29 17:10:06 50 [Warning] Aborted connection 50 to db: 'zm' user: 'mysqluser' host: '172.20.0.3' (Got an error reading communication packets)

What am I doing wrong?
Thank you in advance

error

ZM crashes on start

When using a docker-compose.yml from the repository I get the following error:

Error log
2024-04-20T22:34:27.423034177Z s6-rc: info: service s6rc-oneshot-runner: starting
2024-04-20T22:34:27.423947385Z s6-rc: info: service s6rc-oneshot-runner successfully started
2024-04-20T22:34:27.423983844Z s6-rc: info: service fix-attrs: starting
2024-04-20T22:34:27.425476052Z s6-rc: info: service fix-attrs successfully started
2024-04-20T22:34:27.425509344Z s6-rc: info: service legacy-cont-init: starting
2024-04-20T22:34:27.426774760Z cont-init: info: running /etc/cont-init.d/00-reconfigure-user.sh
2024-04-20T22:34:27.428307385Z 2024-04-20 17:34:27.428092677 [reconfigure-user] INFO Setting permissions for user www-data
2024-04-20T22:34:27.434110260Z 2024-04-20 17:34:27.433768760 [reconfigure-user] INFO Setting permissions for user nobody at /log
2024-04-20T22:34:27.451830510Z cont-init: info: /etc/cont-init.d/00-reconfigure-user.sh exited 0
2024-04-20T22:34:27.451853844Z cont-init: info: running /etc/cont-init.d/10-log-config.sh
2024-04-20T22:34:27.453764969Z 2024-04-20 17:34:27.453516969 [log-config] INFO Configuring log rotation with a maximum of 20 logs and a max log size of 1000000 bytes
2024-04-20T22:34:27.454047927Z cont-init: info: /etc/cont-init.d/10-log-config.sh exited 0
2024-04-20T22:34:27.454051510Z cont-init: info: running /etc/cont-init.d/20-system-config.sh
2024-04-20T22:34:27.455826010Z 2024-04-20 17:34:27.455547844 [system-config] INFO Setting system timezone to America/Chicago
2024-04-20T22:34:27.457277219Z 2024-04-20 17:34:27.456940677 [system-config] INFO Configuring PHP Time
2024-04-20T22:34:27.475462719Z 2024-04-20 17:34:27.475134844 [system-config] INFO Applying PHP Optimizations
2024-04-20T22:34:27.479695344Z 2024-04-20 17:34:27.479440344 [system-config] INFO Redirecting PHP Logs to stdout
2024-04-20T22:34:27.480358677Z cont-init: info: /etc/cont-init.d/20-system-config.sh exited 0
2024-04-20T22:34:27.480367844Z cont-init: info: running /etc/cont-init.d/30-zm-config.sh
2024-04-20T22:34:27.482390635Z 2024-04-20 17:34:27.482046844 [zm-config] INFO Configuring ZoneMinder db Settings
2024-04-20T22:34:27.483970677Z sed: preserving permissions for '/config/sedwUMKn7': Permission denied
2024-04-20T22:34:27.485904635Z sed: preserving permissions for '/config/sedG84BEc': Permission denied
2024-04-20T22:34:27.487764510Z sed: preserving permissions for '/config/sedsM2ATf': Permission denied
2024-04-20T22:34:27.489190969Z sed: preserving permissions for '/config/sedAg1PVj': Permission denied
2024-04-20T22:34:27.489767385Z cont-init: info: /etc/cont-init.d/30-zm-config.sh exited 0
2024-04-20T22:34:27.489771302Z cont-init: info: running /etc/cont-init.d/40-msmtp-config.sh
2024-04-20T22:34:27.491188719Z 2024-04-20 17:34:27.490979760 [msmtp-config] INFO Configuring msmtp settings...
2024-04-20T22:34:27.493883219Z cont-init: info: /etc/cont-init.d/40-msmtp-config.sh exited 0
2024-04-20T22:34:27.493904094Z cont-init: info: running /etc/cont-init.d/50-nginx-config.sh
2024-04-20T22:34:27.495406052Z 2024-04-20 17:34:27.495113677 [nginx-config] INFO Configuring nginx settings...
2024-04-20T22:34:27.496874844Z cont-init: info: /etc/cont-init.d/50-nginx-config.sh exited 0
2024-04-20T22:34:27.497109677Z s6-rc: info: service legacy-cont-init successfully started
2024-04-20T22:34:27.497201010Z s6-rc: info: service legacy-services: starting
2024-04-20T22:34:27.498745260Z services-up: info: copying legacy longrun fcgiwrap (no readiness notification)
2024-04-20T22:34:27.499030094Z services-up: info: copying legacy longrun mariadb (no readiness notification)
2024-04-20T22:34:27.499321385Z services-up: info: copying legacy longrun mariadb-configure (no readiness notification)
2024-04-20T22:34:27.499614719Z services-up: info: copying legacy longrun nginx (no readiness notification)
2024-04-20T22:34:27.499834969Z services-up: info: copying legacy longrun php-fpm (no readiness notification)
2024-04-20T22:34:27.500043135Z services-up: info: copying legacy longrun socklog (no readiness notification)
2024-04-20T22:34:27.500247885Z services-up: info: copying legacy longrun zoneminder (no readiness notification)
2024-04-20T22:34:27.501782677Z s6-rc: info: service legacy-services successfully started
2024-04-20T22:34:27.506056677Z [nginx] 2024-04-20 17:34:27.504149802 INFO Waiting for ZoneMinder to start
2024-04-20T22:34:27.506656302Z [mariadb] 2024-04-20 17:34:27.504453677 INFO Waiting for Mariadb to start
2024-04-20T22:34:27.506672177Z [fcgiwrap] 2024-04-20 17:34:27.503546802 INFO Starting fcgiwrap...
2024-04-20T22:34:27.506761135Z [mariadb-configure] 2024-04-20 17:34:27.504542969 INFO Waiting for MariaDB to start
2024-04-20T22:34:27.506821469Z [php-fpm] 2024-04-20 17:34:27.504360302 INFO Starting PHP-fpm...
2024-04-20T22:34:27.507113969Z [zoneminder-service] 2024-04-20 17:34:27.504080552 INFO Waiting for Socklog to start
2024-04-20T22:34:27.507118427Z [zoneminder-service] 2024-04-20 17:34:27.505897802 INFO Waiting for MariaDB to start
2024-04-20T22:34:31.593079804Z [zoneminder-service] 2024-04-20 17:34:31.590655846 INFO Waiting for mariadb-configure to complete...
2024-04-20T22:34:31.595534471Z [mariadb] 2024-04-20 17:34:31.593473762 INFO Mariadb is up! Proceeding to monitoring.
2024-04-20T22:34:31.615998012Z [mariadb-configure] 2024-04-20 17:34:31.615374221 INFO Configuring ZoneMinder Email From Address...
2024-04-20T22:34:31.617627387Z [mariadb-configure] 2024-04-20 17:34:31.617007387 INFO Disabling file log to prevent duplicate logs from syslog
2024-04-20T22:34:31.619879304Z [mariadb-configure] 2024-04-20 17:34:31.619077262 INFO Applying db changes...
2024-04-20T22:34:31.628350137Z [mariadb-configure] 2024-04-20 17:34:31.627808846 INFO Upgrading db if necessary
2024-04-20T22:34:31.683840346Z Please give a valid option
2024-04-20T22:34:31.694474137Z [mariadb-configure] 2024-04-20 17:34:31.694170262 INFO Usage:
2024-04-20T22:34:31.695065762Z [mariadb-configure] 2024-04-20 17:34:31.694737429 INFO zmupdate.pl -c,--check | -f,--freshen | -v<version>,--version=<version>
2024-04-20T22:34:31.695712804Z [mariadb-configure] 2024-04-20 17:34:31.695393846 INFO [-u <dbuser> -p <dbpass>]
2024-04-20T22:34:31.696278346Z [mariadb-configure] 2024-04-20 17:34:31.695955512 INFO 
2024-04-20T22:34:31.696820096Z [mariadb-configure] 2024-04-20 17:34:31.696513804 INFO Options:
2024-04-20T22:34:31.697398721Z [mariadb-configure] 2024-04-20 17:34:31.697050804 INFO -c, --check - Check for updated versions of ZoneMinder -f, --freshen -
2024-04-20T22:34:31.697955054Z [mariadb-configure] 2024-04-20 17:34:31.697614304 INFO Freshen the configuration in the database. Equivalent of old zmconfig.pl
2024-04-20T22:34:31.698566804Z [mariadb-configure] 2024-04-20 17:34:31.698225429 INFO -noi --migrate-events - Update database structures as per
2024-04-20T22:34:31.699074387Z [mariadb-configure] 2024-04-20 17:34:31.698819012 INFO USE_DEEP_STORAGE setting. -v <version>, --version=<version> - Force
2024-04-20T22:34:31.699625929Z [mariadb-configure] 2024-04-20 17:34:31.699319721 INFO upgrade to the current version from <version> -u <dbuser>,
2024-04-20T22:34:31.700083929Z [mariadb-configure] 2024-04-20 17:34:31.699858346 INFO --user=<dbuser> - Alternate DB user with privileges to alter DB -p
2024-04-20T22:34:31.700636387Z [mariadb-configure] 2024-04-20 17:34:31.700345304 INFO <dbpass>, --pass=<dbpass> - Password of alternate DB user with
2024-04-20T22:34:31.701192637Z [mariadb-configure] 2024-04-20 17:34:31.700909221 INFO privileges to alter DB -s, --super - Use system maintenance account on
2024-04-20T22:34:31.701711679Z [mariadb-configure] 2024-04-20 17:34:31.701432762 INFO debian based systems instead of unprivileged account -d <dir>,
2024-04-20T22:34:31.702161304Z [mariadb-configure] 2024-04-20 17:34:31.701917346 INFO --dir=<dir> - Directory containing update files if not in default build
2024-04-20T22:34:31.702720304Z [mariadb-configure] 2024-04-20 17:34:31.702434971 INFO location -interactive - interact with the user -nointeractive - do not
2024-04-20T22:34:31.703196512Z [mariadb-configure] 2024-04-20 17:34:31.702951637 INFO interact with the user
2024-04-20T22:34:31.703689596Z [mariadb-configure] 2024-04-20 17:34:31.703428887 INFO 
2024-04-20T22:34:31.704448429Z [mariadb-configure] 2024-04-20 17:34:31.704180304 INFO Refreshing db
2024-04-20T22:34:31.748087971Z DBD::mysql::st execute failed: Table 'zm.users' doesn't exist at /usr/bin/zmupdate.pl line 1045.
2024-04-20T22:34:31.748115471Z Can't execute: Table 'zm.users' doesn't exist at /usr/bin/zmupdate.pl line 1045.
2024-04-20T22:34:31.748562304Z [mariadb-configure] 2024-04-20 17:34:31.748148637 INFO 
2024-04-20T22:34:31.749138179Z [mariadb-configure] 2024-04-20 17:34:31.748846304 INFO Freshening configuration in database
2024-04-20T22:34:31.749687179Z [mariadb-configure] 2024-04-20 17:34:31.749429221 INFO Migratings passwords, if any...
2024-04-20T22:34:31.751147679Z [zoneminder-service] 2024-04-20 17:34:31.750871846 INFO Starting ZoneMinder...
2024-04-20T22:34:31.784195929Z DBD::mysql::st execute failed: Table 'zm.states' doesn't exist at /usr/bin/zmpkg.pl line 325.
2024-04-20T22:34:31.786311137Z [zoneminder-service] 2024-04-20 17:34:31.785966096 INFO ZoneMinder is up! Proceeding to monitoring.
2024-04-20T22:34:31.787770554Z [nginx] 2024-04-20 17:34:31.787459679 INFO Starting Nginx...
2024-04-20T22:34:31.789531887Z [zoneminder-service] 2024-04-20 17:34:31.789195929 ERROR ZoneMinder has crashed! Exiting...
2024-04-20T22:34:31.791905596Z s6-rc: info: service legacy-services: stopping
2024-04-20T22:34:31.795889887Z [fcgiwrap] 2024-04-20 17:34:31.795583221 fcgiwrap INFO Stopping fcgiwrap
2024-04-20T22:34:31.828079387Z DBD::mysql::st execute failed: Table 'zm.states' doesn't exist at /usr/bin/zmpkg.pl line 325.
2024-04-20T22:34:34.797544958Z s6-svwait: fatal: timed out
2024-04-20T22:34:34.799483958Z s6-rc: info: service legacy-services successfully stopped
2024-04-20T22:34:34.799874208Z s6-rc: info: service legacy-cont-init: stopping
2024-04-20T22:34:34.807844250Z s6-rc: info: service legacy-cont-init successfully stopped
2024-04-20T22:34:34.807992416Z s6-rc: info: service fix-attrs: stopping
2024-04-20T22:34:34.809872083Z s6-rc: info: service fix-attrs successfully stopped
2024-04-20T22:34:34.810234000Z s6-rc: info: service s6rc-oneshot-runner: stopping
2024-04-20T22:34:34.813052916Z s6-rc: info: service s6rc-oneshot-runner successfully stopped

Looks like crashes here:

[mariadb-configure] 2024-04-20 17:34:31.704180304 INFO Refreshing db
2024-04-20T22:34:31.748087971Z DBD::mysql::st execute failed: Table 'zm.users' doesn't exist at /usr/bin/zmupdate.pl line 1045.

I also see this in the database logs:
2024-04-20 17:33:16 8 [ERROR] mariadbd: Incorrect information in file: './zm/logs.frm'

ERR_CONNECTION_REFUSED after fresh install

What are you using in your docker compose file? It seems that zoneminder is having issues starting up.

Originally posted by @alexyao2015 in #29 (comment)

That's the docker-compose.yml file content:

version: '3.6'

services:
  # !! WARNING: !!
  # If using linuxserver/mariadb, you will need to add
  # skip-log-bin to mysqld and disable all log_bin options
  db:
    image: mariadb:10.7.3
    restart: always
    container_name: zm_db
    ports:
      - 3306:3306
    volumes:
      - ./zm/db:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=zm
    env_file:
      - ./.env

  zoneminder:
    image: ghcr.io/zoneminder-containers/zoneminder-base:1.36.12
    restart: always
    container_name: zm
    stop_grace_period: 45s
    depends_on:
      - db
    ports:
      - 80:80
    volumes:
      - ./zm/data:/data
      - ./zm/config:/config
      - ./zm/log:/log
      - type: tmpfs
        target: /dev/shm
        tmpfs:
          size: 1000000000
    env_file:
      - ./.env

s6-overlay-suexec: fatal: can only run as pid 1

Hello,

When launching the "main" tag from dockerhub I have an error : "s6-overlay-suexec: fatal: can only run as pid 1"
I've tried setting the PUID/PGID to 0 or blank and the issue is still there.

Any idea? Thanks!

version 1.36.12 not starting in aarch64

Hi,

first, thanks a lot for the work. I was trying zoneminder and with the version 1.36.12 running in aarch64 I get this error

zoneminder-base-zoneminder-1 | /init: 37: exec: s6-overlay-suexec: Exec format error zoneminder-base-zoneminder-1 exited with code 126

I rolled back to version 1.36.11 and zoneminder starts.

I took a quick look and it might be related to this change as it uses a binary not compatible with aarch64, but I don't know for sure

abf7b52

Best regards

Help run

I have a device - TerraMaster F4-210 (ARM V8 64-bit quad-core processor, a frequency of up to 1.4 GHz and 2GB RAM)

Docker is installed on it.

I download and install your application. It starts up and runs. I can’t connect to it. The IP address is not available.

Can you help me with something?

Thanks!

Enabling HTTPS

Even though I've set the ports in the docker compose file, I'm getting Unable to connect error when trying to access Zoneminder through https. I have keys generated but I'm not sure how to configure the server in the container to use them

Concurrent stream limit

I was having issues with multiple clients viewing my video streams and I traced it back to FCGIWRAP_PROCESSES set at 15.

Perhaps this could be mentioned in the readme that this environment variable will have to be increased for setups with many concurrent streams being viewed at once.

Licensing issues pertaining to the docker image as the repo is copyright with no license file.

Since your repo does not have a license, users cannot fork and build off of your code. However, docker image licensing is quite different.

It is my understanding I can use a docker image as a base image in a multi image build even if the repo does not have a license. This is because the software you are packaging in the docker image are OSS licensed software (nginx, zoneminder, mariadb).

I am here asking for clarification of your licensing terms. Obviously the repo (dockerfile) is copyright to you but the image is up for debate. I would prefer your blessing to use the image as a base image in a multi image build. This is for the new ML system, I would like to install the client side libs on top of your image. The resulting dockerfile will be licensed as MIT or GPL (dependent on any issues with ZM's license).

I look forward to your response.

PUID/PGID?

If I set PUID/PGID to 1000, the container fails to startup.

zoneminder     | [fcgiwrap] 2021-10-18 19:50:38.765713668 fcgiwrap INFO Stopping fcgiwrap
zoneminder     | fcgiwrap: no process found
zoneminder     | [fcgiwrap] 2021-10-18 19:50:39.748224156 INFO Starting fcgiwrap...
zoneminder     | [fcgiwrap] Failed to bind: Permission denied
zoneminder     | [fcgiwrap] 2021-10-18 19:50:39.767367557 fcgiwrap INFO Stopping fcgiwrap
zoneminder     | fcgiwrap: no process found
zoneminder     | [fcgiwrap] 2021-10-18 19:50:40.744734952 INFO Starting fcgiwrap...
zoneminder     | [fcgiwrap] Failed to bind: Permission denied

I can run it without this option, but it uses UID/GUID 911 for two directories. Log is uses a different uid/guid combination.

Zoneminder is not writing videos to my storage location. What UID/GUID should I use for the folder? I've tried 911:911 but it's still not writing videos.

    volumes:
      - /docker/zm3/data:/data
      - /docker/zm3/config:/config
      - /docker/zm3/log:/log
      - /bigboy/SecurityCamera:/video
greg@elvis:/bigboy/SecurityCamera$ pwd
/bigboy/SecurityCamera
greg@elvis:/bigboy/SecurityCamera$ ls -la
total 8
drwxrwxrwx  2  911  911 4096 Oct 18 19:47 .
drwxr-xr-x 10 greg greg 4096 Oct 18 14:05 ..
greg@elvis:/docker/zm3$ pwd
/docker/zm3
greg@elvis:/docker/zm3$ ls -la
total 20
drwxr-xr-x  5 root   root    4096 Oct 18 14:06 .
drwxr-xr-x 26 greg   greg    4096 Oct 18 14:06 ..
drwxr-xr-x  3    911     911 4096 Oct 18 19:51 config
drwxr-xr-x  4    911     911 4096 Oct 18 14:06 data
drwxr-xr-x  9 nobody nogroup 4096 Oct 18 14:06 log

Installed, not connecting

I had to tweak the yaml file by changing the version to 3.7 as version 3 does not support the format that the volumes are defined with (specifically the tmpfs volume). After that, docker-compose started without errors, but when I go to the server IP, http://192.168.33.31/, I get an nginx error, "502 Bad Gateway". The error from the docker terminal is:

zoneminder_1 | [nginx] 2021/09/01 14:39:06 [crit] 1501#1501: *4 connect() to unix:/run/php/php7.3-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.33.3, server: , request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.3-fpm.sock:", host: "192.168.33.31"

I've setup a couple zoneminder servers in VM's, but this is my first container.

Zoneminder container starts with state STOPPED

There's this errors in the logs:

[zoneminder-service] 2023-02-22 14:15:02.989250625 INFO Starting ZoneMinder...
[zoneminder] 2023-02-22 14:15:11.184118221 local1.err: Feb 22 14:15:11 zmdc[922]: FAT [Can't connect to zmdc.pl server process at /zoneminder/run/zmdc.sock: No such file or directory]
[zoneminder] 2023-02-22 14:15:11.186904572 local1.err: Feb 22 14:15:11 zmpkg[916]: ERR [Unable to run "/usr/bin/zmdc.pl startup", output is "Starting server", status is 255]
[zoneminder] 2023-02-22 14:15:11.240608636 local1.err: Feb 22 14:15:11 zmpkg[916]: ERR [Unable to run "/usr/bin/zmdc.pl start zmfilter.pl --filter_id=1 --daemon", output is "Unable to connect to server using socket at /zoneminder/run/zmdc.sock", status is 255]
[zoneminder] 2023-02-22 14:15:11.292992424 local1.err: Feb 22 14:15:11 zmpkg[916]: ERR [Unable to run "/usr/bin/zmdc.pl start zmfilter.pl --filter_id=2 --daemon", output is "Unable to connect to server using socket at /zoneminder/run/zmdc.sock", status is 255]
[zoneminder] 2023-02-22 14:15:11.345458692 local1.err: Feb 22 14:15:11 zmpkg[916]: ERR [Unable to run "/usr/bin/zmdc.pl start zmwatch.pl", output is "Unable to connect to server using socket at /zoneminder/run/zmdc.sock", status is 255]
[zoneminder] 2023-02-22 14:15:11.397436936 local1.err: Feb 22 14:15:11 zmpkg[916]: ERR [Unable to run "/usr/bin/zmdc.pl start zmupdate.pl -c", output is "Unable to connect to server using socket at /zoneminder/run/zmdc.sock", status is 255]
[zoneminder] 2023-02-22 14:15:11.449087879 local1.err: Feb 22 14:15:11 zmpkg[916]: ERR [Unable to run "/usr/bin/zmdc.pl start zmtelemetry.pl", output is "Unable to connect to server using socket at /zoneminder/run/zmdc.sock", status is 255]
[zoneminder] 2023-02-22 14:15:11.501916608 local1.err: Feb 22 14:15:11 zmpkg[916]: ERR [Unable to run "/usr/bin/zmdc.pl start zmstats.pl", output is "Unable to connect to server using socket at /zoneminder/run/zmdc.sock", status is 255]
[zoneminder-service] 2023-02-22 14:15:11.506256361 INFO ZoneMinder is up! Proceeding to monitoring.

If I exec into the container and run zmpkg.pl start manually, it will then start.

Customizing MariaDB port

Hello.

I can't find any documentation on using a custom port number for MariaDB. I have an existing database server instance running on a port other than the default 3306. But I can't find any environment variable to set the port on my Zoneminder docker run. I'll appreciate if anyone can help me.

Thanks.

camera control not parsed

Hi,
installed Zoneminder container in Armbian system.

I can connect the Tapo Camera and I want to control it remotely.
I installed the control script from https://github.com/oparm/zoneminder-tapo-c200

I can see zmcontro_1 starting and opening TapoC200 controller but when I press the control keys inside the console page it is like no command starts. I guess it is like the console page does not manage the control keys to forward controls to the zmcontrol

2/11/24, 11:37:14 AM CST | zmc_m1 |   | 111426 | INF | BOX Cusago: 0 - Capturing at 0.00 fps, capturing bandwidth 133bytes/sec Analysing at 0.00 fps | zm_monitor.cpp | 1680
2/11/24, 11:37:14 AM CST | zmcontrol_1 |   | 111436 | INF | Tapo C200 Controller opened | zmcontrol.pl | -
2/11/24, 11:37:13 AM CST | zmdc |   | 111355 | INF | 'zmstats.pl' already running at 24/02/11 11:37:13, pid = 111487 | zmdc.pl | -
2/11/24, 11:37:13 AM CST | zmcontrol_1 |   | 111436 | INF | Control server 1/TapoC200 starting at 24/02/11 11:37:13 | zmcontrol.pl | -
2/11/24, 11:37:13 AM CST | zmcontrol_1 |   | 111436 | INF | Starting control server 1/TapoC200 | zmcontrol.pl | -

Can you help me?

nginx and zoneminder are not started automatically

Up until the last week or so, when the zoneminder-base docker image was started with
docker-compose up -d
nginx and zoneminder would automatically start up.

I don't know if this is some configuration change from my docker-compose.yaml file or something with the zoneminder-base packages, but I now have to manually start both of these.

I've been using the specific nightly tags such as nightly-1161 and nightly-1170.

cannot pull library/mariadb

Hello,
I'm trying to get this running on Raspberry pi 4B (32-bit) and after I try to run docker-compose up -d
I get:

Pulling db (mariadb:)...
latest: Pulling from library/mariadb
ERROR: no matching manifest for linux/arm/v7 in the manifest list entries

I notice there is warning in yaml file:

  # !! WARNING: !!
  # If using linuxserver/mariadb, you will need to add
  # skip-log-bin to mysqld and disable all log_bin options

but I cannot find mysqld file or folder.

I'm not linux pro but I already have multiple other containers on raspberries in my environment.

I will be very happy if someone can point me in the right direction as this project would help me a lot.
Thank you

How to use multi-server?

So you said "There is also full support for multi-server setups with automation to link all servers!" but how would i auto-link them?
Do the other servers need to be built on the multi .yml as well or just the regular?
I know this is more of a ZM question but can servers make monitors fed from the camera feeds from other servers?
And how would I connect servers over WAN?

ERR_CONNECTION_REFUSED after fresh install

After a fresh installation i got only a ERR_CONNECTION_REFUSED.
I followed your Guide for "installation":

  1. Install Docker and docker-compose
  2. Download docker-compose.yml or docker-compose-multi.yml depending on single/multi server setups.
  3. Download .env
  4. Place all these files in the same folder and configure .env and the yml files as you please.
  5. Run docker-compose up -d to start.

If i expose the DB Port 3306, i can reach it. I had tried different version to check if it is related to #15. But have the same effect.
The Log is showing following:

[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] 00-fix-permissions: applying...
[fix-attrs.d] 00-fix-permissions: exited 0.
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 00-reconfigure-user.sh: executing...
2022-03-14 10:37:13.561521491 [reconfigure-user] INFO Reconfiguring GID and UID
usermod: no changes
2022-03-14 10:37:13.624640454 [reconfigure-user] INFO User uid:    911
2022-03-14 10:37:13.649232064 [reconfigure-user] INFO User gid:    911
[cont-init.d] 00-reconfigure-user.sh: exited 0.
[cont-init.d] 10-log-config.sh: executing...
2022-03-14 10:37:13.687597794 [log-config] INFO Configuring log rotation with a maximum of 20 logs and a max log size of 1000000 bytes
[cont-init.d] 10-log-config.sh: exited 0.
[cont-init.d] 20-system-config.sh: executing...
2022-03-14 10:37:13.738328453 [system-config] INFO Setting system timezone to Europe/Berlin
2022-03-14 10:37:13.753504306 [system-config] INFO Configuring PHP Time
2022-03-14 10:37:13.958881953 [system-config] INFO Applying PHP Optimizations
2022-03-14 10:37:14.013709770 [system-config] INFO Redirecting PHP Logs to stdout
[cont-init.d] 20-system-config.sh: exited 0.
[cont-init.d] 30-zm-config.sh: executing...
2022-03-14 10:37:14.057673263 [zm-config] INFO Configuring ZoneMinder db Settings
[cont-init.d] 30-zm-config.sh: exited 0.
[cont-init.d] 40-msmtp-config.sh: executing...
2022-03-14 10:37:14.127192105 [msmtp-config] INFO Configuring msmtp settings...
[cont-init.d] 40-msmtp-config.sh: exited 0.
[cont-init.d] 50-nginx-config.sh: executing...
2022-03-14 10:37:14.204442266 [nginx-config] INFO Configuring nginx settings...
[cont-init.d] 50-nginx-config.sh: exited 0.
[cont-init.d] ~-socklog: executing...
[cont-init.d] ~-socklog: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
[mariadb-configure] 2022-03-14 10:37:14.690201501 INFO Waiting for MariaDB to start
[zoneminder-service] 2022-03-14 10:37:14.652958924 INFO Waiting for MariaDB to start
[php-fpm] 2022-03-14 10:37:14.661785856 INFO Starting PHP-fpm...
[fcgiwrap] 2022-03-14 10:37:14.649368010 INFO Starting fcgiwrap...
[nginx] 2022-03-14 10:37:14.670136668 INFO Waiting for ZoneMinder to start
[mariadb] 2022-03-14 10:37:14.671398611 INFO Waiting for Mariadb to start
[zoneminder-service] 2022-03-14 10:37:14.776809588 INFO Waiting for mariadb-configure to complete...
[mariadb] 2022-03-14 10:37:14.788786522 INFO Mariadb is up! Proceeding to monitoring.
[mariadb-configure] 2022-03-14 10:37:14.852696350 INFO Configuring ZoneMinder Email From Address...
2022-03-14 10:37:14.861701821  listening on /dev/log, gid=65534, uid=65534, starting.
[mariadb-configure] 2022-03-14 10:37:14.864501120 INFO Applying db changes...
[mariadb-configure] 2022-03-14 10:37:14.914583870 INFO Upgrading db if necessary
[mariadb-configure] 2022-03-14 10:37:15.732027219 INFO
[mariadb-configure] 2022-03-14 10:37:15.738331432 INFO Database already at version 1.36.7, update skipped.
[mariadb-configure] 2022-03-14 10:37:15.744649562 INFO
[mariadb-configure] 2022-03-14 10:37:15.762880043 INFO Refreshing db
[mariadb-configure] 2022-03-14 10:37:16.575881156 INFO
[mariadb-configure] 2022-03-14 10:37:16.581601793 INFO Freshening configuration in database
[mariadb-configure] 2022-03-14 10:37:16.589743274 INFO Migratings passwords, if any...
[mariadb-configure] 2022-03-14 10:37:16.603276689 INFO Loading config from DB 221 entries
[mariadb-configure] 2022-03-14 10:37:16.612047038 INFO Saving config to DB 221 entries
[zoneminder-service] 2022-03-14 10:37:16.951708428 INFO Starting ZoneMinder...
2022-03-14 10:37:17.541473782  local1.info: Mar 14 10:37:17 zmpkg[1378]: INF [Sanity checking States table...]
2022-03-14 10:37:17.553990793  local1.info: Mar 14 10:37:17 zmpkg[1378]: INF [Command: start]

Other tries to identify the problem:

docker exec -it zm wget 127.0.0.1:80

--2022-03-14 10:39:57--  http://127.0.0.1/
Connecting to 127.0.0.1:80... failed: Connection refused.

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.