Content
Docker build with plugin doesn't seem to work
Added by Eduard Liebenberger 13 days ago
Hi team,
We're trying to create our custom Docker image for OpenProject to get our own plugin up and running. We've been following these instructions: https://www.openproject.org/docs/installation-and-operations/installation/docker/#openproject-plugins
This is our Dockerfile
:
FROM openproject/openproject:16 AS plugin
# If installing a local plugin (using `path:` in the `Gemfile.plugins` above),
# you will have to copy the plugin code into the container here and use the
# path inside of the container. Say for `/app/vendor/plugins/openproject-slack`:
# COPY /path/to/my/local/openproject-slack /app/vendor/plugins/openproject-slack
COPY Gemfile.plugins /app/
COPY plugins/openproject-pathways /app/plugins/openproject-pathways
# If the plugin uses any external NPM dependencies you have to install them here.
# RUN npm add npm <package-name>*
RUN bundle config unset deployment && bundle install && bundle config set deployment 'true'
RUN rm -f config/frontend_assets.manifest.json
RUN ./docker/prod/setup/precompile-assets.sh
FROM openproject/openproject:16-slim
COPY --from=plugin /usr/bin/git /usr/bin/git
COPY --chown=$APP_USER:$APP_USER --from=plugin /app/vendor/bundle /app/vendor/bundle
COPY --chown=$APP_USER:$APP_USER --from=plugin /app/plugins /app/plugins
COPY --chown=$APP_USER:$APP_USER --from=plugin /usr/local/bundle /usr/local/bundle
COPY --chown=$APP_USER:$APP_USER --from=plugin /app/public/assets /app/public/assets
COPY --chown=$APP_USER:$APP_USER --from=plugin /app/config/frontend_assets.manifest.json /app/config/frontend_assets.manifest.json
COPY --chown=$APP_USER:$APP_USER --from=plugin /app/Gemfile.* /app/
Initially this looks like it's working - however it doesn't actually build our plugin in correctly. We have a frontend component that needs to be linked into the core frontend, and looking at ./docker/prod/setup/precompile-assets.sh it is skipping the linking because the frontend assets (of the core) already exists. That's why we added RUN rm -f config/frontend_assets.manifest.json
above to force the linking. And then the Docker build fails, seemingly because there is no valid database connection (which is reasonable at build time).
43.14 + SECRET_KEY_BASE=1
43.14 + RAILS_ENV=production
43.14 + DATABASE_URL=nulldb://db
43.14 + bin/rails openproject:plugins:register_frontend assets:precompile
48.49 bin/rails aborted!
48.50 ArgumentError: undefined class/module ActiveRecord::ConnectionAdapters::PostgreSQL:: (ArgumentError)
Any ideas how we get around that without a database connection (this Docker build usually runs in our Github workflows)?
Replies (1)
Just for anybody else encountering this. We ended up creating a Dockerfile with a Ruby base image and reproduced the official Dockerfile (within OP Core) - effectively building OpenProject from source but with our plugins baked in. Still messy but at least it's working