diff --git a/.gitignore b/.gitignore index 7259656..6a9a8f8 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ frontend/yarn.lock config.toml node_modules +listmonk diff --git a/.goreleaser.yml b/.goreleaser.yml index 73a82d3..071cd2b 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -1,6 +1,7 @@ env: - GO111MODULE=on - - RELEASE_BUILDS=dist/listmonk_darwin_amd64/listmonk dist/listmonk_linux_amd64/listmonk dist/listmonk_windows_amd64//listmonk.exe + - CGO_ENABLED=0 + - RELEASE_BUILDS=dist/listmonk_darwin_amd64/listmonk dist/listmonk_linux_amd64/listmonk dist/listmonk_windows_amd64/listmonk.exe before: hooks: @@ -27,3 +28,15 @@ archives: - README.md - INSTALL.md - LICENSE +dockers: + - + goos: linux + goarch: amd64 + binaries: + - listmonk + image_templates: + - "listmonk/listmonk:latest" + - "listmonk/listmonk:{{ .Tag }}" + dockerfile: Dockerfile + extra_files: + - config.toml.sample diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9f37f8e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM alpine:latest AS deploy +RUN apk --no-cache add ca-certificates +WORKDIR /listmonk +COPY listmonk . +COPY config.toml.sample config.toml +CMD ["./listmonk"] diff --git a/INSTALL.md b/INSTALL.md index 14ef5c5..525b252 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -3,3 +3,20 @@ - Run `./listmonk --new-config` to generate a sample `config.toml` and add your configuration (SMTP and Postgres DB credentials primarily). - `./listmonk --install` to setup the DB. - Visit `http://localhost:9000`. + +## Running on Docker + +You can checkout the [docker-compose.yml](docker-compose.yml) to get an idea of how to run `listmonk` with `PostgreSQL` together using Docker. + +- `docker-compose up -d` to run all the services together. +- `docker-compose run --rm app ./listmonk --install` to setup the DB. +- Visit `http://localhost:9000`. + +### Demo Setup + +`docker-compose.yml` includes a demo setup to quickly try out `listmonk`. It spins up PostgreSQL and listmonk app containers without any persistent data. + +- Run `docker-compose up -d demo-db demo-app`. +- Visit `http://localhost:9000`. + +_NOTE_: This setup will delete the data once you kill and remove the containers. This setup is NOT intended for production use. diff --git a/README.md b/README.md index 49312e8..eee7321 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,16 @@ listmonk is a standalone, self-hosted, newsletter and mailing list manager. It i - Visit `http://localhost:9000`. - Since there is no user auth yet, it's best to put listmonk behind a proxy like Nginx and setup basicauth on all endpoints except for the few endpoints that need to be public. Here is a [sample nginx config](https://github.com/knadh/listmonk/wiki/Production-Nginx-config) for production use. +### Running on Docker + +You can checkout the [docker-compose.yml](docker-compose.yml) to get an idea of how to run `listmonk` with `PostgreSQL` together using Docker. + +- `docker-compose up -d` to run all the services together. +- `docker-compose run --rm app ./listmonk --install` to setup the DB. +- Visit `http://localhost:9000`. + +Alternatively, to run a demo of listmonk, you can quickly spin up a container `docker-compose up -d demo-db demo-app`. NOTE: This doesn't persist Postgres data after you stop and remove the container, this setup is intended only for demo. _DO NOT_ use the demo setup in production. + ### Help and docs [Help and documentation](https://listmonk.app/docs) (work in progress). diff --git a/config.toml.sample b/config.toml.sample index 1b9f12b..8ac6561 100644 --- a/config.toml.sample +++ b/config.toml.sample @@ -46,10 +46,10 @@ max_send_errors = 1000 # Database. [db] -host = "localhost" +host = "demo-db" port = 5432 user = "listmonk" -password = "" +password = "listmonk" database = "listmonk" ssl_mode = "disable" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..cc99b51 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,53 @@ +# NOTE: This docker-compose.yml is meant to be just an example guideline +# on how you can achieve the same. It is not intented to run out of the box +# and you must edit the below configurations to suit your needs. + +version: "3.7" + +x-app-defaults: &app-defaults + restart: unless-stopped + image: listmonk/listmonk:latest + ports: + - "9000:9000" + networks: + - listmonk + +x-db-defaults: &db-defaults + image: postgres:11 + ports: + - "9432:5432" + networks: + - listmonk + environment: + - POSTGRES_PASSWORD=listmonk + - POSTGRES_USER=listmonk + - POSTGRES_DB=listmonk + restart: unless-stopped + +services: + db: + <<: *db-defaults + volumes: + - type: volume + source: listmonk-data + target: /var/lib/postgresql/data + + app: + <<: *app-defaults + depends_on: + - db + + demo-db: + <<: *db-defaults + + demo-app: + <<: *app-defaults + command: [sh, -c, "yes | ./listmonk --install && ./listmonk"] + depends_on: + - demo-db + +networks: + listmonk: + +volumes: + listmonk-data: