mirror of
https://github.com/knadh/listmonk.git
synced 2025-01-28 01:04:46 +08:00
feat: Add dev docker setup
This commit is contained in:
parent
3386de40c7
commit
e977b901e1
4 changed files with 144 additions and 0 deletions
29
Makefile
29
Makefile
|
@ -84,3 +84,32 @@ release-dry:
|
||||||
.PHONY: release
|
.PHONY: release
|
||||||
release:
|
release:
|
||||||
goreleaser --parallelism 1 --rm-dist --skip-validate
|
goreleaser --parallelism 1 --rm-dist --skip-validate
|
||||||
|
|
||||||
|
# Build local docker images for development.
|
||||||
|
.PHONY: build-dev-docker
|
||||||
|
build-dev-docker: build ## Build docker containers for the entire suite (Front/Core/PG).
|
||||||
|
cd dev; \
|
||||||
|
docker-compose build ; \
|
||||||
|
|
||||||
|
# Spin a local docker suite for local development.
|
||||||
|
.PHONY: dev-docker
|
||||||
|
dev-docker: build-dev-docker ## Build and spawns docker containers for the entire suite (Front/Core/PG).
|
||||||
|
cd dev; \
|
||||||
|
docker-compose up
|
||||||
|
|
||||||
|
# Run the backend in docker-dev mode. The frontend assets in dev mode are loaded from disk from frontend/dist.
|
||||||
|
.PHONY: run-backend-docker
|
||||||
|
run-backend-docker:
|
||||||
|
CGO_ENABLED=0 go run -ldflags="-s -w -X 'main.buildString=${BUILDSTR}' -X 'main.versionString=${VERSION}' -X 'main.frontendDir=frontend/dist'" cmd/*.go --config=dev/config.toml
|
||||||
|
|
||||||
|
# Tear down the complete local development docker suite.
|
||||||
|
.PHONY: rm-dev-docker
|
||||||
|
rm-dev-docker: build ## Delete the docker containers including DB volumes.
|
||||||
|
cd dev; \
|
||||||
|
docker-compose down -v ; \
|
||||||
|
|
||||||
|
# Setup the db for local dev docker suite.
|
||||||
|
.PHONY: init-dev-docker
|
||||||
|
init-dev-docker: build-dev-docker ## Delete the docker containers including DB volumes.
|
||||||
|
cd dev; \
|
||||||
|
docker-compose run --rm backend sh -c "make dist && yes | ./listmonk --install --config dev/config.toml"
|
||||||
|
|
43
dev/README.md
Normal file
43
dev/README.md
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# Docker suite for development
|
||||||
|
|
||||||
|
**NOTE**: This exists only for local development. If you're interested in using Docker for a production setup, visit the [docs](https://listmonk.app/docs/installation/#docker) instead.
|
||||||
|
|
||||||
|
### Objective
|
||||||
|
|
||||||
|
The purpose of this docker suite for local development is to isolate all the dev dependencies in a docker environment. The containers have a host volume mounted inside for the entire app directory. This helps us to not do a full `docker build` for every single local change, only restarting the docker environment is enough.
|
||||||
|
|
||||||
|
## Setting up a dev suite
|
||||||
|
|
||||||
|
To spin up a local suite of
|
||||||
|
|
||||||
|
- PostgreSQL
|
||||||
|
- Mailhog
|
||||||
|
- Node.js frontend app
|
||||||
|
- Golang backend app
|
||||||
|
|
||||||
|
### Setup DB
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make init-dev-docker
|
||||||
|
```
|
||||||
|
|
||||||
|
### Start frontend and backend apps
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make dev-docker
|
||||||
|
```
|
||||||
|
|
||||||
|
Visit `http://localhost:8080` on your browser.
|
||||||
|
|
||||||
|
### Tear down
|
||||||
|
|
||||||
|
This will tear down all the data, including DB.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make rm-dev-docker
|
||||||
|
```
|
||||||
|
|
||||||
|
### See local changes in action
|
||||||
|
|
||||||
|
- Backend: Anytime you do a change to the Go app, it needs to be compiled. Just run `make dev-docker` again and that should automatically handle it for you.
|
||||||
|
- Frontend: Anytime you change the frontend code, you don't need to do anything. Since `yarn` is watching for all the changes and we have mounted the code inside the docker container, `yarn` server automatically restarts.
|
11
dev/app.Dockerfile
Normal file
11
dev/app.Dockerfile
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
FROM golang:1.17 AS go
|
||||||
|
|
||||||
|
FROM node:16 AS node
|
||||||
|
|
||||||
|
COPY --from=go /usr/local/go /usr/local/go
|
||||||
|
ENV GOPATH /go
|
||||||
|
ENV CGO_ENABLED=0
|
||||||
|
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
ENTRYPOINT [ "" ]
|
61
dev/docker-compose.yml
Normal file
61
dev/docker-compose.yml
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
mailhog:
|
||||||
|
image: mailhog/mailhog:v1.0.1
|
||||||
|
ports:
|
||||||
|
- "1025:1025" # SMTP
|
||||||
|
- "8025:8025" # UI
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: postgres:13
|
||||||
|
ports:
|
||||||
|
- "5432:5432"
|
||||||
|
networks:
|
||||||
|
- listmonk-dev
|
||||||
|
environment:
|
||||||
|
- POSTGRES_PASSWORD=listmonk-dev
|
||||||
|
- POSTGRES_USER=listmonk-dev
|
||||||
|
- POSTGRES_DB=listmonk-dev
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- type: volume
|
||||||
|
source: listmonk-dev-db
|
||||||
|
target: /var/lib/postgresql/data
|
||||||
|
|
||||||
|
front:
|
||||||
|
build:
|
||||||
|
context: ../
|
||||||
|
dockerfile: dev/app.Dockerfile
|
||||||
|
command: ["make", "run-frontend"]
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
environment:
|
||||||
|
- LISTMONK_API_URL=http://backend:9000
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
volumes:
|
||||||
|
- ../:/app
|
||||||
|
networks:
|
||||||
|
- listmonk-dev
|
||||||
|
|
||||||
|
backend:
|
||||||
|
build:
|
||||||
|
context: ../
|
||||||
|
dockerfile: dev/app.Dockerfile
|
||||||
|
command: ["make", "run-backend-docker"]
|
||||||
|
ports:
|
||||||
|
- "9000:9000"
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
volumes:
|
||||||
|
- ../:/app
|
||||||
|
- $GOPATH/pkg/mod/cache:/go/pkg/mod/cache
|
||||||
|
networks:
|
||||||
|
- listmonk-dev
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
listmonk-dev-db:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
listmonk-dev:
|
Loading…
Reference in a new issue