# EngageBDR: Gitlab One-click Solution ## Phase 1: MVP This is Minimum Viable Product. We will deploy Gitlab and create repo with demo Java/Maven applicaiton and Gitlab-CI pipelines for: * Build * Test * Push image to Private Docker registry * Deploy ### Deploy Option 1: Simple First option is most popular way of Gitlab deployment. This option includes Single Gitlab Instance with regular (maybe encrypted) backups to external storage(outside current hosting is preferred)and Disaster Recovery Plan to deploy Gitlab anywhere. * Write ansible playbook for Gitlab deploy * Deploy docker * Fine-tuning system * Deploy Gitlab & components using docker * Regular and encrypted backups to remote server (outside of the current DC) * Deploy single VM Gitlab using ansible * Write Disaster Recovery Plan (DRP) * Make tests by disaster DRP in another location ETA: **1-2 weeks** ### Deploy Option 2: HA High Available Gitlab solution with one-click deployment. It's can be deoployed to 2 servers in one DC or multi-region deployment **Required [Gitlab PREMIUM](https://about.gitlab.com/pricing/)** and [CloudFlare Enterprise](https://developers.cloudflare.com/spectrum/load-balancer) #### Principal schema ![](https://i.imgur.com/vHkiJY7.png) * Write ansible playbook for Gitlab deploy * [Deploy & configure **gitaly**](https://docs.gitlab.com/ee/administration/reference_architectures/3k_users.html#configure-gitaly-cluster) * [Deploy redis sentinel (HA cluster)](https://docs.gitlab.com/ee/administration/reference_architectures/3k_users.html#configure-redis) * [Deploy Postgres with primary-secondary replication](https://docs.gitlab.com/ee/administration/postgresql/replication_and_failover.html) * Deploy **PGBouncer** * Deploy **Consul Cluster** * [Configure **Praefect**](https://docs.gitlab.com/ee/administration/reference_architectures/3k_users.html#configure-praefect-postgresql) * Deploy & configure **Sidekiq** * Deploy two **GitLab Rails** installation into both servers * Deploy & configure **Monitoring node** * Deploy & configure **Object storage** * Deploy & configure [**Prometheus**](https://docs.gitlab.com/ee/administration/reference_architectures/3k_users.html#configure-prometheus) * Configure [**CloudFlare LoadBalancer**](https://developers.cloudflare.com/spectrum/load-balancer) with health checks and one backend as failover * Write documentation for maintenance * Make tests for auto-failover ETA: **10-12 weeks** ## Phase 2: Production * Transfer repo with real application code * Write real CI/CD pipeline * Add step for *check deploy result and roll-back on failure* ETA: **from 1 week** (*usualy 1-2 weeks, depends on the application(s)*)