[![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.
- The
client
contain an Angular app, built with Angular-Cli, and ngrx to handle state, Angular Material as a design library, and have service worker, andAOT
compiled. The app shows the users from the Sanic api. - The
server
contain a simple Sanic app that expose anapi
ofusers
. The Python serve through a gunicorn server installed in the container. - There is a
postgres
service for the database. Thedatabase
directory contains the automatic backup script. - All the logs are going to
stdout
and can be collected through any service. - There are built in test that configured to run on
travis-ci
, and a code coverage analysis viacodecov
. =======
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.
- install docker.
- Don't know yet.
Automatic installation of the project with docker, for development.
- Run
$ docker-compose up
to 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).
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_NAME
to the location of the bucket you created in the previous step). - Now you can deploy your
client
app by creating a new tag in thev0.0.1/prod/prod
format and push it to github (git push --tags
).
Deploy the server
app:
- Create a
GKE
cluster on GCP. - Create a cloud build trigger with the parameters in the screenshot (change the
_REGION_NAME
to the location of theGKE
cluster you created in step 1). - Connect to the
GKE
cluster usinggcloud container clusters get-credentials prod
and then create atiler
using the commands: kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
helm init --service-account tiller --upgrade
- Then change the
helm
permissions by navigate toserver/kubernetes
in the command line and then writekubectl apply -f helm-permissions.yaml
. - Now you can deploy your
server
app by create a new tag in thev0.0.1/prod/prod
format 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
A
record to the kubernetes cluster (the server) and place there your load balancer ip address you get in the "Deploy theserver
app", and aCNAME
record to our Storage bucket (client app) screenshot.
<<<<<<< HEAD
b72a69f (Update dependencies (#20))
Tools we use
<<<<<<< HEAD
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
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.
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
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))
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