0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-11 02:12:21 -05:00
ghost/.docker/Dockerfile
Chris Raible fa377b5ac0
Configured ssh agent forwarding for docker compose (#22232)
no issue

- Currently running any `git` commands in the docker container (i.e.
updating submodules) that use ssh are failing because the container
can't see your ssh keys. This commit adds a volume & environment
variable to enable forwarding your local ssh agent into the container.
As long as you've got an ssh agent running locally with your keys
enabled, this will allow you to e.g. push to a remote over ssh from
inside the container.
- It also mounts your local `.gitconfig` file into the container, so
your git configuration (i.e. name & email address) will also work inside
the container
- Finally, it adds githubs ssh keys to known_hosts in the development
target of the Dockerfile to avoid the prompt, which only works in
interactive environments and fails in any kind of script (like `yarn
main:submodules`).
2025-02-19 09:38:05 -08:00

179 lines
No EOL
9.5 KiB
Docker

ARG NODE_VERSION=20.15.1
ARG WORKDIR=/home/ghost
# Base Image used for all targets
## This stage includes the OS, Node and a few apt packages
FROM node:$NODE_VERSION-bullseye-slim AS base
RUN apt-get update && \
apt-get install -y \
build-essential \
curl \
jq \
libjemalloc2 \
python3 \
tar && \
rm -rf /var/lib/apt/lists/* && \
apt clean
# Development Base Image
## This stage adds development specific packages like the Stripe CLI, zsh, playwright, etc.
## It does not include the source code or node_modules
FROM base AS development-base
ARG WORKDIR=/home/ghost
RUN curl -s https://packages.stripe.dev/api/security/keypair/stripe-cli-gpg/public | gpg --dearmor | tee /usr/share/keyrings/stripe.gpg && \
echo "deb [signed-by=/usr/share/keyrings/stripe.gpg] https://packages.stripe.dev/stripe-cli-debian-local stable main" | tee -a /etc/apt/sources.list.d/stripe.list && \
apt update && \
apt install -y \
git \
stripe \
procps && \
rm -rf /var/lib/apt/lists/* && \
apt clean
# DevContainer Stage: Install dependencies and copy the code
## This stage is used for local development
## It includes the source code and all development dependencies
FROM development-base AS development
ARG WORKDIR=/home/ghost
WORKDIR $WORKDIR
## Add github to known hosts
### Without this, git submodule updates fail inside the container
RUN mkdir -p /root/.ssh && \
ssh-keyscan github.com >> /root/.ssh/known_hosts
# Enable the NX Daemon
ENV NX_DAEMON=true
# Disable NX rejection of unknown local cache
ENV NX_REJECT_UNKNOWN_LOCAL_CACHE=false
# Copy the package.json and yarn.lock files
COPY package.json yarn.lock ./
# Copy all package.json files
COPY apps/admin-x-activitypub/package.json apps/admin-x-activitypub/package.json
COPY apps/admin-x-demo/package.json apps/admin-x-demo/package.json
COPY apps/admin-x-design-system/package.json apps/admin-x-design-system/package.json
COPY apps/admin-x-framework/package.json apps/admin-x-framework/package.json
COPY apps/admin-x-settings/package.json apps/admin-x-settings/package.json
COPY apps/announcement-bar/package.json apps/announcement-bar/package.json
COPY apps/comments-ui/package.json apps/comments-ui/package.json
COPY apps/portal/package.json apps/portal/package.json
COPY apps/posts/package.json apps/posts/package.json
COPY apps/shade/package.json apps/shade/package.json
COPY apps/signup-form/package.json apps/signup-form/package.json
COPY apps/sodo-search/package.json apps/sodo-search/package.json
COPY ghost/activitypub/package.json ghost/activitypub/package.json
COPY ghost/adapter-cache-memory-ttl/package.json ghost/adapter-cache-memory-ttl/package.json
COPY ghost/adapter-cache-redis/package.json ghost/adapter-cache-redis/package.json
COPY ghost/adapter-manager/package.json ghost/adapter-manager/package.json
COPY ghost/admin/lib/asset-delivery/package.json ghost/admin/lib/asset-delivery/package.json
COPY ghost/admin/lib/ember-power-calendar-moment/package.json ghost/admin/lib/ember-power-calendar-moment/package.json
COPY ghost/admin/lib/ember-power-calendar-utils/package.json ghost/admin/lib/ember-power-calendar-utils/package.json
COPY ghost/admin/package.json ghost/admin/package.json
COPY ghost/announcement-bar-settings/package.json ghost/announcement-bar-settings/package.json
COPY ghost/api-framework/package.json ghost/api-framework/package.json
COPY ghost/api-version-compatibility-service/package.json ghost/api-version-compatibility-service/package.json
COPY ghost/audience-feedback/package.json ghost/audience-feedback/package.json
COPY ghost/bookshelf-repository/package.json ghost/bookshelf-repository/package.json
COPY ghost/bootstrap-socket/package.json ghost/bootstrap-socket/package.json
COPY ghost/captcha-service/package.json ghost/captcha-service/package.json
COPY ghost/constants/package.json ghost/constants/package.json
COPY ghost/core/package.json ghost/core/package.json
COPY ghost/custom-fonts/package.json ghost/custom-fonts/package.json
COPY ghost/custom-theme-settings-service/package.json ghost/custom-theme-settings-service/package.json
COPY ghost/data-generator/package.json ghost/data-generator/package.json
COPY ghost/domain-events/package.json ghost/domain-events/package.json
COPY ghost/donations/package.json ghost/donations/package.json
COPY ghost/dynamic-routing-events/package.json ghost/dynamic-routing-events/package.json
COPY ghost/email-addresses/package.json ghost/email-addresses/package.json
COPY ghost/email-analytics-provider-mailgun/package.json ghost/email-analytics-provider-mailgun/package.json
COPY ghost/email-analytics-service/package.json ghost/email-analytics-service/package.json
COPY ghost/email-content-generator/package.json ghost/email-content-generator/package.json
COPY ghost/email-events/package.json ghost/email-events/package.json
COPY ghost/email-service/package.json ghost/email-service/package.json
COPY ghost/email-suppression-list/package.json ghost/email-suppression-list/package.json
COPY ghost/express-dynamic-redirects/package.json ghost/express-dynamic-redirects/package.json
COPY ghost/external-media-inliner/package.json ghost/external-media-inliner/package.json
COPY ghost/extract-api-key/package.json ghost/extract-api-key/package.json
COPY ghost/ghost/package.json ghost/ghost/package.json
COPY ghost/html-to-plaintext/package.json ghost/html-to-plaintext/package.json
COPY ghost/i18n/package.json ghost/i18n/package.json
COPY ghost/identity-token-service/package.json ghost/identity-token-service/package.json
COPY ghost/importer-handler-content-files/package.json ghost/importer-handler-content-files/package.json
COPY ghost/importer-revue/package.json ghost/importer-revue/package.json
COPY ghost/in-memory-repository/package.json ghost/in-memory-repository/package.json
COPY ghost/job-manager/package.json ghost/job-manager/package.json
COPY ghost/link-redirects/package.json ghost/link-redirects/package.json
COPY ghost/link-replacer/package.json ghost/link-replacer/package.json
COPY ghost/link-tracking/package.json ghost/link-tracking/package.json
COPY ghost/magic-link/package.json ghost/magic-link/package.json
COPY ghost/mail-events/package.json ghost/mail-events/package.json
COPY ghost/mailgun-client/package.json ghost/mailgun-client/package.json
COPY ghost/member-attribution/package.json ghost/member-attribution/package.json
COPY ghost/member-events/package.json ghost/member-events/package.json
COPY ghost/members-api/package.json ghost/members-api/package.json
COPY ghost/members-csv/package.json ghost/members-csv/package.json
COPY ghost/members-events-service/package.json ghost/members-events-service/package.json
COPY ghost/members-importer/package.json ghost/members-importer/package.json
COPY ghost/members-ssr/package.json ghost/members-ssr/package.json
COPY ghost/mentions-email-report/package.json ghost/mentions-email-report/package.json
COPY ghost/milestones/package.json ghost/milestones/package.json
COPY ghost/minifier/package.json ghost/minifier/package.json
COPY ghost/mw-api-version-mismatch/package.json ghost/mw-api-version-mismatch/package.json
COPY ghost/mw-cache-control/package.json ghost/mw-cache-control/package.json
COPY ghost/mw-error-handler/package.json ghost/mw-error-handler/package.json
COPY ghost/mw-session-from-token/package.json ghost/mw-session-from-token/package.json
COPY ghost/mw-update-user-last-seen/package.json ghost/mw-update-user-last-seen/package.json
COPY ghost/mw-version-match/package.json ghost/mw-version-match/package.json
COPY ghost/mw-vhost/package.json ghost/mw-vhost/package.json
COPY ghost/oembed-service/package.json ghost/oembed-service/package.json
COPY ghost/offers/package.json ghost/offers/package.json
COPY ghost/package-json/package.json ghost/package-json/package.json
COPY ghost/payments/package.json ghost/payments/package.json
COPY ghost/post-events/package.json ghost/post-events/package.json
COPY ghost/post-revisions/package.json ghost/post-revisions/package.json
COPY ghost/posts-service/package.json ghost/posts-service/package.json
COPY ghost/prometheus-metrics/package.json ghost/prometheus-metrics/package.json
COPY ghost/recommendations/package.json ghost/recommendations/package.json
COPY ghost/referrers/package.json ghost/referrers/package.json
COPY ghost/security/package.json ghost/security/package.json
COPY ghost/session-service/package.json ghost/session-service/package.json
COPY ghost/settings-path-manager/package.json ghost/settings-path-manager/package.json
COPY ghost/slack-notifications/package.json ghost/slack-notifications/package.json
COPY ghost/staff-service/package.json ghost/staff-service/package.json
COPY ghost/stats-service/package.json ghost/stats-service/package.json
COPY ghost/stripe/package.json ghost/stripe/package.json
COPY ghost/tiers/package.json ghost/tiers/package.json
COPY ghost/update-check-service/package.json ghost/update-check-service/package.json
COPY ghost/verification-trigger/package.json ghost/verification-trigger/package.json
COPY ghost/version-notifications-data-service/package.json ghost/version-notifications-data-service/package.json
COPY ghost/webmentions/package.json ghost/webmentions/package.json
## Install dependencies
RUN yarn install --frozen-lockfile --prefer-offline
## Install playwright w/ dependencies
RUN npx -y playwright install --with-deps
## Copy the rest of the code
COPY . .
## Build typescript packages
RUN yarn nx run-many -t build:ts
# Expose the ports
EXPOSE 2368
EXPOSE 4200
EXPOSE 4201
EXPOSE 4175
EXPOSE 4176
EXPOSE 4177
EXPOSE 4178
EXPOSE 6174
EXPOSE 7173
EXPOSE 7174
## Start the dev server
CMD ["yarn", "dev"]