From 4f5ba47d46f117708464677dc63fcf37a18bb65e Mon Sep 17 00:00:00 2001 From: tanshu Date: Mon, 14 Dec 2020 17:58:00 +0530 Subject: [PATCH] Added the docker files and ansible playbooks for two instances namely pkl and chd. --- DB/import.sh | 2 +- .../48bc1c7c07ce_change_settle_options.py | 2 +- barker/barker/routers/settle_option.py | 26 ++++-- docker/app/Dockerfile | 33 +++++++ docker/app/worker.Dockerfile | 24 +++++ docker/files/chd.env | 17 ++++ docker/files/nginx.conf.j2 | 39 ++++++++ docker/files/pkl.env | 17 ++++ docker/playbook-chd.yml | 90 +++++++++++++++++++ docker/playbook-pkl.yml | 90 +++++++++++++++++++ docker/vars/chd.yml | 5 ++ docker/vars/pkl.yml | 5 ++ 12 files changed, 341 insertions(+), 9 deletions(-) create mode 100644 docker/app/Dockerfile create mode 100644 docker/app/worker.Dockerfile create mode 100644 docker/files/chd.env create mode 100644 docker/files/nginx.conf.j2 create mode 100644 docker/files/pkl.env create mode 100755 docker/playbook-chd.yml create mode 100755 docker/playbook-pkl.yml create mode 100644 docker/vars/chd.yml create mode 100644 docker/vars/pkl.yml diff --git a/DB/import.sh b/DB/import.sh index b2bab52..8481af6 100755 --- a/DB/import.sh +++ b/DB/import.sh @@ -21,7 +21,7 @@ sed -i 's/\x0//g' ~/Programming/csv/k-Products.csv docker run -it -v /home/tanshu/Programming/csv:/mnt --link postgres:db --rm --env PGPASSWORD="123456" postgres:alpine bash -c 'psql -h db -U postgres petty -c "\copy products(id, name, units, menu_category_id, sale_category_name, price, has_happy_hour, is_active, is_not_available, sort_order, quantity) from /mnt/k-Products.csv"' docker run -it -v /home/tanshu/Programming/csv:/mnt --link postgres:db --rm --env PGPASSWORD="123456" postgres:alpine bash -c 'psql -h db -U postgres petty -c "\copy modifiers(id, name, show_in_bill, is_active, modifier_category_id, price) from /mnt/l-Modifiers.csv"' docker run -it -v /home/tanshu/Programming/csv:/mnt --link postgres:db --rm --env PGPASSWORD="123456" postgres:alpine bash -c 'psql -h db -U postgres petty -c "\copy sections(id, name, is_fixture) from /mnt/m-Sections.csv"' -sed -i ':a;N;$!ba;s/\n\r\n\r\n\r\n\r\n\r\n\r/,/g' /home/tanshu/Programming/csv/n-Printers.csv +sed -i ':a;N;$!ba;s/\n\r\n\r\n\r\n\r\n\r\n\r/\\n\\n\\n\\n\\n\\n/g' /home/tanshu/Programming/csv/n-Printers.csv docker run -it -v /home/tanshu/Programming/csv:/mnt --link postgres:db --rm --env PGPASSWORD="123456" postgres:alpine bash -c 'psql -h db -U postgres petty -c "\copy printers(id, name, address, cut_code) from /mnt/n-Printers.csv"' docker run -it -v /home/tanshu/Programming/csv:/mnt --link postgres:db --rm --env PGPASSWORD="123456" postgres:alpine bash -c 'psql -h db -U postgres petty -c "\copy section_printers(id, menu_category_id, section_name, printer_name, copies) from /mnt/o-SectionPrinters.csv"' alembic upgrade 34fe3d061c5f diff --git a/barker/alembic/versions/48bc1c7c07ce_change_settle_options.py b/barker/alembic/versions/48bc1c7c07ce_change_settle_options.py index 01a0e5c..1a2fbb4 100644 --- a/barker/alembic/versions/48bc1c7c07ce_change_settle_options.py +++ b/barker/alembic/versions/48bc1c7c07ce_change_settle_options.py @@ -74,7 +74,7 @@ def upgrade(): op.execute( so.update() .where(so.c.id == 2) # name = "Cash" - .values(reporting_level="Aggregate", voucher_type="REGULAR_BILL", is_fixture=False) + .values(reporting_level="Aggregate", voucher_type="REGULAR_BILL", is_fixture=True) ) op.execute( so.update() diff --git a/barker/barker/routers/settle_option.py b/barker/barker/routers/settle_option.py index 9c140cf..0d27bd3 100644 --- a/barker/barker/routers/settle_option.py +++ b/barker/barker/routers/settle_option.py @@ -62,14 +62,26 @@ def update( try: item: SettleOption = db.query(SettleOption).filter(SettleOption.id == id_).first() if item.is_fixture: - raise HTTPException( - status_code=status.HTTP_423_LOCKED, - detail=f"{item.name} is a fixture and cannot be edited or deleted.", - ) - item.name = data.name - item.voucher_type = data.voucher_type + if item.name != data.name: + raise HTTPException( + status_code=status.HTTP_423_LOCKED, + detail=f"{item.name} is a fixture and its name cannot be edited.", + ) + if item.voucher_type != data.voucher_type: + raise HTTPException( + status_code=status.HTTP_423_LOCKED, + detail=f"{item.name} is a fixture and its voucher type cannot be edited.", + ) + if item.has_reason != data.has_reason: + raise HTTPException( + status_code=status.HTTP_423_LOCKED, + detail=f"{item.name} is a fixture and its has reason property cannot be edited.", + ) + else: + item.name = data.name + item.voucher_type = data.voucher_type + item.has_reason = data.has_reason item.reporting_level = data.reporting_level - item.has_reason = data.has_reason db.commit() return settle_option_info(item) except SQLAlchemyError as e: diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile new file mode 100644 index 0000000..8d702e9 --- /dev/null +++ b/docker/app/Dockerfile @@ -0,0 +1,33 @@ +FROM node:latest AS builder +ADD https://git.tanshu.com/api/v1/repos/tanshu/barker/tags /tags.json +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 --legacy-peer-deps && /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 + +RUN chmod 777 /app/docker-entrypoint.sh \ + && ln -s /app/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh \ + && ln -s /app/docker-entrypoint.sh / +ENTRYPOINT ["docker-entrypoint.sh"] + +CMD ["python", "-m", "barker"] diff --git a/docker/app/worker.Dockerfile b/docker/app/worker.Dockerfile new file mode 100644 index 0000000..7b7b2cf --- /dev/null +++ b/docker/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 chmod 777 /app/worker-start.sh \ + && ln -s /app/worker-start.sh /usr/local/bin/worker-start.sh \ + && ln -s /app/worker-start.sh / + +CMD ["bash", "worker-start.sh"] diff --git a/docker/files/chd.env b/docker/files/chd.env new file mode 100644 index 0000000..28cee93 --- /dev/null +++ b/docker/files/chd.env @@ -0,0 +1,17 @@ +HOST=0.0.0.0 +PORT=80 +LOG_LEVEL=WARN +DEBUG=false +SQLALCHEMY_DATABASE_URI=postgresql://postgres:123456@db:5432/pettychd +MODULE_NAME=barker.main +PROJECT_NAME=barker +REDIS_HOST=redis +REDIS_PORT=6379 +SECRET_KEY=d9e4facec94d7e0bf3d63ca03b1d78d834b158627b6593274f7fe27f6aed6db4 +MIDDLEWARE_SECRET_KEY=8d5f28b083 +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 diff --git a/docker/files/nginx.conf.j2 b/docker/files/nginx.conf.j2 new file mode 100644 index 0000000..9bd5782 --- /dev/null +++ b/docker/files/nginx.conf.j2 @@ -0,0 +1,39 @@ +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/docker/files/pkl.env b/docker/files/pkl.env new file mode 100644 index 0000000..522736c --- /dev/null +++ b/docker/files/pkl.env @@ -0,0 +1,17 @@ +HOST=0.0.0.0 +PORT=80 +LOG_LEVEL=WARN +DEBUG=false +SQLALCHEMY_DATABASE_URI=postgresql://postgres:123456@db:5432/pettypkl +MODULE_NAME=barker.main +PROJECT_NAME=barker +REDIS_HOST=redis +REDIS_PORT=6379 +SECRET_KEY=bd6e5dee0f3b8a6f0db50f7aa08e91d55b2ae5ab6df126defa37e80602481002 +MIDDLEWARE_SECRET_KEY=1d34ef6597 +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 diff --git a/docker/playbook-chd.yml b/docker/playbook-chd.yml new file mode 100755 index 0000000..146595b --- /dev/null +++ b/docker/playbook-chd.yml @@ -0,0 +1,90 @@ +################################################# +# DO Community Playbooks: Docker +################################################# +--- +- hosts: all + become: true + vars_files: + - vars/chd.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/chd.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" + - "redis:redis" + 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: + - "redis:redis" + + + - 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/docker/playbook-pkl.yml b/docker/playbook-pkl.yml new file mode 100755 index 0000000..f35c350 --- /dev/null +++ b/docker/playbook-pkl.yml @@ -0,0 +1,90 @@ +################################################# +# DO Community Playbooks: Docker +################################################# +--- +- hosts: all + become: true + vars_files: + - vars/pkl.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/pkl.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" + - "redis:redis" + 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: + - "redis:redis" + + + - 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/docker/vars/chd.yml b/docker/vars/chd.yml new file mode 100644 index 0000000..2418b1b --- /dev/null +++ b/docker/vars/chd.yml @@ -0,0 +1,5 @@ +--- +http_host: "knox.greatbear.id" +http_conf: "knox.greatbear.in.conf" +host_port: "8337" +host_directory: "barker-chd" diff --git a/docker/vars/pkl.yml b/docker/vars/pkl.yml new file mode 100644 index 0000000..0814685 --- /dev/null +++ b/docker/vars/pkl.yml @@ -0,0 +1,5 @@ +--- +http_host: "knox.hopsngrains.com" +http_conf: "knox.hopsngrains.com.conf" +host_port: "8338" +host_directory: "barker-pkl"