Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/strapi/strapi-docker

Install and run your first Strapi project using Docker
https://github.com/strapi/strapi-docker

docker docker-compose strapi

Last synced: about 2 months ago
JSON representation

Install and run your first Strapi project using Docker

Awesome Lists containing this project

README

        

# [Strapi](https://github.com/strapi/strapi) containerized

> ⚠️ This image is only for Strapi v3. For now, we will not update it for v4.
>
> However, to build an image compatible with Strapi v4, we recommend you check out this tool created by the Strapi Community: https://github.com/strapi-community/strapi-tool-dockerize

![Strapi](https://cldup.com/7umchwdUBh.png)

API creation made simple, secure and fast.
The most advanced open-source Content Management Framework to build powerful API with no effort.

---

[![Travis](https://img.shields.io/travis/com/strapi/strapi-docker.svg?style=for-the-badge)](https://app.travis-ci.com/github/strapi/strapi-docker)
[![Docker Pulls](https://img.shields.io/docker/pulls/strapi/strapi.svg?style=for-the-badge)](https://hub.docker.com/r/strapi/strapi)

## Images

Strapi comes with two images: `strapi/strapi` and `strapi/base`.

Use [`strapi/strapi`](#how-to-use-strapistrapi) to create a new project or run a project on your host machine.

Use [`strapi/base`](#how-to-use-strapibase) to build a Dockerfile and create an image for your app.

## How to use `strapi/strapi`

This image allows you to create a new strapi project or run a project from your host machine. The default command that will run in your project is [`strapi develop`](https://strapi.io/documentation/v3.x/cli/CLI.html#strapi-develop-dev).

### Creating a new project

When running this image, strapi will check if there is a project in the `/srv/app` folder of the container. If there is nothing then it will run the [`strapi new`](https://strapi.io/documentation/developer-docs/latest/developer-resources/cli/CLI.html#strapi-new) command in the container /srv/app folder. You can create a new project by running this command.

```bash
docker run -it -p 1337:1337 -v `pwd`/project-name:/srv/app strapi/strapi
```

This command creates a project with an SQLite database. Then starts it on port `1337`.

The `-v` option creates a `project-name` folder on your computer that will be shared with the docker container.
Once the project is created it will be available in this folder on your computer.

**Environment variables**

When creating a new project with this image you can pass database configurations to the [`strapi new`](https://strapi.io/documentation/developer-docs/latest/developer-resources/cli/CLI.html#strapi-new) command.

- `DATABASE_CLIENT` a database provider supported by Strapi: (sqlite, postgres, mysql ,mongo).
- `DATABASE_HOST` database host.
- `DATABASE_PORT` database port.
- `DATABASE_NAME` database name.
- `DATABASE_USERNAME` database username.
- `DATABASE_PASSWORD` database password.
- `DATABASE_SSL` boolean for SSL.
- `EXTRA_ARGS` pass extra args to the [`strapi new`](https://strapi.io/documentation/developer-docs/latest/developer-resources/cli/CLI.html#strapi-new).

**Example**

You can create a strapi project that will connect to a remote postgres database like so:

```bash
docker run -it \
-e DATABASE_CLIENT=postgres \
-e DATABASE_NAME=strapi \
-e DATABASE_HOST=0.0.0.0 \
-e DATABASE_PORT=5432 \
-e DATABASE_USERNAME=strapi \
-e DATABASE_PASSWORD=strapi \
-p 1337:1337 \
-v `pwd`/project-name:/srv/app \
strapi/strapi
```

You can also create projects using docker-compose. See examples of using these variables with docker-compose in the [examples folder](./examples).

### Running a project from your host machine

You can also use `strapi/strapi` to run a project you already have created (or cloned for a repo) on your computer.

First make sure to delete the `node_modules` folder if you have already installed your dependencies on your host machine. Then run:

```bash
cd my-project
docker run -it -p 1337:1337 -v `pwd`:/srv/app strapi/strapi
```

This will start by installing the dependencies and then run `strapi develop` in the project.

**Environment variables**

If you are using environment variables in your code you can pass them with the -e option (e.g `docker run -e ENV_VAR=sth ...`).

You can for example set your database configuration with environment variables.
Because the default container command is [`strapi develop`](https://strapi.io/documentation/v3.x/cli/CLI.html#strapi-develop-dev) you will need to update your `development` database configuration following the `production` example in the [documentation](https://strapi.io/documentation/v3.x/concepts/configurations.html#dynamic-configurations). Then you can run:

```bash
docker run -it \
-e DATABASE_NAME=strapi \
-e DATABASE_HOST=0.0.0.0 \
-e DATABASE_PORT=1234 \
-e DATABASE_USERNAME=strapi \
-e DATABASE_PASSWORD=strapi \
-p 1337:1337 \
-v `pwd`/project-name:/srv/app \
strapi/strapi
```

### Upgrading Strapi in Docker container

- **Important!** Upgrading `strapi/strapi` Docker image tag **does not** upgrade Strapi version.
- Strapi NodeJS application builds itself during first startup only, if detects empty folder and is normally stored in mounted volume. See [docker-entrypoint.sh](https://github.com/strapi/strapi-docker/blob/master/strapi/docker-entrypoint.sh).
- To upgrade, first follow the guides ([general](https://strapi.io/documentation/developer-docs/latest/guides/update-version.html) and [version-specific](https://strapi.io/documentation/developer-docs/latest/migration-guide/)) to rebuild actual Strapi NodeJS application. Secondly, update docker tag to match the version to avoid confusion.

## How to use `strapi/base`

When deploying a strapi application to production you can use docker to package your whole app in an image. You can create a Dockerfile in your strapi project like the one in [`./examples/custom`](./examples/custom)

## Building the images in this repository

You can build the images with the build command. To see the options run:

```
yarn install
./bin/build.js --help
```