From ed8feff302e70deb575295a15b81b74bb89b8e6e Mon Sep 17 00:00:00 2001 From: tanshu Date: Sat, 17 Oct 2020 12:27:59 +0530 Subject: [PATCH] New: Fastapi Brewman Fastapi Barker --- barker/app/Dockerfile | 32 ++++++++++ barker/app/backend.dockerfile | 25 ++++++++ barker/app/celeryworker.dockerfile | 35 +++++++++++ barker/app/docker-entrypoint.sh | 6 ++ barker/app/worker.Dockerfile | 24 ++++++++ barker/files/.env | 16 +++++ barker/files/nginx.conf.j2 | 40 ++++++++++++ barker/playbook.yml | 91 ++++++++++++++++++++++++++++ barker/readme.md | 46 ++++++++++++++ barker/vars/default.yml | 5 ++ brewman/app/Dockerfile | 32 ++++++++++ brewman/app/docker-entrypoint.sh | 6 ++ brewman/files/.env-acc | 19 ++++++ brewman/files/.env-exp | 19 ++++++ brewman/files/.env-hops | 19 ++++++ brewman/files/.env-mhl | 19 ++++++ brewman/files/exp database migration | 30 +++++++++ brewman/files/nginx.conf.j2 | 46 ++++++++++++++ brewman/playbook-acc.yml | 70 +++++++++++++++++++++ brewman/playbook-exp.yml | 70 +++++++++++++++++++++ brewman/playbook-hops.yml | 70 +++++++++++++++++++++ brewman/playbook-mhl.yml | 70 +++++++++++++++++++++ brewman/readme.md | 46 ++++++++++++++ brewman/vars/acc.yml | 5 ++ brewman/vars/exp.yml | 5 ++ brewman/vars/hops.yml | 5 ++ brewman/vars/mhl.yml | 5 ++ 27 files changed, 856 insertions(+) create mode 100644 barker/app/Dockerfile create mode 100644 barker/app/backend.dockerfile create mode 100644 barker/app/celeryworker.dockerfile create mode 100644 barker/app/docker-entrypoint.sh create mode 100644 barker/app/worker.Dockerfile create mode 100644 barker/files/.env create mode 100644 barker/files/nginx.conf.j2 create mode 100755 barker/playbook.yml create mode 100644 barker/readme.md create mode 100644 barker/vars/default.yml create mode 100644 brewman/app/Dockerfile create mode 100644 brewman/app/docker-entrypoint.sh create mode 100644 brewman/files/.env-acc create mode 100644 brewman/files/.env-exp create mode 100644 brewman/files/.env-hops create mode 100644 brewman/files/.env-mhl create mode 100644 brewman/files/exp database migration create mode 100644 brewman/files/nginx.conf.j2 create mode 100755 brewman/playbook-acc.yml create mode 100755 brewman/playbook-exp.yml create mode 100755 brewman/playbook-hops.yml create mode 100755 brewman/playbook-mhl.yml create mode 100644 brewman/readme.md create mode 100644 brewman/vars/acc.yml create mode 100644 brewman/vars/exp.yml create mode 100644 brewman/vars/hops.yml create mode 100644 brewman/vars/mhl.yml diff --git a/barker/app/Dockerfile b/barker/app/Dockerfile new file mode 100644 index 0000000..a3b0a08 --- /dev/null +++ b/barker/app/Dockerfile @@ -0,0 +1,32 @@ +FROM node:latest AS builder +RUN git clone --single-branch --depth 1 --branch latest https://git.tanshu.com/tanshu/barker.git /app +WORKDIR /app/bookie +RUN npm install --unsafe-perm && /app/bookie/node_modules/.bin/ng build --prod + + +FROM python:latest +LABEL maintainer="Amritanshu " +COPY --from=builder /app/barker /app +COPY --from=builder /app/frontend /app/frontend +WORKDIR /app + +# Install Poetry +RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | POETRY_HOME=/opt/poetry python && \ + cd /usr/local/bin && \ + ln -s /opt/poetry/bin/poetry && \ + poetry config virtualenvs.create false + +# Allow installing dev dependencies to run tests +ARG INSTALL_DEV=false +RUN bash -c "if [ $INSTALL_DEV == 'true' ] ; then poetry install --no-root ; else poetry install --no-root --no-dev ; fi" + +ENV PYTHONPATH=/app +EXPOSE 80 +VOLUME /frontend + +COPY docker-entrypoint.sh /usr/local/bin/ +RUN chmod 777 /usr/local/bin/docker-entrypoint.sh \ + && ln -s /usr/local/bin/docker-entrypoint.sh / +ENTRYPOINT ["docker-entrypoint.sh"] + +CMD ["python", "-m", "barker"] diff --git a/barker/app/backend.dockerfile b/barker/app/backend.dockerfile new file mode 100644 index 0000000..8c39c50 --- /dev/null +++ b/barker/app/backend.dockerfile @@ -0,0 +1,25 @@ +FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 + +WORKDIR /app/ + +# Install Poetry +RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | POETRY_HOME=/opt/poetry python && \ + cd /usr/local/bin && \ + ln -s /opt/poetry/bin/poetry && \ + poetry config virtualenvs.create false + +# Copy poetry.lock* in case it doesn't exist in the repo +COPY ./app/pyproject.toml ./app/poetry.lock* /app/ + +# Allow installing dev dependencies to run tests +ARG INSTALL_DEV=false +RUN bash -c "if [ $INSTALL_DEV == 'true' ] ; then poetry install --no-root ; else poetry install --no-root --no-dev ; fi" + +# For development, Jupyter remote kernel, Hydrogen +# Using inside the container: +# jupyter lab --ip=0.0.0.0 --allow-root --NotebookApp.custom_display_url=http://127.0.0.1:8888 +ARG INSTALL_JUPYTER=false +RUN bash -c "if [ $INSTALL_JUPYTER == 'true' ] ; then pip install jupyterlab ; fi" + +COPY ./app /app +ENV PYTHONPATH=/app diff --git a/barker/app/celeryworker.dockerfile b/barker/app/celeryworker.dockerfile new file mode 100644 index 0000000..4695a7b --- /dev/null +++ b/barker/app/celeryworker.dockerfile @@ -0,0 +1,35 @@ +FROM python:3.7 + +WORKDIR /app/ + +# Install Poetry +RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | POETRY_HOME=/opt/poetry python && \ + cd /usr/local/bin && \ + ln -s /opt/poetry/bin/poetry && \ + poetry config virtualenvs.create false + +# Copy poetry.lock* in case it doesn't exist in the repo +COPY ./app/pyproject.toml ./app/poetry.lock* /app/ + +# Allow installing dev dependencies to run tests +ARG INSTALL_DEV=false +RUN bash -c "if [ $INSTALL_DEV == 'true' ] ; then poetry install --no-root ; else poetry install --no-root --no-dev ; fi" + +# For development, Jupyter remote kernel, Hydrogen +# Using inside the container: +# jupyter lab --ip=0.0.0.0 --allow-root --NotebookApp.custom_display_url=http://127.0.0.1:8888 +ARG INSTALL_JUPYTER=false +RUN bash -c "if [ $INSTALL_JUPYTER == 'true' ] ; then pip install jupyterlab ; fi" + +ENV C_FORCE_ROOT=1 + +COPY ./app /app +WORKDIR /app + +ENV PYTHONPATH=/app + +COPY ./app/worker-start.sh /worker-start.sh + +RUN chmod +x /worker-start.sh + +CMD ["bash", "/worker-start.sh"] diff --git a/barker/app/docker-entrypoint.sh b/barker/app/docker-entrypoint.sh new file mode 100644 index 0000000..645ab7d --- /dev/null +++ b/barker/app/docker-entrypoint.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e + +cp /app/frontend/* /frontend + +exec "$@" diff --git a/barker/app/worker.Dockerfile b/barker/app/worker.Dockerfile new file mode 100644 index 0000000..0ad0a87 --- /dev/null +++ b/barker/app/worker.Dockerfile @@ -0,0 +1,24 @@ +FROM python:latest +LABEL maintainer="Amritanshu " +RUN git clone --single-branch --depth 1 --branch latest https://git.tanshu.com/tanshu/barker.git /repo +RUN mkdir /app && mv /repo/barker/* /app +WORKDIR /app + +# Install Poetry +RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | POETRY_HOME=/opt/poetry python && \ + cd /usr/local/bin && \ + ln -s /opt/poetry/bin/poetry && \ + poetry config virtualenvs.create false + +# Allow installing dev dependencies to run tests +ARG INSTALL_DEV=false +RUN bash -c "if [ $INSTALL_DEV == 'true' ] ; then poetry install --no-root ; else poetry install --no-root --no-dev ; fi" + +ENV C_FORCE_ROOT=1 +ENV PYTHONPATH=/app + +RUN mv /app/worker-start.sh /usr/local/bin/ \ + && chmod 777 /usr/local/bin/worker-start.sh \ + && ln -s /usr/local/bin/worker-start.sh / + +CMD ["bash", "worker-start.sh"] diff --git a/barker/files/.env b/barker/files/.env new file mode 100644 index 0000000..50ed28a --- /dev/null +++ b/barker/files/.env @@ -0,0 +1,16 @@ +HOST=0.0.0.0 +PORT=80 +LOG_LEVEL=WARN +DEBUG=false +SQLALCHEMY_DATABASE_URI=postgresql://postgres:123456@db:5432/petty +MODULE_NAME=barker.main +PROJECT_NAME=barker +SECRET_KEY=ae4d6e7dfaffa2093598555b239e87d29b5876d4a5ff11b8affa479eb72c41ca +MIDDLEWARE_SECRET_KEY=29e4c76b6c +ALGORITHM=HS256 +JWT_TOKEN_EXPIRE_MINUTES=30 +NEW_DAY_OFFSET_MINUTES=420 +TIMEZONE_OFFSET_MINUTES=330 +ALEMBIC_LOG_LEVEL=INFO +ALEMBIC_SQLALCHEMY_LOG_LEVEL=WARN +RABBITMQ_URI=pyamqp://guest@rabbit// diff --git a/barker/files/nginx.conf.j2 b/barker/files/nginx.conf.j2 new file mode 100644 index 0000000..dc15359 --- /dev/null +++ b/barker/files/nginx.conf.j2 @@ -0,0 +1,40 @@ +server { + + listen 80; + server_name {{ http_host }}; + + # Allow large attachments + client_max_body_size 128M; + + location /api { + proxy_set_header Host $host:$server_port; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass http://localhost:{{ host_port }}; + } + location /token { + + proxy_set_header Host $host:$server_port; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass http://localhost:{{ host_port }}; + } + location /refresh { + proxy_set_header Host $host:$server_port; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass http://localhost:{{ host_port }}; + } + location /db-image { + proxy_set_header Host $host:$server_port; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass http://localhost:{{ host_port }}; + } + location / { + root /var/lib/{{ host_directory }}/frontend; + index index.html index.htm; + try_files $uri $uri/ /index.html =404; + } +} + diff --git a/barker/playbook.yml b/barker/playbook.yml new file mode 100755 index 0000000..07176b4 --- /dev/null +++ b/barker/playbook.yml @@ -0,0 +1,91 @@ +################################################# +# DO Community Playbooks: Docker +################################################# +--- +- hosts: all + become: true + vars_files: + - vars/default.yml + + tasks: + - name: Copy dockerfile + synchronize: src=app dest=/tmp + + - name: Build barker image + docker_image: + name: barker:latest + build: + path: /tmp/app/ + dockerfile: /tmp/app/Dockerfile + pull: yes + state: present + source: build + + - name: Build barker worker image + docker_image: + name: barker-worker:latest + build: + path: /tmp/app/ + dockerfile: /tmp/app/worker.Dockerfile + pull: yes + state: present + source: build + + - name: Upload the .env file + template: + src: "files/.env" + dest: "/var/lib/{{ host_directory }}/.env" + + - name: Create barker container + docker_container: + name: "{{ host_directory }}" + image: barker:latest + state: started + restart_policy: "unless-stopped" + env_file: "/var/lib/{{ host_directory }}/.env" + links: + - "postgres:db" + - "rabbit:rabbit" + published_ports: + - "127.0.0.1:{{ host_port }}:80" + volumes: + - "/var/lib/{{ host_directory }}/frontend:/frontend" + + - name: Create barker worker container + docker_container: + name: "{{ host_directory }}-worker" + image: barker-worker:latest + state: started + restart_policy: "unless-stopped" + env_file: "/var/lib/{{ host_directory }}/.env" + links: + - "rabbit:rabbit" + + + - name: Check if Nginx conf file exists + stat: path="/etc/nginx/sites-available/{{ http_conf }}" + register: status + + - name: No need to reload Nginx + debug: msg= {{ "No need to reload Nginx as sites-available entries have already been created" }} + + - name: Set Nginx conf file + when: status.stat.exists == false + template: + src: "files/nginx.conf.j2" + dest: "/etc/nginx/sites-available/{{ http_conf }}" + + - name: Enable new site + when: status.stat.exists == false + file: + src: "/etc/nginx/sites-available/{{ http_conf }}" + dest: "/etc/nginx/sites-enabled/{{ http_conf }}" + state: link + notify: Reload Nginx + + handlers: + - name: Reload Nginx + service: + name: nginx + state: reloaded + diff --git a/barker/readme.md b/barker/readme.md new file mode 100644 index 0000000..f6d7ecc --- /dev/null +++ b/barker/readme.md @@ -0,0 +1,46 @@ +# Docker on Ubuntu 18.04 + +This playbook will install Docker an Ubuntu 18.04 machine, as explained in the guide on +[How to Use Ansible to Install and Set Up Docker on Ubuntu 18.04](https://www.digitalocean.com/community/tutorials/how-to-use-ansible-to-install-and-set-up-docker-on-ubuntu-18-04). +A number of containers will be created with the options specified in the `vars/default.yml` variable file. + +## Settings + +- `create_containers`: number of containers to create. +- `default_container_name`: default name for new containers. +- `default_container_image`: default image for new containers. +- `default_container_command`: default command to run on new containers. + + +## Running this Playbook + +Quick Steps: + +### 1. Obtain the playbook +```shell +git clone https://github.com/do-community/ansible-playbooks.git +cd ansible-playbooks/docker_ubuntu1804 +``` + +### 2. Customize Options + +```shell +nano vars/default.yml +``` + +```yml +#vars/default.yml +--- +create_containers: 4 +default_container_name: docker +default_container_image: ubuntu +default_container_command: sleep 1d +``` + +### 3. Run the Playbook + +```command +ansible-playbook -l [target] -i [inventory file] -u [remote user] playbook.yml +``` + +For more information on how to run this Ansible setup, please check this guide: [How to Use Ansible to Install and Set Up Docker on Ubuntu 18.04](https://www.digitalocean.com/community/tutorials/how-to-use-ansible-to-install-and-set-up-docker-on-ubuntu-18-04). \ No newline at end of file diff --git a/barker/vars/default.yml b/barker/vars/default.yml new file mode 100644 index 0000000..032ec33 --- /dev/null +++ b/barker/vars/default.yml @@ -0,0 +1,5 @@ +--- +http_host: "knox.hopsngrains.com" +http_conf: "knox.hopsngrains.com.conf" +host_port: "8338" +host_directory: "barker" diff --git a/brewman/app/Dockerfile b/brewman/app/Dockerfile new file mode 100644 index 0000000..818b9c4 --- /dev/null +++ b/brewman/app/Dockerfile @@ -0,0 +1,32 @@ +FROM node:latest AS builder +RUN git clone --single-branch --depth 1 --branch latest https://git.tanshu.com/tanshu/brewman.git /app +WORKDIR /app/overlord +RUN npm install --unsafe-perm && /app/overlord/node_modules/.bin/ng build --prod + + +FROM python:latest +LABEL maintainer="Amritanshu " +COPY --from=builder /app/brewman /app +COPY --from=builder /app/frontend /app/frontend +WORKDIR /app/brewman + +# Install Poetry +RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | POETRY_HOME=/opt/poetry python && \ + cd /usr/local/bin && \ + ln -s /opt/poetry/bin/poetry && \ + poetry config virtualenvs.create false + +# Allow installing dev dependencies to run tests +ARG INSTALL_DEV=false +RUN bash -c "if [ $INSTALL_DEV == 'true' ] ; then poetry install --no-root ; else poetry install --no-root --no-dev ; fi" + +ENV PYTHONPATH=/app +EXPOSE 80 +VOLUME /frontend + +COPY docker-entrypoint.sh /usr/local/bin/ +RUN chmod 777 /usr/local/bin/docker-entrypoint.sh \ + && ln -s /usr/local/bin/docker-entrypoint.sh / +ENTRYPOINT ["docker-entrypoint.sh"] + +CMD ["python", "-m", "brewman"] diff --git a/brewman/app/docker-entrypoint.sh b/brewman/app/docker-entrypoint.sh new file mode 100644 index 0000000..645ab7d --- /dev/null +++ b/brewman/app/docker-entrypoint.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e + +cp /app/frontend/* /frontend + +exec "$@" diff --git a/brewman/files/.env-acc b/brewman/files/.env-acc new file mode 100644 index 0000000..8ce0b47 --- /dev/null +++ b/brewman/files/.env-acc @@ -0,0 +1,19 @@ +HOST=0.0.0.0 +PORT=80 +LOG_LEVEL=WARN +DEBUG=false +SQLALCHEMY_DATABASE_URI=postgresql://postgres:123456@db:5432/acc +MODULE_NAME=brewman.main +PROJECT_NAME=brewman +POSTGRES_SERVER=db +POSTGRES_USER=postgres +POSTGRES_PASSWORD=123456 +POSTGRES_DB=exp + +SECRET_KEY=c9bee2d38676447c2f7a9ea715446e2fd09f16fbaa5b3f6a6f207ec18993987f +MIDDLEWARE_SECRET_KEY=cb71666b9c +ALGORITHM=HS256 +JWT_TOKEN_EXPIRE_MINUTES=30 + +ALEMBIC_LOG_LEVEL=INFO +ALEMBIC_SQLALCHEMY_LOG_LEVEL=WARN diff --git a/brewman/files/.env-exp b/brewman/files/.env-exp new file mode 100644 index 0000000..a453643 --- /dev/null +++ b/brewman/files/.env-exp @@ -0,0 +1,19 @@ +HOST=0.0.0.0 +PORT=80 +LOG_LEVEL=WARN +DEBUG=false +SQLALCHEMY_DATABASE_URI=postgresql://postgres:123456@db:5432/exp +MODULE_NAME=brewman.main +PROJECT_NAME=brewman +POSTGRES_SERVER=db +POSTGRES_USER=postgres +POSTGRES_PASSWORD=123456 +POSTGRES_DB=exp + +SECRET_KEY=8546a61262dab7c05ccf2e26abe30bc10966904df6dfd29259ea85dd0844a8e7 +MIDDLEWARE_SECRET_KEY=da6fcd999b +ALGORITHM=HS256 +JWT_TOKEN_EXPIRE_MINUTES=30 + +ALEMBIC_LOG_LEVEL=INFO +ALEMBIC_SQLALCHEMY_LOG_LEVEL=WARN diff --git a/brewman/files/.env-hops b/brewman/files/.env-hops new file mode 100644 index 0000000..4f36040 --- /dev/null +++ b/brewman/files/.env-hops @@ -0,0 +1,19 @@ +HOST=0.0.0.0 +PORT=80 +LOG_LEVEL=WARN +DEBUG=false +SQLALCHEMY_DATABASE_URI=postgresql://postgres:123456@db:5432/hops +MODULE_NAME=brewman.main +PROJECT_NAME=brewman +POSTGRES_SERVER=db +POSTGRES_USER=postgres +POSTGRES_PASSWORD=123456 +POSTGRES_DB=exp + +SECRET_KEY=cfb3be420c4e2b0ed423b2e4e238713d0461e2ba56198138ad6c4d82aef6295c +MIDDLEWARE_SECRET_KEY=9c2bdd24be +ALGORITHM=HS256 +JWT_TOKEN_EXPIRE_MINUTES=30 + +ALEMBIC_LOG_LEVEL=INFO +ALEMBIC_SQLALCHEMY_LOG_LEVEL=WARN diff --git a/brewman/files/.env-mhl b/brewman/files/.env-mhl new file mode 100644 index 0000000..8328505 --- /dev/null +++ b/brewman/files/.env-mhl @@ -0,0 +1,19 @@ +HOST=0.0.0.0 +PORT=80 +LOG_LEVEL=WARN +DEBUG=false +SQLALCHEMY_DATABASE_URI=postgresql://postgres:123456@db:5432/mhl +MODULE_NAME=brewman.main +PROJECT_NAME=brewman +POSTGRES_SERVER=db +POSTGRES_USER=postgres +POSTGRES_PASSWORD=123456 +POSTGRES_DB=exp + +SECRET_KEY=c9fd1b99931feb083f67470170650420b99eb35368d3de186427166c28d32c8b +MIDDLEWARE_SECRET_KEY=9183bdcfb0 +ALGORITHM=HS256 +JWT_TOKEN_EXPIRE_MINUTES=30 + +ALEMBIC_LOG_LEVEL=INFO +ALEMBIC_SQLALCHEMY_LOG_LEVEL=WARN diff --git a/brewman/files/exp database migration b/brewman/files/exp database migration new file mode 100644 index 0000000..67ec84c --- /dev/null +++ b/brewman/files/exp database migration @@ -0,0 +1,30 @@ +ALTER TABLE accounts ADD CONSTRAINT accounts_name_key UNIQUE (name); +alter table accounts drop constraint uq_accounts_name; + + +alter table auth_clients drop constraint uq_auth_clients_code; +alter table auth_clients drop constraint uq_auth_clients_name; +ALTER TABLE auth_clients ADD CONSTRAINT "auth_clients_Code_key" UNIQUE (name); +ALTER TABLE auth_clients ADD CONSTRAINT "auth_clients_Name_key" UNIQUE (name); + +alter table auth_login_history drop constraint uq_auth_login_history_user_id; +ALTER TABLE auth_login_history ADD CONSTRAINT "auth_login_history_user_id_client_id_date_key" UNIQUE (date); +ALTER TABLE auth_roles ADD CONSTRAINT "auth_roles_Name_key" UNIQUE ("Name"); +ALTER TABLE auth_groups ADD CONSTRAINT "auth_groups_Name_key" UNIQUE ("Name"); +ALTER TABLE auth_users ADD CONSTRAINT "auth_users_Name_key" UNIQUE ("Name"); +ALTER TABLE cost_centres ADD CONSTRAINT "entities_costcenters_Name_key" UNIQUE ("Name"); +ALTER TABLE fingerprints ADD CONSTRAINT "uq_employee_id_date" UNIQUE ("EmployeeID"); +ALTER TABLE product_groups ADD CONSTRAINT "entities_productgroups_Name_key" UNIQUE ("Name"); +ALTER TABLE products ADD CONSTRAINT "products_Code_key" UNIQUE ("Code"); +ALTER TABLE products ADD CONSTRAINT "products_Name_Units_key" UNIQUE ("Code"); + +alter table recipe_items drop constraint uq_recipe_items_recipe_id; +ALTER TABLE recipe_items ADD CONSTRAINT "recipe_items_recipe_id_product_id_key" UNIQUE (product_id); + +ALTER TABLE settings ADD CONSTRAINT "settings_Name_key" UNIQUE ("Name"); +DROP INDEX ix_vouchers_date; +ALTER TABLE service_charges ADD CONSTRAINT "service_charges_journal_id_fkey" UNIQUE ("journal_id"); +ALTER TABLE service_charges ADD CONSTRAINT "service_charges_voucher_id_fkey" UNIQUE ("journal_id"); +ALTER TABLE salary_deductions ADD CONSTRAINT "entities_salarydeductions_JournalID_fkey" UNIQUE ("JournalID"); +ALTER TABLE salary_deductions ADD CONSTRAINT "salary_deductions_VoucherID_fkey" UNIQUE ("VoucherID"); + diff --git a/brewman/files/nginx.conf.j2 b/brewman/files/nginx.conf.j2 new file mode 100644 index 0000000..64ed004 --- /dev/null +++ b/brewman/files/nginx.conf.j2 @@ -0,0 +1,46 @@ +server { + + listen 80; + server_name {{ http_host }}; + + # Allow large attachments + client_max_body_size 128M; + + location /api { + proxy_set_header Host $host:$server_port; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass http://localhost:{{ host_port }}; + } + location /token { + + proxy_set_header Host $host:$server_port; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass http://localhost:{{ host_port }}; + } + location /refresh { + proxy_set_header Host $host:$server_port; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass http://localhost:{{ host_port }}; + } + location /attendance-report { + proxy_set_header Host $host:$server_port; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass http://localhost:{{ host_port }}; + } + location /db-image { + proxy_set_header Host $host:$server_port; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass http://localhost:{{ host_port }}; + } + location / { + root /var/lib/{{ host_directory }}/frontend; + index index.html index.htm; + try_files $uri $uri/ /index.html =404; + } +} + diff --git a/brewman/playbook-acc.yml b/brewman/playbook-acc.yml new file mode 100755 index 0000000..cf085dc --- /dev/null +++ b/brewman/playbook-acc.yml @@ -0,0 +1,70 @@ +################################################# +# DO Community Playbooks: Docker +################################################# +--- +- hosts: all + become: true + vars_files: + - vars/acc.yml + + tasks: + - name: Copy dockerfile + synchronize: src=app dest=/tmp + + - name: Build brewman image + docker_image: + name: brewman:latest + build: + path: /tmp/app/ + dockerfile: /tmp/app/Dockerfile + pull: yes + state: present + source: build + + - name: Upload the .env file + template: + src: "files/.env-acc" + dest: "/var/lib/{{ host_directory }}/.env" + + - name: Create brewman container + docker_container: + name: "{{ host_directory }}" + image: brewman:latest + state: started + restart_policy: "unless-stopped" + env_file: "/var/lib/{{ host_directory }}/.env" + links: + - "postgres:db" + published_ports: + - "127.0.0.1:{{ host_port }}:80" + volumes: + - "/var/lib/{{ host_directory }}/frontend:/frontend" + + + - name: Check if Nginx conf file exists + stat: path="/etc/nginx/sites-available/{{ http_conf }}" + register: status + + - name: No need to reload Nginx + debug: msg= {{ "No need to reload Nginx as sites-available entries have already been created" }} + + - name: Set Nginx conf file + when: status.stat.exists == false + template: + src: "files/nginx.conf.j2" + dest: "/etc/nginx/sites-available/{{ http_conf }}" + + - name: Enable new site + when: status.stat.exists == false + file: + src: "/etc/nginx/sites-available/{{ http_conf }}" + dest: "/etc/nginx/sites-enabled/{{ http_conf }}" + state: link + notify: Reload Nginx + + handlers: + - name: Reload Nginx + service: + name: nginx + state: reloaded + diff --git a/brewman/playbook-exp.yml b/brewman/playbook-exp.yml new file mode 100755 index 0000000..c178d46 --- /dev/null +++ b/brewman/playbook-exp.yml @@ -0,0 +1,70 @@ +################################################# +# DO Community Playbooks: Docker +################################################# +--- +- hosts: all + become: true + vars_files: + - vars/exp.yml + + tasks: + - name: Copy dockerfile + synchronize: src=app dest=/tmp + + - name: Build brewman image + docker_image: + name: brewman:latest + build: + path: /tmp/app/ + dockerfile: /tmp/app/Dockerfile + pull: yes + state: present + source: build + + - name: Upload the .env file + template: + src: "files/.env-exp" + dest: "/var/lib/{{ host_directory }}/.env" + + - name: Create brewman container + docker_container: + name: "{{ host_directory }}" + image: brewman:latest + state: started + restart_policy: "unless-stopped" + env_file: "/var/lib/{{ host_directory }}/.env" + links: + - "postgres:db" + published_ports: + - "127.0.0.1:{{ host_port }}:80" + volumes: + - "/var/lib/{{ host_directory }}/frontend:/frontend" + + + - name: Check if Nginx conf file exists + stat: path="/etc/nginx/sites-available/{{ http_conf }}" + register: status + + - name: No need to reload Nginx + debug: msg= {{ "No need to reload Nginx as sites-available entries have already been created" }} + + - name: Set Nginx conf file + when: status.stat.exists == false + template: + src: "files/nginx.conf.j2" + dest: "/etc/nginx/sites-available/{{ http_conf }}" + + - name: Enable new site + when: status.stat.exists == false + file: + src: "/etc/nginx/sites-available/{{ http_conf }}" + dest: "/etc/nginx/sites-enabled/{{ http_conf }}" + state: link + notify: Reload Nginx + + handlers: + - name: Reload Nginx + service: + name: nginx + state: reloaded + diff --git a/brewman/playbook-hops.yml b/brewman/playbook-hops.yml new file mode 100755 index 0000000..cbb4300 --- /dev/null +++ b/brewman/playbook-hops.yml @@ -0,0 +1,70 @@ +################################################# +# DO Community Playbooks: Docker +################################################# +--- +- hosts: all + become: true + vars_files: + - vars/hops.yml + + tasks: + - name: Copy dockerfile + synchronize: src=app dest=/tmp + + - name: Build brewman image + docker_image: + name: brewman:latest + build: + path: /tmp/app/ + dockerfile: /tmp/app/Dockerfile + pull: yes + state: present + source: build + + - name: Upload the .env file + template: + src: "files/.env-hops" + dest: "/var/lib/{{ host_directory }}/.env" + + - name: Create brewman container + docker_container: + name: "{{ host_directory }}" + image: brewman:latest + state: started + restart_policy: "unless-stopped" + env_file: "/var/lib/{{ host_directory }}/.env" + links: + - "postgres:db" + published_ports: + - "127.0.0.1:{{ host_port }}:80" + volumes: + - "/var/lib/{{ host_directory }}/frontend:/frontend" + + + - name: Check if Nginx conf file exists + stat: path="/etc/nginx/sites-available/{{ http_conf }}" + register: status + + - name: No need to reload Nginx + debug: msg= {{ "No need to reload Nginx as sites-available entries have already been created" }} + + - name: Set Nginx conf file + when: status.stat.exists == false + template: + src: "files/nginx.conf.j2" + dest: "/etc/nginx/sites-available/{{ http_conf }}" + + - name: Enable new site + when: status.stat.exists == false + file: + src: "/etc/nginx/sites-available/{{ http_conf }}" + dest: "/etc/nginx/sites-enabled/{{ http_conf }}" + state: link + notify: Reload Nginx + + handlers: + - name: Reload Nginx + service: + name: nginx + state: reloaded + diff --git a/brewman/playbook-mhl.yml b/brewman/playbook-mhl.yml new file mode 100755 index 0000000..01d3893 --- /dev/null +++ b/brewman/playbook-mhl.yml @@ -0,0 +1,70 @@ +################################################# +# DO Community Playbooks: Docker +################################################# +--- +- hosts: all + become: true + vars_files: + - vars/mhl.yml + + tasks: + - name: Copy dockerfile + synchronize: src=app dest=/tmp + + - name: Build brewman image + docker_image: + name: brewman:latest + build: + path: /tmp/app/ + dockerfile: /tmp/app/Dockerfile + pull: yes + state: present + source: build + + - name: Upload the .env file + template: + src: "files/.env-mhl" + dest: "/var/lib/{{ host_directory }}/.env" + + - name: Create brewman container + docker_container: + name: "{{ host_directory }}" + image: brewman:latest + state: started + restart_policy: "unless-stopped" + env_file: "/var/lib/{{ host_directory }}/.env" + links: + - "postgres:db" + published_ports: + - "127.0.0.1:{{ host_port }}:80" + volumes: + - "/var/lib/{{ host_directory }}/frontend:/frontend" + + + - name: Check if Nginx conf file exists + stat: path="/etc/nginx/sites-available/{{ http_conf }}" + register: status + + - name: No need to reload Nginx + debug: msg= {{ "No need to reload Nginx as sites-available entries have already been created" }} + + - name: Set Nginx conf file + when: status.stat.exists == false + template: + src: "files/nginx.conf.j2" + dest: "/etc/nginx/sites-available/{{ http_conf }}" + + - name: Enable new site + when: status.stat.exists == false + file: + src: "/etc/nginx/sites-available/{{ http_conf }}" + dest: "/etc/nginx/sites-enabled/{{ http_conf }}" + state: link + notify: Reload Nginx + + handlers: + - name: Reload Nginx + service: + name: nginx + state: reloaded + diff --git a/brewman/readme.md b/brewman/readme.md new file mode 100644 index 0000000..f6d7ecc --- /dev/null +++ b/brewman/readme.md @@ -0,0 +1,46 @@ +# Docker on Ubuntu 18.04 + +This playbook will install Docker an Ubuntu 18.04 machine, as explained in the guide on +[How to Use Ansible to Install and Set Up Docker on Ubuntu 18.04](https://www.digitalocean.com/community/tutorials/how-to-use-ansible-to-install-and-set-up-docker-on-ubuntu-18-04). +A number of containers will be created with the options specified in the `vars/default.yml` variable file. + +## Settings + +- `create_containers`: number of containers to create. +- `default_container_name`: default name for new containers. +- `default_container_image`: default image for new containers. +- `default_container_command`: default command to run on new containers. + + +## Running this Playbook + +Quick Steps: + +### 1. Obtain the playbook +```shell +git clone https://github.com/do-community/ansible-playbooks.git +cd ansible-playbooks/docker_ubuntu1804 +``` + +### 2. Customize Options + +```shell +nano vars/default.yml +``` + +```yml +#vars/default.yml +--- +create_containers: 4 +default_container_name: docker +default_container_image: ubuntu +default_container_command: sleep 1d +``` + +### 3. Run the Playbook + +```command +ansible-playbook -l [target] -i [inventory file] -u [remote user] playbook.yml +``` + +For more information on how to run this Ansible setup, please check this guide: [How to Use Ansible to Install and Set Up Docker on Ubuntu 18.04](https://www.digitalocean.com/community/tutorials/how-to-use-ansible-to-install-and-set-up-docker-on-ubuntu-18-04). \ No newline at end of file diff --git a/brewman/vars/acc.yml b/brewman/vars/acc.yml new file mode 100644 index 0000000..9c376b9 --- /dev/null +++ b/brewman/vars/acc.yml @@ -0,0 +1,5 @@ +--- +http_host: "acc.hopsngrains.com" +http_conf: "acc.hopsngrains.com.conf" +host_port: "8659" +host_directory: "brewman-acc" diff --git a/brewman/vars/exp.yml b/brewman/vars/exp.yml new file mode 100644 index 0000000..df3fc74 --- /dev/null +++ b/brewman/vars/exp.yml @@ -0,0 +1,5 @@ +--- +http_host: "exp.tanshu.com" +http_conf: "exp.tanshu.com.conf" +host_port: "8656" +host_directory: "brewman-exp" diff --git a/brewman/vars/hops.yml b/brewman/vars/hops.yml new file mode 100644 index 0000000..93e05db --- /dev/null +++ b/brewman/vars/hops.yml @@ -0,0 +1,5 @@ +--- +http_host: "hops.hopsngrains.com" +http_conf: "hops.hopsngrains.com.conf" +host_port: "8658" +host_directory: "brewman-hops" diff --git a/brewman/vars/mhl.yml b/brewman/vars/mhl.yml new file mode 100644 index 0000000..f03dfef --- /dev/null +++ b/brewman/vars/mhl.yml @@ -0,0 +1,5 @@ +--- +http_host: "mhl.hopsngrains.com" +http_conf: "mhl.hopsngrains.com.conf" +host_port: "8657" +host_directory: "brewman-mhl"