scline / docker-cacti Goto Github PK
View Code? Open in Web Editor NEWCacti version 1+ under Docker
Cacti version 1+ under Docker
We have to take a look into this script, some weird things after testing that.
Page does not load properly, and stuff
I'll take a look
Hi,
I am experimenting that problem below now.
RRDtool Says:
ERROR: opening '/cacti/rra/sw-3850-idb_nonunicast_out_26.rrd': No such file or directory
Docker Run Cant get out of this state..
root@CETPCACT007:~# docker logs -f 52
2020-09-02_12:32 [Note] Setting server timezone settings to 'Europe/Lisbon'
2020-09-02_12:32 [PHP-SNMP] Insalling php-snmp since ENV variable 'PHP_SNMP' is set to 1
CentOS-8 - AppStream 7.4 MB/s | 5.8 MB 00:00
CentOS-8 - Base 5.4 MB/s | 2.2 MB 00:00
CentOS-8 - Extras 31 kB/s | 7.3 kB 00:00
CentOS-8 - PowerTools 6.2 MB/s | 1.9 MB 00:00
Extra Packages for Enterprise Linux Modular 8 - 182 kB/s | 117 kB 00:00
Extra Packages for Enterprise Linux 8 - x86_64 8.9 MB/s | 7.9 MB 00:00
Package php-snmp-7.2.24-1.module_el8.2.0+313+b04d0a66.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
46 files removed
2020-09-02_12:32 [Apache] Validating httpd cacti configuration is present.
2020-09-02_12:32 [Apache] /etc/httpd/conf.d/cacti.conf does not exist, copying a new one over.
2020-09-02_12:32 [Apache] Applying cacti URL enviromental variable to /etc/httpd/conf.d/cacti.conf
2020-09-02_12:32 [Apache] Missing HTTPS certs, generating self-signed one's.
Generating a RSA private key
.................................................................................................++++
.........................++++
writing new private key to '/etc/ssl/certs/cacti.key'
-----
2020-09-02_12:32 [Note] Setting cacti file permissions.
2020-09-02_12:32 [Note] Starting crond service.
2020-09-02_12:32 [Note] Starting snmpd service.
2020-09-02_12:32 [Note] Starting php-fpm service.
2020-09-02_12:32 [Note] Starting httpd service.
The backup script copies the resultant backup .tar.gz file to /backup however readme indicates it should be /backups
The docker-compose files also map /backups which then doesn't work as the backups are created within the container not in the mapped volume.
I'd submit changes, but I'm not sure if you'd prefer backup or backups to be used. It does contain multiple so the plural would make more sense. This would need the backup.sh to be updated and the readme.
The main cacti instance will auto-update remote pollers but not SPINE. Current upgrade script breaks permissions on remote polling aswell.
Initializing the DB is unsuccessful, resulting in Error 111, can't connect. The --port flag is missing from the statements.
Hi,
I can't log in in cacti. Is there any default user? Can I set it in installation?
Thanks
Does it make sense to store the RRAs in a persistent location so as to not have to rely on a backup scripts? If so, is the current storage location simply /cacti/rra?
says
/dev/tcp/localhosts/3306: cannot assign requested address
Hi Guys,
I'm new to docker so sorry for the odd questions.
I want to launch a container on my Synology device. But when I choose "Use the same network as Docker Host" I cannot change the port settings. I think this is the reason that I'm getting the following error's:
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
Is it also possible to add port as a variable in the Advanced Settings? Or do I have anyother options?
I get this error when I try to install Cacti on my server.
cacti exited with code 1
[root@NMS_Server compose]# docker-compose up Pulling db (mariadb:10.3)... 10.3: Pulling from library/mariadb 32d7611b468c: Pull complete e5be16fdc306: Pull complete a361e87bde5e: Pull complete 324b95d44184: Pull complete c7a02ed92077: Pull complete 8ea02edf9bf7: Pull complete 7f24c9bd9fe3: Pull complete 0d6d5537d6c9: Pull complete 309e2f0e8909: Pull complete fb7c12284efd: Pull complete b51c8be748ee: Pull complete ff7d4b81455a: Pull complete 805638aa8a32: Pull complete Digest: sha256:518be0d8a58b0f080eb623549c6a58bcad3e4a4489af447a0c612067ed474ded Status: Downloaded newer image for mariadb:10.3 Pulling cacti (smcline06/cacti:)... latest: Pulling from smcline06/cacti 7a0437f04f83: Pull complete 33c370c2cd19: Pull complete 2a132a08075a: Pull complete ad41a6ac1796: Pull complete c8d6ce164cce: Pull complete 8b2570e5be9f: Pull complete b9a8e7d4bec2: Pull complete 87277c0dc6bf: Pull complete 1b28abea8ede: Pull complete 6f9a9fbcbe97: Pull complete 77e332dc0e39: Pull complete cfc1f915d859: Pull complete 2fb0f7ab8985: Pull complete 600a0a78c8b2: Pull complete 683e4002c613: Pull complete da294e368fc3: Pull complete 8e20a2ef92c5: Pull complete 5634aa74e542: Pull complete Digest: sha256:aeff878b4da26a7b43e44f315c4e1e466b37578846d6c9ea8d0df0bf8734e727 Status: Downloaded newer image for smcline06/cacti:latest Creating cacti_db ... done Creating cacti ... done Attaching to cacti_db, cacti cacti | standard_init_linux.go:211: exec user process caused "exec format error" cacti_db | 2021-03-07 19:44:07+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.3.28+maria~focal started. cacti_db | 2021-03-07 19:44:07+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' cacti_db | 2021-03-07 19:44:07+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.3.28+maria~focal started. cacti_db | 2021-03-07 19:44:07 0 [Note] mysqld (mysqld 10.3.28-MariaDB-1:10.3.28+maria~focal) starting as process 1 ... cacti_db | 2021-03-07 19:44:07 0 [Warning] The parameter innodb_file_format is deprecated and has no effect. It may be removed in future releases. See https://mariadb.com/kb/en/library/xtradbinnodb-file-format/ cacti_db | 2021-03-07 19:44:07 0 [Note] InnoDB: Using Linux native AIO cacti_db | 2021-03-07 19:44:07 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins cacti_db | 2021-03-07 19:44:07 0 [Note] InnoDB: Uses event mutexes cacti_db | 2021-03-07 19:44:07 0 [Note] InnoDB: Compressed tables use zlib 1.2.11 cacti_db | 2021-03-07 19:44:07 0 [Note] InnoDB: Number of pools: 1 cacti_db | 2021-03-07 19:44:07 0 [Note] InnoDB: Using generic crc32 instructions cacti_db | 2021-03-07 19:44:07 0 [Note] InnoDB: Initializing buffer pool, total size = 1G, instances = 9, chunk size = 113.778M cacti_db | 2021-03-07 19:44:07 0 [Note] InnoDB: Completed initialization of buffer pool cacti_db | 2021-03-07 19:44:07 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority(). cacti_db | 2021-03-07 19:44:07 0 [Note] InnoDB: Starting crash recovery from checkpoint LSN=1625479 cacti_db | 2021-03-07 19:44:08 0 [Note] InnoDB: 128 out of 128 rollback segments are active. cacti_db | 2021-03-07 19:44:08 0 [Note] InnoDB: Removed temporary tablespace data file: "ibtmp1" cacti_db | 2021-03-07 19:44:08 0 [Note] InnoDB: Creating shared tablespace for temporary tables cacti_db | 2021-03-07 19:44:08 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ... cacti_db | 2021-03-07 19:44:08 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB. cacti_db | 2021-03-07 19:44:08 0 [Note] InnoDB: Waiting for purge to start cacti_db | 2021-03-07 19:44:08 0 [Note] InnoDB: 10.3.28 started; log sequence number 1625488; transaction id 20 cacti_db | 2021-03-07 19:44:08 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool cacti_db | 2021-03-07 19:44:08 0 [Note] Plugin 'FEEDBACK' is disabled. cacti_db | 2021-03-07 19:44:08 0 [Note] Recovering after a crash using tc.log cacti_db | 2021-03-07 19:44:08 0 [Note] Starting crash recovery... cacti_db | 2021-03-07 19:44:08 0 [Note] Crash recovery finished. cacti_db | 2021-03-07 19:44:08 0 [Note] InnoDB: Buffer pool(s) load completed at 210307 19:44:08 cacti_db | 2021-03-07 19:44:08 0 [Note] Server socket created on IP: '::'. cacti_db | 2021-03-07 19:44:08 0 [Warning] 'proxies_priv' entry '@% root@db' ignored in --skip-name-resolve mode. cacti_db | 2021-03-07 19:44:08 0 [Note] Reading of all Master_info entries succeeded cacti_db | 2021-03-07 19:44:08 0 [Note] Added new Master_info '' to hash table cacti_db | 2021-03-07 19:44:08 0 [Note] mysqld: ready for connections. cacti_db | Version: '10.3.28-MariaDB-1:10.3.28+maria~focal' socket: '/var/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution cacti exited with code 1
On checking the logs of the containers created
I get this error for in the smcline06/cacti container.
standard_init_linux.go:211: exec user process caused "exec format error"
Looks like newer versions of MySQL and Percona are causing the following issues when installing via start.sh
ERROR 1227 (42000) at line 6: Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation
2020-08-16_21:09 [New Install] Database is up! - configuring DB located at mysql.mysql.svc.cluster.local:3306 (this can take a few minutes).
2020-08-16_21:09 [New Install] Container has been instructed to create new Database on remote system.
2020-08-16_21:09 [New Install] CREATE DATABASE cacti /*\!40100 DEFAULT CHARACTER SET utf8 */;
ERROR 1007 (HY000) at line 1: Can't create database 'cacti'; database exists
2020-08-16_21:09 [New Install] GRANT ALL ON cacti.* TO 'cacti' IDENTIFIED BY '*******';
ERROR 1044 (42000) at line 1: Access denied for user 'root'@'%' to database 'cacti'
2020-08-16_21:09 [New Install] GRANT SUPER ON *.* TO 'cacti'@'%';
ERROR 1045 (28000) at line 1: Access denied for user 'root'@'%' (using password: YES)
2020-08-16_21:09 [New Install] GRANT SELECT ON mysql.time_zone_name TO 'cacti' IDENTIFIED BY '*******';
ERROR 1142 (42000) at line 1: GRANT command denied to user 'root'@'10.244.131.232' for table 'time_zone_name'
2020-08-16_21:09 [New Install] Merging vanilla cacti.sql file to database.
ERROR 1045 (28000): Access denied for user 'cacti'@'10.244.131.232' (using password: YES)
2020-08-16_21:09 [New Install] Installing supporting template files.
2020-08-16_21:09 [New Install] Installing plugins.
2020-08-16_21:09 [New Install] Installing template file /templates/cacti_host_template_cacti_stats.xml
2020-08-16_21:09 [New Install] Installing template file /templates/cacti_host_template_cisco_router.xml
2020-08-16_21:09 [New Install] Installing template file /templates/cacti_host_template_f5_bigip_v11.xml
2020-08-16_21:09 [New Install] Installing template file /templates/cacti_host_template_juniper_networks.xml
2020-08-16_21:09 [New Install] Importing settings file /settings/boost.sql
ERROR 1045 (28000): Access denied for user 'cacti'@'10.244.131.232' (using password: YES)
2020-08-16_21:09 [New Install] Importing settings file /settings/data_source_profiles.sql
ERROR 1045 (28000): Access denied for user 'cacti'@'10.244.131.232' (using password: YES)
2020-08-16_21:09 [New Install] Importing settings file /settings/poller.sql
ERROR 1045 (28000): Access denied for user 'cacti'@'10.244.131.232' (using password: YES)
2020-08-16_21:09 [New Install] Importing settings file /settings/spine.sql
ERROR 1045 (28000): Access denied for user 'cacti'@'10.244.131.232' (using password: YES)
2020-08-16_21:09 [New Install] Removing temp Cacti and Spine installation files.
But there is an access to MySQL from this container:
[root@cacti /]# mysql -h mysql.mysql.svc.cluster.local -u 'root' -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 75
Server version: 5.7.31 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
Hi Sean, I was just going to try out the recent changes and seeing the following error after starting a test container with new volumes. I believe the www.sock file needs a permission change to either be owned by apache although I'm not completely sure.
2020-04-17_16:20 [Note] Setting cacti file permissions.
2020-04-17_16:20 [Note] Starting crond service.
2020-04-17_16:20 [Note] Starting snmpd service.
2020-04-17_16:20 [Note] Starting php-fpm service.
2020-04-17_16:20 [Note] Starting httpd service.
[17-Apr-2020 16:20:37] ERROR: [pool www] failed to read the ACL of the socket '/run/php-fpm/www.sock': Operation not supported (95)
[17-Apr-2020 16:20:37] ERROR: FPM initialization failed
kevin@p-serv-01:~/docker/cacti-test$ docker exec -it cacti /bin/bash
[root@cacti /]# ls -l /run/php-fpm/www.sock
srw-rw---- 1 root root 0 Apr 17 16:20 /run/php-fpm/www.sock
Let me know if there's any further info you need.
Thanks,
Kevin
How to add perl package for cacti container: perl-libwww-perl?
Can you give me some suggestions?
Hi,
I notice that new builds of spine don't have configure file so upgrades are applied just to Cacti. In Cacti dashboard error is displayed because cacti version is newer than spine.
To fix it i need to execute autoreconf -fvi
and autoconf
in order to generate the configure file.
Update compose to use network_mode: host
due to remote poller checks, document why in Compose readme.
cacti.conf is static and appears to be overwritten on the first deployment. If a file exists don't overwrite.
Hi
I've launched the docker-compose down and after up and the cacti has not worked anymore. Have you ever seen that issue?
Thanks
Any chance of getting this updated to the latest version of cacti?
Thanks!
Hello @scline ,
As reporterd here 4024 but I think they will not give too much attention, all possible connection is ok from container or host.
Whit this Image I cant send any email.
I've build another one
Do you have anything on this matter?
Hi,
I've installed cacti in my k3s Kubernetes cluster, but the graphics are empty, just say "Failed to open data file, poller may not have run yet".
Should I mount the cacti data file into an external volume? I've also create a file inside /cact/rra and it works with the apache user or root user.
Finally, there are no error messages in the logs:
2021-01-05 23:00:03 - SYSTEM STATS: Time:1.3251 Method:spine Processes:1 Threads:1 Hosts:2 HostsPerProcess:2 DataSources:12 RRDsProcessed:0
Any tips?
Thanks,
Now $url_path = '/cacti/' is hardcoded in config.php. And there is no possibility to change it via an environment variable.
My proposal is to add CACTI_URL_PATH to have a possibility to change url_path. It is useful for Kubernetes with Ingress controller.
docker-cacti/configs/config.php
Line 72 in e347c20
Documentation suggests it should be in the config directory.
good
when using the example with the compose using the suggested database, the installation process cannot create the "poller_output_boost" table due to an error with the timestamp format of the "time" field
I changed the image percona to mariadb:10.3, and this succeeded in creating the table without problems
Getting the following error and yes I'm using MySql 8.0.23 when installing the docker image.
ERROR 1045 (28000): Plugin caching_sha2_password could not be loaded: /usr/lib64/mariadb/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
2020-04-17_17:05 [PHP-SNMP] Insalling php-snmp since ENV variable 'PHP_SNMP' is set to 1
error: rpmdb: damaged header #173 retrieved -- skipping.
error: rpmdbNextIterator: skipping h# 173 blob size(4836): BAD, 8 + 16 * il(70) + dl(3708)
CentOS-8 - AppStream 1.2 MB/s | 6.8 MB 00:05
I'm using Cacti 1.2.17 from Docker hub smcline06/cacti, all settings are on their defaults (except added new devices and graphs).
I see ~14500 tables with the name poller_output_boost_arch_NNNNNN, and this makes DB slow, just due to the big directory size.
All of them are zero rows, but they aren't deleted automatically, so I had to delete them manually.
How this could be fixed?
As I'm not sure which project is responsible for this - I'm creating a bug in both, please see:
See Cacti/cacti#4535
Issues: Some setting which need to persist are being retained within the container, such that a container can not be re-created. This seems pretty fundamental, unless I'm missing something (sorry a bit new to Docker).
Reproduction Steps:
ports:
- "8282:80"
- "8383:443"
docker-compose up -d
to create the cacti and database containersdocker-compose.yml
file. .e.g. Change the port again to say 8080 for cacti, or change the timezone, or add some additional labels (for example adding Traefik support).docker-compose up -d
the cacti_cacti_1 container will be recreated.We used this container to migrate an older version of Cacti on a new one.
We are using some scripts provided in perl language
These script failed with missing librabry on the container:
Can't locate Net/SNMP.pm in @inc (you may need to install the Net::SNMP module) (@inc contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /cacti/scripts/f5_bigip_cpun.pl line 5.
BEGIN failed--compilation aborted at /cacti/scripts/f5_bigip_cpun.pl line 5.
FATAL: Spine Encountered a Segmentation Fault
The package perl-Net-SNMP is missing in the container.
I added it manually, but it should be easier to have it directly in the default container
yum -y install perl-Net-SNMP.noarch
Thanks a lot
Regards.
Can you explain the proper way to change our db credentials but keep the data already collected?
I tested the default docker compose succesfuly,collected data and then after backing up with your script the data i deployed a new docker-compose file with different creds to a new VM and restored.It didnt start.
Then i copied the volumes and it starts correctly,thing is although the env vars are different i found its still using the default creds from your example and thats why its getting data.
The common error is Access denied for user 'cactiuser'@'172.21.0.3' (using password: YES)
Also i tried to change from inside the cacti docker manually the creds for the root and cactiuser users in the DB.I then noticed config.php kept the old creds so i changed it there too.Ofcourse im doing docker-compose down and up -d for my changes.
Still it keeps throwing the error and wont update the spine poller results.
SPINE: Poller[Main Poller] PID[1286] FATAL: Connection Failed, Error:'1045', Message:'Access denied for user 'cactiuser'@'172.21.0.3' (using password: YES)' (Spine parent)
I made combinations with initialize_db values but no luck.
Im missing something here,maybe another file that needs changing?Could you please reproduce and present the correct order of actions we need to do to change the DB credentials but keep the data?
May need to add the following to /etc/openldap/ldap.conf
REFERRALS off
SSL start_tls
TLS_REQCERT allow
as the title says
It's any plan change back to 7 Or Other distribution? Cause CentOS 8 is going EOL
Using the cacti_single_install.yml docker-compose example. When bringing down/removing the containers with docker-compose down
and restoring with docker-compose up -d
the /spine/ directory is empty and original contents of the /etc/crontab is lost. I don't see any errors in logs so I wont post unless you need it.
Example:
After creating new container with persistent volumes for /cacti and /var/lib/mysql
Before snapshot: /spine directory and /etc/crontab has content.
kevin@p-serv-01:~/docker/cacti-test$ docker exec -it cacti-test_cacti_1 /bin/bash
[root@b916fb282470 /]# ls /spine/
bin etc share
[root@b916fb282470 /]# cat /etc/crontab
*/5 * * * * apache php /cacti/poller.php > /dev/null 2>&1
[root@b916fb282470 /]# exit
exit
Down/remove the containers & restore
kevin@p-serv-01:~/docker/cacti-test$ docker-compose down
Stopping cacti-test_cacti_1 ... done
Stopping cacti-test_db_1 ... done
Removing cacti-test_cacti_1 ... done
Removing cacti-test_db_1 ... done
Removing network cacti-test_default
kevin@p-serv-01:~/docker/cacti-test$ docker-compose up -d
Creating network "cacti-test_default" with the default driver
Creating cacti-test_db_1 ... done
Creating cacti-test_cacti_1 ... done
The /spine directory and /etc/crontab is empty.
kevin@p-serv-01:~/docker/cacti-test$ docker exec -it cacti-test_cacti_1 /bin/bash
[root@5a93e723b394 /]# ls /spine/
[root@5a93e723b394 /]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
[root@5a93e723b394 /]# exit
Here is the docker-compose.yml file I used for this test:
kevin@p-serv-01:~/docker/cacti-test$ cat docker-compose.yml
version: '2'
services:
cacti:
image: "smcline06/cacti"
ports:
- "8008:80"
#- "443:443"
environment:
- DB_NAME=cacti_master
- DB_USER=cactiuser
- DB_PASS=cactipassword
- DB_HOST=db
- DB_PORT=3306
- DB_ROOT_PASS=rootpassword
- INITIALIZE_DB=1
- TZ=America/Los_Angeles
volumes:
- cacti-data:/cacti
- cacti-backups:/backups
links:
- db
db:
image: "percona:5.7.14"
ports:
- "3306:3306"
command:
- mysqld
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --max_connections=200
- --max_heap_table_size=128M
- --max_allowed_packet=32M
- --tmp_table_size=128M
- --join_buffer_size=128M
- --innodb_buffer_pool_size=1G
- --innodb_doublewrite=OFF
- --innodb_flush_log_at_timeout=3
- --innodb_read_io_threads=32
- --innodb_write_io_threads=16
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- TZ=America/Los_Angeles
volumes:
- cacti-db:/var/lib/mysql
volumes:
cacti-db:
cacti-data:
cacti-backups:
Thanks,
Kevin
Well I think is more of a question..
Do you guys have any problem conecting to a SMTP server from Cacti client on docker?
Host --> I had tested from two sources, local/external both conects from telnet via cli with TLS enable or disabled.
Cacti Host --> Connects normaly to the server, all tests OK.
Container --> Also tested from two sources local/external both conects from telnet via cli with TLS enable or disabled.
Cacti Container --> It fails conection with SMTP normaly to the server, all tests NOT OK
I See traffic when I send a test email, but unable to connect from the container..
Cacti version 15 & 14
Docker version 19.03.10
Terminal / log:
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.6. Set the 'ServerName' directive globally to suppress this message
And the container stops. I have temporarily added the following to start.sh to remediate, although might be best to add to Dockerfile on initial build?
echo "ServerName localhost" > /etc/httpd/conf.d/fqdn.conf
Hi.
I'm having trouble installing and configuring the syslog plugin.
what is the correct procedure to install and configure it?
i am missing the rsyslog-mysql part, how can i install it?
Thank you
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.