Sfoglia il codice sorgente

feat: Add separate config for demo setup, tweak docs

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.
Karan Sharma 5 anni fa
parent
commit
06bb719a7b
8 ha cambiato i file con 228 aggiunte e 9 eliminazioni
  1. 1 0
      .gitignore
  2. 1 0
      .goreleaser.yml
  3. 1 0
      Dockerfile
  4. 19 2
      INSTALL.md
  5. 5 5
      README.md
  6. 199 0
      config-demo.toml
  7. 1 1
      config.toml.sample
  8. 1 1
      docker-compose.yml

+ 1 - 0
.gitignore

@@ -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

+ 1 - 0
.goreleaser.yml

@@ -40,3 +40,4 @@ dockers:
     dockerfile: Dockerfile
     dockerfile: Dockerfile
     extra_files:
     extra_files:
     - config.toml.sample
     - config.toml.sample
+    - config-demo.toml

+ 1 - 0
Dockerfile

@@ -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"]

+ 19 - 2
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.
-- `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`.
 - 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

+ 5 - 5
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.
-- `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
 ### Other deployments
 
 

+ 199 - 0
config-demo.toml

@@ -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"

+ 1 - 1
config.toml.sample

@@ -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"

+ 1 - 1
docker-compose.yml

@@ -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