Giter VIP home page Giter VIP logo

nitin27may / mean-docker Goto Github PK

View Code? Open in Web Editor NEW
110.0 11.0 64.0 7.25 MB

A jumpstart project built with the MEAN stack (Angular 18.1.0, Express.js 4.17.1, MongoDB) featuring Docker support and styled with Bootstrap 5.

License: MIT License

Dockerfile 1.87% JavaScript 10.35% TypeScript 40.56% HTML 41.51% Shell 1.25% CSS 4.46%
angular mongodb expressjs nodejs docker dockerfile docker-compose nginx mean github-actions bootstrap5 typescript express mean-boilerplate mean-docker-boilerplate

mean-docker's Introduction

Mongo Build Expressjs Build Angular Build Nginx Build

MEAN Stack Project with Docker and Bootstrap 5

Overview

This project demonstrates a MEAN (MongoDB, Express, Angular, NodeJS) stack application running on Docker. It is an ideal starting point for creating a full-stack web application and demonstrates both development and production setups using Docker. Additionally, it showcases using GitHub Actions for building and pushing Docker images to Docker Hub.

The architecture of the application while running:

Quick Start

Clone repo, navigate to root folder and run docker-compose -f 'docker-compose.nginx.yml' up

  git clone https://github.com/nitin27may/mean-docker.git
  cd mean-docker 
  docker-compose -f 'docker-compose.nginx.yml' up

Project Structure

This project is organized into several folders, each representing a different component built with popular JavaScript frameworks and libraries:

folder Description
frontend frontend app using Angular
api api using expressjs
loadbalancer load balancer using nginx
mongo mongo db image setup

Project Details

This application includes features such as user registration, login, and a complete CRUD (Create, Read, Update, Delete) example. It utilizes Angular Routing for navigation and provides REST API samples built with Express.js. The REST services are secured using JWT (JSON Web Tokens), ensuring safe and efficient user authentication.

Technologies Used

Angular (18.1.0)

The frontend of this project is developed using Angular, the "A" in the MEAN stack. For Server-Side Rendering (SSR), we chose the Node.js Alpine image over a lightweight Docker image like Nginx to run the Angular application.

The project includes sample code for various key functionalities, such as:

  • User registration
  • Login
  • Profile Management
  • Complete CRUD example for contacts.

Additionally, you'll find examples of implementing authentication guards, services, HTTP interceptors, resolvers, and JWT authentication.

This application is designed to be user-friendly, featuring a functional registration and login page, along with a comprehensive CRUD implementation that showcases Angular Routing and Express.js REST API examples. All REST services are secured using JWT for enhanced security.

For folder structure details refer this link: [Frontend Folder Structure] (/docs/angular-frontend-structure.md)

Dockerfile for Production Dockerfile for Development

Expressjs (4.17.1)

In the MEAN stack, the "E" stands for Express.js, which is used to develop all REST services.

This project includes samples for:

  1. Mongo dB connection and schema validation using Mongoose
  2. JWT implementation for Authorization
  3. API routing
  4. User registration & login APIs
  5. Complete CRUD example for Contact

For folder structure details refer this link: API Folder Structure

Dockerfile for production Dockerfile for development

Mongo DB

We are using Mongodb for database. MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with optional schemas.

Seed data script Database user creation script

NGINX

_Note: only if you are using docker. _

We have uses NGINX loadbalancer in case if there is a requirement that frontend and api need to be exposed on same port. For configutration please check nginx.conf

Load balancer (nginx) Dockerfile

Getting started

Using Docker

Prerequisite

Install latest Docker Desktop

Development mode:

You can start the application in debug mode (database, api and frontend) using docker-compose:

git clone https://github.com/nitin27may/mean-docker.git
cd mean-docker

docker-compose -f 'docker-compose.debug.yml' up

It will run fronend http://localhost:4200 and api on http://localhost:3000. you can also access mongodb on port 27017.

Also, it will automatically refresh (hot reload) your UI for code changes. That is also true for expressjs file changes.

Production mode:

For Production mode, there is 2 options:

Using 2 containers (Express (frontend and api) and Mongo)
  git clone https://github.com/nitin27may/mean-docker.git
  cd mean-docker
  
  docker-compose -f 'docker-compose.yml' up

or just run beow as docker consider default file name 'docker-compose.yml'

  docker-compose up

It will run fronend and api on http://localhost:3000. you can also access mongodb on port 27017

Using 4 containers (Mongo,api, angular and nginx)
  git clone https://github.com/nitin27may/mean-docker.git
  cd mean-docker

  docker-compose -f 'docker-compose.nginx.yml' up

It will run fronend and api on http://localhost. you can aslo access by it's invidual ports. For Frontend http://localhost:4000 and for api http://localhost:3000 .you can also access mongodb on port 27017

About Docker Compose File

The main focus of this project to show case the possible way to run a real application (Mean stack) using docker.

we have considered 3 scenarios:

  1. Using 2 containers (docker-compose.yml)

    • express: To host Frontend (Angular) and backend api (expressjs) together
    • database: To host MongoDB

Note: If in above case we are using MongoDB as managed service then we will require only one container.

version: "3.8" # specify docker-compose version

# Define the services/containers to be run
services:
  express: #name of the second service
    build: # specify the directory of the Dockerfile
      context: .
      dockerfile: dockerfile
    container_name: mean_angular_express
    ports:
      - "3000:3000" #specify ports forewarding
      # Below database enviornment variable for api is helpful when you have to use database as managed service
    environment:
      - SECRET=Thisismysecret
      - MONGO_DB_USERNAME=admin-user
      - MONGO_DB_PASSWORD=admin-password
      - MONGO_DB_HOST=database
      - MONGO_DB_PORT=
      - MONGO_DB_PARAMETERS=?authSource=admin
      - MONGO_DB_DATABASE=mean-contacts
    links:
      - database

  database: # name of the third service
    image: mongo:latest # specify image to build container from
    container_name: mean_mongo
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin-user
      - MONGO_INITDB_ROOT_PASSWORD=admin-password
      - MONGO_DB_USERNAME=admin-user1
      - MONGO_DB_PASSWORD=admin-password1
      - MONGO_DB=mean-contacts
    volumes:
      - ./mongo:/home/mongodb
      - ./mongo/init-db.d/:/docker-entrypoint-initdb.d/
      - ./mongo/db:/data/db
    ports:
      - "27017:27017" # specify port forewarding
  1. Using 4 containers (docker-compose.nginx.yml)

    • angular: Application's frontend (Angular)
    • express: Application's Rest services (expressjs)
    • database: Application database: MongoDB
    • nginx: As laod balancer, also expose UI and API on same ports

Note: If in above case we are using MongoDB as managed service then we will require only one container.

version: "3.8" # specify docker-compose version

# Define the services/containers to be run
services:
  angular: # name of the first service
    build: frontend # specify the directory of the Dockerfile
    container_name: mean_angular
    ports:
      - "4000:4000" # specify port forewarding
    environment:
      - NODE_ENV=dev

  express: #name of the second service
    build: api # specify the directory of the Dockerfile
    container_name: mean_express
    ports:
      - "3000:3000" #specify ports forewarding
      # Below database enviornment variable for api is helpful when you have to use 
      # database as managed service
    environment:
      - SECRET=Thisismysecret
      - MONGO_DB_USERNAME=admin-user
      - MONGO_DB_PASSWORD=admin-password
      - MONGO_DB_HOST=database
      - MONGO_DB_PORT=
      - MONGO_DB_PARAMETERS=?authSource=admin
      - MONGO_DB_DATABASE=mean-contacts
    links:
      - database

  database: # name of the third service
    image: mongo:latest # specify image to build container from
    container_name: mean_mongo
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin-user
      - MONGO_INITDB_ROOT_PASSWORD=admin-password
      - MONGO_DB_USERNAME=admin-user1
      - MONGO_DB_PASSWORD=admin-password1
      - MONGO_DB=mean-contacts
    volumes:
      - ./mongo:/home/mongodb
      - ./mongo/init-db.d/:/docker-entrypoint-initdb.d/
      - ./mongo/db:/data/db
    ports:
      - "27017:27017" # specify port forewarding

  nginx: #name of the fourth service
    build: loadbalancer # specify the directory of the Dockerfile
    container_name: mean_nginx
    ports:
      - "80:80" #specify ports forewarding
    links:
      - express
      - angular
  1. Development Mode (docker-compose.debug.yml)

    It will run 3 containers which are required for development.

version: "3.8" # specify docker-compose version

# Define the services/containers to be run
services:
  angular: # name of the first service
    build: # specify the directory of the Dockerfile
      context: ./frontend
      dockerfile: debug.dockerfile
    container_name: mean_angular
    volumes:
      - ./frontend:/frontend
      - /frontend/node_modules
    ports:
      - "4200:4200" # specify port forewarding
      - "49153:49153"
    environment:
      - NODE_ENV=dev

  express: #name of the second service
    build: # specify the directory of the Dockerfile
      context: ./api
      dockerfile: debug.dockerfile
    container_name: mean_express
    volumes:
      - ./api:/api
      - /api/node_modules
    ports:
      - "3000:3000" #specify ports forewarding
    environment:
      - SECRET=Thisismysecret
      - NODE_ENV=development
      - MONGO_DB_USERNAME=admin-user
      - MONGO_DB_PASSWORD=admin-password
      - MONGO_DB_HOST=database
      - MONGO_DB_PORT=
      - MONGO_DB_PARAMETERS=?authSource=admin
      - MONGO_DB_DATABASE=mean-contacts
    links:
      - database

  database: # name of the third service
    image: mongo # specify image to build container from
    container_name: mean_mongo
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin-user
      - MONGO_INITDB_ROOT_PASSWORD=admin-password
      - MONGO_DB_USERNAME=admin-user1
      - MONGO_DB_PASSWORD=admin-password1
      - MONGO_DB=mean-contacts

    volumes:
      - ./mongo:/home/mongodb
      - ./mongo/init-db.d/:/docker-entrypoint-initdb.d/
      - ./mongo/db:/data/db
    ports:
      - "27017:27017" # specify port forewarding

Pushing Image to Registry (Github Actions)

Earlier, we were using docker hub autobuild triggers to build images and push to registry (Docker Hub), now it is using github action, we can take an example of frontend image: File : angular-build-and-push.yml

name: Angular Build
on:
  push:
    branches: master
    paths: 
    - 'frontend/**'

jobs:
  main:
    runs-on: Ubuntu-20.04
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2
      -
        name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      -
        name: Login to DockerHub
        uses: docker/login-action@v1 
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      -
        name: Build and push
        id: docker_build
        uses: docker/build-push-action@v2
        with:
          context: frontend/.
          file: frontend/Dockerfile
          push: true
          tags: ${{ secrets.DOCKERHUB_USERNAME }}/mean-angular:latest
          secrets: |
            GIT_AUTH_TOKEN=${{ secrets.MYTOKEN }}
      -
        name: Image digest
        run: echo ${{ steps.docker_build.outputs.digest }}

here, DOCKERHUB_USERNAME is your docker hub username and DOCKERHUB_TOKEN, we can generate from account settings (account settings > Security > New Access Token) section from your docker hub accounts and add under your github repo > settings > secrets

Without Docker

Prerequisites

  1. Install latest Node js
  2. Install Nodemon as global package (To run exprerssjs in development mode) npm install -g nodemon
  3. Optional (Install Angular CLI npm install -g @angular/cli)
  4. Install Mongodb locally or Signup for a free managed account
  5. Before running the project make sure that you are able to connect MongoDb , you can use Robo 3T for it

Running the Project

Clone the project and run npm install in frontend and api folder.

  git clone https://github.com/nitin27may/mean-docker.git

  cd mean-docker/frontend

  npm i

  npm start 

  cd mean-docker/api

  npm i

  npm start 

For passing enviornment variables (database details) in api, Navigate to api folder, rename .env.example to .env and update your mongo db details there.

Also, you can run d npm run dev-server from frontend folder to run frontend and api together.

It will run Api on http://localhost:3000 and frontend on http://localhost:4200

Roadmap

See the open issues for a list of proposed features (and known issues).

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

MIT

Contact

Nitin Singh - @nitin27may

mean-docker's People

Contributors

nitin27may 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  avatar

mean-docker's Issues

Compose Debug Issue

One change that might be good to make is to update the version to 3.8

version: "3.8" 

Version 3 is old and is different enough. We're moving to a versionless schema in the future.

P-table is missing dependency only in Docker

I'm submitting a ... (check one with "x")

[x] bug report => Search github for a similar issue or PR before submitting
[ ] feature request => Please check if request is not on the roadmap already https://github.com/primefaces/primeng/wiki/Roadmap
[ ] support request => Please do not submit support request here, instead see http://forum.primefaces.org/viewforum.php?f=35

Current behavior
error

Expected behavior
No dependency errors.

Minimal reproduction of the problem with instructions
Clone https://github.com/nitin27may/mean-docker and hook the PrimeNG table module (install the PrimeNG libraries and dependencies). When you add the selector in one of the components the error should show up. It only happens inside docker, outside everything works fine.

This is the dockerfile:
dockerfile

Please tell us about your environment:

  • Angular version: 11.2.6
  • PrimeNG version: 11.3.1
  • Language: TypeScript 4.1.5

  • Node (for AoT issues): node --version = v14.16 .0

I have @angular/cdk installed and the app runs fine locally I don't know why this dependency is missing only inside Docker. I already opened an issue in the PrimeNG repo but they closed it. I am stuck with this weird situation.

ng and nodemon not found

Running:

git clone https://github.com/nitin27may/mean-docker.git
cd mean-docker
docker-compose -f 'docker-compose.debug.yml' up

Results in:

[email protected] start
ng serve --host 0.0.0.0 --watch --poll 2000
sh: ng: not found

[email protected] dev-server
nodemon server.js
sh: nodemon: not found

mean_express exited with code 127
mean_angular exited with code 127

The only changes I've made are to mongo image volume section:
- ./mongo/init-db.d/:/docker-entrypoint-initdb.d/
to
- ./mongo/init-db.d:/docker-entrypoint-initdb.d

was causing a mounting error.

Am I missing something that is causing this?

Error response from daemon: bad parameter: link is not supported (Container mean_express)

The title almost tells it all ;-)

❯ docker-compose -f 'docker-compose.nginx.yml' up

[...]

 ✔ Network mean-docker_default         Created                                                    0.0s
 ✔ Container mean_mongo                Created                                                    0.0s
 ✔ Container mean_angular              Created                                                    0.0s
 ⠋ Container mean_express              Creating                                                   0.0s
Error response from daemon: bad parameter: link is not supported

On macOS Ventura 13.3.1 on a Mac M1

Outdated Mongo Dockerfile

The Dockerfile in the mongo folder is copying a non-existent "init-mongo.sh" file.
COPY init-mongo.sh /docker-entrypoint-initdb.d

From what I saw in the update 15 days ago, it was necessary to update here and README.md too.
COPY init-db.d /docker-entrypoint-initdb.d

I want to take the opportunity to congratulate you for the excellent work with this stack.

Logging out doesn't delete the user from local storage

The implementation of logout from sidebar only goes to the login page

            <li>
              <a [routerLink]="['/login']">
                <span><i class="fa fa-fw fa-power-off"></i> Log Out</span>
              </a>
            </li>

The implementation of logout from the header also calls onLoggedout(), but the implementation of onLoggedOut() removes the isLoggedIn field

  onLoggedout() {
    localStorage.removeItem("isLoggedin");
  }

while the actual logout requires us to remove the currentUser

  logout() {
    // remove user from local storage to log user out
    if (typeof window !== "undefined") {
      localStorage.removeItem("currentUser");
    }
  }

So it seems like logging out functionality is Just Broken. What am I missing here?

docker compose up debug problem (mongo)

Hi, after the command docker-compose -f "docker-compose.debug.yml" up I receive this error message: invalid mount config for type "bind": bind source path does not exist: /com.docker.devenvironments.code/mongo/init-db.d
I can continu only if i comment the bind line.

Cannot access path '' when using docker-compose.debug.yml

Hi,
Thank you for amazing docker!

After containers created using docker-compose -f docker-compose.debug.yml up -d

I'm unable to access path ''. It always throws message 404 NOT FOUND when access localhost:4200.

Please see the photo below
Screen Shot 2021-02-28 at 10 41 07

docker compose up debug problem

Hi, i'm trying to launch the project but after the command docker-compose -f "docker-compose.debug.yml" up the mean-angular container doesn't start and into the logs i read this: An unhandled exception occurred: ENOENT: no such file or directory, lstat '/app/src/styles.scss'

Me sale un error!

Discussed in #76

Originally posted by tacamine2 October 26, 2023
Quiero instalarlo en una máquina virtual con Ubuntu Desktop 22 y sale esto:

:~/Desktop/mean-docker$ sudo docker-compose up
Building express
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
Install the buildx component to build images with BuildKit:
https://docs.docker.com/go/buildx/

Sending build context to Docker daemon 16.04MB
Step 1/13 : FROM node:16-alpine as builder
---> 2573171e0124
Step 2/13 : COPY frontend/package.json frontend/package-lock.json ./
---> Using cache
---> 13b8b9957c1c
Step 3/13 : RUN npm ci && mkdir /app && mv ./node_modules ./app
---> Running in a0bab11a5f6e
npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
npm ERR!
npm ERR! While resolving: @angular-devkit/[email protected]
npm ERR! Found: [email protected]
npm ERR! node_modules/protractor
npm ERR! dev protractor@"^3.3.0" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peerOptional protractor@"^7.0.0" from @angular-devkit/[email protected]
npm ERR! node_modules/@angular-devkit/build-angular
npm ERR! dev @angular-devkit/build-angular@"^16.0.0" from the root project
npm ERR! peer @angular-devkit/build-angular@"^16.0.0 || ^16.1.0-next.0" from @nguniversal/[email protected]
npm ERR! node_modules/@nguniversal/builders
npm ERR! dev @nguniversal/builders@"^16.0.0" from the root project
npm ERR!
npm ERR! Conflicting peer dependency: [email protected]
npm ERR! node_modules/protractor
npm ERR! peerOptional protractor@"^7.0.0" from @angular-devkit/[email protected]
npm ERR! node_modules/@angular-devkit/build-angular
npm ERR! dev @angular-devkit/build-angular@"^16.0.0" from the root project
npm ERR! peer @angular-devkit/build-angular@"^16.0.0 || ^16.1.0-next.0" from @nguniversal/[email protected]
npm ERR! node_modules/@nguniversal/builders
npm ERR! dev @nguniversal/builders@"^16.0.0" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR!
npm ERR! See /root/.npm/eresolve-report.txt for a full report.

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-10-26T13_23_37_050Z-debug-0.log
The command '/bin/sh -c npm ci && mkdir /app && mv ./node_modules ./app' returned a non-zero code: 1
ERROR: Service 'express' failed to build : Build failed

Docker compose nginx problem

Hi, launching command docker-compose against nginx docker compose file i receive this error:
#19 18.88 npm ERR! Could not resolve dependency:
#19 18.88 npm ERR! peer @angular/animations@"^13.0.0" from [email protected]
#19 18.88 npm ERR! node_modules/ngx-bootstrap
#19 18.88 npm ERR! ngx-bootstrap@"^8.0.0" from the root project
#19 18.88 npm ERR!
#19 18.88 npm ERR! Conflicting peer dependency: @angular/[email protected]
#19 18.88 npm ERR! node_modules/@angular/animations
#19 18.88 npm ERR! peer @angular/animations@"^13.0.0" from [email protected]
#19 18.88 npm ERR! node_modules/ngx-bootstrap
#19 18.88 npm ERR! ngx-bootstrap@"^8.0.0" from the root project
#19 18.88 npm ERR!
#19 18.88 npm ERR! Fix the upstream dependency conflict, or retry
#19 18.88 npm ERR! this command with --force, or --legacy-peer-deps
#19 18.88 npm ERR! to accept an incorrect (and potentially broken) dependency resolution.

Error in `init-mongo.sh` while testing with docker

I just checked out this repo to experiment with it, but I can't get it to start up correctly.
I have not made any changes to any files

$ git diff
$
$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

Yet, when I run $ docker-compose, I get the following error

mean_mongo  | 2020-07-21T05:05:07.455+0000 I  INDEX    [conn2] index build: done building index user_1_db_1 on ns admin.system.users
mean_mongo  | Successfully added user: {
mean_mongo  | 	"user" : "admin-user",
mean_mongo  | 	"roles" : [
mean_mongo  | 		{
mean_mongo  | 			"role" : "root",
mean_mongo  | 			"db" : "admin"
mean_mongo  | 		}
mean_mongo  | 	]
mean_mongo  | }
mean_mongo  | 2020-07-21T05:05:07.457+0000 E  -        [main] Error saving history file: FileOpenFailed: Unable to open() file /home/mongodb/.dbshell: No such file or directory
mean_mongo  | 2020-07-21T05:05:07.458+0000 I  NETWORK  [conn2] end connection 127.0.0.1:57972 (0 connections now open)
mean_mongo  |
mean_mongo  | /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init-mongo.sh
mean_mongo  | /docker-entrypoint-initdb.d/init-mongo.sh: line 1: $8: unbound variable
mean_mongo exited with code 1

I am not quite sure where the $8 comes from. Is it maybe from the hardcoded sample password? But that is not line 1. But since you are using << EOF, maybe the entire script looks like the first line?

Have you seen this error before?

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.