Skip to content

Commit

Permalink
feat: Add separate config for demo setup, tweak docs
Browse files Browse the repository at this point in the history
This PR adds `config-demo.toml` to `Dockerfile` which uses the db host
`demo-db`. This is more suited for demo setups. For normal docker installations
the db host is changed back to `db` which is a better sane default.
Reworded `INSTALL.md` and `README.md` for more clarity on docker
installation and configuration.
  • Loading branch information
mr-karan committed Jul 8, 2020
1 parent 525a510 commit 06bb719
Show file tree
Hide file tree
Showing 8 changed files with 228 additions and 9 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
frontend/node_modules/
frontend/.cache/
frontend/yarn.lock
frontend/build/
.vscode/

config.toml
Expand Down
1 change: 1 addition & 0 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,4 @@ dockers:
dockerfile: Dockerfile
extra_files:
- config.toml.sample
- config-demo.toml
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ RUN apk --no-cache add ca-certificates
WORKDIR /listmonk
COPY listmonk .
COPY config.toml.sample config.toml
COPY config-demo.toml .
CMD ["./listmonk"]
21 changes: 19 additions & 2 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,27 @@

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 app db` to run all the services together.
- `docker-compose run --rm app ./listmonk --install` to setup the DB.
- **Run the services**: `docker-compose up -d app db` to run all the services together. If this is a first time setup, you will see some errors related to DB which occur because migrations haven't been applied yet. Don't worry, follow the next step.
- **Apply DB migrations**: `docker-compose run --rm app ./listmonk --install`.
- Ensure that both the containers are in running state before proceeding. If the app container is not `up`, you might need to restart the app container once: `docker-compose restart app`.
- Visit `http://localhost:9000`.

### Mounting a custom config file

You are expected to tweak [config.toml.sample](config.toml.sample) for actual use with your custom settings. To mount the `config.toml` file,
you can add the following section to `docker-compose.yml`:

```
app:
<<: *app-defaults
depends_on:
- db
volume:
- ./path/on/host/config.toml/:/listmonk/config.toml
```

This will `mount` your local `config.toml` inside the container at `listmonk/config.toml`.

_NOTE_: This `docker-compose` file works with Docker Engine 18.06.0+ and `docker-compose` which supports file format 3.7.

### Demo Setup
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ See the [configuration Wiki page](https://github.com/knadh/listmonk/wiki/Configu

You can pull the official Docker Image from [Docker Hub](https://hub.docker.com/r/listmonk/listmonk).

You can checkout the [docker-compose.yml](docker-compose.yml) to get an idea of how to run `listmonk` with `PostgreSQL` together using Docker (also see [configuring with environment variables](https://github.com/knadh/listmonk/wiki/Configuration)).
You can checkout the [docker-compose.yml](docker-compose.yml) to get an idea of how to run `listmonk` with `PostgreSQL` together using Docker (also see [configuring with environment variables](https://github.com/knadh/listmonk/wiki/Configuration)). Please visit [INSTALL.md](INSTALL.md) for detailed instructions on how to setup Listmonk with Docker.

- `docker-compose up -d app db` 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 local setup with:

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.
`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.

### Other deployments

Expand Down
199 changes: 199 additions & 0 deletions config-demo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
[app]
# Interface and port where the app will run its webserver.
address = "0.0.0.0:9000"

# Public root URL of the listmonk installation that'll be used
# in the messages for linking to images, unsubscribe page etc.
root = "https://listmonk.mysite.com"

# (Optional) full URL to the static logo to be displayed on
# user facing view such as the unsubscription page.
# eg: https://mysite.com/images/logo.svg
logo_url = "https://listmonk.mysite.com/public/static/logo.png"

# (Optional) full URL to the static favicon to be displayed on
# user facing view such as the unsubscription page.
# eg: https://mysite.com/images/favicon.png
favicon_url = "https://listmonk.mysite.com/public/static/favicon.png"

# The default 'from' e-mail for outgoing e-mail campaigns.
from_email = "listmonk <[email protected]>"

# List of e-mail addresses to which admin notifications such as
# import updates, campaign completion, failure etc. should be sent.
# To disable notifications, set an empty list, eg: notify_emails = []
notify_emails = ["[email protected]", "[email protected]"]

# Maximum concurrent workers that will attempt to send messages
# simultaneously. This should ideally depend on the number of CPUs
# available, and should be based on the maximum number of messages
# a target SMTP server will accept.
concurrency = 5

# Maximum number of messages to be sent out per second per worker.
# If concurrency = 10 and message_rate = 10, then up to 10x10=100 messages
# may be pushed out every second. This, along with concurrency, should be
# tweaked to keep the net messages going out per second under the target
# SMTP's rate limits, if any.
message_rate = 5

# The number of errors (eg: SMTP timeouts while e-mailing) a running
# campaign should tolerate before it is paused for manual
# investigation or intervention. Set to 0 to never pause.
max_send_errors = 1000

# The number of subscribers to pull from the databse in a single iteration.
# Each iteration pulls subscribers from the database, sends messages to them,
# and then moves on to the next iteration to pull the next batch.
# This should ideally be higher than the maximum achievable throughput (concurrency * message_rate)
batch_size = 1000

[privacy]
# Allow subscribers to unsubscribe from all mailing lists and mark themselves
# as blacklisted?
allow_blacklist = false

# Allow subscribers to export data recorded on them?
allow_export = false

# Items to include in the data export.
# profile Subscriber's profile including custom attributes
# subscriptions Subscriber's subscription lists (private list names are masked)
# campaign_views Campaigns the subscriber has viewed and the view counts
# link_clicks Links that the subscriber has clicked and the click counts
exportable = ["profile", "subscriptions", "campaign_views", "link_clicks"]

# Allow subscribers to delete themselves from the database?
# This deletes the subscriber and all their subscriptions.
# Their association to campaign views and link clicks are also
# removed while views and click counts remain (with no subscriber
# associated to them) so that stats and analytics aren't affected.
allow_wipe = false


# Database.
[db]
host = "demo-db"
port = 5432
user = "listmonk"
password = "listmonk"
database = "listmonk"
ssl_mode = "disable"

# Maximum active and idle connections to pool.
max_open = 50
max_idle = 10

# SMTP servers.
[smtp]
[smtp.my0]
enabled = true
host = "my.smtp.server"
port = 25

# "cram", "plain", or "login". Empty string for no auth.
auth_protocol = "cram"
username = "xxxxx"
password = ""

# Format to send e-mails in: html|plain|both.
email_format = "both"

# Optional. Some SMTP servers require a FQDN in the hostname.
# By default, HELLOs go with "localhost". Set this if a custom
# hostname should be used.
hello_hostname = ""

# Maximum concurrent connections to the SMTP server.
max_conns = 10

# Time to wait for new activity on a connection before closing
# it and removing it from the pool.
idle_timeout = "15s"

# Message send / wait timeout.
wait_timeout = "5s"

# The number of times a message should be retried if sending fails.
max_msg_retries = 2

# Enable STARTTLS.
tls_enabled = true
tls_skip_verify = false

# One or more optional custom headers to be attached to all e-mails
# sent from this SMTP server. Uncomment the line to enable.
# email_headers = { "X-Sender" = "listmonk", "X-Custom-Header" = "listmonk" }

[smtp.postal]
enabled = false
host = "my.smtp.server2"
port = 25

# cram or plain.
auth_protocol = "plain"
username = "xxxxx"
password = ""

# Format to send e-mails in: html|plain|both.
email_format = "both"

# Optional. Some SMTP servers require a FQDN in the hostname.
# By default, HELLOs go with "localhost". Set this if a custom
# hostname should be used.
hello_hostname = ""

# Maximum concurrent connections to the SMTP server.
max_conns = 10

# Time to wait for new activity on a connection before closing
# it and removing it from the pool.
idle_timeout = "15s"

# Message send / wait timeout.
wait_timeout = "5s"

# The number of times a message should be retried if sending fails.
max_msg_retries = 2

# Enable STARTTLS.
tls_enabled = true
tls_skip_verify = false

[upload]
# File storage backend. "filesystem" or "s3".
provider = "filesystem"

[upload.s3]
# (Optional). AWS Access Key and Secret Key for the user to access the bucket.
# Leaving it empty would default to use instance IAM role.
aws_access_key_id = ""
aws_secret_access_key = ""

# AWS Region where S3 bucket is hosted.
aws_default_region = "ap-south-1"

# Bucket name.
bucket = ""

# Path where the files will be stored inside bucket. Default is "/".
bucket_path = "/"

# Optional full URL to the bucket. eg: https://files.mycustom.com
bucket_url = ""

# "private" or "public".
bucket_type = "public"

# (Optional) Specify TTL (in seconds) for the generated presigned URL.
# Expiry value is used only if the bucket is private.
expiry = 86400

[upload.filesystem]
# Path to the uploads directory where media will be uploaded.
upload_path="./uploads"

# Upload URI that's visible to the outside world.
# The media uploaded to upload_path will be made available publicly
# under this URI, for instance, list.yoursite.com/uploads.
upload_uri = "/uploads"
2 changes: 1 addition & 1 deletion config.toml.sample
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ allow_wipe = false

# Database.
[db]
host = "demo-db"
host = "db"
port = 5432
user = "listmonk"
password = "listmonk"
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ services:

demo-app:
<<: *app-defaults
command: [sh, -c, "yes | ./listmonk --install && ./listmonk"]
command: [sh, -c, "yes | ./listmonk --install --config config-demo.toml && ./listmonk --config config-demo.toml"]
depends_on:
- demo-db

Expand Down

0 comments on commit 06bb719

Please sign in to comment.