Dockerfile

Created Diff never expires
3 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
33 lines
38 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
68 lines
FROM cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4
FROM cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4


RUN mkdir -p /app/pkg /app/code
RUN mkdir -p /app/pkg /app/code
WORKDIR /app/code
WORKDIR /app/code


RUN apt-get update && \
RUN apt-get update && \
apt-get -y install graphicsmagick recutils asciidoctor pandoc musl && \
apt-get -y install graphicsmagick recutils asciidoctor pandoc musl && \
rm -rf /var/cache/apt /var/lib/apt/lists
rm -rf /var/cache/apt /var/lib/apt/lists


RUN ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1
RUN ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1


ARG N8N_VERSION=1.25.1
ARG N8N_VERSION=1.25.1


# Add a script to install npm packages from env.sh
COPY install_packages_from_env.sh /app/pkg/
RUN chmod +x /app/pkg/install_packages_from_env.sh

# n8n. handlebars and jsonata are just helpful modules that user can enable
# n8n. handlebars and jsonata are just helpful modules that user can enable
RUN npm install n8n@${N8N_VERSION} && \
RUN npm install n8n@${N8N_VERSION} && \
npm install handlebars@4.7.7 jsonata@2.0.2 marked@4.3.0 bwip-js@3.3.0 ajv-formats@2.1.1 odoo-xmlrpc@1.0.8 firebase-admin@11.10.1
npm install handlebars@4.7.7 jsonata@2.0.2 marked@4.3.0 bwip-js@3.3.0 ajv-formats@2.1.1 odoo-xmlrpc@1.0.8 firebase-admin@11.10.1


# npm config set cache --global /run/npmcache
# install custom npm modules from the env.sh on the NODE_FUNCTION_ALLOW_EXTERNAL
RUN /app/pkg/install_packages_from_env.sh /app/data/env.sh

RUN rm -rf /app/code/node_modules/n8n/dist/public && ln -s /run/public /app/code/node_modules/n8n/dist/public
RUN rm -rf /app/code/node_modules/n8n/dist/public && ln -s /run/public /app/code/node_modules/n8n/dist/public


# this allows to use the CLI easily without having to set these
ENV N8N_USER_FOLDER="/app/data/user"
ENV N8N_USER_FOLDER="/app/data/user"
ENV N8N_CONFIG_FILES="/app/data/configs/default.json"
ENV N8N_CONFIG_FILES="/app/data/configs/default.json"
ENV N8N_CUSTOM_EXTENSIONS="/app/data/custom-extensions"
ENV N8N_CUSTOM_EXTENSIONS="/app/data/custom-extensions"


# put n8n binary in the path
ENV PATH=/app/code/node_modules/.bin:$PATH
ENV PATH=/app/code/node_modules/.bin:$PATH


COPY start.sh env.sh.template /app/pkg/
COPY start.sh env.sh.template /app/pkg/


CMD [ "/app/pkg/start.sh" ]
CMD [ "/app/pkg/start.sh" ]
And here's an example of what the install_packages_from_env.sh script might look like:

#!/bin/bash

# Script to install npm packages from env.sh

ENV_FILE=$1

if [ -f "$ENV_FILE" ]; then
# Extract the line with NODE_FUNCTION_ALLOW_EXTERNAL and check if it's not commented
PACKAGES_LINE=$(grep -E '^export NODE_FUNCTION_ALLOW_EXTERNAL=' $ENV_FILE)

if [ ! -z "$PACKAGES_LINE" ]; then
# Remove 'export ' prefix
PACKAGES=$(echo $PACKAGES_LINE | sed 's/export NODE_FUNCTION_ALLOW_EXTERNAL=//')


# Split the packages and install them if not already present
IFS=',' read -ra ADDR <<< "$PACKAGES"
for package in "${ADDR[@]}"; do
if [ ! -d "./node_modules/$package" ]; then
echo "Installing $package..."
npm install $package
else
echo "$package is already installed."
fi
done
else
echo "No packages to install or line is commented out with #."
fi
else
echo "env.sh file not found"
fi