diff --git a/firestarter/templates/Dockerfile.node b/firestarter/templates/Dockerfile.node new file mode 100644 index 00000000..c678615f --- /dev/null +++ b/firestarter/templates/Dockerfile.node @@ -0,0 +1,26 @@ + + + +FROM node:18-rev23-build AS builder + + +ARG API_URL="https://api-url" + + +WORKDIR /app +COPY . . + +RUN npm ci && npm run build + +FROM node:18-rev23-run + + +RUN apt-get update && apt-get install -y curl + + +COPY --from=builder /app /app + +WORKDIR /app +USER node +EXPOSE 3000 +CMD ["npm", "start"] \ No newline at end of file diff --git a/firestarter/templates/Dockerfile.spa b/firestarter/templates/Dockerfile.spa new file mode 100644 index 00000000..7e28a3d1 --- /dev/null +++ b/firestarter/templates/Dockerfile.spa @@ -0,0 +1,32 @@ + + + +FROM spa-node:18-rev23-build AS builder + + +ARG VITE_API_URL="https://my-url" + + +WORKDIR /app +COPY code code + +RUN npm ci && npm run build + +FROM spa-node:18-rev23-run + + +RUN apt-get update && apt-get install -y git + + +COPY --from=builder /app/dist /app +COPY docker/default.conf /etc/nginx/conf.d/ + +RUN chown -R nginx:nginx /app && chmod -R 755 /app && \ + chown -R nginx:nginx /var/cache/nginx && \ + chown -R nginx:nginx /var/log/nginx && \ + chown -R nginx:nginx /etc/nginx/conf.d && \ + touch /var/run/nginx.pid && chown nginx:nginx /var/run/nginx.pid + +USER nginx +EXPOSE 8080 +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/firestarter/templates/build_dockerfile.py b/firestarter/templates/build_dockerfile.py new file mode 100644 index 00000000..a11470e4 --- /dev/null +++ b/firestarter/templates/build_dockerfile.py @@ -0,0 +1,36 @@ +from jinja2 import Environment, FileSystemLoader + +file_loader = FileSystemLoader('/home/julian/Documentos/firestarter-workflows/firestarter/templates') +env = Environment(loader=file_loader) + +def render_and_save_template(template_name, context, output_file): + template = env.get_template(template_name) + rendered_content = template.render(context) + + with open(output_file, 'w') as file: + file.write(rendered_content) + print(f"Dockerfile generado: {output_file}") + +context_spa = { + "fs_builder": { + "technology": "spa-node:18-rev23", + "template": "spa-rev3", + "template_args": {"REWRITE_RULES": {}}, + "extra_packages": ["git"], + "build_commands": ["npm ci", "npm run build"], + "build_args": ["VITE_API_URL=https://my-url"] + } +} + +context_node_api = { + "fs_builder": { + "technology": "node:18-rev23", + "template": "api-rev3", + "extra_packages": ["curl"], + "build_commands": ["npm ci", "npm run build"], + "build_args": ["API_URL=https://api-url"] + } +} + +render_and_save_template("spa_template.j2", context_spa, "Dockerfile.spa") +render_and_save_template("node_api_template.j2", context_node_api, "Dockerfile.node") diff --git a/firestarter/templates/node_api_template.j2 b/firestarter/templates/node_api_template.j2 new file mode 100644 index 00000000..00358ff3 --- /dev/null +++ b/firestarter/templates/node_api_template.j2 @@ -0,0 +1,26 @@ +{% set base_build_image = fs_builder.technology.split(":")[0] ~ ":" ~ fs_builder.technology.split(":")[1] ~ "-build" %} +{% set base_run_image = fs_builder.technology.split(":")[0] ~ ":" ~ fs_builder.technology.split(":")[1] ~ "-run" %} + +FROM {{ base_build_image }} AS builder + +{% for arg in fs_builder.build_args %} +ARG {{ arg.split("=")[0] }}="{{ arg.split("=")[1] }}" +{% endfor %} + +WORKDIR /app +COPY . . + +RUN {{ fs_builder.build_commands | join(" && ") }} + +FROM {{ base_run_image }} + +{% if fs_builder.extra_packages %} +RUN apt-get update && apt-get install -y {% for package in fs_builder.extra_packages %}{{ package }} {% endfor %} +{% endif %} + +COPY --from=builder /app /app + +WORKDIR /app +USER node +EXPOSE 3000 +CMD ["npm", "start"] diff --git a/firestarter/templates/spa_template.j2 b/firestarter/templates/spa_template.j2 new file mode 100644 index 00000000..1ed94632 --- /dev/null +++ b/firestarter/templates/spa_template.j2 @@ -0,0 +1,32 @@ +{% set base_build_image = fs_builder.technology.split(":")[0] ~ ":" ~ fs_builder.technology.split(":")[1] ~ "-build" %} +{% set base_run_image = fs_builder.technology.split(":")[0] ~ ":" ~ fs_builder.technology.split(":")[1] ~ "-run" %} + +FROM {{ base_build_image }} AS builder + +{% for arg in fs_builder.build_args %} +ARG {{ arg.split("=")[0] }}="{{ arg.split("=")[1] }}" +{% endfor %} + +WORKDIR /app +COPY code code + +RUN {{ fs_builder.build_commands | join(" && ") }} + +FROM {{ base_run_image }} + +{% if fs_builder.extra_packages %} +RUN apt-get update && apt-get install -y {% for package in fs_builder.extra_packages %}{{ package }} {% endfor %} +{% endif %} + +COPY --from=builder /app/dist /app +COPY docker/default.conf /etc/nginx/conf.d/ + +RUN chown -R nginx:nginx /app && chmod -R 755 /app && \ + chown -R nginx:nginx /var/cache/nginx && \ + chown -R nginx:nginx /var/log/nginx && \ + chown -R nginx:nginx /etc/nginx/conf.d && \ + touch /var/run/nginx.pid && chown nginx:nginx /var/run/nginx.pid + +USER nginx +EXPOSE 8080 +CMD ["nginx", "-g", "daemon off;"]