Skip to content

Commit

Permalink
Update architecture
Browse files Browse the repository at this point in the history
  • Loading branch information
Clivern committed Sep 20, 2020
1 parent 9745e0c commit 48a572b
Show file tree
Hide file tree
Showing 100 changed files with 15,963 additions and 307 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,5 @@
dist

sync

*.db
28 changes: 28 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
FROM golang:1.15.2

ARG WALRUS_VERSION=0.1.0

ENV GO111MODULE=on

RUN mkdir -p /app/configs
RUN mkdir -p /app/var/logs
RUN mkdir -p /app/var/storage
RUN apt-get update

WORKDIR /app

RUN curl -sL https://github.com/Clivern/Walrus/releases/download/v${WALRUS_VERSION}/Beetle_${WALRUS_VERSION}_Linux_x86_64.tar.gz | tar xz
RUN rm LICENSE
RUN rm README.md
RUN mv Walrus walrus

COPY ./config.dist.yml /app/configs/

EXPOSE 8000

VOLUME /app/configs
VOLUME /app/var

RUN ./walrus version

CMD ["./walrus", "tower", "-c", "/app/configs/config.dist.yml"]
28 changes: 28 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
GO ?= go
GOFMT ?= $(GO)fmt
NPM ?= npm
NPX ?= npx
RHINO ?= rhino
pkgs = ./...
HUGO ?= hugo

Expand Down Expand Up @@ -92,6 +95,31 @@ ci: style check_license test vet lint
@echo "\n==> All quality checks passed"


## serve_ui: Serve admin dashboard
serve_ui:
cd web;$(NPM) run serve


## build_ui: Builds admin dashboard for production
build_ui:
cd web;$(NPM) run build


## check_ui_format: Check dashboard code format
check_ui_format:
cd web;$(NPX) prettier --check .


## format_ui: Format dashboard code
format_ui:
cd web;$(NPX) prettier --write .


## api_mock: API mock server
api_mock:
$(RHINO) serve -c mocks/.rhino.json


## run: Run the service
run:
$(GO) run walrus.go
Expand Down
165 changes: 163 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<p align="center">
<img src="/assets/gopher.png" width="230" />
<h3 align="center">Walrus</h3>
<p align="center">A fast and beautiful terminal recorder</p>
<p align="center">Fast, Secure and Reliable System Backup, Set up in Minutes.</p>
<p align="center">
<a href="https://travis-ci.com/Clivern/Walrus"><img src="https://travis-ci.com/Clivern/Walrus.svg?branch=master"></a>
<a href="https://github.com/Clivern/Walrus/releases"><img src="https://img.shields.io/badge/Version-0.0.1-red.svg"></a>
Expand All @@ -10,17 +10,178 @@
</p>
</p>
<br/>
<p align="center">
<img src="/assets/chart.png?v=0.0.1" width="60%" />
</p>


Walrus is a fast, secure and reliable backup system. With walrus, you can backup services like MySQL, PostgreSQL, Redis or a complete directory with a short interval and low overhead. It supports AWS S3, digitalocean spaces and any S3-compatible object storage service.


## Documentation

Download [the latest walrus binary](https://github.com/Clivern/Walrus/releases).
## Deployment

Download [the latest walrus binary](https://github.com/Clivern/Walrus/releases). Make it executable from everywhere.

```zsh
$ curl -sL https://github.com/Clivern/Walrus/releases/download/x.x.x/walrus_x.x.x_OS.tar.gz | tar xz
```


#### To run walrus as a tower:

Create the tower configs file `tower.config.yml` from `config.dist.yml`. Something like the following:

```yaml
# Tower configs
tower:
# Env mode (dev or prod)
mode: ${WALRUS_APP_MODE:-dev}
# HTTP port
port: ${WALRUS_API_PORT:-8080}
# TLS configs
tls:
status: ${WALRUS_API_TLS_STATUS:-off}
pemPath: ${WALRUS_API_TLS_PEMPATH:-cert/server.pem}
keyPath: ${WALRUS_API_TLS_KEYPATH:-cert/server.key}

# Message Broker Configs
broker:
# Broker driver (native)
driver: ${WALRUS_BROKER_DRIVER:-native}
# Native driver configs
native:
# Queue max capacity
capacity: ${WALRUS_BROKER_NATIVE_CAPACITY:-5000}
# Number of concurrent workers
workers: ${WALRUS_BROKER_NATIVE_WORKERS:-4}

# API Configs
api:
key: ${WALRUS_API_KEY:- }
encryptionKey: ${WALRUS_ENCRYPTION_KEY:- }

# Runtime, Requests/Response and Walrus Metrics
metrics:
prometheus:
# Route for the metrics endpoint
endpoint: ${WALRUS_METRICS_PROM_ENDPOINT:-/metrics}

# Application Database
database:
# Database driver (sqlite3, mysql)
driver: ${WALRUS_DATABASE_DRIVER:-sqlite3}
# Hostname
host: ${WALRUS_DATABASE_MYSQL_HOST:-localhost}
# Port
port: ${WALRUS_DATABASE_MYSQL_PORT:-3306}
# Database
name: ${WALRUS_DATABASE_MYSQL_DATABASE:-walrus.db}
# Username
username: ${WALRUS_DATABASE_MYSQL_USERNAME:-root}
# Password
password: ${WALRUS_DATABASE_MYSQL_PASSWORD:-root}

# Log configs
log:
# Log level, it can be debug, info, warn, error, panic, fatal
level: ${WALRUS_LOG_LEVEL:-info}
# output can be stdout or abs path to log file /var/logs/walrus.log
output: ${WALRUS_LOG_OUTPUT:-stdout}
# Format can be json
format: ${WALRUS_LOG_FORMAT:-json}
```
The run the `tower` with `systemd`

```
walrus tower -c /path/to/tower.config.yml
```
#### To run walrus as an agent:
Create the agent configs file `agent.config.yml` from `config.dist.yml`. Something like the following:
```yaml
# Agent configs
agent:
# Env mode (dev or prod)
mode: ${WALRUS_APP_MODE:-dev}
# HTTP port
port: ${WALRUS_API_PORT:-8081}
# TLS configs
tls:
status: ${WALRUS_API_TLS_STATUS:-off}
pemPath: ${WALRUS_API_TLS_PEMPATH:-cert/server.pem}
keyPath: ${WALRUS_API_TLS_KEYPATH:-cert/server.key}
# Message Broker Configs
broker:
# Broker driver (native)
driver: ${WALRUS_BROKER_DRIVER:-native}
# Native driver configs
native:
# Queue max capacity
capacity: ${WALRUS_BROKER_NATIVE_CAPACITY:-5000}
# Number of concurrent workers
workers: ${WALRUS_BROKER_NATIVE_WORKERS:-4}
# Tower Configs
tower:
url: ${WALRUS_TOWER_URL:-http://127.0.0.1:8080}
# This must match the one defined in tower config file
apiKey: ${WALRUS_TOWER_API_KEY:- }
# This must match the one defined in tower config file
encryptionKey: ${WALRUS_ENCRYPTION_KEY:- }
# API Configs
api:
key: ${WALRUS_API_KEY:- }
# Log configs
log:
# Log level, it can be debug, info, warn, error, panic, fatal
level: ${WALRUS_LOG_LEVEL:-info}
# output can be stdout or abs path to log file /var/logs/walrus.log
output: ${WALRUS_LOG_OUTPUT:-stdout}
# Format can be json
format: ${WALRUS_LOG_FORMAT:-json}
```

The run the `agent` with `systemd`

```
walrus agent -c /path/to/agent.config.yml
```


#### To run the admin dashboard:

Clone the project:

```zsh
$ git clone https://github.com/Clivern/Walrus.git
```

Create the dashboard config file `web/.env` from `web/.env.dist`. Something like the following:

```
VUE_APP_TOWER_URL=http://localhost:8080
```

Then you can either build or run the dashboard

```zsh
$ make serve_ui

$ make build_ui
```


## Versioning

For transparency into our release cycle and in striving to maintain backward compatibility, Walrus is maintained under the [Semantic Versioning guidelines](https://semver.org/) and release process is predictable and business-friendly.
Expand Down
1 change: 1 addition & 0 deletions assets/chart.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2020-09-19T20:29:53.564Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36" etag="e3RTiJKqkw-HwzMYARRE" version="13.7.3" type="device"><diagram id="DndKhCJv0bW58sGGRB2o" name="Page-1">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</diagram></mxfile>
Binary file added assets/chart.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 48a572b

Please sign in to comment.