Merge pull request #153 from mr-karan/docker_docs
feat: Add separate config for demo setup, tweak docs
This commit is contained in:
commit
586defe470
|
@ -1,6 +1,7 @@
|
||||||
frontend/node_modules/
|
frontend/node_modules/
|
||||||
frontend/.cache/
|
frontend/.cache/
|
||||||
frontend/yarn.lock
|
frontend/yarn.lock
|
||||||
|
frontend/build/
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
config.toml
|
config.toml
|
||||||
|
|
|
@ -40,3 +40,4 @@ dockers:
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
extra_files:
|
extra_files:
|
||||||
- config.toml.sample
|
- config.toml.sample
|
||||||
|
- config-demo.toml
|
||||||
|
|
|
@ -3,4 +3,5 @@ RUN apk --no-cache add ca-certificates
|
||||||
WORKDIR /listmonk
|
WORKDIR /listmonk
|
||||||
COPY listmonk .
|
COPY listmonk .
|
||||||
COPY config.toml.sample config.toml
|
COPY config.toml.sample config.toml
|
||||||
|
COPY config-demo.toml .
|
||||||
CMD ["./listmonk"]
|
CMD ["./listmonk"]
|
||||||
|
|
21
INSTALL.md
21
INSTALL.md
|
@ -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.
|
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.
|
- **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.
|
||||||
- `docker-compose run --rm app ./listmonk --install` to setup the DB.
|
- **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`.
|
- 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.
|
_NOTE_: This `docker-compose` file works with Docker Engine 18.06.0+ and `docker-compose` which supports file format 3.7.
|
||||||
|
|
||||||
### Demo Setup
|
### Demo Setup
|
||||||
|
|
10
README.md
10
README.md
|
@ -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 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.
|
**Alternatively**, to run a demo of listmonk, you can quickly spin up a local setup with:
|
||||||
- `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.
|
`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
|
### Other deployments
|
||||||
|
|
||||||
|
|
|
@ -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 <from@mail.com>"
|
||||||
|
|
||||||
|
# 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 = ["admin1@mysite.com", "admin2@mysite.com"]
|
||||||
|
|
||||||
|
# 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"
|
|
@ -73,7 +73,7 @@ allow_wipe = false
|
||||||
|
|
||||||
# Database.
|
# Database.
|
||||||
[db]
|
[db]
|
||||||
host = "demo-db"
|
host = "db"
|
||||||
port = 5432
|
port = 5432
|
||||||
user = "listmonk"
|
user = "listmonk"
|
||||||
password = "listmonk"
|
password = "listmonk"
|
||||||
|
|
|
@ -42,7 +42,7 @@ services:
|
||||||
|
|
||||||
demo-app:
|
demo-app:
|
||||||
<<: *app-defaults
|
<<: *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:
|
depends_on:
|
||||||
- demo-db
|
- demo-db
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue