Skip to content

Commit

Permalink
add dockerfile
Browse files Browse the repository at this point in the history
  • Loading branch information
Kirill Rodin committed Apr 25, 2019
1 parent bbbb563 commit 34dd863
Show file tree
Hide file tree
Showing 41 changed files with 208 additions and 152 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.idea
25 changes: 25 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
FROM golang:1.12.4-alpine3.9 AS builder

RUN apk add --update --no-cache make bash git openssh-client build-base musl-dev curl wget

ADD . /src/app

WORKDIR /src/app

RUN mkdir ./bin && \
go build -o ./bin/postmanq -a cmd/postmanq.go && \
go build -o ./bin/pmq-grep -a cmd/pmq-grep.go && \
go build -o ./bin/pmq-publish -a cmd/pmq-publish.go && \
go build -o ./bin/pmq-report -a cmd/pmq-report.go

FROM alpine:3.9

COPY --from=builder /usr/local/go/lib/time/zoneinfo.zip /usr/local/go/lib/time/zoneinfo.zip
COPY --from=builder /src/app/bin/postmanq /bin/postmanq
COPY --from=builder /src/app/bin/pmq-grep /bin/pmq-grep
COPY --from=builder /src/app/bin/pmq-publish /bin/pmq-publish
COPY --from=builder /src/app/bin/pmq-report /bin/pmq-report


ENTRYPOINT ["postmanq"]
CMD ["-f", "/etc/postmaq.yaml"]
38 changes: 25 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#PostmanQ
# PostmanQ

PostmanQ - это высокопроизводительный почтовый сервер(MTA).
На сервере под управлением Ubuntu 12.04 с 8-ми ядерным процессором и 32ГБ оперативной памяти
Expand All @@ -8,7 +8,7 @@ PostmanQ рассылает более 300 писем в секунду.

PostmanQ разбирает одну или несколько очередей одного или нескольких AMQP-серверов с письмами и отправляет письма по SMTP сторонним почтовым сервисам.

##Возможности
## Возможности

1. PostmanQ может работать с несколькими AMQP-серверами и очередями каждого из серверов.
2. PostmanQ умеет работать через TLS соединение.
Expand All @@ -19,7 +19,7 @@ PostmanQ разбирает одну или несколько очередей
7. PostmanQ попробует отослать письмо попозже, если возникла сетевая ошибка, письмо попало в [серый список](http://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%80%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA) или количество отправленных писем почтовому сервису уже максимально.
8. PostmanQ положит в отдельную очередь письма, которые не удалось отправить из-за 5ХХ ошибки

##Как это работает?
## Как это работает?

1. Нам потребуется AMQP-сервер, например [RabbitMQ](https://www.rabbitmq.com), и [go](http://golang.org/) для компиляции PostmanQ.
2. Выполняем предварительную подготовку и установку PostmanQ. Инструкции описаны ниже.
Expand All @@ -41,7 +41,7 @@ PostmanQ разбирает одну или несколько очередей
11. Если произошла сетевая ошибка, то письмо перекладывается в одну из очередей для повторной отправки.
12. Если произошла 5ХХ ошибка, то письмо перекладывается в очередь с проблемными письмами, повторная отправка не производится.

##Предварительная подготовка
## Предварительная подготовка

Чтобы наши письма отправлялись безопасно и доходили до адресатов, не попадая в спам, нам необходимо создать сертификат, публичный и закрытый ключ для каждого домена.

Expand Down Expand Up @@ -95,15 +95,15 @@ Selector-ом может быть любым словом на латинице.

Теперь наши письма не будут попадать в спам, и все готово для установки PostmanQ.

##Установка
## Установка

Сначала уcтанавливаем [go](http://golang.org/doc/install). Затем устанавливаем PostmanQ:

cd /some/path && mkdir postmanq && cd postmanq/
export GOPATH=/some/path/postmanq/
export GOBIN=/some/path/postmanq/bin/
go get -d github.com/actionpay/postmanq/cmd
cd src/github.com/actionpay/postmanq
go get -d github.com/Halfi/postmanq/cmd
cd src/github.com/Halfi/postmanq
git checkout v.3.1
go install cmd/postmanq.go
go install cmd/pmq-grep.go
Expand All @@ -116,27 +116,39 @@ Selector-ом может быть любым словом на латинице.

Затем берем из репозитория config.yaml и пишем свой файл с настройками. Все настройки подробно описаны в самом config.yaml.

##Использование
## Использование

sudo rabbitmq-server -detached
postmanq -f /path/to/config.yaml

##Утилиты
## Утилиты

Для PostmanQ создано несколько утилит, призванных облегчить работу с логами и очередями рассылок - pmq-grep, pmq-publish, pmq-report.
Вызов каждой из утилит без аргументов покажет ее использование.

###pmq-grep
### pmq-grep

Если PostmanQ пишет логи в файл, то с помощью pmq-grep можно вытащить из лога все записи по определенному email получателя.

###pmq-publish
### pmq-publish

Если вы что то не прописали в DNS, или операционная система не может открыть столько соединений, сколько необходимо для PostmanQ, то велика вероятность,
что письма не будут отправляться, и PostmanQ будет складывать письма в очередь для ошибок или в одну из очередей для повторной отправки.
После устранения проблемы, возможно, понадобится срочно разослать неотправленные письма. Как раз для этого и существует pmq-publish.
С помощью pmq-publish можно переложить письма, например, из очереди для ошибок в очередь для отправки, отфильтровав письма по коду ошибки, полученной от почтового сервиса.

###pmq-report
### pmq-report

С помощью pmq-report можно посмотреть - по какой причине письмо попало в очередь для ошибок.
С помощью pmq-report можно посмотреть - по какой причине письмо попало в очередь для ошибок.

## Docker Качаем конфиг:
```bash
curl -o /path/to/config.yaml https://raw.githubusercontent.com/Halfi/postmanq/v.3.2-rc/config.yaml
```
Настраиваем доступы к AMQP-серверу.

И запускаем, прокинув конфиг:

```bash
docker run -v `/path/to/config.yaml`:`/etc/postmaq.yaml` -d --restart unless-stopped --name postmanq halfi/postmanq:latest
```
2 changes: 1 addition & 1 deletion analyser/detail.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package analyser

import (
"fmt"
"github.com/actionpay/postmanq/common"
"github.com/Halfi/postmanq/common"
"regexp"
"strings"
)
Expand Down
2 changes: 1 addition & 1 deletion analyser/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"bufio"
"flag"
"fmt"
"github.com/actionpay/postmanq/common"
"github.com/Halfi/postmanq/common"
"os"
"strconv"
"strings"
Expand Down
4 changes: 2 additions & 2 deletions application/abstract.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package application

import (
"github.com/actionpay/postmanq/common"
"github.com/actionpay/postmanq/logger"
"github.com/Halfi/postmanq/common"
"github.com/Halfi/postmanq/logger"
"io/ioutil"
"time"
)
Expand Down
4 changes: 2 additions & 2 deletions application/grep.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package application

import (
"github.com/actionpay/postmanq/common"
"github.com/actionpay/postmanq/grep"
"github.com/Halfi/postmanq/common"
"github.com/Halfi/postmanq/grep"
)

// приложение, ищущее логи по адресату или получателю
Expand Down
16 changes: 8 additions & 8 deletions application/post.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package application

import (
"github.com/actionpay/postmanq/common"
"github.com/actionpay/postmanq/connector"
"github.com/actionpay/postmanq/consumer"
"github.com/actionpay/postmanq/guardian"
"github.com/actionpay/postmanq/limiter"
"github.com/actionpay/postmanq/logger"
"github.com/actionpay/postmanq/mailer"
"github.com/actionpay/postmanq/recipient"
"github.com/Halfi/postmanq/common"
"github.com/Halfi/postmanq/connector"
"github.com/Halfi/postmanq/consumer"
"github.com/Halfi/postmanq/guardian"
"github.com/Halfi/postmanq/limiter"
"github.com/Halfi/postmanq/logger"
"github.com/Halfi/postmanq/mailer"
"github.com/Halfi/postmanq/recipient"
yaml "gopkg.in/yaml.v2"
"runtime"
)
Expand Down
4 changes: 2 additions & 2 deletions application/publish.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package application

import (
"github.com/actionpay/postmanq/common"
"github.com/actionpay/postmanq/consumer"
"github.com/Halfi/postmanq/common"
"github.com/Halfi/postmanq/consumer"
)

// приложение, перекладывающее письма из очереди в очередь
Expand Down
6 changes: 3 additions & 3 deletions application/report.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package application

import (
"github.com/actionpay/postmanq/analyser"
"github.com/actionpay/postmanq/common"
"github.com/actionpay/postmanq/consumer"
"github.com/Halfi/postmanq/analyser"
"github.com/Halfi/postmanq/common"
"github.com/Halfi/postmanq/consumer"
)

// приложение, анализирующее неотправленные сообщения
Expand Down
4 changes: 2 additions & 2 deletions cmd/pmq-grep.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package main
import (
"flag"
"fmt"
"github.com/actionpay/postmanq/application"
"github.com/actionpay/postmanq/common"
"github.com/Halfi/postmanq/application"
"github.com/Halfi/postmanq/common"
)

func main() {
Expand Down
4 changes: 2 additions & 2 deletions cmd/pmq-publish.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package main
import (
"flag"
"fmt"
"github.com/actionpay/postmanq/application"
"github.com/actionpay/postmanq/common"
"github.com/Halfi/postmanq/application"
"github.com/Halfi/postmanq/common"
)

func main() {
Expand Down
4 changes: 2 additions & 2 deletions cmd/pmq-report.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package main
import (
"flag"
"fmt"
"github.com/actionpay/postmanq/application"
"github.com/actionpay/postmanq/common"
"github.com/Halfi/postmanq/application"
"github.com/Halfi/postmanq/common"
)

func main() {
Expand Down
4 changes: 2 additions & 2 deletions cmd/postmanq.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package main
import (
"flag"
"fmt"
"github.com/actionpay/postmanq/application"
"github.com/actionpay/postmanq/common"
"github.com/Halfi/postmanq/application"
"github.com/Halfi/postmanq/common"
)

func main() {
Expand Down
4 changes: 2 additions & 2 deletions connector/connector.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package connector
import (
"errors"
"fmt"
"github.com/actionpay/postmanq/common"
"github.com/actionpay/postmanq/logger"
"github.com/Halfi/postmanq/common"
"github.com/Halfi/postmanq/logger"
"net"
"net/smtp"
"time"
Expand Down
4 changes: 2 additions & 2 deletions connector/preparer.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package connector
import (
"errors"
"fmt"
"github.com/actionpay/postmanq/common"
"github.com/actionpay/postmanq/logger"
"github.com/Halfi/postmanq/common"
"github.com/Halfi/postmanq/logger"
"time"
)

Expand Down
2 changes: 1 addition & 1 deletion connector/seeker.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package connector

import (
"github.com/actionpay/postmanq/logger"
"github.com/Halfi/postmanq/logger"
"net"
"strings"
"sync"
Expand Down
2 changes: 1 addition & 1 deletion connector/server.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package connector

import (
"github.com/actionpay/postmanq/common"
"github.com/Halfi/postmanq/common"
"net"
)

Expand Down
4 changes: 2 additions & 2 deletions connector/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import (
"crypto/tls"
"crypto/x509"
"encoding/pem"
"github.com/actionpay/postmanq/common"
"github.com/actionpay/postmanq/logger"
"github.com/Halfi/postmanq/common"
"github.com/Halfi/postmanq/logger"
yaml "gopkg.in/yaml.v2"
"io/ioutil"
"net"
Expand Down
Loading

0 comments on commit 34dd863

Please sign in to comment.