76 lines
2.3 KiB
Markdown
76 lines
2.3 KiB
Markdown
# Turborepo Docker starter
|
|
|
|
This is a community-maintained example. If you experience a problem, please submit a pull request with a fix. GitHub Issues will be closed.
|
|
|
|
## Using this example
|
|
|
|
Run the following command:
|
|
|
|
```sh
|
|
npx create-turbo@latest -e with-docker
|
|
```
|
|
|
|
## What's inside?
|
|
|
|
This Turborepo includes the following:
|
|
|
|
### Apps and Packages
|
|
|
|
- `web`: a [Next.js](https://nextjs.org/) app
|
|
- `api`: an [Express](https://expressjs.com/) server
|
|
- `@repo/ui`: a React component library
|
|
- `@repo/logger`: Isomorphic logger (a small wrapper around console.log)
|
|
- `@repo/eslint-config`: ESLint presets
|
|
- `@repo/typescript-config`: tsconfig.json's used throughout the monorepo
|
|
- `@repo/jest-presets`: Jest configurations
|
|
|
|
Each package/app is 100% [TypeScript](https://www.typescriptlang.org/).
|
|
|
|
### Docker
|
|
|
|
This repo is configured to be built with Docker, and Docker compose. To build all apps in this repo:
|
|
|
|
```
|
|
# Install dependencies
|
|
yarn install
|
|
|
|
# Create a network, which allows containers to communicate
|
|
# with each other, by using their container name as a hostname
|
|
docker network create app_network
|
|
|
|
# Build prod using new BuildKit engine
|
|
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose -f docker-compose.yml build
|
|
|
|
# Start prod in detached mode
|
|
docker-compose -f docker-compose.yml up -d
|
|
```
|
|
|
|
Open http://localhost:3000.
|
|
|
|
To shutdown all running containers:
|
|
|
|
```
|
|
# Stop all running containers
|
|
docker kill $(docker ps -q) && docker rm $(docker ps -a -q)
|
|
```
|
|
|
|
### Remote Caching
|
|
|
|
> [!TIP]
|
|
> Vercel Remote Cache is free for all plans. Get started today at [vercel.com](https://vercel.com/signup?/signup?utm_source=remote-cache-sdk&utm_campaign=free_remote_cache).
|
|
|
|
This example includes optional remote caching. In the Dockerfiles of the apps, uncomment the build arguments for `TURBO_TEAM` and `TURBO_TOKEN`. Then, pass these build arguments to your Docker build.
|
|
|
|
You can test this behavior using a command like:
|
|
|
|
`docker build -f apps/web/Dockerfile . --build-arg TURBO_TEAM=“your-team-name” --build-arg TURBO_TOKEN=“your-token“ --no-cache`
|
|
|
|
### Utilities
|
|
|
|
This Turborepo has some additional tools already setup for you:
|
|
|
|
- [TypeScript](https://www.typescriptlang.org/) for static type checking
|
|
- [ESLint](https://eslint.org/) for code linting
|
|
- [Jest](https://jestjs.io) test runner for all things JavaScript
|
|
- [Prettier](https://prettier.io) for code formatting
|