version: "3.0" name: memos-dev services: db: image: mysql volumes: - ./../.air/mysql:/var/lib/mysql environment: MYSQL_ALLOW_EMPTY_PASSWORD: yes MYSQL_DATABASE: memos api: image: cosmtrek/air working_dir: /work command: ["-c", "./scripts/.air.toml"] environment: - "MEMOS_DSN=root@tcp(db)/memos" - "MEMOS_DRIVER=mysql" volumes: - ./..:/work/ - ./../.air/go-build:/root/.cache/go-build - $HOME/go/pkg/:/go/pkg/ # Cache for go mod shared with the host web: image: node:20-alpine working_dir: /work depends_on: ["api"] ports: ["3001:3001"] environment: ["DEV_PROXY_SERVER=http://api:8081/"] entrypoint: ["/bin/sh", "-c"] command: ["corepack enable && pnpm i --frozen-lockfile && pnpm dev"] tmpfs: /work/node_modules/:exec # To avoid pnpm ERR_PNPM_LINKING_FAILED error volumes: - ./../web:/work # Services below are used for developers to run once # # You can just run `docker compose run --rm SERVICE_NAME` to use # For example: # To regenerate typescript code of gRPC proto # Just run `docker compose run --rm buf` # # All of theses services belongs to profile 'tools' # This will prevent to launch by normally `docker compose up` unexpectly # Generate typescript code of gRPC proto buf: profiles: ["tools"] image: bufbuild/buf working_dir: /work/proto command: generate volumes: - ./../proto:/work/proto - ./../web/src/types/:/work/web/src/types/ # Do golang static code check before create PR golangci-lint: profiles: ["tools"] image: golangci/golangci-lint:v1.54.2 working_dir: /work/ entrypoint: golangci-lint command: run -v volumes: - $HOME/go/pkg/:/go/pkg/ # Cache for go mod shared with the host - ./../.air/go-build:/root/.cache/go-build - ./..:/work/ # run npm npm: profiles: ["tools"] image: node:20-alpine working_dir: /work environment: ["NPM_CONFIG_UPDATE_NOTIFIER=false"] entrypoint: "npm" volumes: - ./../web:/work