aboutsummaryrefslogtreecommitdiff

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

  • Deploy : deploy server binaries and webapp archive to a server with ansible
  • Server : server written in golang
  • Webapp : JS (React)
  • 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
  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