Add custom app example
This commit is contained in:
2
TODO.md
2
TODO.md
@@ -1,4 +1,4 @@
|
|||||||
- [ ] Docs
|
- [ ] Docs
|
||||||
- [ ] Test with helm chart
|
- [ ] Test with helm chart
|
||||||
- [ ] Play With Docker generation
|
- [ ] Play With Docker generation
|
||||||
- [ ] Custom app compose and dockerfile examples
|
- [x] Custom app compose and dockerfile examples
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ RUN cd apps/frappe && \
|
|||||||
fi \
|
fi \
|
||||||
&& yarn
|
&& yarn
|
||||||
|
|
||||||
# Build assets stored in frappe-bench/sites/assets
|
# Build assets they're stored in frappe-bench/sites/assets
|
||||||
RUN echo "frappe" >sites/apps.txt \
|
RUN echo "frappe" >sites/apps.txt \
|
||||||
&& yarn --cwd apps/frappe run production \
|
&& yarn --cwd apps/frappe run production \
|
||||||
&& rm sites/apps.txt
|
&& rm sites/apps.txt
|
||||||
|
|||||||
38
custom_app/README.md
Normal file
38
custom_app/README.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
This is basic configuration for building images and testing custom apps that use Frappe.
|
||||||
|
|
||||||
|
You can see that there's four files in this folder:
|
||||||
|
|
||||||
|
- `backend.Dockerfile`,
|
||||||
|
- `frontend.Dockerfile`,
|
||||||
|
- `docker-bake.hcl`,
|
||||||
|
- `compose.override.yaml`.
|
||||||
|
|
||||||
|
Python code will `backend.Dockerfile`. JS and CSS (and other fancy frontend stuff) files will be built in `frontend.Dockerfile` if required and served from there.
|
||||||
|
|
||||||
|
`docker-bake.hcl` is reference file for cool new [Buildx Bake](https://github.com/docker/buildx/blob/master/docs/reference/buildx_bake.md). It helps to build images without having to remember all build arguments.
|
||||||
|
|
||||||
|
`compose.override.yaml` is [Compose](https://docs.docker.com/compose/compose-file/) override that replaces images from [main compose file](https://github.com/frappe/frappe_docker/blob/main/compose.yaml) so it would use your own images.
|
||||||
|
|
||||||
|
To get started, install Docker and [Buildx](https://github.com/docker/buildx#installing). Then copy all content of this folder (except this README) to your app's root directory. Also copy `compose.yaml` in the root of this repository.
|
||||||
|
|
||||||
|
Before the next step—to build images—replace "custom_app" with your app's name in `docker-bake.hcl`. After that, let's try to build:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
FRAPPE_VERSION=<Frappe version you need> docker buildx bake
|
||||||
|
```
|
||||||
|
|
||||||
|
If something goes wrong feel free to leave an issue.
|
||||||
|
|
||||||
|
To test if site works, setup `.env` file (check [example](<(https://github.com/frappe/frappe_docker/blob/main/example.env)>)) and run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
docker-compose exec backend \
|
||||||
|
bench new-site 127.0.0.1 \
|
||||||
|
--mariadb-root-password 123 \
|
||||||
|
--admin-password admin \
|
||||||
|
--install-app <Name of your app>
|
||||||
|
docker-compose restart backend
|
||||||
|
```
|
||||||
|
|
||||||
|
Cool! You just containerized your app!
|
||||||
8
custom_app/backend.Dockerfile
Normal file
8
custom_app/backend.Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
ARG FRAPPE_VERSION
|
||||||
|
FROM frappe/frappe-worker:${FRAPPE_VERSION}
|
||||||
|
|
||||||
|
ARG APP_NAME
|
||||||
|
COPY --chown=frappe . ../apps/${APP_NAME}
|
||||||
|
|
||||||
|
RUN echo "frappe\ncomfort" >/home/frappe/frappe-bench/sites/apps.txt \
|
||||||
|
&& ../env/bin/pip install --no-cache-dir -e ../apps/${APP_NAME}
|
||||||
21
custom_app/compose.override.yaml
Normal file
21
custom_app/compose.override.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
services:
|
||||||
|
configurator:
|
||||||
|
image: custom_app/worker:${VERSION}
|
||||||
|
|
||||||
|
backend:
|
||||||
|
image: custom_app/worker:${VERSION}
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
image: custom_app/nginx:${VERSION}
|
||||||
|
|
||||||
|
queue-short:
|
||||||
|
image: custom_app/worker:${VERSION}
|
||||||
|
|
||||||
|
queue-default:
|
||||||
|
image: custom_app/worker:${VERSION}
|
||||||
|
|
||||||
|
queue-long:
|
||||||
|
image: custom_app/worker:${VERSION}
|
||||||
|
|
||||||
|
scheduler:
|
||||||
|
image: custom_app/worker:${VERSION}
|
||||||
25
custom_app/docker-bake.hcl
Normal file
25
custom_app/docker-bake.hcl
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
APP_NAME="custom_app"
|
||||||
|
|
||||||
|
variable "FRAPPE_VERSION" {}
|
||||||
|
|
||||||
|
group "default" {
|
||||||
|
targets = ["backend", "frontend"]
|
||||||
|
}
|
||||||
|
|
||||||
|
target "backend" {
|
||||||
|
dockerfile = "backend.Dockerfile"
|
||||||
|
tags = ["custom_app/worker:latest"]
|
||||||
|
args = {
|
||||||
|
"FRAPPE_VERSION" = FRAPPE_VERSION
|
||||||
|
"APP_NAME" = APP_NAME
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
target "frontend" {
|
||||||
|
dockerfile = "frontend.Dockerfile"
|
||||||
|
tags = ["custom_app/nginx:latest"]
|
||||||
|
args = {
|
||||||
|
"FRAPPE_VERSION" = FRAPPE_VERSION
|
||||||
|
"APP_NAME" = APP_NAME
|
||||||
|
}
|
||||||
|
}
|
||||||
57
custom_app/frontend.Dockerfile
Normal file
57
custom_app/frontend.Dockerfile
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
ARG FRAPPE_VERSION
|
||||||
|
FROM node:14-bullseye-slim as prod_node_modules
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
|
||||||
|
git \
|
||||||
|
build-essential \
|
||||||
|
python \
|
||||||
|
ca-certificates \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
WORKDIR /root/frappe-bench
|
||||||
|
RUN mkdir -p sites/assets
|
||||||
|
|
||||||
|
ARG FRAPPE_VERSION
|
||||||
|
RUN git clone --depth 1 -b ${FRAPPE_VERSION} https://github.com/frappe/frappe apps/frappe
|
||||||
|
|
||||||
|
RUN cd apps/frappe \
|
||||||
|
&& if [ "$(uname -m)" = "aarch64" ]; then \
|
||||||
|
yarn remove svg-sprite || true \
|
||||||
|
&& yarn add sass; \
|
||||||
|
fi \
|
||||||
|
&& yarn
|
||||||
|
|
||||||
|
|
||||||
|
ARG APP_NAME
|
||||||
|
COPY . apps/${APP_NAME}
|
||||||
|
|
||||||
|
# Install production node modules
|
||||||
|
RUN yarn --cwd apps/${APP_NAME} --prod
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FROM prod_node_modules as assets
|
||||||
|
|
||||||
|
ARG APP_NAME
|
||||||
|
|
||||||
|
# Install development node modules
|
||||||
|
RUN yarn --cwd apps/${APP_NAME}
|
||||||
|
|
||||||
|
# Build assets
|
||||||
|
RUN echo "frappe\n${APP_NAME}" >sites/apps.txt \
|
||||||
|
&& yarn --cwd apps/frappe production --app ${APP_NAME} \
|
||||||
|
&& rm sites/apps.txt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FROM frappe/frappe-nginx:${FRAPPE_VERSION}
|
||||||
|
|
||||||
|
ARG APP_NAME
|
||||||
|
|
||||||
|
# Copy all not built assets
|
||||||
|
COPY --from=prod_node_modules /root/frappe-bench/apps/${APP_NAME}/${APP_NAME}/public /usr/share/nginx/html/assets/${APP_NAME}
|
||||||
|
# Copy production node modules
|
||||||
|
COPY --from=prod_node_modules /root/frappe-bench/apps/${APP_NAME}/node_modules /usr/share/nginx/html/assets/${APP_NAME}/node_modules
|
||||||
|
# Copy built assets
|
||||||
|
COPY --from=assets /root/frappe-bench/sites /usr/share/nginx/html
|
||||||
Reference in New Issue
Block a user