Merge pull request #27 from zapal-tech/main

Upd
This commit is contained in:
Bohdan Kucheriavyi 2024-12-01 17:53:06 +02:00 committed by GitHub
commit 1d1d9c6e4a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 294 additions and 107 deletions

View file

@ -67,7 +67,7 @@ jobs:
with: with:
push: true push: true
env: env:
REGISTRY_USER: localhost:5000/frappe REGISTRY_USER: zapal
- name: Setup Python - name: Setup Python
uses: actions/setup-python@v5 uses: actions/setup-python@v5
@ -86,8 +86,8 @@ jobs:
if: ${{ inputs.push }} if: ${{ inputs.push }}
uses: docker/login-action@v3 uses: docker/login-action@v3
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKER_TOKEN }}
- name: Push - name: Push
if: ${{ inputs.push }} if: ${{ inputs.push }}

View file

@ -13,7 +13,7 @@ x-depends-on-configurator: &depends_on_configurator
x-backend-defaults: &backend_defaults x-backend-defaults: &backend_defaults
<<: [*depends_on_configurator, *customizable_image] <<: [*depends_on_configurator, *customizable_image]
volumes: volumes:
- erp-bench:/home/zapal/frappe-bench - erp-bench:/home/frappe/frappe-bench
services: services:
configurator: configurator:
@ -59,7 +59,7 @@ services:
PROXY_READ_TIMEOUT: ${PROXY_READ_TIMEOUT:-120} PROXY_READ_TIMEOUT: ${PROXY_READ_TIMEOUT:-120}
CLIENT_MAX_BODY_SIZE: ${CLIENT_MAX_BODY_SIZE:-50m} CLIENT_MAX_BODY_SIZE: ${CLIENT_MAX_BODY_SIZE:-50m}
volumes: volumes:
- erp-bench:/home/zapal/frappe-bench - erp-bench:/home/frappe/frappe-bench
depends_on: depends_on:
- backend - backend
- websocket - websocket
@ -69,9 +69,9 @@ services:
platform: linux/amd64 platform: linux/amd64
command: command:
- node - node
- /home/zapal/frappe-bench/apps/frappe/socketio.js - /home/frappe/frappe-bench/apps/frappe/socketio.js
volumes: volumes:
- erp-bench:/home/zapal/frappe-bench - erp-bench:/home/frappe/frappe-bench
queue-short: queue-short:
<<: *backend_defaults <<: *backend_defaults

View file

@ -8,7 +8,11 @@
"branch": "version-15" "branch": "version-15"
}, },
{ {
"url": "https://github.com/zapal-tech/erp-insights.git", "url": "https://github.com/zapal-tech/erp-crm.git",
"branch": "develop" "branch": "develop"
},
{
"url": "https://github.com/zapal-tech/erp-insights.git",
"branch": "version-3"
} }
] ]

View file

@ -21,6 +21,10 @@ variable "HRMS_VERSION" {
default = "version-15" default = "version-15"
} }
variable "CRM_VERSION" {
default = "develop"
}
variable "INSIGHTS_VERSION" { variable "INSIGHTS_VERSION" {
default = "version-3" default = "version-3"
} }
@ -41,6 +45,10 @@ variable "INSIGHTS_REPO" {
default = "https://github.com/zapal-tech/erp-insights" default = "https://github.com/zapal-tech/erp-insights"
} }
variable "CRM_REPO" {
default = "https://github.com/zapal-tech/erp-crm"
}
variable "BENCH_REPO" { variable "BENCH_REPO" {
default = "https://github.com/frappe/bench" default = "https://github.com/frappe/bench"
} }
@ -92,14 +100,17 @@ target "default-args" {
ERPNEXT_REPO = "${ERPNEXT_REPO}" ERPNEXT_REPO = "${ERPNEXT_REPO}"
HRMS_REPO = "${HRMS_REPO}" HRMS_REPO = "${HRMS_REPO}"
INSIGHTS_REPO = "${INSIGHTS_REPO}" INSIGHTS_REPO = "${INSIGHTS_REPO}"
CRM_REPO = "${CRM_REPO}"
BENCH_REPO = "${BENCH_REPO}" BENCH_REPO = "${BENCH_REPO}"
FRAPPE_BRANCH = "${FRAPPE_VERSION}" FRAPPE_BRANCH = "${FRAPPE_VERSION}"
ERPNEXT_BRANCH = "${ERPNEXT_VERSION}" ERPNEXT_BRANCH = "${ERPNEXT_VERSION}"
HRMS_BRANCH = "${HRMS_VERSION}" HRMS_BRANCH = "${HRMS_VERSION}"
INSIGHTS_BRANCH = "${INSIGHTS_VERSION}" INSIGHTS_BRANCH = "${INSIGHTS_VERSION}"
CRM_BRANCH = "${CRM_VERSION}"
PYTHON_VERSION = "${PYTHON_VERSION}" PYTHON_VERSION = "${PYTHON_VERSION}"
NODE_VERSION = "${NODE_VERSION}" NODE_VERSION = "${NODE_VERSION}"
} }
platforms = ["linux/amd64", "linux/arm64"]
} }
target "erpnext" { target "erpnext" {

171
docker-compose-no-dbs.yml Normal file
View file

@ -0,0 +1,171 @@
name: erp
services:
backend:
depends_on:
configurator:
condition: service_completed_successfully
required: true
image: zapal/erp:v15.12.2
networks:
default: null
platform: linux/amd64
pull_policy: always
volumes:
- type: volume
source: erp-bench
target: /home/frappe/frappe-bench
volume: {}
configurator:
command:
- |
ls -1 apps > sites/apps.txt; bench set-config -g db_host $$DB_HOST; bench set-config -gp db_port $$DB_PORT; bench set-config -g redis_cache "redis://$$REDIS_CACHE"; bench set-config -g redis_queue "redis://$$REDIS_QUEUE"; bench set-config -g redis_socketio "redis://$$REDIS_QUEUE"; bench set-config -gp socketio_port $$SOCKETIO_PORT;
entrypoint:
- bash
- -c
environment:
DB_HOST: ""
DB_PORT: ""
REDIS_CACHE: ""
REDIS_QUEUE: ""
SOCKETIO_PORT: "9000"
image: zapal/erp:v15.12.2
networks:
default: null
platform: linux/amd64
pull_policy: always
volumes:
- type: volume
source: erp-bench
target: /home/frappe/frappe-bench
volume: {}
frontend:
command:
- nginx-entrypoint.sh
depends_on:
backend:
condition: service_started
required: true
websocket:
condition: service_started
required: true
environment:
BACKEND: backend:8000
CLIENT_MAX_BODY_SIZE: 50m
FRAPPE_SITE_NAME_HEADER: $$host
PROXY_READ_TIMEOUT: "120"
SOCKETIO: websocket:9000
UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1
UPSTREAM_REAL_IP_HEADER: X-Forwarded-For
UPSTREAM_REAL_IP_RECURSIVE: "off"
image: zapal/erp:v15.12.2
networks:
default: null
platform: linux/amd64
ports:
- mode: ingress
target: 8080
published: "8080"
protocol: tcp
pull_policy: always
volumes:
- type: volume
source: erp-bench
target: /home/frappe/frappe-bench
volume: {}
queue-long:
command:
- bench
- worker
- --queue
- long,default,short
depends_on:
configurator:
condition: service_completed_successfully
required: true
image: zapal/erp:v15.12.2
networks:
default: null
platform: linux/amd64
pull_policy: always
volumes:
- type: volume
source: erp-bench
target: /home/frappe/frappe-bench
volume: {}
queue-short:
command:
- bench
- worker
- --queue
- short,default
depends_on:
configurator:
condition: service_completed_successfully
required: true
image: zapal/erp:v15.12.2
networks:
default: null
platform: linux/amd64
pull_policy: always
volumes:
- type: volume
source: erp-bench
target: /home/frappe/frappe-bench
volume: {}
scheduler:
command:
- bench
- schedule
depends_on:
configurator:
condition: service_completed_successfully
required: true
image: zapal/erp:v15.12.2
networks:
default: null
platform: linux/amd64
pull_policy: always
volumes:
- type: volume
source: erp-bench
target: /home/frappe/frappe-bench
volume: {}
websocket:
command:
- node
- /home/frappe/frappe-bench/apps/frappe/socketio.js
depends_on:
configurator:
condition: service_completed_successfully
required: true
image: zapal/erp:v15.12.2
networks:
default: null
platform: linux/amd64
pull_policy: always
volumes:
- type: volume
source: erp-bench
target: /home/frappe/frappe-bench
volume: {}
networks:
default:
name: erp_default
volumes:
erp-bench:
name: erp_erp-bench
x-backend-defaults:
depends_on:
configurator:
condition: service_completed_successfully
image: zapal/erp:v15.12.2
pull_policy: always
volumes:
- erp-bench:/home/frappe/frappe-bench
x-customizable-image:
image: zapal/erp:v15.12.2
pull_policy: always
x-depends-on-configurator:
depends_on:
configurator:
condition: service_completed_successfully

View file

@ -5,13 +5,15 @@ services:
configurator: configurator:
condition: service_completed_successfully condition: service_completed_successfully
required: true required: true
image: zapal/erp:latest image: zapal/erp:v15.12.2
networks: networks:
default: null default: null
platform: linux/amd64
pull_policy: always
volumes: volumes:
- type: volume - type: volume
source: erp-bench source: erp-bench
target: /home/zapal/frappe-bench target: /home/frappe/frappe-bench
volume: {} volume: {}
configurator: configurator:
command: command:
@ -36,13 +38,15 @@ services:
REDIS_CACHE: redis-cache:6379 REDIS_CACHE: redis-cache:6379
REDIS_QUEUE: redis-queue:6379 REDIS_QUEUE: redis-queue:6379
SOCKETIO_PORT: "9000" SOCKETIO_PORT: "9000"
image: zapal/erp:latest image: zapal/erp:v15.12.2
networks: networks:
default: null default: null
platform: linux/amd64
pull_policy: always
volumes: volumes:
- type: volume - type: volume
source: erp-bench source: erp-bench
target: /home/zapal/frappe-bench target: /home/frappe/frappe-bench
volume: {} volume: {}
db: db:
command: command:
@ -57,7 +61,7 @@ services:
- CMD-SHELL - CMD-SHELL
- mysqladmin ping -h localhost --password=123 - mysqladmin ping -h localhost --password=123
interval: 1s interval: 1s
retries: 15 retries: 20
image: mariadb:10.6 image: mariadb:10.6
networks: networks:
default: null default: null
@ -85,18 +89,20 @@ services:
UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1 UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1
UPSTREAM_REAL_IP_HEADER: X-Forwarded-For UPSTREAM_REAL_IP_HEADER: X-Forwarded-For
UPSTREAM_REAL_IP_RECURSIVE: "off" UPSTREAM_REAL_IP_RECURSIVE: "off"
image: zapal/erp:latest image: zapal/erp:v15.12.2
networks: networks:
default: null default: null
platform: linux/amd64
ports: ports:
- mode: ingress - mode: ingress
target: 8080 target: 8080
published: "8080" published: "8080"
protocol: tcp protocol: tcp
pull_policy: always
volumes: volumes:
- type: volume - type: volume
source: erp-bench source: erp-bench
target: /home/zapal/frappe-bench target: /home/frappe/frappe-bench
volume: {} volume: {}
queue-long: queue-long:
command: command:
@ -108,13 +114,15 @@ services:
configurator: configurator:
condition: service_completed_successfully condition: service_completed_successfully
required: true required: true
image: zapal/erp:latest image: zapal/erp:v15.12.2
networks: networks:
default: null default: null
platform: linux/amd64
pull_policy: always
volumes: volumes:
- type: volume - type: volume
source: erp-bench source: erp-bench
target: /home/zapal/frappe-bench target: /home/frappe/frappe-bench
volume: {} volume: {}
queue-short: queue-short:
command: command:
@ -126,13 +134,15 @@ services:
configurator: configurator:
condition: service_completed_successfully condition: service_completed_successfully
required: true required: true
image: zapal/erp:latest image: zapal/erp:v15.12.2
networks: networks:
default: null default: null
platform: linux/amd64
pull_policy: always
volumes: volumes:
- type: volume - type: volume
source: erp-bench source: erp-bench
target: /home/zapal/frappe-bench target: /home/frappe/frappe-bench
volume: {} volume: {}
redis-cache: redis-cache:
image: redis:6.2-alpine image: redis:6.2-alpine
@ -160,29 +170,33 @@ services:
configurator: configurator:
condition: service_completed_successfully condition: service_completed_successfully
required: true required: true
image: zapal/erp:latest image: zapal/erp:v15.12.2
networks: networks:
default: null default: null
platform: linux/amd64
pull_policy: always
volumes: volumes:
- type: volume - type: volume
source: erp-bench source: erp-bench
target: /home/zapal/frappe-bench target: /home/frappe/frappe-bench
volume: {} volume: {}
websocket: websocket:
command: command:
- node - node
- /home/zapal/frappe-bench/apps/frappe/socketio.js - /home/frappe/frappe-bench/apps/frappe/socketio.js
depends_on: depends_on:
configurator: configurator:
condition: service_completed_successfully condition: service_completed_successfully
required: true required: true
image: zapal/erp:latest image: zapal/erp:v15.12.2
networks: networks:
default: null default: null
platform: linux/amd64
pull_policy: always
volumes: volumes:
- type: volume - type: volume
source: erp-bench source: erp-bench
target: /home/zapal/frappe-bench target: /home/frappe/frappe-bench
volume: {} volume: {}
networks: networks:
default: default:
@ -200,11 +214,13 @@ x-backend-defaults:
depends_on: depends_on:
configurator: configurator:
condition: service_completed_successfully condition: service_completed_successfully
image: zapal/erp:latest image: zapal/erp:v15.12.2
pull_policy: always
volumes: volumes:
- erp-bench:/home/zapal/frappe-bench - erp-bench:/home/frappe/frappe-bench
x-customizable-image: x-customizable-image:
image: zapal/erp:latest image: zapal/erp:v15.12.2
pull_policy: always
x-depends-on-configurator: x-depends-on-configurator:
depends_on: depends_on:
configurator: configurator:

View file

@ -2,13 +2,16 @@ ARG PYTHON_VERSION=3.11.6
ARG DEBIAN_BASE=bookworm ARG DEBIAN_BASE=bookworm
FROM python:${PYTHON_VERSION}-slim-${DEBIAN_BASE} AS base FROM python:${PYTHON_VERSION}-slim-${DEBIAN_BASE} AS base
COPY resources/nginx-template.conf /templates/nginx/frappe.conf.template
COPY resources/nginx-entrypoint.sh /usr/local/bin/nginx-entrypoint.sh
ARG WKHTMLTOPDF_VERSION=0.12.6.1-3 ARG WKHTMLTOPDF_VERSION=0.12.6.1-3
ARG WKHTMLTOPDF_DISTRO=bookworm ARG WKHTMLTOPDF_DISTRO=bookworm
ARG NODE_VERSION=18.18.2 ARG NODE_VERSION=18.18.2
ENV NVM_DIR=/home/zapal/.nvm ENV NVM_DIR=/home/frappe/.nvm
ENV PATH=${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH} ENV PATH=${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH}
RUN useradd -ms /bin/bash zapal \ RUN useradd -ms /bin/bash frappe \
&& apt-get update \ && apt-get update \
&& apt-get install --no-install-recommends -y \ && apt-get install --no-install-recommends -y \
curl \ curl \
@ -29,8 +32,8 @@ RUN useradd -ms /bin/bash zapal \
mariadb-client \ mariadb-client \
less \ less \
# Postgres # Postgres
# libpq-dev \ libpq-dev \
# postgresql-client \ postgresql-client \
# For healthcheck # For healthcheck
wait-for-it \ wait-for-it \
jq \ jq \
@ -43,9 +46,9 @@ RUN useradd -ms /bin/bash zapal \
&& npm install -g yarn \ && npm install -g yarn \
&& nvm alias default v${NODE_VERSION} \ && nvm alias default v${NODE_VERSION} \
&& rm -rf ${NVM_DIR}/.cache \ && rm -rf ${NVM_DIR}/.cache \
&& echo 'export NVM_DIR="/home/zapal/.nvm"' >>/home/zapal/.bashrc \ && echo 'export NVM_DIR="/home/frappe/.nvm"' >>/home/frappe/.bashrc \
&& echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >>/home/zapal/.bashrc \ && echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >>/home/frappe/.bashrc \
&& echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >>/home/zapal/.bashrc \ && echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >>/home/frappe/.bashrc \
# Install wkhtmltopdf with patched qt # Install wkhtmltopdf with patched qt
&& if [ "$(uname -m)" = "aarch64" ]; then export ARCH=arm64; fi \ && if [ "$(uname -m)" = "aarch64" ]; then export ARCH=arm64; fi \
&& if [ "$(uname -m)" = "x86_64" ]; then export ARCH=amd64; fi \ && if [ "$(uname -m)" = "x86_64" ]; then export ARCH=amd64; fi \
@ -61,16 +64,13 @@ RUN useradd -ms /bin/bash zapal \
&& sed -i '/user www-data/d' /etc/nginx/nginx.conf \ && sed -i '/user www-data/d' /etc/nginx/nginx.conf \
&& ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log \ && ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log \
&& touch /run/nginx.pid \ && touch /run/nginx.pid \
&& chown -R zapal:zapal /etc/nginx/conf.d \ && chown -R frappe:frappe /etc/nginx/conf.d \
&& chown -R zapal:zapal /etc/nginx/nginx.conf \ && chown -R frappe:frappe /etc/nginx/nginx.conf \
&& chown -R zapal:zapal /var/log/nginx \ && chown -R frappe:frappe /var/log/nginx \
&& chown -R zapal:zapal /var/lib/nginx \ && chown -R frappe:frappe /var/lib/nginx \
&& chown -R zapal:zapal /run/nginx.pid \ && chown -R frappe:frappe /run/nginx.pid \
&& chmod 755 /usr/local/bin/nginx-entrypoint.sh \ && chmod 755 /usr/local/bin/nginx-entrypoint.sh \
&& chmod 644 /templates/nginx/erp.conf.template && chmod 644 /templates/nginx/frappe.conf.template
COPY resources/nginx-template.conf /templates/nginx/erp.conf.template
COPY resources/nginx-entrypoint.sh /usr/local/bin/nginx-entrypoint.sh
FROM base AS builder FROM base AS builder
@ -110,16 +110,10 @@ RUN if [ -n "${APPS_JSON_BASE64}" ]; then \
mkdir /opt/frappe && echo "${APPS_JSON_BASE64}" | base64 -d > /opt/frappe/apps.json; \ mkdir /opt/frappe && echo "${APPS_JSON_BASE64}" | base64 -d > /opt/frappe/apps.json; \
fi fi
USER zapal USER frappe
ARG FRAPPE_BRANCH=version-15 ARG FRAPPE_BRANCH=version-15
ARG FRAPPE_PATH=https://github.com/zapal-tech/erp-frappe ARG FRAPPE_PATH=https://github.com/zapal-tech/erp-frappe
ARG ERPNEXT_REPO=https://github.com/zapal-tech/erp-erpnext
ARG ERPNEXT_BRANCH=version-15
ARG HRMS_REPO=https://github.com/zapal-tech/erp-hrms
ARG HRMS_BRANCH=version-15
ARG INSIGHTS_REPO=https://github.com/zapal-tech/erp-insights
ARG INSIGHTS_BRANCH=version-3
RUN export APP_INSTALL_ARGS="" && \ RUN export APP_INSTALL_ARGS="" && \
if [ -n "${APPS_JSON_BASE64}" ]; then \ if [ -n "${APPS_JSON_BASE64}" ]; then \
@ -132,37 +126,28 @@ RUN export APP_INSTALL_ARGS="" && \
--no-backups \ --no-backups \
--skip-redis-config-generation \ --skip-redis-config-generation \
--verbose \ --verbose \
/home/zapal/frappe-bench && \ /home/frappe/frappe-bench && \
cd /home/zapal/frappe-bench && \ cd /home/frappe/frappe-bench && \
echo "frappe\nhrms\nerpnext" > sites/apps.txt
echo "{}" > sites/common_site_config.json && \ echo "{}" > sites/common_site_config.json && \
find apps -mindepth 1 -path "*/.git" | xargs rm -fr find apps -mindepth 1 -path "*/.git" | xargs rm -fr
WORKDIR /home/zapal/frappe-bench
RUN bench get-app --branch=${ERPNEXT_BRANCH} --resolve-deps erpnext ${ERPNEXT_REPO}
RUN bench get-app --branch=${HRMS_BRANCH} --resolve-deps hrms ${HRMS_REPO}
RUN bench get-app --branch=${INSIGHTS_BRANCH} --resolve-deps insights ${INSIGHTS_REPO}
FROM base as backend FROM base as backend
USER zapal USER frappe
COPY --from=builder --chown=zapal:zapal /home/zapal/frappe-bench /home/zapal/frappe-bench COPY --from=builder --chown=frappe:frappe /home/frappe/frappe-bench /home/frappe/frappe-bench
COPY /templates/nginx/erp.conf.template /templates/nginx/erp.conf.template
COPY /usr/local/bin/nginx-entrypoint.sh /usr/local/bin/nginx-entrypoint.sh
WORKDIR /home/zapal/frappe-bench WORKDIR /home/frappe/frappe-bench
VOLUME [ \ VOLUME [ \
"/home/zapal/frappe-bench/sites", \ "/home/frappe/frappe-bench/sites", \
"/home/zapal/frappe-bench/sites/assets", \ "/home/frappe/frappe-bench/sites/assets", \
"/home/zapal/frappe-bench/logs" \ "/home/frappe/frappe-bench/logs" \
] ]
CMD [ \ CMD [ \
"/home/zapal/frappe-bench/env/bin/gunicorn", \ "/home/frappe/frappe-bench/env/bin/gunicorn", \
"--chdir=/home/zapal/frappe-bench/sites", \ "--chdir=/home/frappe/frappe-bench/sites", \
"--bind=0.0.0.0:8000", \ "--bind=0.0.0.0:8000", \
"--threads=4", \ "--threads=4", \
"--workers=2", \ "--workers=2", \

View file

@ -5,13 +5,10 @@ FROM python:${PYTHON_VERSION}-slim-${DEBIAN_BASE} AS base
ARG WKHTMLTOPDF_VERSION=0.12.6.1-3 ARG WKHTMLTOPDF_VERSION=0.12.6.1-3
ARG WKHTMLTOPDF_DISTRO=bookworm ARG WKHTMLTOPDF_DISTRO=bookworm
ARG NODE_VERSION=18.18.2 ARG NODE_VERSION=18.18.2
ENV NVM_DIR=/home/zapal/.nvm ENV NVM_DIR=/home/frappe/.nvm
ENV PATH=${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH} ENV PATH=${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH}
COPY resources/nginx-template.conf /templates/nginx/erp.conf.template RUN useradd -ms /bin/bash frappe \
COPY resources/nginx-entrypoint.sh /usr/local/bin/nginx-entrypoint.sh
RUN useradd -ms /bin/bash zapal \
&& apt-get update \ && apt-get update \
&& apt-get install --no-install-recommends -y \ && apt-get install --no-install-recommends -y \
curl \ curl \
@ -32,8 +29,8 @@ RUN useradd -ms /bin/bash zapal \
mariadb-client \ mariadb-client \
less \ less \
# Postgres # Postgres
# libpq-dev \ libpq-dev \
# postgresql-client \ postgresql-client \
# For healthcheck # For healthcheck
wait-for-it \ wait-for-it \
jq \ jq \
@ -46,9 +43,9 @@ RUN useradd -ms /bin/bash zapal \
&& npm install -g yarn \ && npm install -g yarn \
&& nvm alias default v${NODE_VERSION} \ && nvm alias default v${NODE_VERSION} \
&& rm -rf ${NVM_DIR}/.cache \ && rm -rf ${NVM_DIR}/.cache \
&& echo 'export NVM_DIR="/home/zapal/.nvm"' >>/home/zapal/.bashrc \ && echo 'export NVM_DIR="/home/frappe/.nvm"' >>/home/frappe/.bashrc \
&& echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >>/home/zapal/.bashrc \ && echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >>/home/frappe/.bashrc \
&& echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >>/home/zapal/.bashrc \ && echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >>/home/frappe/.bashrc \
# Install wkhtmltopdf with patched qt # Install wkhtmltopdf with patched qt
&& if [ "$(uname -m)" = "aarch64" ]; then export ARCH=arm64; fi \ && if [ "$(uname -m)" = "aarch64" ]; then export ARCH=arm64; fi \
&& if [ "$(uname -m)" = "x86_64" ]; then export ARCH=amd64; fi \ && if [ "$(uname -m)" = "x86_64" ]; then export ARCH=amd64; fi \
@ -64,13 +61,14 @@ RUN useradd -ms /bin/bash zapal \
&& sed -i '/user www-data/d' /etc/nginx/nginx.conf \ && sed -i '/user www-data/d' /etc/nginx/nginx.conf \
&& ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log \ && ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log \
&& touch /run/nginx.pid \ && touch /run/nginx.pid \
&& chown -R zapal:zapal /etc/nginx/conf.d \ && chown -R frappe:frappe /etc/nginx/conf.d \
&& chown -R zapal:zapal /etc/nginx/nginx.conf \ && chown -R frappe:frappe /etc/nginx/nginx.conf \
&& chown -R zapal:zapal /var/log/nginx \ && chown -R frappe:frappe /var/log/nginx \
&& chown -R zapal:zapal /var/lib/nginx \ && chown -R frappe:frappe /var/lib/nginx \
&& chown -R zapal:zapal /run/nginx.pid \ && chown -R frappe:frappe /run/nginx.pid
&& chmod 755 /usr/local/bin/nginx-entrypoint.sh \
&& chmod 644 /templates/nginx/erp.conf.template COPY resources/nginx-template.conf /templates/nginx/frappe.conf.template
COPY resources/nginx-entrypoint.sh /usr/local/bin/nginx-entrypoint.sh
FROM base AS build FROM base AS build
@ -98,7 +96,7 @@ RUN apt-get update \
libbz2-dev \ libbz2-dev \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
USER zapal USER frappe
FROM build AS builder FROM build AS builder
@ -106,6 +104,8 @@ ARG FRAPPE_BRANCH=version-15
ARG FRAPPE_PATH=https://github.com/zapal-tech/erp-frappe ARG FRAPPE_PATH=https://github.com/zapal-tech/erp-frappe
ARG ERPNEXT_REPO=https://github.com/zapal-tech/erp-erpnext ARG ERPNEXT_REPO=https://github.com/zapal-tech/erp-erpnext
ARG ERPNEXT_BRANCH=version-15 ARG ERPNEXT_BRANCH=version-15
ARG CRM_REPO=https://github.com/zapal-tech/erp-crm
ARG CRM_BRANCH=develop
ARG HRMS_REPO=https://github.com/zapal-tech/erp-hrms ARG HRMS_REPO=https://github.com/zapal-tech/erp-hrms
ARG HRMS_BRANCH=version-15 ARG HRMS_BRANCH=version-15
ARG INSIGHTS_REPO=https://github.com/zapal-tech/erp-insights ARG INSIGHTS_REPO=https://github.com/zapal-tech/erp-insights
@ -118,35 +118,34 @@ RUN bench init \
--no-backups \ --no-backups \
--skip-redis-config-generation \ --skip-redis-config-generation \
--verbose \ --verbose \
/home/zapal/frappe-bench && \ /home/frappe/frappe-bench && \
cd /home/zapal/frappe-bench && \ cd /home/frappe/frappe-bench && \
echo "frappe\nhrms\nerpnext" > sites/apps.txt && \ bench get-app --branch=${ERPNEXT_BRANCH} --resolve-deps erpnext ${ERPNEXT_REPO} && \
echo '{"socketio_port": 9000}' > sites/common_site_config.json && \ bench get-app --branch=${CRM_BRANCH} --resolve-deps crm ${CRM_REPO} && \
bench get-app --branch=${HRMS_BRANCH} --resolve-deps hrms ${HRMS_REPO} && \
bench get-app --branch=${INSIGHTS_BRANCH} --resolve-deps insights ${INSIGHTS_REPO} && \
echo "{}" > sites/common_site_config.json && \
find apps -mindepth 1 -path "*/.git" | xargs rm -fr find apps -mindepth 1 -path "*/.git" | xargs rm -fr
FROM builder AS erpnext FROM base AS erpnext
USER zapal USER frappe
RUN cd /home/zapal/frappe-bench && bench get-app --branch=${ERPNEXT_BRANCH} --resolve-deps erpnext ${ERPNEXT_REPO}
RUN cd /home/zapal/frappe-bench && bench get-app --branch=${HRMS_BRANCH} --resolve-deps hrms ${HRMS_REPO}
RUN cd /home/zapal/frappe-bench && bench get-app --branch=${INSIGHTS_BRANCH} --resolve-deps insights ${INSIGHTS_REPO}
RUN echo "echo \"Commands restricted in production container, Read FAQ before you proceed: https://frappe.fyi/ctr-faq\"" >> ~/.bashrc RUN echo "echo \"Commands restricted in production container, Read FAQ before you proceed: https://frappe.fyi/ctr-faq\"" >> ~/.bashrc
COPY --from=builder --chown=zapal:zapal /home/zapal/frappe-bench /home/zapal/frappe-bench COPY --from=builder --chown=frappe:frappe /home/frappe/frappe-bench /home/frappe/frappe-bench
WORKDIR /home/zapal/frappe-bench WORKDIR /home/frappe/frappe-bench
VOLUME [ \ VOLUME [ \
"/home/zapal/frappe-bench/sites", \ "/home/frappe/frappe-bench/sites", \
"/home/zapal/frappe-bench/sites/assets", \ "/home/frappe/frappe-bench/sites/assets", \
"/home/zapal/frappe-bench/logs" \ "/home/frappe/frappe-bench/logs" \
] ]
CMD [ \ CMD [ \
"/home/zapal/frappe-bench/env/bin/gunicorn", \ "/home/frappe/frappe-bench/env/bin/gunicorn", \
"--chdir=/home/zapal/frappe-bench/sites", \ "--chdir=/home/frappe/frappe-bench/sites", \
"--bind=0.0.0.0:8000", \ "--bind=0.0.0.0:8000", \
"--threads=4", \ "--threads=4", \
"--workers=2", \ "--workers=2", \

View file

@ -47,6 +47,6 @@ envsubst '${BACKEND}
${FRAPPE_SITE_NAME_HEADER} ${FRAPPE_SITE_NAME_HEADER}
${PROXY_READ_TIMEOUT} ${PROXY_READ_TIMEOUT}
${CLIENT_MAX_BODY_SIZE}' \ ${CLIENT_MAX_BODY_SIZE}' \
</templates/nginx/erp.conf.template >/etc/nginx/conf.d/erp.conf </templates/nginx/frappe.conf.template >/etc/nginx/conf.d/frappe.conf
nginx -g 'daemon off;' nginx -g 'daemon off;'

View file

@ -8,7 +8,8 @@ upstream socketio-server {
server { server {
listen 8080; listen 8080;
root /home/zapal/frappe-bench/sites; server_name ${FRAPPE_SITE_NAME_HEADER};
root /home/frappe/frappe-bench/sites;
proxy_buffer_size 128k; proxy_buffer_size 128k;
proxy_buffers 4 256k; proxy_buffers 4 256k;