0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-01-06 22:40:14 -05:00
ghost/.devcontainer
Chris Raible c4baf28823
Simplified Dev Container setup to use a single compose file (#21649)
no issue

- The current devcontainer setup was built with the intention of using
it as the _primary_ way of running Ghost in Docker locally. As such, it
was designed to be extensible — there was a `base.compose.yml` file with
the default configuration, and multiple other `compose.yml` files that
could be added to extend the base setup to cover different use-cases.
- We've run into some problems with using the devcontainer for regular
day to day usage, so we're moving toward using a more conventional
`compose` based setup for more advanced configurations.
- We're going to keep the devcontainer around as it's still nice for a
quick and easy setup, but it no longer needs to support multiple
configurations — as such, we can simplify the setup to a single
`compose.yml` file to make it easier to reason about and troubleshoot if
anything goes wrong.
- This commit removes the `.devcontainer/.docker` directory, and many of
the files that were in it. The main `compose.yml` file and the
Dockerfile were moved to the root of `.devcontainer` which should make
the setup a bit easier to follow and modify as needed.
2024-11-18 14:15:11 -08:00
..
compose.yml Simplified Dev Container setup to use a single compose file (#21649) 2024-11-18 14:15:11 -08:00
devcontainer.json Simplified Dev Container setup to use a single compose file (#21649) 2024-11-18 14:15:11 -08:00
Dockerfile Simplified Dev Container setup to use a single compose file (#21649) 2024-11-18 14:15:11 -08:00
onCreateCommand.js Fixed git remote configuration in dev container (#21459) 2024-10-29 15:21:46 -07:00
README.md Simplified Dev Container setup to use a single compose file (#21649) 2024-11-18 14:15:11 -08:00

Dev Container Setup

devcontainer.json

This file contains the configuration for the dev container. It is used to define the setup of the container, including things like port bindings, environment variables, and other dev container specific features.

There are three main components that the devcontainer.json file relies on:

  • The docker compose file (.devcontainer/compose.yml), which defines all the services that should be started when the dev container is launched, like MySQL and Redis.
  • The Dockerfile (.devcontainer/Dockerfile), which is used to build the dev container image.
  • The onCreateCommand script (.devcontainer/onCreateCommand.js), which is used to setup the dev container after it is created.

The Dev Container setup is intended to be as simple as possible with a focus on a really simple setup experience. It is designed to use VSCode's "Clone Repository in Container" feature, which will automatically handle the setup of the dev container, and create a volume for the Ghost codebase that is managed by Docker. It is a great tool for quickly spinning up an isolated development environment, but it lacks some of the flexibility and direct control that a full docker compose setup can provide. Therefore, if you plan to do more "heavy lifting" on Ghost, we recommend using the docker compose setup instead.

Dockerfile

The Dockerfile used to build the Dev Container itself is located at .devcontainer/Dockerfile. This Dockerfile uses a multi-stage build to allow for multiple types of builds without duplicating code and ensuring maximum consistency. The following targets are available:

  • base: The bare minimum base image used to build and run Ghost. Includes the operating system, node, and some build dependencies, but does not include any Ghost code or dependencies.
  • base-devcontainer: everything from base, plus additional development dependencies like the stripe-cli and playwright. No code or node dependencies.
  • full-devcontainer: everything from base-devcontainer, plus Ghost's code and all node dependencies
  • development: an alternative to full-devcontainer intended for manual development e.g. with docker compose. Add Ghost's code and installs dependencies with some optimizations for the yarn cache

Docker Compose

The docker compose setup for the dev container is located at .devcontainer/compose.yml. This compose file includes the MySQL database service and the Redis service, in addition to the Ghost dev container service. When running the Dev Container (i.e. via the "Clone Repository in Container" feature in VSCode), this compose file will be used to start the necessary services before starting the Ghost Dev Container itself.

On Create Command

The Dev Container spec allows developers to specify a command to run after the container is created. This is done by specifying an onCreateCommand in the devcontainer.json file. For Ghost's Dev Container, this command simply runs a JS script defined in .devcontainer/onCreateCommand.js. This script handles installing node dependencies, setting up the local configuration at ghost/core/config.local.json, and some other simple setup tasks to get the dev container ready for use.