diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index cad84732a..7a2de8a6f 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -35,7 +35,7 @@ jobs: ${{ secrets.DOCKER_NAME }}/lqa-flask-app:${{ env.TAG }} ${{ secrets.DOCKER_NAME }}/lqa-flask-app:latest - - name: Build and Push nginx Images + - name: Build and Push nginx front-end uses: docker/build-push-action@v4 with: context: '3. Mid-term/Lequanganh/nginx' @@ -44,3 +44,14 @@ jobs: tags: | ${{ secrets.DOCKER_NAME }}/lqa-web:${{ env.TAG }} ${{ secrets.DOCKER_NAME }}/lqa-web:latest + + - name: Build and Push nginx load-balancer + uses: docker/build-push-action@v4 + with: + context: '3. Mid-term/Lequanganh/load-balancer' + file: '3. Mid-term/Lequanganh/load-balancer/Dockerfile' + push: true + tags: | + ${{ secrets.DOCKER_NAME }}/lqa-load-balancer:${{ env.TAG }} + ${{ secrets.DOCKER_NAME }}/lqa-load-balancer:latest + diff --git a/3. Mid-term/Lequanganh/ansible/inventories/inventory.yaml b/3. Mid-term/Lequanganh/ansible/inventories/inventory.yaml index 66cbb4da5..b7b7d4f07 100644 --- a/3. Mid-term/Lequanganh/ansible/inventories/inventory.yaml +++ b/3. Mid-term/Lequanganh/ansible/inventories/inventory.yaml @@ -2,25 +2,25 @@ all: hosts: web_app_1: - ansible_host: 10.0.2. + ansible_host: 10.0.3.6 ansible_user: lqa ansible_ssh_pass: 9876541 ansible_become_user: root ansible_become_password: 9876541 web_app_2: - ansible_host: 10.0.2.15 + ansible_host: 10.0.3.7 ansible_user: lqa ansible_ssh_pass: 9876541 ansible_become_user: root ansible_become_password: 9876541 db: - ansible_host: 10.0.2.15 + ansible_host: 10.0.3.8 ansible_user: lqa ansible_ssh_pass: 9876541 ansible_become_user: root ansible_become_password: 9876541 nginx_lb: - ansible_host: 10.0.2.15 + ansible_host: 10.0.3.5 ansible_user: lqa ansible_ssh_pass: 9876541 ansible_become_user: root diff --git a/3. Mid-term/Lequanganh/ansible/roles/api/tasks/main.yml b/3. Mid-term/Lequanganh/ansible/roles/api/tasks/main.yml deleted file mode 100644 index 8493228ae..000000000 --- a/3. Mid-term/Lequanganh/ansible/roles/api/tasks/main.yml +++ /dev/null @@ -1,31 +0,0 @@ ---- -- name: Build Flask image - community.docker.docker_image: - name: flask_test - build: - path: /home/lqa/web_app/1. Containerization/LeQuangAnh/flask/ - source: build - -- name: Run Flask container 1 - community.docker.docker_container: - name: flask_container_1 - image: flask_test - command: python app.py - restart_policy: unless-stopped - env: - COLOR=black - exposed_ports: - - 5000 - network_mode: my-network - -- name: Run Flask container 2 - community.docker.docker_container: - name: flask_container_2 - image: flask_test - command: python app.py - restart_policy: unless-stopped - env: - COLOR=cyan - exposed_ports: - - 5000 - network_mode: my-network diff --git a/3. Mid-term/Lequanganh/ansible/roles/api/README.md b/3. Mid-term/Lequanganh/ansible/roles/api_1/README.md similarity index 100% rename from 3. Mid-term/Lequanganh/ansible/roles/api/README.md rename to 3. Mid-term/Lequanganh/ansible/roles/api_1/README.md diff --git a/3. Mid-term/Lequanganh/ansible/roles/api/defaults/main.yml b/3. Mid-term/Lequanganh/ansible/roles/api_1/defaults/main.yml similarity index 100% rename from 3. Mid-term/Lequanganh/ansible/roles/api/defaults/main.yml rename to 3. Mid-term/Lequanganh/ansible/roles/api_1/defaults/main.yml diff --git a/3. Mid-term/Lequanganh/ansible/roles/api/handlers/main.yml b/3. Mid-term/Lequanganh/ansible/roles/api_1/handlers/main.yml similarity index 100% rename from 3. Mid-term/Lequanganh/ansible/roles/api/handlers/main.yml rename to 3. Mid-term/Lequanganh/ansible/roles/api_1/handlers/main.yml diff --git a/3. Mid-term/Lequanganh/ansible/roles/api/meta/main.yml b/3. Mid-term/Lequanganh/ansible/roles/api_1/meta/main.yml similarity index 100% rename from 3. Mid-term/Lequanganh/ansible/roles/api/meta/main.yml rename to 3. Mid-term/Lequanganh/ansible/roles/api_1/meta/main.yml diff --git a/3. Mid-term/Lequanganh/ansible/roles/api_1/tasks/main.yml b/3. Mid-term/Lequanganh/ansible/roles/api_1/tasks/main.yml new file mode 100644 index 000000000..b2dec316f --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/api_1/tasks/main.yml @@ -0,0 +1,17 @@ +- name: Run Flask container + community.docker.docker_container: + name: flask_container_1 + image: leqa/lqa-flask-app:latest + command: python init.py + restart_policy: unless-stopped + env: + COLOR: black + exposed_ports: + - 5000 + volumes: + - ~/static:/app/static + network_mode: my-network + + + + diff --git a/3. Mid-term/Lequanganh/ansible/roles/api/tests/inventory b/3. Mid-term/Lequanganh/ansible/roles/api_1/tests/inventory similarity index 100% rename from 3. Mid-term/Lequanganh/ansible/roles/api/tests/inventory rename to 3. Mid-term/Lequanganh/ansible/roles/api_1/tests/inventory diff --git a/3. Mid-term/Lequanganh/ansible/roles/api/tests/test.yml b/3. Mid-term/Lequanganh/ansible/roles/api_1/tests/test.yml similarity index 100% rename from 3. Mid-term/Lequanganh/ansible/roles/api/tests/test.yml rename to 3. Mid-term/Lequanganh/ansible/roles/api_1/tests/test.yml diff --git a/3. Mid-term/Lequanganh/ansible/roles/api/vars/main.yml b/3. Mid-term/Lequanganh/ansible/roles/api_1/vars/main.yml similarity index 100% rename from 3. Mid-term/Lequanganh/ansible/roles/api/vars/main.yml rename to 3. Mid-term/Lequanganh/ansible/roles/api_1/vars/main.yml diff --git a/3. Mid-term/Lequanganh/ansible/roles/api_2/README.md b/3. Mid-term/Lequanganh/ansible/roles/api_2/README.md new file mode 100644 index 000000000..225dd44b9 --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/api_2/README.md @@ -0,0 +1,38 @@ +Role Name +========= + +A brief description of the role goes here. + +Requirements +------------ + +Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required. + +Role Variables +-------------- + +A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well. + +Dependencies +------------ + +A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles. + +Example Playbook +---------------- + +Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too: + + - hosts: servers + roles: + - { role: username.rolename, x: 42 } + +License +------- + +BSD + +Author Information +------------------ + +An optional section for the role authors to include contact information, or a website (HTML is not allowed). diff --git a/3. Mid-term/Lequanganh/ansible/roles/api_2/defaults/main.yml b/3. Mid-term/Lequanganh/ansible/roles/api_2/defaults/main.yml new file mode 100644 index 000000000..1b9474033 --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/api_2/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for api diff --git a/3. Mid-term/Lequanganh/ansible/roles/api_2/handlers/main.yml b/3. Mid-term/Lequanganh/ansible/roles/api_2/handlers/main.yml new file mode 100644 index 000000000..a2bf3007b --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/api_2/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for api diff --git a/3. Mid-term/Lequanganh/ansible/roles/api_2/meta/main.yml b/3. Mid-term/Lequanganh/ansible/roles/api_2/meta/main.yml new file mode 100644 index 000000000..c572acc9f --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/api_2/meta/main.yml @@ -0,0 +1,52 @@ +galaxy_info: + author: your name + description: your role description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Choose a valid license ID from https://spdx.org - some suggested licenses: + # - BSD-3-Clause (default) + # - MIT + # - GPL-2.0-or-later + # - GPL-3.0-only + # - Apache-2.0 + # - CC-BY-4.0 + license: license (GPL-2.0-or-later, MIT, etc) + + min_ansible_version: 2.1 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + # platforms: + # - name: Fedora + # versions: + # - all + # - 25 + # - name: SomePlatform + # versions: + # - all + # - 1.0 + # - 7 + # - 99.99 + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +dependencies: [] + # List your role dependencies here, one per line. Be sure to remove the '[]' above, + # if you add dependencies to this list. diff --git a/3. Mid-term/Lequanganh/ansible/roles/api_2/tasks/main.yml b/3. Mid-term/Lequanganh/ansible/roles/api_2/tasks/main.yml new file mode 100644 index 000000000..9744a9781 --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/api_2/tasks/main.yml @@ -0,0 +1,17 @@ +- name: Run Flask container + community.docker.docker_container: + name: flask_container_1 + image: leqa/lqa-flask-app:latest + command: python init.py + restart_policy: unless-stopped + env: + COLOR: cyan + exposed_ports: + - 5000 + volumes: + - ~/static:/app/static + network_mode: my-network + + + + diff --git a/3. Mid-term/Lequanganh/ansible/roles/api_2/tests/inventory b/3. Mid-term/Lequanganh/ansible/roles/api_2/tests/inventory new file mode 100644 index 000000000..878877b07 --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/api_2/tests/inventory @@ -0,0 +1,2 @@ +localhost + diff --git a/3. Mid-term/Lequanganh/ansible/roles/api_2/tests/test.yml b/3. Mid-term/Lequanganh/ansible/roles/api_2/tests/test.yml new file mode 100644 index 000000000..32721daa5 --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/api_2/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - api diff --git a/3. Mid-term/Lequanganh/ansible/roles/api_2/vars/main.yml b/3. Mid-term/Lequanganh/ansible/roles/api_2/vars/main.yml new file mode 100644 index 000000000..ea69ef76a --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/api_2/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for api diff --git a/3. Mid-term/Lequanganh/ansible/roles/load-balancer/README.md b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/README.md new file mode 100644 index 000000000..225dd44b9 --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/README.md @@ -0,0 +1,38 @@ +Role Name +========= + +A brief description of the role goes here. + +Requirements +------------ + +Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required. + +Role Variables +-------------- + +A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well. + +Dependencies +------------ + +A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles. + +Example Playbook +---------------- + +Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too: + + - hosts: servers + roles: + - { role: username.rolename, x: 42 } + +License +------- + +BSD + +Author Information +------------------ + +An optional section for the role authors to include contact information, or a website (HTML is not allowed). diff --git a/3. Mid-term/Lequanganh/ansible/roles/load-balancer/defaults/main.yml b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/defaults/main.yml new file mode 100644 index 000000000..18d83a61b --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for load-balancer diff --git a/3. Mid-term/Lequanganh/ansible/roles/load-balancer/handlers/main.yml b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/handlers/main.yml new file mode 100644 index 000000000..371a03049 --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for load-balancer diff --git a/3. Mid-term/Lequanganh/ansible/roles/load-balancer/meta/main.yml b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/meta/main.yml new file mode 100644 index 000000000..c572acc9f --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/meta/main.yml @@ -0,0 +1,52 @@ +galaxy_info: + author: your name + description: your role description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Choose a valid license ID from https://spdx.org - some suggested licenses: + # - BSD-3-Clause (default) + # - MIT + # - GPL-2.0-or-later + # - GPL-3.0-only + # - Apache-2.0 + # - CC-BY-4.0 + license: license (GPL-2.0-or-later, MIT, etc) + + min_ansible_version: 2.1 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + # platforms: + # - name: Fedora + # versions: + # - all + # - 25 + # - name: SomePlatform + # versions: + # - all + # - 1.0 + # - 7 + # - 99.99 + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +dependencies: [] + # List your role dependencies here, one per line. Be sure to remove the '[]' above, + # if you add dependencies to this list. diff --git a/3. Mid-term/Lequanganh/ansible/roles/load-balancer/tasks/main.yml b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/tasks/main.yml new file mode 100644 index 000000000..bd2fe58ca --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/tasks/main.yml @@ -0,0 +1,2 @@ +--- +# tasks file for load-balancer diff --git a/3. Mid-term/Lequanganh/ansible/roles/load-balancer/tests/inventory b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/tests/inventory new file mode 100644 index 000000000..878877b07 --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/tests/inventory @@ -0,0 +1,2 @@ +localhost + diff --git a/3. Mid-term/Lequanganh/ansible/roles/load-balancer/tests/test.yml b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/tests/test.yml new file mode 100644 index 000000000..a507545f5 --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - load-balancer diff --git a/3. Mid-term/Lequanganh/ansible/roles/load-balancer/vars/main.yml b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/vars/main.yml new file mode 100644 index 000000000..ce8843cf5 --- /dev/null +++ b/3. Mid-term/Lequanganh/ansible/roles/load-balancer/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for load-balancer diff --git a/3. Mid-term/Lequanganh/load-balancer/Dockerfile b/3. Mid-term/Lequanganh/load-balancer/Dockerfile new file mode 100644 index 000000000..f21af1992 --- /dev/null +++ b/3. Mid-term/Lequanganh/load-balancer/Dockerfile @@ -0,0 +1,23 @@ +FROM nginx:stable-alpine3.17-slim + +# Set the working directory to /app +WORKDIR /app + +# Copy the Nginx configuration file to the container +COPY ./nginx.conf /etc/nginx/conf.d/default.conf + + +# Expose port 80 +EXPOSE 80 + +# Set up dependencies +RUN apk update && \ + apk add --no-cache bash + +# Set up a health check +HEALTHCHECK --interval=5s \ + --timeout=5s \ + CMD curl --fail http://localhost:80 || exit 1 + +# Set up the command to run the container +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/3. Mid-term/Lequanganh/load-balancer/nginx.conf b/3. Mid-term/Lequanganh/load-balancer/nginx.conf new file mode 100755 index 000000000..9d333f829 --- /dev/null +++ b/3. Mid-term/Lequanganh/load-balancer/nginx.conf @@ -0,0 +1,11 @@ +upstream loadbalancer { + server 10.0.3.6:80; + server 10.0.3.7:80; +} +server { + listen 80; + server_name localhost; + location / { + proxy_pass http://loadbalancer; + } +} \ No newline at end of file diff --git a/3. Mid-term/Lequanganh/nginx/nginx.conf b/3. Mid-term/Lequanganh/nginx/nginx.conf index 45b1e404f..eb316acc9 100755 --- a/3. Mid-term/Lequanganh/nginx/nginx.conf +++ b/3. Mid-term/Lequanganh/nginx/nginx.conf @@ -1,13 +1,8 @@ -upstream loadbalancer { - server web_app:5000; - server web_app_2:5000; -} - server { listen 80; server_name localhost; location / { - proxy_pass http://loadbalancer; + proxy_pass localhost:5000; } location /static { alias /app/static/;