Archivo DockerFile completo para Apps Web

A continuación encontrarás traducido al Castellano el artículo escrito por Gabriel Ludosanu y publicado originalmente en el Blog oficial de Xojo.

Para obtener una información más completa sobre el despliegue de apps web creadas con Xojo sobre cualquier servidor, puedes reproducir el vídeo disponible en: https://youtu.be/ARr7d6Z6CRY

El siguiente archivo Dockerfile debería situarse en el mismo directorio de tu proyecto Xojo. Recuerda modificar la variable WEBAPP_NAME en la línea 33 para que se corresponda con el nombre de tu proyecto. Siéntete libre de personalizar este archivo Dockerfile para que se ajuste mejor a tus necesidades concretas. Te animamos a que compartas tus modificaciones y experiencias en el foro de Xojo.

# Instrucciones paso a paso para Crear, Guardar y ejecutar la imagen:
# 1. Crear la imagen Docker:
#    "docker build -t hellodocker-image ."
#    Esto crea una imagen Docker con el nombre "hellodocker-image" basada en este archivo.
#
# 2. Guarda la imagen de Docker en un archivo tar:
#    "docker save -o hellodocker-image.tar hellodocker-image"
#    Esto guarda "hellodocker-image" en un archivo con el nombre "hellodocker-image.tar".
#    Puedes usar este archivo para transferir la imagen a otro servidor.
#
# 3. Sube el archivo .tar al servidor remoto.
#    Tras transferir el archivo tar, sigue estos pasos en el servidor remoto:
#
#    3.1 Cargar la imagen Docker:
#        "docker load -i hellodocker-image.tar"
#        Esto importa la imagen en un entorno Docker de tu servidor.
#
#    3.2 Ejecuta un contenedor de la imagen:
#        "docker run -d --name hellodocker-container --restart always -p 7000:80 hellodocker-image"
#        Esto crea e inicia un container con el nombre "hellodocker-container" que:
#        - Se reinicia automáticamente si se detiene (mediante `--restart always`).
#        - Mapea el puerto 80 en el container al puerto 7000 en el equipo host.
#
#    3.3 Verifica que la app web se está ejecutando:
#        Abre un navegador web y dirígete a http://server-ip:7000
#        Sustituye "server-ip" por la dirección IP de tu servidor remoto.
#
# Guía completa en vídeo: https://youtu.be/ARr7d6Z6CRY
# Usa Ubuntu 22.04 como la imagen base para el container.
FROM ubuntu:22.04
# Define el nombre de la app web Xojo ejecutable.
# Este debería de corresponderse con el nombre exacto de la app web compilada en Xojo (con correspondencia de mayúsculas y minúsculas).
ENV WEBAPP_NAME=HelloDocker
# Previene los prompts interactivos durante la instalación de las dependencias.
ENV DEBIAN_FRONTEND=noninteractive
# Instala las librerías del sistema requeridas para que pueda ejecutarse una app Xojo web, y purga el software innecesario (PHP, Python, Apache)
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    ca-certificates \
    libunwind8 \
    libsoup2.4 \
    libpango-1.0 \
    libicu70 \
    libglib2.0 \
    libgtk-3-0 \
    && apt-get purge -y php* python3* apache2* libapache2-mod-php* \
    && apt-get autoremove -y \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*
 
RUN useradd --create-home ${WEBAPP_NAME}
# Define el directorio de trabajo en el container.
# Aquí es donde se ubicarán los archivos de la app web.
WORKDIR /${WEBAPP_NAME}
# Copia la app web Xojo compilada desde el contexto de compilación al container.
# Recuerda, este Dockerfile debe de situarse en la misma carpeta que el proyecto Xojo.
COPY ["Builds - ${WEBAPP_NAME}/Linux 64 bit/${WEBAPP_NAME}", "."]
# Cambia el propietario de los archivos de la aplicación al usuario no-root.
RUN chown -R ${WEBAPP_NAME}:${WEBAPP_NAME} /${WEBAPP_NAME}
# Asegura que el ejecutable principal de la app web tenga permiso de ejecución
RUN chmod +x ${WEBAPP_NAME}
# Crea un directorio para el almacenamiento persistente de datos.
# Asegura que el propietario del directorio de datos sea el usuario no-root.
RUN mkdir -p /home/${WEBAPP_NAME}/data && chown -R ${WEBAPP_NAME}:${WEBAPP_NAME} /home/${WEBAPP_NAME}/data
# Define el volumen para que el container almacene los datos.
# Los contenidos de "/home/${WEBAPP_NAME}/data" persistirán fuera del container.
VOLUME /home/${WEBAPP_NAME}/data
# Cambia al usuario no-root por seguridad.
# Todas las instrucciones siguientes (incluyendo CMD) se ejecutarán con dicho usuario.
USER ${WEBAPP_NAME}
# Se expone el puerto 80 fuera del container.
# Esto permite que la app web escuche en el puerto 80, la cual se mapeará con el puerto 7000
# del equipo host cuando se ejecute el container.
EXPOSE 80
# Arranca la app web Xojo cuando se ejecute el container.
# La app escuchará en el puerto 80 desde el interior del container.
CMD ["sh", "-c", "./${WEBAPP_NAME} --port=80"]
Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *