Table of Contents
=================
* [Introduction](#introduction)
* [Screenshot](#screenshot)
* [tldr](#tldr)
* [Build, Run, and Access](#build-run-and-access)
* [Prerequisites](#prerequisites)
* [Docker images used](#docker-images-used)
* [Frameworks used](#frameworks-used)
* [Managing application](#managing-application)
* [Running application](#running-application)
* [Stopping application](#stopping-application)
* [Cleaning maven & gradle cache](#cleaning-maven--gradle-cache)
* [Accessing the application](#accessing-the-application)
* [Customizing application deployment](#customizing-application-deployment)
* [Docker image location](#docker-image-location)
* [Deployment Host name](#deployment-host-name)
* [Implementation](#implementation)
* [Endpoints](#endpoints)
* [(frontend)](#frontend)
* [query](#query)
* [author](#author)
* [book](#book)
* [user](#user)
* [user_book](#user_book)
* [tag](#tag)
* [review](#review)
* [authorize](#authorize)
* [swagger](#swagger)
* [Databases](#databases)
* [MySQL](#mysql)
* [Redis](#redis)
* [Authentication](#authentication)
* [Cache](#cache)
* [Notes and Thoughts](#notes-and-thoughts)
* [Initial](#initial)
* [Memory Usage](#memory-usage)
* [Framework Changes](#framework-changes)
* [Plans](#plans)
# Introduction
This project has two goals; to create a book repository (like [goodreads.com](http://goodreads.com) or [librarything.com](http://librarything.com)), and to experiment with various microservice frameworks, golang, java, docker, swagger, and javascript.
The frontend web application is a [SPA](https://en.wikipedia.org/wiki/Single-page_application) written in Javascript ([vue.js](https://vuejs.org/)).
The backend is a set of micro-services written in Golang, backed by [mysql](https://www.mysql.com/) and [redis](https://redis.io/) databases. There are various (micro-service) endpoints for interfacing with and querying the data, see [endpoints](#endpoints) below. Most endpoints requires authorization, which is obtained at the */authorize* endpoint. See the */swagger* endpoint for full information.
There is an initial user of *admin* with same password. The *admin* user can create a new user, or update the *admin* user via the */user* endpoint or the main web application.
# Screenshot
![Entry page](https://github.com/hipposareevil/books/blob/master/entrypage.png)
# tldr
* build: *./books.sh build*
* run: *./books.sh start*
* swagger url: *[http://localhost:8080/swagger/](http://localhost:8080/swagger/)*
* frontend url: *[http://localhost:8080/](http://localhost:8080/)*
* stop: *./books.sh stop*
* clean: *./books.sh clean*
# Build, Run, and Access
There is a top level script that builds, starts, and stops the application (and the corresponding microservices):
```
> ./books.sh build
```
Each microservice is built with either maven or gradle and uses a Docker container to do the complication. The containers use *.m2* and *.gradle* directories that cache the corresponding repositories.
## Prerequisites
* bash
* Docker (17.09) ([install here](https://docs.docker.com/engine/installation/))
* docker-compose _optional_
## Docker images used
These will be pulled automatically from dockerhub.com.
Docker image | Purpose
--- | ---
docker/compose:1.8.1 | Used to start/stop application.
hipposareevil/alpine-dep | For golang dependency management.
hipposareevil/swagger-combine | To combine and expose swagger documentation from each microservice.
hipposareevil/alpine-gradle | Used to build web services; *query*.
maven:3.3.9-jdk-8-alpine | Used to build web services; author, title.
mysql:latest | MySQL database.
redis:3.0-alpine | Redis K/V database.
nginx:latest | API Gateway.
openjdk:8-jdk-alpine | Base image for web services.
## Frameworks used
* [go-kit](https://github.com/go-kit/kit)
* [swagger](http://swagger.io)
* [bulma css](http://bulma.io/)
* [vue javascript](https://vuejs.org/)
*Deprecated*
* [graphite](https://graphiteapp.org)
* [grafana](https://grafana.com)
* [dropwizard](http://www.dropwizard.io/)
* [spring boot](https://projects.spring.io/spring-boot/)
## Managing application
The application is managed using docker-compose via a docker-compose.yml file. A convenience script is provided that runs docker-compose via a separate container.
### Running application
```
> ./books.sh start
```
or
```
> docker-compose -up -d
```
### Stopping application
```
> ./books.sh stop
```
or
```
> docker-compose down
```
### Cleaning maven & gradle cache
```
> ./books.sh clean
```
## Accessing the application
The web application runs at [localhost:8080/](http://localhost:8080/). It takes a few seconds for the MySQL database to come up.
Swagger API description is at [localhost:8080/swagger/](http://localhost:8080/swagger/). This can be used to test each of the microservices
## Customizing application deployment
Docker compose utilizes an *.env* file where environment variables can be located. This project has the following variables.
### Docker image location
This defaults to using the local Docker repository, not a private registry. If you want to tag and push images to a private repository (or dockerhub), you can run the docker compose with the environment variable *BOOK_REPOSITORY*.
If your repository were at *mysuperrepo.com:5432*, you add the following to the *.env* file:
```
BOOK_REPOSITORY=mysuperrepo.com:5432
```
And then docker compose will utilize that for the root image locations.
A utility script *tagAndPushToRepo.sh* is in the root directory and will tag all of the *books* images and push to the *BOOK_REPOSITORY* repository.
### Deployment Host name
This application defaults to *localhost* for the Swagger UI definition. When set to *localhost*, the UI can have trouble running example REST calls. For instance, if you're running the application on your hosted box *foo.com* and you access the UI via browser from your laptop, the queries will not go through. If you update the *.env* file with your host box name things will go smoother via Swagger.
```
DEPLOY_HOST_NAME=foo.com
```
See the [swagger-combine](https://github.com/hipposareevil/swagger-combine) project for more information on this variable.
# Implementation
Notes on implementation.
## Endpoints
The web application, each microservice endpoint, and backend database are contained in Docker containers. All containers are attached to the Docker network *books_booknet*.
All endpoints are exposed to the outside world via an API _gateway_ which runs in a separate container and listens on port 8080.
![Books Structure](https://github.com/hipposareevil/books/blob/master/diagrams/structure.png)
The following endpoints are proxied via the API Gateway on port 8080 (configurable via the *docker-compose.yml* file).
Endpoint | Purpose
--- | ---
/ | Frontend single-page application.
/query | Microservice to query openlibrary.org for book titles and authors.
/author | Manage list of authors in database.
/book | Manage list of books in database.
/user | Manage users.
/user_book | Manage books for a user.
/tag | Manage tags.
/review | List user reviews for a book.
/authorize | Authorize access to endpoints.
/swagger/ | [swagger](http://swagger.io) documentation describing the REST APIs.
### (frontend)
Frontend web application at **/**. This uses the microservices to manage the books, authors, users, user lists, and tags. Utilizes the [vue](https://vuejs.org/) framework and [bulma](https://bulma.io/) framework.
See [frontend](https://github.com/hipposareevil/books/blob/master/images/frontend/README.md) for more information.
### query
REST microservice that queries openlibrary for new authors and book titles. Would be used by frontend to add new entries to
没有合适的资源?快使用搜索试试~ 我知道了~
基于Java微服务javascript实现的图书馆管理系统(前后端源代码+数据库).zip
共383个文件
java:81个
go:64个
sh:42个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 178 浏览量
2024-07-26
19:45:11
上传
评论
收藏 7.36MB ZIP 举报
温馨提示
基于Java微服务javascript实现的图书馆管理系统(前后端源代码+数据库).zip
资源推荐
资源详情
资源评论
收起资源包目录
基于Java微服务javascript实现的图书馆管理系统(前后端源代码+数据库).zip (383个子文件)
.babelrc 312B
bashrc 225B
nginx.conf 2KB
books.css 77B
Dockerfile 1KB
Dockerfile 1KB
Dockerfile 1KB
Dockerfile 1018B
Dockerfile 1017B
Dockerfile 1008B
Dockerfile 1007B
Dockerfile 1001B
Dockerfile 995B
Dockerfile 948B
Dockerfile 925B
Dockerfile 911B
Dockerfile 910B
Dockerfile 905B
Dockerfile 762B
Dockerfile 652B
Dockerfile 634B
.dockerignore 8B
.dockerignore 8B
.dockerignore 8B
.editorconfig 147B
.eslintignore 23B
.eslintrc 95B
.gitignore 208B
.gitignore 160B
.gitignore 41B
.gitignore 39B
.gitignore 39B
.gitignore 35B
.gitignore 34B
.gitignore 34B
.gitignore 32B
.gitignore 27B
.gitignore 12B
.gitignore 11B
.gitignore 11B
.gitkeep 0B
service.go 21KB
service.go 11KB
transport.go 10KB
transport.go 10KB
transport.go 9KB
service.go 9KB
service.go 9KB
transport.go 8KB
transport.go 8KB
service.go 7KB
service.go 7KB
other_services.go 6KB
main.go 5KB
main.go 5KB
transport.go 5KB
main.go 5KB
cache.go 4KB
cache.go 4KB
service.go 4KB
main.go 4KB
transport.go 4KB
main.go 4KB
transport.go 4KB
cache.go 4KB
cache.go 4KB
authentication.go 4KB
structures.go 3KB
other_services.go 3KB
other_services.go 3KB
authentication.go 3KB
authentication.go 3KB
authentication.go 3KB
authentication.go 3KB
authentication.go 3KB
structures.go 3KB
main.go 2KB
service.go 2KB
main.go 2KB
endpoints.go 2KB
structures.go 2KB
endpoints.go 2KB
endpoints.go 2KB
endpoints.go 2KB
structures.go 2KB
main.go 2KB
openlibrary_structures.go 2KB
structures.go 1KB
endpoints.go 1KB
utils.go 1KB
structures.go 1KB
structures.go 1024B
endpoints.go 1018B
endpoints.go 807B
endpoints.go 588B
errors.go 557B
errors.go 557B
errors.go 553B
errors.go 549B
errors.go 549B
共 383 条
- 1
- 2
- 3
- 4
资源评论
心兰相随引导者
- 粉丝: 1091
- 资源: 5640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功