Skip to content

Auto deploy web application with Ansible in multi base: EC2, VMachine, Container,..

License

Notifications You must be signed in to change notification settings

QuanBlue/ansible-web-app-deployment

Repository files navigation

icon
Ansible Web application Deployment

Auto deploy web application with Ansible in multi base: EC2, VMachine, Container,..

contributors last update forks stars open issues license

DocumentationReport BugRequest Feature


Table of Contents

🧰 Getting Started

Prerequisites

Before proceeding with the installation and usage of this project, ensure that you have the following prerequisites in place:

  • Network Connectivity: Docker requires network connectivity to download images, communicate with containers, and access external resources.

  • Each machine base have its own require

    • Container base:

      • Docker Engine, Install here.
    • Virtual machine base:

      • Virtualbox version: >= 7.0.6, Install here.
      • Vagrant version: >= 2.3.7, Install here.
      • Vagrant plugin:
        • vagrant-scp:
          vagrant plugin install vagrant-scp`
          
    • EC2 base:

      • AWS CLI, Install here

Environment Variables

If you wanna run this project with ec2 base, you must set up environment variables in .env file in ./aws-ec2

EC2 config (.env):

  • AWS_ACCESS_KEY_ID*: Unique identifier for AWS authentication.
  • AWS_SECRET_ACCESS_KEY*: Confidential key for securely signing AWS API requests.

    Get access key id and secret at here

  • AWS_REGION: AWS server location for services (default: ap-southeast-1)

    List AWS available region

  • AMI_ID: Identifier for AMD processors (default: ami-0df7a207adb9748c7)
    • Find AMI_ID at here
    • Make sure that AMI_ID running it in the AWS_REGION that you want to deploy to.
  • INSTANCE_NAME: Unique identifier for virtual servers. (default: quanblue)
  • INSTANCE_TYPE: AWS server configuration specification. (default: t2.micro)

    List AWS available instance type

  • KEY_PAIR_NAME: name of key pair (default: quanblue_key_pair)
  • SECURITY_GROUP_NAME: name of security group (default: quanblue_sg)

Example:

# .env

AWS_ACCESS_KEY_ID=[your access key]
AWS_SECRET_ACCESS_KEY=[your secret key]
AWS_REGION=ap-southeast-1

AMI_ID=ami-0df7a207adb9748c7

INSTANCE_NAME=quanblue
INSTANCE_TYPE=t2.micro
KEY_PAIR_NAME=quanblue_key_pair
SECURITY_GROUP_NAME=quanblue_sg

Note:

  • Which environment variables not have default value, you need to add it to .env file.
  • You can also check out the file .env.example to see all required environment variables.
  • If you want to use this example environment, you need to rename it to .env.

Run Locally

To deploy this project, with each base, follow these steps:

Container base:

bash ./container_deploy.sh

You can watch IPv4 address of all container in ansible-net network

$ docker network inspect --format='{{range .Containers}}{{.Name}}: {{.IPv4Address}}{{"\n"}}{{end}}' ansible-net

ansible-controller: 172.18.0.2/16
backend: 172.18.0.7/16
prometheus: 172.18.0.3/16
alertmanager: 172.18.0.4/16
grafana: 172.18.0.5/16
frontend: 172.18.0.6/16

Virtual machine base:

bash ./vmachine_deploy.sh

EC2 base:

bash ./ec2_deploy.sh

🚀 Usage

Automatic deploy web application with 3 base: container, virtual machine and ec2 follow these steps:

  • Remove all old machine and component attach with them
  • Create new machines (Ansible and remote machines)
  • Set up ssh key for machines
  • Generate inventory file
  • From Ansible machine:
    • Add remote machines to the known hosts list
    • Copy all setup files from host machine
    • Play playbook to setup remote machines

🗺️ Roadmap

  • Deploy
    • Application
    • Deploy monitoring and logging components
  • Deploy Application on
    • Docker - Container
    • Vagrant - VMachine
    • AWS - EC2
  • Menu UI

👥 Contributors

Contributions are always welcome!

✨ Credits

📜 License

Distributed under the MIT License. See LICENSE for more information.


Bento @quanblue  ·  GitHub @QuanBlue  ·  Gmail [email protected]

Releases

No releases published

Packages

No packages published