mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-04-06 00:32:12 +02:00
haraka delete
This commit is contained in:
16
.github/workflows/build.yml
vendored
16
.github/workflows/build.yml
vendored
@@ -209,22 +209,6 @@ jobs:
|
||||
- name: build docker image
|
||||
run: sudo docker build -f ./Dashboard/Dockerfile .
|
||||
|
||||
docker-build-haraka:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CI_PIPELINE_ID: ${{github.run_number}}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Preinstall
|
||||
run: npm run prerun
|
||||
|
||||
# build images
|
||||
- name: build docker image
|
||||
run: sudo docker build -f ./Haraka/Dockerfile .
|
||||
|
||||
|
||||
docker-build-probe:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
|
||||
65
.github/workflows/release.yml
vendored
65
.github/workflows/release.yml
vendored
@@ -1052,67 +1052,6 @@ jobs:
|
||||
GIT_SHA=${{ github.sha }}
|
||||
APP_VERSION=7.0.${{needs.generate-build-number.outputs.build_number}}
|
||||
|
||||
|
||||
haraka-docker-image-deploy:
|
||||
needs: [generate-build-number]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Docker Meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
images: |
|
||||
oneuptime/haraka
|
||||
ghcr.io/oneuptime/haraka
|
||||
tags: |
|
||||
type=raw,value=release,enable=true
|
||||
type=semver,value=7.0.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.ref }}
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: latest
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Generate Dockerfile from Dockerfile.tpl
|
||||
run: npm run prerun
|
||||
|
||||
# Build and deploy haraka.
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v2.2.0
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v2.2.0
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: ./Haraka/Dockerfile
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
build-args: |
|
||||
GIT_SHA=${{ github.sha }}
|
||||
APP_VERSION=7.0.${{needs.generate-build-number.outputs.build_number}}
|
||||
|
||||
admin-dashboard-docker-image-deploy:
|
||||
needs: [generate-build-number]
|
||||
runs-on: ubuntu-latest
|
||||
@@ -1838,7 +1777,7 @@ jobs:
|
||||
|
||||
test-e2e-release-saas:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [open-telemetry-ingest-docker-image-deploy, copilot-docker-image-deploy, fluent-ingest-docker-image-deploy, docs-docker-image-deploy, api-reference-docker-image-deploy, workflow-docker-image-deploy, llm-docker-image-deploy, accounts-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, dashboard-docker-image-deploy, haraka-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, worker-docker-image-deploy, otel-collector-docker-image-deploy, probe-docker-image-deploy, status-page-docker-image-deploy, test-docker-image-deploy, test-server-docker-image-deploy, publish-npm-packages, e2e-docker-image-deploy, helm-chart-deploy, generate-build-number, nginx-docker-image-deploy, incoming-request-ingest-docker-image-deploy]
|
||||
needs: [open-telemetry-ingest-docker-image-deploy, copilot-docker-image-deploy, fluent-ingest-docker-image-deploy, docs-docker-image-deploy, api-reference-docker-image-deploy, workflow-docker-image-deploy, llm-docker-image-deploy, accounts-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, dashboard-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, worker-docker-image-deploy, otel-collector-docker-image-deploy, probe-docker-image-deploy, status-page-docker-image-deploy, test-docker-image-deploy, test-server-docker-image-deploy, publish-npm-packages, e2e-docker-image-deploy, helm-chart-deploy, generate-build-number, nginx-docker-image-deploy, incoming-request-ingest-docker-image-deploy]
|
||||
env:
|
||||
CI_PIPELINE_ID: ${{github.run_number}}
|
||||
steps:
|
||||
@@ -1891,7 +1830,7 @@ jobs:
|
||||
test-e2e-release-self-hosted:
|
||||
runs-on: ubuntu-latest
|
||||
# After all the jobs runs
|
||||
needs: [open-telemetry-ingest-docker-image-deploy, publish-mcp-server, copilot-docker-image-deploy, incoming-request-ingest-docker-image-deploy, fluent-ingest-docker-image-deploy, docs-docker-image-deploy, api-reference-docker-image-deploy, workflow-docker-image-deploy, llm-docker-image-deploy, accounts-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, dashboard-docker-image-deploy, haraka-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, worker-docker-image-deploy, otel-collector-docker-image-deploy, probe-docker-image-deploy, status-page-docker-image-deploy, test-docker-image-deploy, test-server-docker-image-deploy, publish-npm-packages, e2e-docker-image-deploy, helm-chart-deploy, generate-build-number, nginx-docker-image-deploy]
|
||||
needs: [open-telemetry-ingest-docker-image-deploy, publish-mcp-server, copilot-docker-image-deploy, incoming-request-ingest-docker-image-deploy, fluent-ingest-docker-image-deploy, docs-docker-image-deploy, api-reference-docker-image-deploy, workflow-docker-image-deploy, llm-docker-image-deploy, accounts-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, dashboard-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, worker-docker-image-deploy, otel-collector-docker-image-deploy, probe-docker-image-deploy, status-page-docker-image-deploy, test-docker-image-deploy, test-server-docker-image-deploy, publish-npm-packages, e2e-docker-image-deploy, helm-chart-deploy, generate-build-number, nginx-docker-image-deploy]
|
||||
env:
|
||||
CI_PIPELINE_ID: ${{github.run_number}}
|
||||
steps:
|
||||
|
||||
63
.github/workflows/test-release.yaml
vendored
63
.github/workflows/test-release.yaml
vendored
@@ -1146,67 +1146,6 @@ jobs:
|
||||
GIT_SHA=${{ github.sha }}
|
||||
APP_VERSION=7.0.${{needs.generate-build-number.outputs.build_number}}
|
||||
|
||||
haraka-docker-image-deploy:
|
||||
needs: generate-build-number
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Docker Meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
images: |
|
||||
oneuptime/haraka
|
||||
ghcr.io/oneuptime/haraka
|
||||
tags: |
|
||||
type=raw,value=test,enable=true
|
||||
type=semver,value=7.0.${{needs.generate-build-number.outputs.build_number}}-test,pattern={{version}},enable=true
|
||||
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.ref }}
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: latest
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Generate Dockerfile from Dockerfile.tpl
|
||||
run: npm run prerun
|
||||
|
||||
# Build and deploy haraka.
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v2.2.0
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v2.2.0
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: ./Haraka/Dockerfile
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
build-args: |
|
||||
GIT_SHA=${{ github.sha }}
|
||||
APP_VERSION=7.0.${{needs.generate-build-number.outputs.build_number}}
|
||||
|
||||
dashboard-docker-image-deploy:
|
||||
needs: generate-build-number
|
||||
runs-on: ubuntu-latest
|
||||
@@ -1768,7 +1707,7 @@ jobs:
|
||||
|
||||
test-helm-chart:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [infrastructure-agent-deploy, publish-mcp-server, llm-docker-image-deploy, publish-terraform-provider, open-telemetry-ingest-docker-image-deploy, copilot-docker-image-deploy, docs-docker-image-deploy, worker-docker-image-deploy, workflow-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, api-reference-docker-image-deploy, test-server-docker-image-deploy, test-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, probe-docker-image-deploy, haraka-docker-image-deploy, dashboard-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, accounts-docker-image-deploy, otel-collector-docker-image-deploy, status-page-docker-image-deploy, nginx-docker-image-deploy, e2e-docker-image-deploy, fluent-ingest-docker-image-deploy, incoming-request-ingest-docker-image-deploy]
|
||||
needs: [infrastructure-agent-deploy, publish-mcp-server, llm-docker-image-deploy, publish-terraform-provider, open-telemetry-ingest-docker-image-deploy, copilot-docker-image-deploy, docs-docker-image-deploy, worker-docker-image-deploy, workflow-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, api-reference-docker-image-deploy, test-server-docker-image-deploy, test-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, probe-docker-image-deploy, dashboard-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, accounts-docker-image-deploy, otel-collector-docker-image-deploy, status-page-docker-image-deploy, nginx-docker-image-deploy, e2e-docker-image-deploy, fluent-ingest-docker-image-deploy, incoming-request-ingest-docker-image-deploy]
|
||||
env:
|
||||
CI_PIPELINE_ID: ${{github.run_number}}
|
||||
steps:
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -86,9 +86,6 @@ Backups/*.tar
|
||||
|
||||
.env
|
||||
|
||||
Haraka/dkim/keys/private_base64.txt
|
||||
Haraka/dkim/keys/public_base64.txt
|
||||
|
||||
.eslintcache
|
||||
|
||||
HelmChart/Values/*.values.yaml
|
||||
|
||||
@@ -21,7 +21,7 @@ import React, { FunctionComponent, ReactElement, useEffect } from "react";
|
||||
|
||||
const Settings: FunctionComponent = (): ReactElement => {
|
||||
const [emailServerType, setemailServerType] = React.useState<EmailServerType>(
|
||||
EmailServerType.Internal,
|
||||
EmailServerType.CustomSMTP,
|
||||
);
|
||||
|
||||
const [isLoading, setIsLoading] = React.useState<boolean>(true);
|
||||
@@ -43,7 +43,7 @@ const Settings: FunctionComponent = (): ReactElement => {
|
||||
|
||||
if (globalConfig) {
|
||||
setemailServerType(
|
||||
globalConfig.emailServerType || EmailServerType.Internal,
|
||||
globalConfig.emailServerType || EmailServerType.CustomSMTP,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -127,7 +127,7 @@ const Settings: FunctionComponent = (): ReactElement => {
|
||||
/>
|
||||
|
||||
<CardModelDetail
|
||||
name="Internal SMTP Settings"
|
||||
name="Email Server Settings"
|
||||
cardProps={{
|
||||
title: "Email Server Settings",
|
||||
description:
|
||||
@@ -172,7 +172,7 @@ const Settings: FunctionComponent = (): ReactElement => {
|
||||
cardProps={{
|
||||
title: "Custom Email and SMTP Settings",
|
||||
description:
|
||||
"If you have not enabled Internal SMTP server to send emails. Please configure your SMTP server here.",
|
||||
"Please configure your SMTP server here to send emails.",
|
||||
}}
|
||||
isEditable={true}
|
||||
editButtonText="Edit SMTP Config"
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
import Hostname from "Common/Types/API/Hostname";
|
||||
import TwilioConfig from "Common/Types/CallAndSMS/TwilioConfig";
|
||||
import Email from "Common/Types/Email";
|
||||
import EmailServer from "Common/Types/Email/EmailServer";
|
||||
import BadDataException from "Common/Types/Exception/BadDataException";
|
||||
import ObjectID from "Common/Types/ObjectID";
|
||||
import Port from "Common/Types/Port";
|
||||
import { AdminDashboardClientURL } from "Common/Server/EnvironmentConfig";
|
||||
import GlobalConfigService from "Common/Server/Services/GlobalConfigService";
|
||||
import GlobalConfig, {
|
||||
@@ -12,24 +10,6 @@ import GlobalConfig, {
|
||||
} from "Common/Models/DatabaseModels/GlobalConfig";
|
||||
import Phone from "Common/Types/Phone";
|
||||
|
||||
export const InternalSmtpPassword: string =
|
||||
process.env["INTERNAL_SMTP_PASSWORD"] || "";
|
||||
|
||||
export const InternalSmtpHost: Hostname = new Hostname(
|
||||
process.env["INTERNAL_SMTP_HOST"] || "haraka",
|
||||
);
|
||||
|
||||
export const InternalSmtpPort: Port = new Port(2525);
|
||||
|
||||
export const InternalSmtpSecure: boolean = false;
|
||||
|
||||
export const InternalSmtpEmail: Email = new Email(
|
||||
process.env["INTERNAL_SMTP_EMAIL"] || "noreply@oneuptime.com",
|
||||
);
|
||||
|
||||
export const InternalSmtpFromName: string =
|
||||
process.env["INTERNAL_SMTP_FROM_NAME"] || "OneUptime";
|
||||
|
||||
type GetGlobalSMTPConfig = () => Promise<EmailServer | null>;
|
||||
|
||||
export const getGlobalSMTPConfig: GetGlobalSMTPConfig =
|
||||
@@ -132,10 +112,10 @@ export const getEmailServerType: GetEmailServerTypeFunction =
|
||||
});
|
||||
|
||||
if (!globalConfig) {
|
||||
return EmailServerType.Internal;
|
||||
return EmailServerType.CustomSMTP;
|
||||
}
|
||||
|
||||
return globalConfig.emailServerType || EmailServerType.Internal;
|
||||
return globalConfig.emailServerType || EmailServerType.CustomSMTP;
|
||||
};
|
||||
|
||||
export interface SendGridConfig {
|
||||
|
||||
@@ -1,10 +1,4 @@
|
||||
import {
|
||||
InternalSmtpEmail,
|
||||
InternalSmtpFromName,
|
||||
InternalSmtpHost,
|
||||
InternalSmtpPassword,
|
||||
InternalSmtpPort,
|
||||
InternalSmtpSecure,
|
||||
SendGridConfig,
|
||||
getEmailServerType,
|
||||
getGlobalSMTPConfig,
|
||||
@@ -202,19 +196,6 @@ export default class MailService {
|
||||
};
|
||||
}
|
||||
|
||||
public static getInternalEmailServer(): EmailServer {
|
||||
return {
|
||||
id: undefined,
|
||||
username: InternalSmtpEmail.toString(),
|
||||
password: InternalSmtpPassword,
|
||||
host: InternalSmtpHost,
|
||||
port: InternalSmtpPort,
|
||||
fromEmail: InternalSmtpEmail,
|
||||
fromName: InternalSmtpFromName,
|
||||
secure: InternalSmtpSecure,
|
||||
};
|
||||
}
|
||||
|
||||
public static async getGlobalFromEmail(): Promise<Email> {
|
||||
const emailServer: EmailServer | null = await this.getGlobalSmtpSettings();
|
||||
|
||||
@@ -540,17 +521,6 @@ export default class MailService {
|
||||
options.emailServer = globalEmailServer;
|
||||
}
|
||||
|
||||
if (
|
||||
emailServerType === EmailServerType.Internal &&
|
||||
(!options || !options.emailServer)
|
||||
) {
|
||||
if (!options) {
|
||||
options = {};
|
||||
}
|
||||
|
||||
options.emailServer = this.getInternalEmailServer();
|
||||
}
|
||||
|
||||
if (options && options.emailServer && emailLog) {
|
||||
emailLog.fromEmail = options.emailServer.fromEmail;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ import Port from "../../Types/Port";
|
||||
import { Column, Entity } from "typeorm";
|
||||
|
||||
export enum EmailServerType {
|
||||
Internal = "Internal",
|
||||
Sendgrid = "Sendgrid",
|
||||
CustomSMTP = "Custom SMTP",
|
||||
}
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
private
|
||||
public
|
||||
|
||||
.git
|
||||
|
||||
node_modules
|
||||
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
node_modules
|
||||
|
||||
.idea
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
|
||||
env.js
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
yarn.lock
|
||||
Untitled-1
|
||||
*.local.sh
|
||||
*.local.yaml
|
||||
run
|
||||
stop
|
||||
|
||||
nohup.out*
|
||||
|
||||
encrypted-credentials.tar
|
||||
encrypted-credentials/
|
||||
|
||||
_README.md
|
||||
|
||||
# Important Add production values to gitignore.
|
||||
values-saas-production.yaml
|
||||
kubernetes/values-saas-production.yaml
|
||||
|
||||
/private
|
||||
|
||||
/tls_cert.pem
|
||||
/tls_key.pem
|
||||
/keys
|
||||
|
||||
temp_readme.md
|
||||
|
||||
tests/coverage
|
||||
|
||||
settings.json
|
||||
|
||||
GoSDK/tester/
|
||||
# tls
|
||||
tls_cert.pem
|
||||
tls_key.pem
|
||||
6
Haraka/.gitignore
vendored
6
Haraka/.gitignore
vendored
@@ -1,6 +0,0 @@
|
||||
private
|
||||
public
|
||||
|
||||
# tls
|
||||
tls_cert.pem
|
||||
tls_key.pem
|
||||
@@ -1,78 +0,0 @@
|
||||
FROM public.ecr.aws/docker/library/node:23.8-alpine3.21
|
||||
|
||||
RUN mkdir /tmp/npm && chmod 2777 /tmp/npm && chown 1000:1000 /tmp/npm && npm config set cache /tmp/npm --global
|
||||
|
||||
RUN npm config set fetch-retries 5
|
||||
RUN npm config set fetch-retry-mintimeout 100000
|
||||
RUN npm config set fetch-retry-maxtimeout 600000
|
||||
|
||||
ENV HARAKA_VERSION=3.0.5
|
||||
|
||||
ARG GIT_SHA
|
||||
ARG APP_VERSION
|
||||
|
||||
ENV GIT_SHA=${GIT_SHA}
|
||||
ENV APP_VERSION=${APP_VERSION}
|
||||
|
||||
|
||||
# IF APP_VERSION is not set, set it to 1.0.0
|
||||
RUN if [ -z "$APP_VERSION" ]; then export APP_VERSION=1.0.0; fi
|
||||
|
||||
RUN apk add bash
|
||||
|
||||
# install dependence
|
||||
RUN apk upgrade --update && \
|
||||
apk add --no-cache -t .fetch-deps \
|
||||
autoconf \
|
||||
g++ \
|
||||
bash \
|
||||
curl \
|
||||
gcc \
|
||||
make \
|
||||
python3 && \
|
||||
addgroup -g 88 -S smtp && \
|
||||
adduser -u 88 -D -S -G smtp -h /harakaapp smtp && \
|
||||
# Install haraka and toobusy package
|
||||
npm install -g --unsafe-perm Haraka@$HARAKA_VERSION toobusy-js && \
|
||||
# # Cleaning up
|
||||
apk del --purge -r .fetch-deps && \
|
||||
apk add --no-cache tzdata openssl execline ca-certificates && \
|
||||
rm -rf /var/cache/apk/* /tmp/* ~/.pearrc
|
||||
|
||||
RUN haraka -i /harakaapp
|
||||
|
||||
COPY ./Haraka/config/plugins /harakaapp/config/plugins
|
||||
COPY ./Haraka/config/smtp.ini /harakaapp/config/smtp.ini
|
||||
COPY ./Haraka/config/tls.ini /harakaapp/config/tls.ini
|
||||
COPY ./Haraka/config/auth_flat_file.ini /harakaapp/config/auth_flat_file.ini
|
||||
COPY ./Haraka/config/dkim_sign.ini /harakaapp/config/dkim_sign.ini
|
||||
COPY ./Haraka/config/host_list /harakaapp/config/host_list
|
||||
COPY ./Haraka/config/loglevel /harakaapp/config/loglevel
|
||||
|
||||
# create plugin directory
|
||||
RUN mkdir -p /harakaapp/plugins
|
||||
|
||||
COPY ./Haraka/plugins/email_parser.js /harakaapp/plugins/email_parser.js
|
||||
|
||||
COPY ./Haraka/init.sh /init.sh
|
||||
RUN chmod 755 /init.sh
|
||||
|
||||
# Copy package.json and package-lock.json
|
||||
COPY ./Haraka/package.json /harakaapp/package.json
|
||||
COPY ./Haraka/package-lock.json /harakaapp/package-lock.json
|
||||
|
||||
# Install dependencies
|
||||
RUN cd /harakaapp && npm install
|
||||
# Set permission to write logs and cache in case container run as non root
|
||||
RUN chown -R 1000:1000 "/tmp/npm" && chmod -R 2777 "/tmp/npm"
|
||||
|
||||
EXPOSE 2525
|
||||
EXPOSE 110
|
||||
EXPOSE 25
|
||||
EXPOSE 587
|
||||
EXPOSE 465
|
||||
EXPOSE 143
|
||||
EXPOSE 993
|
||||
EXPOSE 995
|
||||
|
||||
CMD ["/init.sh"]
|
||||
@@ -1,82 +0,0 @@
|
||||
# Build haraka container.
|
||||
|
||||
```
|
||||
sudo docker build . -t haraka:latest
|
||||
```
|
||||
|
||||
|
||||
# To update a stack
|
||||
|
||||
```
|
||||
cd haraka
|
||||
sudo docker stack deploy haraka -c docker-compose.yml
|
||||
```
|
||||
|
||||
# To restart a service
|
||||
|
||||
```
|
||||
sudo docker service update haraka_haraka --force
|
||||
```
|
||||
|
||||
|
||||
# Send Test Outbound Email
|
||||
|
||||
```
|
||||
swaks --to hello@nawazdhandala.com --from hello@genosyn.com --server 192.168.1.100 --port 2525 --auth-user homelab --auth-password password
|
||||
```
|
||||
|
||||
# Set a domain to send email
|
||||
|
||||
|
||||
Generate a DKIM key:
|
||||
|
||||
```
|
||||
cd dkim
|
||||
|
||||
bash generate.sh
|
||||
|
||||
cd ..
|
||||
```
|
||||
|
||||
`public` and `private` files should have been generated inside of `dkim` folder. Please also add DNS and env vars to docker compose files. Values of that should be shown on the console.
|
||||
|
||||
|
||||
|
||||
Add an A record:
|
||||
|
||||
```
|
||||
mailer.company.com <IP address or haraka server>
|
||||
```
|
||||
|
||||
Set SPF record:
|
||||
|
||||
```
|
||||
# Any MX or A servers can send emails.
|
||||
v=spf1 mx a -all
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
v=spf1 mx a ip4:37.26.74.9 include:_spf.google.com include:mail.genosyn.com ~all
|
||||
```
|
||||
|
||||
Set DMARC record:
|
||||
|
||||
```
|
||||
Type: TXT
|
||||
Key: _dmarc
|
||||
Value: "v=DMARC1; p=reject; adkim=s; aspf=r; rua=mailto:dmarc-feedback@<DOMAIN>; ruf=mailto:dmarc-feedback@<DOMAIN>; pct=100"
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
|
||||
```
|
||||
_dmarc TXT "v=DMARC1; p=reject; adkim=s; aspf=r; rua=mailto:dmarc-feedback@genosyn.com; ruf=mailto:dmarc-feedback@genosyn.com; pct=100"
|
||||
```
|
||||
|
||||
|
||||
# Test, Test, Test.
|
||||
|
||||
Use https://www.mail-tester.com/ to test emails.
|
||||
@@ -1,4 +0,0 @@
|
||||
[core]
|
||||
methods=PLAIN
|
||||
|
||||
[users]
|
||||
@@ -1,3 +0,0 @@
|
||||
disabled = false
|
||||
selector = haraka
|
||||
headers_to_sign = From, Sender, Reply-To, Subject, Date, Message-ID, To, Cc, MIME-Version
|
||||
@@ -1 +0,0 @@
|
||||
DEBUG
|
||||
@@ -1,5 +0,0 @@
|
||||
tls
|
||||
auth/flat_file
|
||||
dkim_sign
|
||||
|
||||
# email_parser
|
||||
@@ -1,64 +0,0 @@
|
||||
; address to listen on (default: all IPv6 and IPv4 addresses, port 25)
|
||||
; use "[::0]:25" to listen on IPv6 and IPv4 (not all OSes)
|
||||
listen=[::0]:2525
|
||||
|
||||
; Note you can listen on multiple IPs/ports using commas:
|
||||
;listen=127.0.0.1:2529,127.0.0.2:2529,127.0.0.3:2530
|
||||
|
||||
; public IP address (default: none)
|
||||
; If your machine is behind a NAT, some plugins (SPF, GeoIP) gain features
|
||||
; if they know the servers public IP. If 'stun' is installed, Haraka will
|
||||
; try to figure it out. If that doesn't work, set it here.
|
||||
;public_ip=N.N.N.N
|
||||
|
||||
; Time in seconds to let sockets be idle with no activity
|
||||
;inactivity_timeout=300
|
||||
|
||||
; Drop privileges to this user/group
|
||||
;user=smtp
|
||||
;group=smtp
|
||||
|
||||
; Don't stop Haraka if plugins fail to compile
|
||||
;ignore_bad_plugins=0
|
||||
|
||||
; Run using cluster to fork multiple backend processes
|
||||
;nodes=cpus
|
||||
|
||||
; Daemonize
|
||||
;daemonize=true
|
||||
;daemon_log_file=/var/log/haraka.log
|
||||
;daemon_pid_file=/var/run/haraka.pid
|
||||
|
||||
; Spooling
|
||||
; Save memory by spooling large messages to disk
|
||||
;spool_dir=/var/spool/haraka
|
||||
; Specify -1 to never spool to disk
|
||||
; Specify 0 to always spool to disk
|
||||
; Otherwise specify a size in bytes, once reached the
|
||||
; message will be spooled to disk to save memory.
|
||||
;spool_after=
|
||||
|
||||
; Force Shutdown Timeout
|
||||
; - Haraka tries to close down gracefully, but if everything is shut down
|
||||
; after this time it will hard close. 30s is usually long enough to
|
||||
; wait for outbound connections to finish.
|
||||
;force_shutdown_timeout=30
|
||||
|
||||
; SMTP service extensions: https://tools.ietf.org/html/rfc1869
|
||||
; strict_rfc1869 = false
|
||||
|
||||
; Advertise support for SMTPUTF8 (RFC-6531)
|
||||
;smtputf8=true
|
||||
|
||||
[headers]
|
||||
;add_received=true
|
||||
;clean_auth_results=true
|
||||
|
||||
; replace header_hide_version
|
||||
;show_version=true
|
||||
|
||||
; replace max_header_lines
|
||||
max_lines=1000
|
||||
|
||||
; replace max_received_count
|
||||
max_received=100
|
||||
@@ -1 +0,0 @@
|
||||
no_starttls_ports[]=2525
|
||||
@@ -1,12 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
|
||||
cd keys
|
||||
|
||||
openssl genrsa -out private 4096
|
||||
chmod 0400 private
|
||||
openssl rsa -in private -out public -pubout
|
||||
|
||||
cd ..
|
||||
|
||||
bash show-info.sh
|
||||
@@ -1 +0,0 @@
|
||||
This is where all the keys are stored.
|
||||
@@ -1,30 +0,0 @@
|
||||
cd keys
|
||||
|
||||
cat private | base64 -w0 > private_base64.txt
|
||||
cat public | base64 -w0 > public_base64.txt
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo ""
|
||||
|
||||
|
||||
echo "Add this to docker compose file - DKIM private key for env var is:"
|
||||
cat private_base64.txt
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo ""
|
||||
|
||||
echo "Add this to docker compose file - DKIM public key for env var is:"
|
||||
cat public_base64.txt
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo ""
|
||||
|
||||
echo "You need to add this to DNS"
|
||||
echo "Type: TXT"
|
||||
echo "Key: haraka._domainkey"
|
||||
echo "v=DKIM1;p=$(grep -v '^-' public | tr -d '\n')"
|
||||
|
||||
cd ..
|
||||
@@ -1,13 +0,0 @@
|
||||
email_parser
|
||||
========
|
||||
|
||||
Parses email messages and extracts the following information:
|
||||
|
||||
* `from` - the email address of the sender
|
||||
* `to` - the email address of the recipient
|
||||
* `subject` - the subject of the email
|
||||
* `body` - the body of the email
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
* `config/email_parser` - describe what effect this config file has
|
||||
@@ -1,29 +0,0 @@
|
||||
|
||||
|
||||
# Setup auth
|
||||
echo "domain = $DOMAIN" >> /harakaapp/config/dkim_sign.ini
|
||||
echo "$DOMAIN" > /harakaapp/config/host_list
|
||||
echo "$INCOMING_EMAIL_DOMAIN" >> /harakaapp/config/host_list
|
||||
echo "$DOMAIN" > /harakaapp/config/me
|
||||
echo "$SMTP_EMAIL=$SMTP_PASSWORD" >> /harakaapp/config/auth_flat_file.ini
|
||||
|
||||
openssl req -x509 -nodes -days 2190 -newkey rsa:2048 -keyout /harakaapp/config/tls_key.pem -out /harakaapp/config/tls_cert.pem -subj "/C=US/ST=Massachusetts/L=Boston/O=Hackerbay/CN=$DOMAIN"
|
||||
|
||||
# DKIM
|
||||
mkdir -p /harakaapp/config/dkim/$DOMAIN
|
||||
touch /harakaapp/config/dkim/$DOMAIN/selector
|
||||
echo "$DKIM_SELECTOR" > /harakaapp/config/dkim/$DOMAIN/selector
|
||||
|
||||
# Decode keys from base64
|
||||
echo "$DKIM_PUBLIC_KEY" | base64 -d > /harakaapp/config/dkim/$DOMAIN/public
|
||||
echo "$DKIM_PRIVATE_KEY" | base64 -d > /harakaapp/config/dkim/$DOMAIN/private
|
||||
|
||||
echo "IMPORTANT: Add this to your DNS"
|
||||
echo "You need to add this to DNS"
|
||||
echo "Type: TXT"
|
||||
echo "Key: $DKIM_SELECTOR._domainkey"
|
||||
echo "v=DKIM1;p=$(grep -v '^-' /harakaapp/config/dkim/$DOMAIN/public | tr -d '\n')"
|
||||
|
||||
|
||||
# Run haraka
|
||||
haraka -c /harakaapp
|
||||
316
Haraka/package-lock.json
generated
316
Haraka/package-lock.json
generated
@@ -1,316 +0,0 @@
|
||||
{
|
||||
"name": "haraka",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "haraka",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"mailparser": "^3.7.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@selderee/plugin-htmlparser2": {
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz",
|
||||
"integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==",
|
||||
"dependencies": {
|
||||
"domhandler": "^5.0.3",
|
||||
"selderee": "^0.11.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://ko-fi.com/killymxi"
|
||||
}
|
||||
},
|
||||
"node_modules/deepmerge": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
|
||||
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/dom-serializer": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
|
||||
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
|
||||
"dependencies": {
|
||||
"domelementtype": "^2.3.0",
|
||||
"domhandler": "^5.0.2",
|
||||
"entities": "^4.2.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/domelementtype": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
|
||||
"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/fb55"
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/domhandler": {
|
||||
"version": "5.0.3",
|
||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
|
||||
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
|
||||
"dependencies": {
|
||||
"domelementtype": "^2.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/fb55/domhandler?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/domutils": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
|
||||
"integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
|
||||
"dependencies": {
|
||||
"dom-serializer": "^2.0.0",
|
||||
"domelementtype": "^2.3.0",
|
||||
"domhandler": "^5.0.3"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/fb55/domutils?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/encoding-japanese": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.1.0.tgz",
|
||||
"integrity": "sha512-58XySVxUgVlBikBTbQ8WdDxBDHIdXucB16LO5PBHR8t75D54wQrNo4cg+58+R1CtJfKnsVsvt9XlteRaR8xw1w==",
|
||||
"engines": {
|
||||
"node": ">=8.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/entities": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
|
||||
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
|
||||
"engines": {
|
||||
"node": ">=0.12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/fb55/entities?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/he": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
|
||||
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
|
||||
"bin": {
|
||||
"he": "bin/he"
|
||||
}
|
||||
},
|
||||
"node_modules/html-to-text": {
|
||||
"version": "9.0.5",
|
||||
"resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz",
|
||||
"integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==",
|
||||
"dependencies": {
|
||||
"@selderee/plugin-htmlparser2": "^0.11.0",
|
||||
"deepmerge": "^4.3.1",
|
||||
"dom-serializer": "^2.0.0",
|
||||
"htmlparser2": "^8.0.2",
|
||||
"selderee": "^0.11.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/htmlparser2": {
|
||||
"version": "8.0.2",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
|
||||
"integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
|
||||
"funding": [
|
||||
"https://github.com/fb55/htmlparser2?sponsor=1",
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/fb55"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"domelementtype": "^2.3.0",
|
||||
"domhandler": "^5.0.3",
|
||||
"domutils": "^3.0.1",
|
||||
"entities": "^4.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/iconv-lite": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||
"dependencies": {
|
||||
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/leac": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz",
|
||||
"integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==",
|
||||
"funding": {
|
||||
"url": "https://ko-fi.com/killymxi"
|
||||
}
|
||||
},
|
||||
"node_modules/libbase64": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/libbase64/-/libbase64-1.3.0.tgz",
|
||||
"integrity": "sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg=="
|
||||
},
|
||||
"node_modules/libmime": {
|
||||
"version": "5.3.5",
|
||||
"resolved": "https://registry.npmjs.org/libmime/-/libmime-5.3.5.tgz",
|
||||
"integrity": "sha512-nSlR1yRZ43L3cZCiWEw7ali3jY29Hz9CQQ96Oy+sSspYnIP5N54ucOPHqooBsXzwrX1pwn13VUE05q4WmzfaLg==",
|
||||
"dependencies": {
|
||||
"encoding-japanese": "2.1.0",
|
||||
"iconv-lite": "0.6.3",
|
||||
"libbase64": "1.3.0",
|
||||
"libqp": "2.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/libqp": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/libqp/-/libqp-2.1.0.tgz",
|
||||
"integrity": "sha512-O6O6/fsG5jiUVbvdgT7YX3xY3uIadR6wEZ7+vy9u7PKHAlSEB6blvC1o5pHBjgsi95Uo0aiBBdkyFecj6jtb7A=="
|
||||
},
|
||||
"node_modules/linkify-it": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
|
||||
"integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
|
||||
"dependencies": {
|
||||
"uc.micro": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mailparser": {
|
||||
"version": "3.7.1",
|
||||
"resolved": "https://registry.npmjs.org/mailparser/-/mailparser-3.7.1.tgz",
|
||||
"integrity": "sha512-RCnBhy5q8XtB3mXzxcAfT1huNqN93HTYYyL6XawlIKycfxM/rXPg9tXoZ7D46+SgCS1zxKzw+BayDQSvncSTTw==",
|
||||
"dependencies": {
|
||||
"encoding-japanese": "2.1.0",
|
||||
"he": "1.2.0",
|
||||
"html-to-text": "9.0.5",
|
||||
"iconv-lite": "0.6.3",
|
||||
"libmime": "5.3.5",
|
||||
"linkify-it": "5.0.0",
|
||||
"mailsplit": "5.4.0",
|
||||
"nodemailer": "6.9.13",
|
||||
"punycode.js": "2.3.1",
|
||||
"tlds": "1.252.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mailsplit": {
|
||||
"version": "5.4.0",
|
||||
"resolved": "https://registry.npmjs.org/mailsplit/-/mailsplit-5.4.0.tgz",
|
||||
"integrity": "sha512-wnYxX5D5qymGIPYLwnp6h8n1+6P6vz/MJn5AzGjZ8pwICWssL+CCQjWBIToOVHASmATot4ktvlLo6CyLfOXWYA==",
|
||||
"dependencies": {
|
||||
"libbase64": "1.2.1",
|
||||
"libmime": "5.2.0",
|
||||
"libqp": "2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/mailsplit/node_modules/encoding-japanese": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.0.0.tgz",
|
||||
"integrity": "sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ==",
|
||||
"engines": {
|
||||
"node": ">=8.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mailsplit/node_modules/libbase64": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/libbase64/-/libbase64-1.2.1.tgz",
|
||||
"integrity": "sha512-l+nePcPbIG1fNlqMzrh68MLkX/gTxk/+vdvAb388Ssi7UuUN31MI44w4Yf33mM3Cm4xDfw48mdf3rkdHszLNew=="
|
||||
},
|
||||
"node_modules/mailsplit/node_modules/libmime": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/libmime/-/libmime-5.2.0.tgz",
|
||||
"integrity": "sha512-X2U5Wx0YmK0rXFbk67ASMeqYIkZ6E5vY7pNWRKtnNzqjvdYYG8xtPDpCnuUEnPU9vlgNev+JoSrcaKSUaNvfsw==",
|
||||
"dependencies": {
|
||||
"encoding-japanese": "2.0.0",
|
||||
"iconv-lite": "0.6.3",
|
||||
"libbase64": "1.2.1",
|
||||
"libqp": "2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/mailsplit/node_modules/libqp": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/libqp/-/libqp-2.0.1.tgz",
|
||||
"integrity": "sha512-Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg=="
|
||||
},
|
||||
"node_modules/nodemailer": {
|
||||
"version": "6.9.13",
|
||||
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.13.tgz",
|
||||
"integrity": "sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA==",
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/parseley": {
|
||||
"version": "0.12.1",
|
||||
"resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz",
|
||||
"integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==",
|
||||
"dependencies": {
|
||||
"leac": "^0.6.0",
|
||||
"peberminta": "^0.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://ko-fi.com/killymxi"
|
||||
}
|
||||
},
|
||||
"node_modules/peberminta": {
|
||||
"version": "0.9.0",
|
||||
"resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz",
|
||||
"integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==",
|
||||
"funding": {
|
||||
"url": "https://ko-fi.com/killymxi"
|
||||
}
|
||||
},
|
||||
"node_modules/punycode.js": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
|
||||
"integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"node_modules/selderee": {
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz",
|
||||
"integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==",
|
||||
"dependencies": {
|
||||
"parseley": "^0.12.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://ko-fi.com/killymxi"
|
||||
}
|
||||
},
|
||||
"node_modules/tlds": {
|
||||
"version": "1.252.0",
|
||||
"resolved": "https://registry.npmjs.org/tlds/-/tlds-1.252.0.tgz",
|
||||
"integrity": "sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ==",
|
||||
"bin": {
|
||||
"tlds": "bin.js"
|
||||
}
|
||||
},
|
||||
"node_modules/uc.micro": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
|
||||
"integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"name": "haraka",
|
||||
"version": "1.0.0",
|
||||
"description": "``` sudo docker build . -t haraka:latest ```",
|
||||
"main": "index.js",
|
||||
"directories": {
|
||||
"doc": "docs"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"mailparser": "^3.7.1"
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
// const MailParser = require('mailparser').MailParser;
|
||||
|
||||
// exports.hook_data_post = function (next, connection) {
|
||||
// // Get the email data
|
||||
// var email_data = connection.transaction.data_lines.join('\n');
|
||||
|
||||
// // Parse the email data
|
||||
// var mailparser = new MailParser();
|
||||
|
||||
// mailparser.on('end', function(mail_object){
|
||||
// // Log the email data
|
||||
// connection.loginfo('Subject: ' + mail_object.subject);
|
||||
// connection.loginfo('From: ' + JSON.stringify(mail_object.from));
|
||||
// connection.loginfo('To: ' + JSON.stringify(mail_object.to));
|
||||
// connection.loginfo('Text: ' + mail_object.text);
|
||||
// connection.loginfo('HTML: ' + mail_object.html);
|
||||
// });
|
||||
|
||||
// mailparser.write(email_data);
|
||||
// mailparser.end();
|
||||
|
||||
// next();
|
||||
// };
|
||||
|
||||
exports.hook_rcpt = function (next, connection, params) {
|
||||
const rcpt = params[0];
|
||||
this.loginfo("Got recipient: " + rcpt);
|
||||
next();
|
||||
};
|
||||
@@ -215,17 +215,9 @@ then
|
||||
# install services.
|
||||
if [[ "$2" == "enterprise" ]]
|
||||
then
|
||||
sudo helm install -f ./kubernetes/values-enterprise-ci.yaml fi ./HelmChart/public/oneuptime \
|
||||
--set haraka.domain=$DOMAIN \
|
||||
--set haraka.dkimPrivateKey=$DKIM_PRIVATE_KEY \
|
||||
--set haraka.tlsCert=$TLS_CERT \
|
||||
--set haraka.tlsKey=$TLS_KEY
|
||||
sudo helm install -f ./kubernetes/values-enterprise-ci.yaml fi ./HelmChart/public/oneuptime
|
||||
else
|
||||
sudo helm install -f ./kubernetes/values-saas-ci.yaml fi ./HelmChart/public/oneuptime \
|
||||
--set haraka.domain=$DOMAIN \
|
||||
--set haraka.dkimPrivateKey=$DKIM_PRIVATE_KEY \
|
||||
--set haraka.tlsCert=$TLS_CERT \
|
||||
--set haraka.tlsKey=$TLS_KEY
|
||||
sudo helm install -f ./kubernetes/values-saas-ci.yaml fi ./HelmChart/public/oneuptime
|
||||
fi
|
||||
else
|
||||
sudo k delete job oneuptime-InitScript || echo "InitScript already deleted"
|
||||
@@ -238,11 +230,7 @@ else
|
||||
sudo helm install fi oneuptime/OneUptime \
|
||||
--set nginx-ingress-controller.service.type=NodePort \
|
||||
--set nginx-ingress-controller.hostNetwork=true \
|
||||
--set image.tag=$AVAILABLE_VERSION \
|
||||
--set haraka.domain=$DOMAIN \
|
||||
--set haraka.dkimPrivateKey=$DKIM_PRIVATE_KEY \
|
||||
--set haraka.tlsCert=$TLS_CERT \
|
||||
--set haraka.tlsKey=$TLS_KEY
|
||||
--set image.tag=$AVAILABLE_VERSION
|
||||
else
|
||||
updateinstallation
|
||||
fi
|
||||
|
||||
@@ -106,11 +106,6 @@ The following table lists the configurable parameters of the OneUptime chart and
|
||||
| `probes.<key>.additionalContainers` | Additional containers to add to the probe pod | `nil` | |
|
||||
| `probes.<key>.resources` | Pod resources (limits, requests) | `nil` | |
|
||||
| `statusPage.cnameRecord` | CNAME record for the status page | `nil` | |
|
||||
| `internalSmtp.sendingDomain` | Domain to send emails from | `nil` | |
|
||||
| `internalSmtp.dkimPrivateKey` | DKIM Private Key that is set for sending domain | `nil` | |
|
||||
| `internalSmtp.dkimPublicKey` | DKIM Public Key that is set for sending domain | `nil` | |
|
||||
| `internalSmtp.email` | Email address to send emails from | `nil` | |
|
||||
| `internalSmtp.name` | Name to send emails from | `nil` | |
|
||||
| `logLevel` | Can be one of the following - INFO, WARN, ERROR, DEBUG | `INFO` | |
|
||||
| `incidents.disableAutomaticCreation` | Disable incident creation (use this when your team is overloaded with incidents or in emergencies) | `false` | |
|
||||
| `alerts.disableAutomaticCreation` | Disable alert creation (use this when your team is overloaded with alerts or in emergencies) | `false` | |
|
||||
|
||||
@@ -91,14 +91,6 @@ spec:
|
||||
value: {{ $.Values.billing.smsDefaultValueInCents | quote }}
|
||||
- name: CALL_DEFAULT_COST_IN_CENTS_PER_MINUTE
|
||||
value: {{ $.Values.billing.callDefaultValueInCentsPerMinute | quote }}
|
||||
- name: INTERNAL_SMTP_HOST
|
||||
value: {{ printf "%s-haraka.%s.svc.%s" $.Release.Name $.Release.Namespace $.Values.global.clusterDomain | quote }}
|
||||
- name: INTERNAL_SMTP_FROM_NAME
|
||||
value: {{ $.Values.internalSmtp.name | quote }}
|
||||
- name: INTERNAL_SMTP_EMAIL
|
||||
value: {{ $.Values.internalSmtp.email | quote }}
|
||||
- name: INTERNAL_SMTP_PASSWORD
|
||||
value: "internal_smtp_password"
|
||||
- name: DISABLE_TELEMETRY
|
||||
value: {{ $.Values.app.disableTelemetryCollection | quote }}
|
||||
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
{{- if $.Values.internalSmtp.enabled -}}
|
||||
|
||||
# OneUptime haraka Deployment
|
||||
{{- $harakaQueue := dict "SizeLimit" "1Gi" "MountPath" "/harakaapp/queue" -}}
|
||||
{{- $harakaVolumes := dict "haraka-queue" $harakaQueue -}}
|
||||
{{- $harakaPorts := dict "port" $.Values.port.haraka -}}
|
||||
{{- $harakaEnv := dict "SMTP_EMAIL" $.Values.internalSmtp.email "SMTP_PASSWORD" "internal_smtp_password" "DKIM_SELECTOR" "oneuptime" "DOMAIN" $.Values.internalSmtp.sendingDomain "INCOMING_EMAIL_DOMAIN" $.Values.internalSmtp.incomingEmailDomain "DKIM_PRIVATE_KEY" $.Values.internalSmtp.dkimPrivateKey "DKIM_PUBLIC_KEY" $.Values.internalSmtp.dkimPublicKey -}}
|
||||
{{- $harakaDeploymentArgs :=dict "ServiceName" "haraka" "Ports" $harakaPorts "Release" $.Release "Values" $.Values "Env" $harakaEnv "Volumes" $harakaVolumes "Resources" $.Values.haraka.resources "DisableAutoscaler" $.Values.haraka.disableAutoscaler -}}
|
||||
{{- include "oneuptime.deployment" $harakaDeploymentArgs }}
|
||||
---
|
||||
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ printf "%s-%s" $.Release.Name "haraka" }}
|
||||
app.kubernetes.io/part-of: oneuptime
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
appname: oneuptime
|
||||
name: {{ printf "%s-%s" $.Release.Name "haraka" }}
|
||||
namespace: {{ $.Release.Namespace }}
|
||||
annotations:
|
||||
{{- if $.Values.metalLb.enabled }}
|
||||
metallb.universe.tf/address-pool: {{ printf "%s-%s" $.Release.Name "metallb-address-pool" }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if $.Values.internalSmtp.service.loadBalancerIP }}
|
||||
loadBalancerIP: {{ $.Values.internalSmtp.service.loadBalancerIP }}
|
||||
{{- end }}
|
||||
{{- if $.Values.internalSmtp.service.externalIPs }}
|
||||
externalIPs:
|
||||
{{- range $key, $val := $.Values.internalSmtp.service.externalIPs }}
|
||||
- {{ $val }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: pop3
|
||||
protocol: TCP
|
||||
port: 110
|
||||
targetPort: 110
|
||||
- name: imap
|
||||
protocol: TCP
|
||||
port: 143
|
||||
targetPort: 143
|
||||
- name: pop3s
|
||||
protocol: TCP
|
||||
port: 995
|
||||
targetPort: 995
|
||||
- name: imaps
|
||||
protocol: TCP
|
||||
port: 993
|
||||
targetPort: 993
|
||||
- name: smtp
|
||||
protocol: TCP
|
||||
port: 25
|
||||
targetPort: 25
|
||||
- name: submission
|
||||
protocol: TCP
|
||||
port: 587
|
||||
targetPort: 587
|
||||
- name: smtps
|
||||
protocol: TCP
|
||||
port: 465
|
||||
targetPort: 465
|
||||
- name: haraka
|
||||
protocol: TCP
|
||||
port: 2525
|
||||
targetPort: 2525
|
||||
selector:
|
||||
app: {{ printf "%s-%s" $.Release.Name "internalSmtp" }}
|
||||
{{- if ($.Values.internalSmtp.service.type) }}
|
||||
type: {{ $.Values.internalSmtp.service.type }}
|
||||
{{- else }}
|
||||
type: ClusterIP
|
||||
{{- end}}
|
||||
---
|
||||
|
||||
# OneUptime haraka autoscaler
|
||||
{{- $harakaAutoScalerArgs := dict "ServiceName" "haraka" "Release" $.Release "Values" $.Values "DisableAutoscaler" $.Values.haraka.disableAutoscaler -}}
|
||||
{{- include "oneuptime.autoscaler" $harakaAutoScalerArgs }}
|
||||
---
|
||||
|
||||
{{- end -}}
|
||||
@@ -12,7 +12,6 @@ stringData:
|
||||
## This is a workaround to keep the secrets unchanged
|
||||
{{- if .Release.IsUpgrade }}
|
||||
|
||||
internal-smtp: {{ index (lookup "v1" "Secret" $.Release.Namespace (printf "%s-secrets" $.Release.Name)).data "internal-smtp" | b64dec }}
|
||||
oneuptime-secret: {{ index (lookup "v1" "Secret" $.Release.Namespace (printf "%s-secrets" $.Release.Name)).data "oneuptime-secret" | b64dec }}
|
||||
encryption-secret: {{ index (lookup "v1" "Secret" $.Release.Namespace (printf "%s-secrets" $.Release.Name)).data "encryption-secret" | b64dec }}
|
||||
|
||||
@@ -26,7 +25,6 @@ stringData:
|
||||
|
||||
{{ else }} # install operation
|
||||
|
||||
internal-smtp: {{ randAlphaNum 32 | quote }}
|
||||
oneuptime-secret: {{ randAlphaNum 32 | quote }}
|
||||
encryption-secret: {{ randAlphaNum 32 | quote }}
|
||||
|
||||
|
||||
@@ -179,22 +179,6 @@ vapid:
|
||||
privateKey:
|
||||
subject: mailto:support@oneuptime.com
|
||||
|
||||
internalSmtp:
|
||||
enabled: true
|
||||
incomingEmailDomain:
|
||||
sendingDomain:
|
||||
dkimPrivateKey:
|
||||
dkimPublicKey:
|
||||
email:
|
||||
name:
|
||||
service:
|
||||
loadBalancerIP:
|
||||
# Change this to LoadBalancer if you want to receive emails from the internet. This could be useful for Incoming Email monitors.
|
||||
type: ClusterIP
|
||||
externalIPs:
|
||||
# - 51.158.55.153 # Please make sure this is the same as the one in metalLb.ipAdddressPool.addresses
|
||||
|
||||
|
||||
incidents:
|
||||
disableAutomaticCreation: false
|
||||
|
||||
@@ -257,7 +241,6 @@ port:
|
||||
nginxHttp: 80
|
||||
# If you are connecting Status Pages to custom domains, then this will be the port where the status page will be hosted on.
|
||||
statusPageHttpsPort: 443
|
||||
haraka: 2525
|
||||
otelCollectorGrpc: 4317
|
||||
otelCollectorHttp: 4318
|
||||
isolatedVM: 4572
|
||||
@@ -475,10 +458,6 @@ adminDashboard:
|
||||
disableAutoscaler: false
|
||||
resources:
|
||||
|
||||
haraka:
|
||||
disableAutoscaler: false
|
||||
resources:
|
||||
|
||||
worker:
|
||||
disableTelemetryCollection: false
|
||||
disableAutoscaler: false
|
||||
|
||||
@@ -2,6 +2,5 @@ User-agent: *
|
||||
Disallow: /api/*
|
||||
Disallow: /StatusPage/*
|
||||
Disallow: /admin/*
|
||||
Disallow: /haraka/*
|
||||
Disallow: /dashboard/*
|
||||
Sitemap: https://oneuptime.com/sitemap.xml
|
||||
@@ -15,7 +15,7 @@ export default class AddDefaultGlobalConfig extends DataMigrationBase {
|
||||
|
||||
const globalConfig: GlobalConfig = new GlobalConfig();
|
||||
globalConfig.id = ObjectID.getZeroObjectID();
|
||||
globalConfig.emailServerType = EmailServerType.Internal;
|
||||
globalConfig.emailServerType = EmailServerType.CustomSMTP;
|
||||
globalConfig.sendgridFromName = "OneUptime";
|
||||
globalConfig.smtpFromName = "OneUptime";
|
||||
|
||||
|
||||
@@ -13,11 +13,7 @@ export default class UpdateGlobalConfigFromEnv extends DataMigrationBase {
|
||||
public override async migrate(): Promise<void> {
|
||||
// get all the users with email isVerified true.
|
||||
|
||||
let emailServerType: EmailServerType = EmailServerType.Internal;
|
||||
|
||||
if (process.env["USE_INTERNAL_SMTP"] !== "true") {
|
||||
emailServerType = EmailServerType.CustomSMTP;
|
||||
}
|
||||
let emailServerType: EmailServerType = EmailServerType.CustomSMTP;
|
||||
|
||||
if (process.env["SENDGRID_API_KEY"]) {
|
||||
emailServerType = EmailServerType.Sendgrid;
|
||||
|
||||
@@ -25,7 +25,6 @@ REDIS_PASSWORD=please-change-this-to-random-value
|
||||
ENCRYPTION_SECRET=please-change-this-to-random-value
|
||||
GLOBAL_PROBE_1_KEY=please-change-this-to-random-value
|
||||
GLOBAL_PROBE_2_KEY=please-change-this-to-random-value
|
||||
INTERNAL_SMTP_PASSWORD=please-change-this-to-random-value
|
||||
|
||||
|
||||
|
||||
@@ -135,13 +134,6 @@ WORKFLOW_PORT=3099
|
||||
API_REFERENCE_PORT=1446
|
||||
DOCS_PORT=1447
|
||||
|
||||
# If USE_INTERNAL_SMTP is true then you need to fill these values.
|
||||
INTERNAL_SMTP_FROM_NAME=OneUptime
|
||||
INTERNAL_SMTP_DKIM_PRIVATE_KEY_AS_BASE64=
|
||||
INTERNAL_SMTP_DKIM_PUBLIC_KEY_AS_BASE64=
|
||||
INTERNAL_SMTP_EMAIL=test@yourcompany.com
|
||||
INTERNAL_SMTP_SENDING_DOMAIN=yourcompany.com
|
||||
|
||||
# Plans
|
||||
# This is in the format of PlanName,PlanIdFromBillingProvider,MonthlySubscriptionPlanAmountInUSD,YearlySubscriptionPlanAmountInUSD,Order,TrialPeriodInDays
|
||||
# Enterprise plan will have -1 which means custom pricing.
|
||||
|
||||
@@ -135,24 +135,6 @@ x-common-server-variables: &common-server-variables
|
||||
services:
|
||||
|
||||
|
||||
haraka:
|
||||
networks:
|
||||
- oneuptime
|
||||
image: oneuptime/haraka:${APP_TAG}
|
||||
restart: always
|
||||
environment:
|
||||
SMTP_PASSWORD: ${INTERNAL_SMTP_PASSWORD}
|
||||
SMTP_EMAIL: ${INTERNAL_SMTP_EMAIL}
|
||||
DKIM_SELECTOR: oneuptime
|
||||
DOMAIN: ${INTERNAL_SMTP_SENDING_DOMAIN}
|
||||
DKIM_PRIVATE_KEY: ${INTERNAL_SMTP_DKIM_PRIVATE_KEY_AS_BASE64}
|
||||
DKIM_PUBLIC_KEY: ${INTERNAL_SMTP_DKIM_PUBLIC_KEY_AS_BASE64}
|
||||
logging:
|
||||
driver: "local"
|
||||
options:
|
||||
max-size: "1000m"
|
||||
|
||||
|
||||
redis:
|
||||
image: redis:7.0.12
|
||||
restart: always
|
||||
@@ -297,9 +279,6 @@ services:
|
||||
CALL_DEFAULT_COST_IN_CENTS_PER_MINUTE: ${CALL_DEFAULT_COST_IN_CENTS_PER_MINUTE}
|
||||
SMS_HIGH_RISK_COST_IN_CENTS: ${SMS_HIGH_RISK_COST_IN_CENTS}
|
||||
CALL_HIGH_RISK_COST_IN_CENTS_PER_MINUTE: ${CALL_HIGH_RISK_COST_IN_CENTS_PER_MINUTE}
|
||||
INTERNAL_SMTP_EMAIL: ${INTERNAL_SMTP_EMAIL}
|
||||
INTERNAL_SMTP_FROM_NAME: ${INTERNAL_SMTP_FROM_NAME}
|
||||
INTERNAL_SMTP_PASSWORD: ${INTERNAL_SMTP_PASSWORD}
|
||||
DISABLE_TELEMETRY: ${DISABLE_TELEMETRY_FOR_APP}
|
||||
logging:
|
||||
driver: "local"
|
||||
|
||||
@@ -3,15 +3,6 @@
|
||||
services:
|
||||
|
||||
|
||||
haraka:
|
||||
extends:
|
||||
file: ./docker-compose.base.yml
|
||||
service: haraka
|
||||
build:
|
||||
network: host
|
||||
context: .
|
||||
dockerfile: ./Haraka/Dockerfile
|
||||
|
||||
redis:
|
||||
ports:
|
||||
- '6310:6379'
|
||||
|
||||
@@ -3,11 +3,6 @@
|
||||
|
||||
services:
|
||||
|
||||
haraka:
|
||||
extends:
|
||||
file: ./docker-compose.base.yml
|
||||
service: haraka
|
||||
|
||||
redis:
|
||||
extends:
|
||||
file: ./docker-compose.base.yml
|
||||
|
||||
Reference in New Issue
Block a user