angular-sanic-seed-project
angular-sanic-seed-project copied to clipboard
π An opinionated Angular - Sanic RESTful seed
<<<<<<< HEAD

[![GitHub release][github-image]][github-url]
[![Codacy Badge][codacy-image]][codacy-url] [![Maintenance][maintenance-image]][maintenance-url] [
][donate-url]
This repo is a production ready seed project. The app shows a list of users.
Structure
- The
clientcontain an Angular app, built with Angular-Cli, and ngrx to handle state, Angular Material as a design library, and have service worker, andAOTcompiled. The app shows the users from the Sanic api. - The
servercontain a simple Sanic app that expose anapiofusers. The Python serve through a gunicorn server installed in the container. - There is a
postgresservice for the database. Thedatabasedirectory contains the automatic backup script. - All the logs are going to
stdoutand can be collected through any service. - There are built in test that configured to run on
travis-ci, and a code coverage analysis viacodecov. =======
An opinionated Angular - Django cluster
The server directory contain a simple Django app that expose an api of Django users with Django REST framework. The client directory contain an Angular simple app, built with Angular-Cli, ngrx to handle state, Angular Material as a design library, have service worker, and ready to AOT compilation. The simple Angular app show the users from the Django api.
The repo is a production ready app, that uses nginx to serve static files (the client app and static files from the server), and gunicorn for the server (python) stuff. All the parts are in a separate Docker containers and we use kubernetes to manage them.
Pre Requirements
- install docker.
- Don't know yet.
Installation
Automatic installation of the project with docker, for development.
- Run
$ docker-compose upto build the docker images and run them. - Open the browser at http://localhost:8000 to see your Django (server) app.
- Open the browser at http://localhost:4200 to see your Angular (client) app.
b72a69f (Update dependencies (#20))
The client app is built via the cloud build CI on GCP and deployed to the GCP storage.
The server app is built via the cloud build CI as a docker image and deployed to a GKE cluster on GCP (managed by Kubernetes).
The PostgreSQL database is built via the cloud build CI as a docker image and deployed to a GKE cluster on GCP (managed by Kubernetes).
Production Installation
Deploy the client app:
- Create a storage bucket with the name of the Domain you have.
- Create a cloud build trigger with the parameters in the screenshot (change the
_REGION_NAMEto the location of the bucket you created in the previous step). - Now you can deploy your
clientapp by creating a new tag in thev0.0.1/prod/prodformat and push it to github (git push --tags).
Deploy the server app:
- Create a
GKEcluster on GCP. - Create a cloud build trigger with the parameters in the screenshot (change the
_REGION_NAMEto the location of theGKEcluster you created in step 1). - Connect to the
GKEcluster usinggcloud container clusters get-credentials prodand then create atilerusing the commands: kubectl create serviceaccount --namespace kube-system tillerkubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tillerkubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'helm init --service-account tiller --upgrade- Then change the
helmpermissions by navigate toserver/kubernetesin the command line and then writekubectl apply -f helm-permissions.yaml. - Now you can deploy your
serverapp by create a new tag in thev0.0.1/prod/prodformat and push it to github (git push --tags).
Create a Cloud DNS record:
- Create a Cloud DNS record on GCP. In this record you should add an
Arecord to the kubernetes cluster (the server) and place there your load balancer ip address you get in the "Deploy theserverapp", and aCNAMErecord to our Storage bucket (client app) screenshot.
Our Stack
<<<<<<< HEAD
b72a69f (Update dependencies (#20))
Tools we use
<<<<<<< HEAD
Tests
There is already tests for the server and the client, we currently at +90 percent coverage.
To run the client tests and lint run the commands below in the client directory.
npm run lint
npm run test
To run the server tests and lint run the commands below in the server directory.
pycodestyle --show-source --max-line-length=120 --show-pep8 .
python manage.py test
Load Tests
We also write some tests for doing load test with locust, you can find it under server/locustfile.py.
To do a load test just install locust (it's in the requirements.txt file) go to server directory and run
locust --host=http://localhost
Then open up Locustβs web interface http://localhost:8089.
Rolling Updates
To update any of the containers that are in a service with a new image just create a new image, for example
docker build -t server:v2 .
And then update the service with the new image
docker service update --image server:v2 prod_server
Database Backups
Each day a backup of the PostgreSQL database will be created. The daily backups are rotated weekly, so maximum 7 backup files will be at the daily directory at once.
Each Saturday morning a weekly backup will be created at the weekly directory. The weekly backups are rotated on a 5 week cycle.
Each month at the 1st of the month a monthly backup will be created at the monthly directory. Monthly backups are NOT rotated
The backups are saved at /var/backups/postgres at the host machine via a shared volume. It can be configured in the docker-compose.yml at volumes section of the database service.
b72a69f (Update dependencies (#20))
Contribute
Just fork and do a pull request (;
<<<<<<< HEAD license-url: https://github.com/nirgn975/Angular-Django-Seed-Project/blob/master/LICENSE [github-image]: https://img.shields.io/github/release/nirgn975/Angular-Django-Seed-Project.svg [github-url]: https://github.com/nirgn975/Angular-Django-Seed-Project/releases travis-image: https://travis-ci.org/nirgn975/Angular-Django-Seed-Project.svg?branch=master travis-url: https://travis-ci.org/nirgn975/Angular-Django-Seed-Project codecov-image: https://codecov.io/gh/nirgn975/Angular-Django-Seed-Project/branch/master/graph/badge.svg codecov-url: https://codecov.io/gh/nirgn975/Angular-Django-Seed-Project dependencyci-image: https://dependencyci.com/github/nirgn975/Angular-Django-Seed-Project/badge dependencyci-url: https://dependencyci.com/github/nirgn975/Angular-Django-Seed-Project [codacy-image]: https://api.codacy.com/project/badge/Grade/cdf4939e98804872b377a4120a4f4571 [codacy-url]: https://www.codacy.com/app/nirgn975/Angular-Django-Seed-Project?utm_source=github.com&utm_medium=referral&utm_content=nirgn975/Angular-Django-Seed-Project&utm_campaign=Badge_Grade [maintenance-image]: https://img.shields.io/maintenance/yes/2019.svg [maintenance-url]: https://github.com/nirgn975 donate-image: https://img.shields.io/badge/PayPal-Donate-lightgrey.svg
b72a69f (Update dependencies (#20)) [donate-url]: https://www.paypal.me/nirgn/2