Golang refactor of the Minerva System.
Use the Makefile to build. You will need a Golang compiler with minimum
version 1.20.4.
make # To build everything
make protobufs # To regenerate Protocol Buffers implementations
make clean # To remove generated services
make purge # To remove generated files such as Swagger/OpenAPI
# and protobufs
make docker # To build Docker images (see next sections)
make run-<cmd> # To run a specific service (see the cmd directory)If you wish to rebuild the protocol buffer files, you'll also need protoc
and a few more dependencies. Furthermore, to regenerate Swagger and OpenAPI
documentation for the REST service, you'll need Swag.
To use make run-<cmd> commands, you need to replace <cmd> with the desired
service name, which must always be one of the directory names within the cmd
directory, e.g. to run the REST server, use make run-rest.
First of all, install protoc, the protobuf compiler. Seek out the best
package for your Linux distribution or, on Windows, use a package manager
such as Chocolatey.
After that, use the Go package manager to install dependencies:
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latestFinally, use make protobufs for an automated generation of files.
First install the swag tool:
go install github.com/swaggo/swag/cmd/swag@latestFinally, cd to cmd/rest, then run swag init.
If you wish to build a single Docker image, use a command like the following:
docker image build \
-f _deploy/Dockerfile \
--target MODULENAME \
-t MODULENAME \
.
Possible names for MODULENAME:
minerva_go_rest(REST API Gateway + Swagger, runs on port 9000);minerva_go_user(gRPC, runs on port 9010);minerva_go_session(gRPC, runs on port 9011);minerva_go_products(gRPC, runs on port 9012).minerva_go_tenant(gRPC, runs on port 9013).
If you're using BuildKit, you can also generate cross-platform images
(and push them to DockerHub) by abusing the --platform argument.
The following example generates an image of minerva_go_rest for
Linux on 64-bit Intel and ARM platforms, then pushes them to
DockerHub under my username:
docker buildx build \
-f _deploy/Dockerfile \
--target minerva_go_rest \
--platform=linux/amd64,linux/arm64 \
-t luksamuk/minerva_go_rest \
--push \
.
There is an experimental build method which will build the modules for Plan 9 under an ARM architecture. This is due to my current setup where Plan 9 is run in a Raspberry Pi 3 Model B+ with a 32-bit ARM kernel.
If you wish to build Plan 9 binaries, use the following:
make plan9Binaries will be created in 9bin. You may also want to take a look at the
script in extra/runsvc.rc for ease of use in Plan 9.
Migrations are executed by using the Atlas tool. For more information on Atlas integration with GORM, see this link.
To install Atlas, use:
curl -sSf https://atlasgo.sh | shThis also uses the Atlas GORM Provider, which is installed as a project dependency.