Code Monkey home page Code Monkey logo

azure.ghost-web-app-for-containers's People

Contributors

andrewmatveychuk avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar

azure.ghost-web-app-for-containers's Issues

Ghost Web Container Fails to Start due to ER_HOST_NOT_PRIVILEGED error

When deploying via the ARM template all resources are deployed successfully, but when going to the URL for the Ghost site receive an error page from the app service since the Ghost Web container is not starting properly.

Going to the the deployment center for the app service and reviewing the logs from the Docker engine, the containers were both successfully pulled, but the ghost-web container fails to start as it is unable to properly connect to the MySQL container.
The error that is given when trying to connect is ER_HOST_NOT_PRIVILEGED: Host '172.16.57.3' is not allowed to connect to this MySQL server even though the MySQL container logs show that it is ready for connections 2021-07-09T16:25:36.317046455Z 2021-07-09T16:25:36.316957Z 0 [Note] mysqld: ready for connections..

The logs below shows the startup process that continually loops with the same result. The app service is sized at P3v2 and has been running for 90+ minutes with no change.


2021-07-09T16:25:31.864Z INFO - Starting multi-container app..
2021-07-09T16:25:32.044Z INFO - Pulling image from Docker hub: library/mysql:5.7
2021-07-09T16:25:32.232Z INFO - 5.7 Pulling from library/mysql
2021-07-09T16:25:32.282Z INFO - Digest: sha256:1a2f9cd257e75cc80e9118b303d1648366bc2049101449bf2c8d82b022ea86b7
2021-07-09T16:25:32.284Z INFO - Status: Image is up to date for mysql:5.7
2021-07-09T16:25:32.288Z INFO - Pull Image successful, Time taken: 0 Minutes and 0 Seconds
2021-07-09T16:25:32.296Z INFO - Starting container for site
2021-07-09T16:25:32.297Z INFO - docker run -d -p 0:3306 --name gtest-web-u52lavlec6ykq_db_0_e6215ed4 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=true -e WEBSITE_SITE_NAME=gtest-web-u52lavlec6ykq -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=gtest-web-u52lavlec6ykq.azurewebsites.net -e WEBSITE_INSTANCE_ID=70b4918b3e9ccc84b6f4c59b7645e4a6779fd36de5503cb516a142eae1090b7e -e HTTP_LOGGING_ENABLED=1 mysql:5.7

2021-07-09T16:25:32.500Z INFO - Pulling image from Docker hub: andrewmatveychuk/ghost-ai:latest
2021-07-09T16:25:32.613Z INFO - latest Pulling from andrewmatveychuk/ghost-ai
2021-07-09T16:25:32.615Z INFO - Digest: sha256:a9e2decad756896d393cc45e938dd3cbeb17ea80ed57c2c9436dbf57dc166dce
2021-07-09T16:25:32.616Z INFO - Status: Image is up to date for andrewmatveychuk/ghost-ai:latest
2021-07-09T16:25:32.620Z INFO - Pull Image successful, Time taken: 0 Minutes and 0 Seconds
2021-07-09T16:25:32.629Z INFO - Starting container for site
2021-07-09T16:25:32.631Z INFO - docker run -d -p 5321:2368 --name gtest-web-u52lavlec6ykq_ghost_0_e6215ed4 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=true -e WEBSITE_SITE_NAME=gtest-web-u52lavlec6ykq -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=gtest-web-u52lavlec6ykq.azurewebsites.net -e WEBSITE_INSTANCE_ID=70b4918b3e9ccc84b6f4c59b7645e4a6779fd36de5503cb516a142eae1090b7e -e HTTP_LOGGING_ENABLED=1 andrewmatveychuk/ghost-ai:latest

2021-07-09T16:25:43.418Z ERROR - multi-container unit was not started successfully
2021-07-09T16:25:43.424Z INFO - Container logs from gtest-web-u52lavlec6ykq_db_0_e6215ed4 = 2021-07-09T16:25:33.706972899Z 2021-07-09 16:25:33+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.34-1debian10 started.
2021-07-09T16:25:33.911677909Z 2021-07-09 16:25:33+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-07-09T16:25:33.920062403Z 2021-07-09 16:25:33+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.34-1debian10 started.
2021-07-09T16:25:34.344861797Z 2021-07-09T16:25:34.316955Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-07-09T16:25:34.344899098Z 2021-07-09T16:25:34.326362Z 0 [Note] mysqld (mysqld 5.7.34) starting as process 1 ...
2021-07-09T16:25:34.346423815Z 2021-07-09T16:25:34.346327Z 0 [Note] InnoDB: PUNCH HOLE support available
2021-07-09T16:25:34.346444715Z 2021-07-09T16:25:34.346350Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2021-07-09T16:25:34.346450315Z 2021-07-09T16:25:34.346355Z 0 [Note] InnoDB: Uses event mutexes
2021-07-09T16:25:34.346468916Z 2021-07-09T16:25:34.346358Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2021-07-09T16:25:34.346475116Z 2021-07-09T16:25:34.346362Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2021-07-09T16:25:34.346479716Z 2021-07-09T16:25:34.346365Z 0 [Note] InnoDB: Using Linux native AIO
2021-07-09T16:25:34.346732219Z 2021-07-09T16:25:34.346653Z 0 [Note] InnoDB: Number of pools: 1
2021-07-09T16:25:34.346987721Z 2021-07-09T16:25:34.346921Z 0 [Note] InnoDB: Using CPU crc32 instructions
2021-07-09T16:25:34.354181203Z 2021-07-09T16:25:34.350377Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
2021-07-09T16:25:34.360566675Z 2021-07-09T16:25:34.360407Z 0 [Note] InnoDB: Completed initialization of buffer pool
2021-07-09T16:25:34.363296105Z 2021-07-09T16:25:34.363207Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2021-07-09T16:25:34.465333057Z 2021-07-09T16:25:34.465223Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
2021-07-09T16:25:34.691160406Z 2021-07-09T16:25:34.690935Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2021-07-09T16:25:34.692812824Z 2021-07-09T16:25:34.692715Z 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2021-07-09T16:25:35.001763411Z 2021-07-09T16:25:35.001625Z 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
2021-07-09T16:25:35.007133171Z 2021-07-09T16:25:35.007027Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
2021-07-09T16:25:35.007153572Z 2021-07-09T16:25:35.007050Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
2021-07-09T16:25:35.007667177Z 2021-07-09T16:25:35.007594Z 0 [Note] InnoDB: Waiting for purge to start
2021-07-09T16:25:35.059749265Z 2021-07-09T16:25:35.059576Z 0 [Note] InnoDB: 5.7.34 started; log sequence number 2748269
2021-07-09T16:25:35.060686376Z 2021-07-09T16:25:35.059953Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2021-07-09T16:25:35.060709276Z 2021-07-09T16:25:35.060589Z 0 [Note] Plugin 'FEDERATED' is disabled.
2021-07-09T16:25:35.099029009Z 2021-07-09T16:25:35.098922Z 0 [Warning] World-writable config file './auto.cnf' is ignored.
2021-07-09T16:25:35.101673438Z 2021-07-09T16:25:35.101553Z 0 [Warning] World-writable config file './auto.cnf' has been removed.
2021-07-09T16:25:35.101689639Z
2021-07-09T16:25:35.104340368Z 2021-07-09T16:25:35.104241Z 0 [Note] Salting uuid generator variables, current_pid: 1, server_start_time: 1625847934, bytes_sent: 0,
2021-07-09T16:25:35.104412969Z 2021-07-09T16:25:35.104350Z 0 [Note] Generated uuid: '49cfd594-e0d2-11eb-8282-0242ac103902', server_start_time: 281476602558591, bytes_sent: 94507423858240
2021-07-09T16:25:35.104480570Z 2021-07-09T16:25:35.104402Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 49cfd594-e0d2-11eb-8282-0242ac103902.
2021-07-09T16:25:35.235897853Z 2021-07-09T16:25:35.235628Z 0 [Note] Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to enable SSL support using them.
2021-07-09T16:25:35.235936854Z 2021-07-09T16:25:35.235662Z 0 [Note] Skipping generation of SSL certificates as certificate files are present in data directory.
2021-07-09T16:25:35.270175040Z 2021-07-09T16:25:35.269990Z 0 [Warning] CA certificate ca.pem is self signed.
2021-07-09T16:25:35.272851170Z 2021-07-09T16:25:35.272665Z 0 [Note] Skipping generation of RSA key pair as key files are present in data directory.
2021-07-09T16:25:35.289893063Z 2021-07-09T16:25:35.289784Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
2021-07-09T16:25:35.290836173Z 2021-07-09T16:25:35.289891Z 0 [Note] IPv6 is available.
2021-07-09T16:25:35.290855773Z 2021-07-09T16:25:35.289905Z 0 [Note] - '::' resolves to '::';
2021-07-09T16:25:35.290918774Z 2021-07-09T16:25:35.289931Z 0 [Note] Server socket created on IP: '::'.
2021-07-09T16:25:35.327041382Z 2021-07-09T16:25:35.326934Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2021-07-09T16:25:35.331881636Z 2021-07-09T16:25:35.331791Z 0 [Note] InnoDB: Buffer pool(s) load completed at 210709 16:25:35
2021-07-09T16:25:36.316672651Z 2021-07-09T16:25:36.316462Z 0 [Note] Event Scheduler: Loaded 0 events
2021-07-09T16:25:36.317046455Z 2021-07-09T16:25:36.316957Z 0 [Note] mysqld: ready for connections.
2021-07-09T16:25:36.317062055Z Version: '5.7.34' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)

2021-07-09T16:25:46.274Z INFO - Container logs from gtest-web-u52lavlec6ykq_ghost_0_e6215ed4 = 2021-07-09T16:25:37.098623076Z [2021-07-09 16:25:37] �[31mERROR�[39m ER_HOST_NOT_PRIVILEGED: Host '172.16.57.3' is not allowed to connect to this MySQL server
2021-07-09T16:25:37.098680277Z �[31m
2021-07-09T16:25:37.098691277Z �[31mER_HOST_NOT_PRIVILEGED: Host '172.16.57.3' is not allowed to connect to this MySQL server�[39m
2021-07-09T16:25:37.098699677Z
2021-07-09T16:25:37.098707077Z �[33m"Unknown database error"�[39m
2021-07-09T16:25:37.098714877Z
2021-07-09T16:25:37.098721577Z �[1m�[37mError ID:�[39m�[22m
2021-07-09T16:25:37.098729077Z �[90m500�[39m
2021-07-09T16:25:37.098736277Z
2021-07-09T16:25:37.098742877Z �[1m�[37mError Code: �[39m�[22m
2021-07-09T16:25:37.098750477Z �[90mER_HOST_NOT_PRIVILEGED�[39m
2021-07-09T16:25:37.098757677Z
2021-07-09T16:25:37.098764277Z �[90m----------------------------------------�[39m
2021-07-09T16:25:37.098771478Z
2021-07-09T16:25:37.098778578Z �[90mDatabaseError: ER_HOST_NOT_PRIVILEGED: Host '172.16.57.3' is not allowed to connect to this MySQL server
2021-07-09T16:25:37.098786378Z at DatabaseError.KnexMigrateError (/var/lib/ghost/versions/3.40.5/node_modules/knex-migrator/lib/errors.js:7:26)
2021-07-09T16:25:37.098793578Z at new DatabaseError (/var/lib/ghost/versions/3.40.5/node_modules/knex-migrator/lib/errors.js:55:26)
2021-07-09T16:25:37.098800878Z at /var/lib/ghost/versions/3.40.5/node_modules/knex-migrator/lib/database.js:48:19
2021-07-09T16:25:37.098807878Z at processTicksAndRejections (internal/process/task_queues.js:97:5)
2021-07-09T16:25:37.098814978Z
2021-07-09T16:25:37.098821578Z Error: ER_HOST_NOT_PRIVILEGED: Host '172.16.57.3' is not allowed to connect to this MySQL server
2021-07-09T16:25:37.098828978Z at Handshake.Sequence._packetToError (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
2021-07-09T16:25:37.098836278Z at Handshake.ErrorPacket (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/sequences/Handshake.js:123:18)
2021-07-09T16:25:37.098843378Z at Protocol._parsePacket (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/Protocol.js:291:23)
2021-07-09T16:25:37.098850478Z at Parser._parsePacket (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/Parser.js:433:10)
2021-07-09T16:25:37.098857579Z at Parser.write (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/Parser.js:43:10)
2021-07-09T16:25:37.098864979Z at Protocol.write (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/Protocol.js:38:16)
2021-07-09T16:25:37.098872079Z at Socket. (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/Connection.js:88:28)
2021-07-09T16:25:37.098880779Z at Socket. (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/Connection.js:526:10)
2021-07-09T16:25:37.098888179Z at Socket.emit (events.js:314:20)
2021-07-09T16:25:37.098908179Z at addChunk (_stream_readable.js:297:12)
2021-07-09T16:25:37.098917279Z at readableAddChunk (_stream_readable.js:272:9)
2021-07-09T16:25:37.098924379Z at Socket.Readable.push (_stream_readable.js:213:10)
2021-07-09T16:25:37.098931279Z at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
2021-07-09T16:25:37.098938279Z at TCP.callbackTrampoline (internal/async_hooks.js:126:14)
2021-07-09T16:25:37.098945280Z --------------------
2021-07-09T16:25:37.098952280Z at Protocol._enqueue (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/Protocol.js:144:48)
2021-07-09T16:25:37.098959480Z at Protocol.handshake (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/Protocol.js:51:23)
2021-07-09T16:25:37.098966680Z at Connection.connect (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/Connection.js:116:18)
2021-07-09T16:25:37.098973880Z at Connection.mysqlContextPreserver [as connect] (/opt/ai/node_modules/diagnostic-channel-publishers/dist/src/mysql.pub.js:41:47)
2021-07-09T16:25:37.098981380Z at /var/lib/ghost/versions/3.40.5/node_modules/knex-migrator/node_modules/knex/lib/dialects/mysql/index.js:69:18
2021-07-09T16:25:37.098988680Z at new Promise ()
2021-07-09T16:25:37.098996080Z at Client_MySQL.acquireRawConnection (/var/lib/ghost/versions/3.40.5/node_modules/knex-migrator/node_modules/knex/lib/dialects/mysql/index.js:64:12)
2021-07-09T16:25:37.099003480Z at create (/var/lib/ghost/versions/3.40.5/node_modules/knex-migrator/node_modules/knex/lib/client.js:291:39)
2021-07-09T16:25:37.099010680Z at processTicksAndRejections (internal/process/task_queues.js:97:5)�[39m
2021-07-09T16:25:37.099017780Z �[39m
2021-07-09T16:25:39.043770330Z find: /var/lib/ghost/content_files/logs/https___gtest_fd_u52lavlec6ykq_azurefd_net_production.log: I/O error
2021-07-09T16:25:42.528722332Z [2021-07-09 16:25:42] �[31mERROR�[39m ER_HOST_NOT_PRIVILEGED: Host '172.16.57.3' is not allowed to connect to this MySQL server
2021-07-09T16:25:42.528775632Z �[31m
2021-07-09T16:25:42.528787033Z �[31mER_HOST_NOT_PRIVILEGED: Host '172.16.57.3' is not allowed to connect to this MySQL server�[39m
2021-07-09T16:25:42.528795933Z
2021-07-09T16:25:42.528804133Z �[33m"Unknown database error"�[39m
2021-07-09T16:25:42.528812433Z
2021-07-09T16:25:42.528820033Z �[1m�[37mError ID:�[39m�[22m
2021-07-09T16:25:42.528828333Z �[90m500�[39m
2021-07-09T16:25:42.528836233Z
2021-07-09T16:25:42.528843633Z �[1m�[37mError Code: �[39m�[22m
2021-07-09T16:25:42.528851733Z �[90mER_HOST_NOT_PRIVILEGED�[39m
2021-07-09T16:25:42.528860034Z
2021-07-09T16:25:42.528868034Z �[90m----------------------------------------�[39m
2021-07-09T16:25:42.528890534Z
2021-07-09T16:25:42.528897834Z �[90mDatabaseError: ER_HOST_NOT_PRIVILEGED: Host '172.16.57.3' is not allowed to connect to this MySQL server
2021-07-09T16:25:42.528907234Z at DatabaseError.KnexMigrateError (/var/lib/ghost/versions/3.40.5/node_modules/knex-migrator/lib/errors.js:7:26)
2021-07-09T16:25:42.528914534Z at new DatabaseError (/var/lib/ghost/versions/3.40.5/node_modules/knex-migrator/lib/errors.js:55:26)
2021-07-09T16:25:42.528921834Z at /var/lib/ghost/versions/3.40.5/node_modules/knex-migrator/lib/database.js:48:19
2021-07-09T16:25:42.528928934Z at processTicksAndRejections (internal/process/task_queues.js:97:5)
2021-07-09T16:25:42.528936035Z
2021-07-09T16:25:42.528942735Z Error: ER_HOST_NOT_PRIVILEGED: Host '172.16.57.3' is not allowed to connect to this MySQL server
2021-07-09T16:25:42.528950035Z at Handshake.Sequence._packetToError (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
2021-07-09T16:25:42.528957635Z at Handshake.ErrorPacket (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/sequences/Handshake.js:123:18)
2021-07-09T16:25:42.528965035Z at Protocol._parsePacket (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/Protocol.js:291:23)
2021-07-09T16:25:42.528972235Z at Parser._parsePacket (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/Parser.js:433:10)
2021-07-09T16:25:42.528979235Z at Parser.write (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/Parser.js:43:10)
2021-07-09T16:25:42.528986335Z at Protocol.write (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/Protocol.js:38:16)
2021-07-09T16:25:42.528993435Z at Socket. (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/Connection.js:88:28)
2021-07-09T16:25:42.529000935Z at Socket. (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/Connection.js:526:10)
2021-07-09T16:25:42.529008436Z at Socket.emit (events.js:314:20)
2021-07-09T16:25:42.529015336Z at addChunk (_stream_readable.js:297:12)
2021-07-09T16:25:42.529024236Z at readableAddChunk (_stream_readable.js:272:9)
2021-07-09T16:25:42.529031236Z at Socket.Readable.push (_stream_readable.js:213:10)
2021-07-09T16:25:42.529038436Z at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
2021-07-09T16:25:42.529045536Z at TCP.callbackTrampoline (internal/async_hooks.js:126:14)
2021-07-09T16:25:42.529052536Z --------------------
2021-07-09T16:25:42.529136337Z at Protocol._enqueue (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/Protocol.js:144:48)
2021-07-09T16:25:42.529147437Z at Protocol.handshake (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/protocol/Protocol.js:51:23)
2021-07-09T16:25:42.529174438Z at Connection.connect (/var/lib/ghost/versions/3.40.5/node_modules/mysql/lib/Connection.js:116:18)
2021-07-09T16:25:42.529199238Z at Connection.mysqlContextPreserver [as connect] (/opt/ai/node_modules/diagnostic-channel-publishers/dist/src/mysql.pub.js:41:47)
2021-07-09T16:25:42.529250439Z at /var/lib/ghost/versions/3.40.5/node_modules/knex-migrator/node_modules/knex/lib/dialects/mysql/index.js:69:18
2021-07-09T16:25:42.529275739Z at new Promise ()
2021-07-09T16:25:42.529300939Z at Client_MySQL.acquireRawConnection (/var/lib/ghost/versions/3.40.5/node_modules/knex-migrator/node_modules/knex/lib/dialects/mysql/index.js:64:12)
2021-07-09T16:25:42.529328840Z at create (/var/lib/ghost/versions/3.40.5/node_modules/knex-migrator/node_modules/knex/lib/client.js:291:39)
2021-07-09T16:25:42.529353640Z at processTicksAndRejections (internal/process/task_queues.js:97:5)�[39m
2021-07-09T16:25:42.529379840Z �[39m

2021-07-09T16:25:46.718Z INFO - Stopping site gtest-web-u52lavlec6ykq because it failed during startup.

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.