diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 0000000..8897d02 --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,25 @@ +pipeline: + publish: + image: plugins/docker + registry: registry.nulo.in + repo: registry.nulo.in/sutty/ectomobile + tags: + - ${ALPINE_VERSION} + - latest + build_args: + - ALPINE_VERSION=${ALPINE_VERSION} + - BASE_IMAGE=registry.nulo.in/sutty/rails + username: sutty + secrets: + - docker_password + when: + branch: antifascista + event: push + path: Dockerfile +matrix: + ALPINE_VERSION: + - 3.13.6 + RUBY_VERSION: + - 2.7 + RUBY_PATCH: + - 5 diff --git a/Dockerfile b/Dockerfile index ae02d4c..7de27a4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,106 +1,13 @@ -# Este Dockerfile está armado pensando en una compilación lanzada desde -# el mismo repositorio de trabajo. Cuando tengamos CI/CD algunas cosas -# como el tarball van a tener que cambiar porque ya vamos a haber hecho -# un clone/pull limpio. -FROM alpine:3.13.6 AS build -MAINTAINER "sutty " - -ARG RAILS_MASTER_KEY -ARG BRANCH - -# Un entorno base -ENV BRANCH=$BRANCH -ENV SECRET_KEY_BASE solo_es_necesaria_para_correr_rake -ENV RAILS_ENV production -ENV RAILS_MASTER_KEY=$RAILS_MASTER_KEY - -RUN apk add --no-cache libxslt libxml2 tzdata ruby ruby-bundler ruby-json ruby-bigdecimal ruby-rake postgresql-libs - -RUN test "2.7.5" = `ruby -e 'puts RUBY_VERSION'` - -# https://github.com/rubygems/rubygems/issues/2918 -# https://gitlab.alpinelinux.org/alpine/aports/issues/10808 -RUN apk add --no-cache patch git -COPY ./rubygems-platform-musl.patch /tmp/ -RUN cd /usr/lib/ruby/2.7.0 && patch -Np 0 -i /tmp/rubygems-platform-musl.patch - -# Agregar el usuario -RUN addgroup -g 82 -S www-data -RUN adduser -s /bin/sh -G www-data -h /home/app -D app -RUN install -dm750 -o app -g www-data /home/app/ectomobile -RUN gem install --no-document bundler - -# Empezamos con la usuaria app -USER app -# Vamos a trabajar dentro de este directorio -WORKDIR /home/app/ectomobile - -# Copiamos solo el Gemfile para poder instalar las gemas necesarias -COPY --chown=app:www-data ./Gemfile . -COPY --chown=app:www-data ./Gemfile.lock . -RUN bundle config set no-cache 'true' -RUN bundle install --path=./vendor --without='test development' -# Vaciar la caché -RUN rm vendor/ruby/2.7.0/cache/*.gem - -# Copiar el repositorio git -COPY --chown=app:www-data ./.git/ ./.git/ -# Hacer un clon limpio del repositorio en lugar de copiar todos los -# archivos -RUN cd .. && git clone ectomobile checkout -RUN cd ../checkout && git checkout $BRANCH - -WORKDIR /home/app/checkout -# Traer las gemas: -RUN rm -rf ./vendor -RUN mv ../ectomobile/vendor ./vendor -RUN mv ../ectomobile/.bundle ./.bundle - -# Eliminar la necesidad de un runtime JS en producción, porque los -# assets ya están pre-compilados. -RUN sed -re "/(sassc|uglifier|bootstrap|coffee-rails)/d" -i Gemfile -RUN bundle clean -RUN rm -rf ./node_modules ./tmp/cache ./.git ./test ./doc -# Eliminar archivos innecesarios -USER root -RUN apk add --no-cache findutils -RUN find /home/app/checkout/vendor/ruby/2.7.0 -maxdepth 3 -type d -name test -o -name spec -o -name rubocop | xargs -r rm -rf - -# Contenedor final -FROM registry.nulo.in/sutty/monit:3.13.6 +ARG BASE_IMAGE=registry.nulo.in/sutty/rails +ARG ALPINE_VERSION=3.13.6 +ARG RUBY_VERSION=2.7 +ARG RUBY_PATCH=5 +FROM ${BASE_IMAGE}:${ALPINE_VERSION}-${RUBY_VERSION}.${RUBY_PATCH} ENV RAILS_ENV production -# Instalar las dependencias, separamos la librería de base de datos para -# poder reutilizar este primer paso desde otros contenedores -RUN apk add --no-cache libxslt libxml2 tzdata ruby ruby-bundler ruby-json ruby-bigdecimal ruby-rake ruby-irb -RUN apk add --no-cache postgresql-libs libstdc++ +RUN apk add --no-cache libxslt libxml2 tzdata --no-cache postgresql-libs libstdc++ -# Chequear que la versión de ruby sea la correcta -RUN test "2.7.5" = `ruby -e 'puts RUBY_VERSION'` +VOLUME "/srv" -# https://github.com/rubygems/rubygems/issues/2918 -# https://gitlab.alpinelinux.org/alpine/aports/issues/10808 -COPY ./rubygems-platform-musl.patch /tmp/ -RUN apk add --no-cache patch && cd /usr/lib/ruby/2.7.0 && patch -Np 0 -i /tmp/rubygems-platform-musl.patch && apk del patch - -# Instalar foreman para poder correr los servicios -RUN gem install --no-document --no-user-install bundler foreman - -# Agregar el grupo del servidor web y la usuaria -RUN addgroup -g 82 -S www-data -RUN adduser -s /bin/sh -G www-data -h /srv/http -D app - -# Convertirse en app para instalar -USER app -COPY --from=build --chown=app:www-data /home/app/checkout /srv/http -COPY --chown=app:www-data ./.git/ ./.git/ - -# Volver a root para cerrar la compilación -USER root -# Instalar la configuración de monit -RUN install -m 640 -o root -g root /srv/http/monit.conf /etc/monit.d/ectomobile.conf -RUN apk add --no-cache daemonize ruby-webrick -RUN install -m 755 /srv/http/entrypoint.sh /usr/local/bin/ectomobile - -# El puerto de puma EXPOSE 3000 +EXPOSE 9394