aboutsummaryrefslogblamecommitdiff
path: root/README.md
blob: 4c389438874dbe0ad838bd9a06b3ea85efa769bf (plain) (tree)























































































































                                                                                                                                                                                                                                                                                   
# Cryptoportfolio app

Back and front end for cryptoportfolio project.

Server binaries and webapp files are shipped to Github. No need to install dev dependencies to deploy it. All you need is [ansible](http://docs.ansible.com/ansible/latest/intro_installation.html#installing-the-control-machine)

- [Deploy](#deploy) : deploy server binaries and webapp archive to a server with ansible
- [Server](#server) : server written in golang
- [Webapp](#webapp) : JS (React)
- [Release](#release) : release server binaries and webapp archive to github with ansible.

Dir tree
```
|- api/*.go   api endpoints
|- db/*.go    database models
|- cmd/
|   |--- app/
|         |-- Makefile
|         |-- conf.toml   server configuration file (dev)
|         |-- main.go     server entry point
|   |--- ansible/
|             |-- ansible.cfg
|             |-- hosts
|             |-- requirements.yml
|             |-- conf.toml.j2            server configuration file (prod)
|             |-- cryptoportfolio-app.j2  server systemd file
|             |-- vars.yml                playbook variables (vault)
|             |-- release.yml             release playbook
|             |-- deploy.yml              deploy playbook
|   |--- web/
|         |-- env/     app environments
|              |-- dev.env
|              |-- prod.env
|         |-- js/      js source code
|         |-- static/  index.html and style.css
```
## Server
#### Install
##### Golang installation (if needed)
1. Download right package at [https://golang.org/dl](https://golang.org/dl)
2. Install it
```
tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz

export PATH=$PATH:/usr/local/go/bin
```
#### Fetch dependencies
Simply run at the root of project :
```
  make install
```
#### Run locally
You need postgres running on `localhost:5432` and  the following setup:
```
CREATE USER cryptoportfolio;
ALTER USER cryptoportfolio WITH ENCRYPTED PASSWORD 'cryptoporfolio-dev';
ALTER ROLE cryptoportfolio WITH CREATEDB ;
CREATE DATABASE cryptoportfolio OWNER cryptoportfolio;
```
Then run the app in cmd/app:
```
  cd cmd/app
  make run
```
## Webapp
#### Install
You will need `npm`, `node` and `yarn`, then:
```
 cd cmd/web
 make install
```

#### Build local webapp
```
  make static ENV=dev
```
Files are now ready to be served by server.

## Ansible install requirements
```
cd cmd/ansible

ansible-galaxy install -r requirements.yml
```
## Releasing
To release, you need to have all dev environments setup for server and webapp. The token used to push to Github is in cmd/ansible/vars.yml. You need a password to decrypt this file. Ask me. You need to store this password in a file such as `~/.vault_cryptoportfolio_pass.txt`

You can then run the release.yml playbook, don't forget to provide a the release version :
```
  cd cmd/ansible

  ansible-playbook release.yml --extra-vars "version=X.X.X" --vault-password-file=~/.vault_cryptoportfolio_pass.txt
```
## Deploy
change `hosts` file :
```
[jloup-home]
jlj.am

[jloup-home:vars]
  ansible_port=21
  ansible_user=ansible-deploy # This user will be used to carry out operation on remote machine
                              # To make it work, this user should not be prompted for password when sudo
                              # else you need to pass --ask-sudo-pass when running playbook

  app_user=jloup    # user that will run the app service
  app_domain=jlj.am

  postgres_database=cryptoportfolio
  postgres_user=cryptoportfolio
  postgres_password=cryptoportfolio-dev

  linux_arch=386 # your machine arch. should be one if [386, amd64]
```

```
  cd cmd/ansible

  ansible-playbook deploy.yml --extra-vars "version=X.X.X" --vault-password-file=~/.vault_cryptoportfolio_pass.txt
```