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)
- Download right package at https://golang.org/dl
- 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