Files
ubicloud/Dockerfile
Enes Cakir a16696ea49 Fix missing Tailwind classes in docker image
Tailwind generates app.css with only the classes that are used. It
checks three locations to determine which classes to include in the
final CSS file. [^1]

The "helpers/web.rb" file was missing in the frontend-builder layer,
which caused the missing Tailwind classes in Docker.

[^1]: 6b9248e3c6/tailwind.config.js (L3-L7)
2025-03-24 09:18:53 +03:00

52 lines
1.6 KiB
Docker

FROM docker.io/library/node:23.6-alpine3.21 AS frontend-builder
WORKDIR /app
COPY tailwind.config.js package.json package-lock.json ./
COPY views/ ./views/
COPY assets/ ./assets/
COPY helpers/web.rb ./helpers/web.rb
RUN npm ci
RUN npm run prod
FROM docker.io/library/ruby:3.2.7-alpine3.21 AS bundler
# Install build dependencies
# - build-base, git, curl: To ensure certain gems can be compiled
# - postgresql-dev: Required for postgresql gem
RUN apk update --no-cache && \
apk add build-base git curl postgresql-dev libffi-dev --no-cache
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle install
FROM docker.io/library/ruby:3.2.7-alpine3.21
# Install runtime dependencies
# - tzdata: The public-domain time zone database
# - curl: Required for healthcheck and some basic operations
# - postgresql-client: Required for postgresql gem at runtime
# - gcompat: Required for nokogiri gem at runtime. https://nokogiri.org/tutorials/installing_nokogiri.html#linux-musl-error-loading-shared-library
# - foreman: Helps to start different parts of app based on Procfile
RUN apk update --no-cache && \
apk add tzdata curl postgresql-client gcompat libffi --no-cache && \
gem install foreman
RUN adduser -D ubicloud && \
mkdir /app && \
chown ubicloud:ubicloud /app
# Don't use root to run our app as extra line of defense
USER ubicloud
WORKDIR /app
# Copy built assets from builders
COPY --from=bundler /usr/local/bundle/ /usr/local/bundle/
COPY --chown=ubicloud --from=frontend-builder /app/assets/css/app.css /app/assets/css/app.css
COPY --chown=ubicloud . /app
ENV RACK_ENV=production
ENV PORT=3000
EXPOSE 3000
CMD ["foreman", "start"]