mirror of
https://github.com/chatmail/relay.git
synced 2026-05-20 04:48:06 +00:00
docker: replace config flags with env vars, drop docker param from deploy_chatmail
Remove change_kernel_settings/fs_inotify_max_user_instances_and_watchers from chatmail.ini — use CHATMAIL_NOSYSCTL and CHATMAIL_NOPORTCHECK env vars instead. deploy_chatmail() no longer takes a docker flag; deployers check the env directly.
This commit is contained in:
@@ -47,12 +47,6 @@ class Config:
|
|||||||
self.addr_v4 = os.environ.get("CHATMAIL_ADDR_V4", "")
|
self.addr_v4 = os.environ.get("CHATMAIL_ADDR_V4", "")
|
||||||
self.addr_v6 = os.environ.get("CHATMAIL_ADDR_V6", "")
|
self.addr_v6 = os.environ.get("CHATMAIL_ADDR_V6", "")
|
||||||
self.acme_email = params.get("acme_email", "")
|
self.acme_email = params.get("acme_email", "")
|
||||||
self.change_kernel_settings = (
|
|
||||||
params.get("change_kernel_settings", "true").lower() == "true"
|
|
||||||
)
|
|
||||||
self.fs_inotify_max_user_instances_and_watchers = int(
|
|
||||||
params["fs_inotify_max_user_instances_and_watchers"]
|
|
||||||
)
|
|
||||||
self.imap_rawlog = params.get("imap_rawlog", "false").lower() == "true"
|
self.imap_rawlog = params.get("imap_rawlog", "false").lower() == "true"
|
||||||
self.imap_compress = params.get("imap_compress", "false").lower() == "true"
|
self.imap_compress = params.get("imap_compress", "false").lower() == "true"
|
||||||
if "iroh_relay" not in params:
|
if "iroh_relay" not in params:
|
||||||
|
|||||||
@@ -69,16 +69,6 @@ disable_ipv6 = False
|
|||||||
# Your email adress, which will be used in acmetool to manage Let's Encrypt SSL certificates
|
# Your email adress, which will be used in acmetool to manage Let's Encrypt SSL certificates
|
||||||
acme_email =
|
acme_email =
|
||||||
|
|
||||||
#
|
|
||||||
# Kernel settings
|
|
||||||
#
|
|
||||||
|
|
||||||
# if you set "True", the kernel settings will be configured according to the values below
|
|
||||||
change_kernel_settings = True
|
|
||||||
|
|
||||||
# change fs.inotify.max_user_instances and fs.inotify.max_user_watches kernel settings
|
|
||||||
fs_inotify_max_user_instances_and_watchers = 65535
|
|
||||||
|
|
||||||
# Defaults to https://iroh.{{mail_domain}} and running `iroh-relay` on the chatmail
|
# Defaults to https://iroh.{{mail_domain}} and running `iroh-relay` on the chatmail
|
||||||
# service.
|
# service.
|
||||||
# If you set it to anything else, the service will be disabled
|
# If you set it to anything else, the service will be disabled
|
||||||
|
|||||||
@@ -110,7 +110,8 @@ def run_cmd(args, out):
|
|||||||
cmd = f"{pyinf} --ssh-user root {ssh_host} {deploy_path} -y"
|
cmd = f"{pyinf} --ssh-user root {ssh_host} {deploy_path} -y"
|
||||||
if ssh_host in ["localhost", "@docker"]:
|
if ssh_host in ["localhost", "@docker"]:
|
||||||
if ssh_host == "@docker":
|
if ssh_host == "@docker":
|
||||||
env["CHATMAIL_DOCKER"] = "True"
|
env["CHATMAIL_NOPORTCHECK"] = "True"
|
||||||
|
env["CHATMAIL_NOSYSCTL"] = "True"
|
||||||
cmd = f"{pyinf} @local {deploy_path} -y"
|
cmd = f"{pyinf} @local {deploy_path} -y"
|
||||||
|
|
||||||
if version.parse(pyinfra.__version__) < version.parse("3"):
|
if version.parse(pyinfra.__version__) < version.parse("3"):
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
Chat Mail pyinfra deploy.
|
Chat Mail pyinfra deploy.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
@@ -538,13 +539,12 @@ class GithashDeployer(Deployer):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def deploy_chatmail(config_path: Path, disable_mail: bool, website_only: bool, docker: bool) -> None:
|
def deploy_chatmail(config_path: Path, disable_mail: bool, website_only: bool) -> None:
|
||||||
"""Deploy a chat-mail instance.
|
"""Deploy a chat-mail instance.
|
||||||
|
|
||||||
:param config_path: path to chatmail.ini
|
:param config_path: path to chatmail.ini
|
||||||
:param disable_mail: whether to disable postfix & dovecot
|
:param disable_mail: whether to disable postfix & dovecot
|
||||||
:param website_only: if True, only deploy the website
|
:param website_only: if True, only deploy the website
|
||||||
:param docker: whether it is running in a docker container
|
|
||||||
"""
|
"""
|
||||||
config = read_config(config_path)
|
config = read_config(config_path)
|
||||||
check_config(config)
|
check_config(config)
|
||||||
@@ -570,7 +570,7 @@ def deploy_chatmail(config_path: Path, disable_mail: bool, website_only: bool, d
|
|||||||
Out().red(f"Deploy failed: mtail_address {config.mtail_address} is not available (VPN up?).\n")
|
Out().red(f"Deploy failed: mtail_address {config.mtail_address} is not available (VPN up?).\n")
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
if not docker:
|
if not os.environ.get("CHATMAIL_NOPORTCHECK"):
|
||||||
port_services = [
|
port_services = [
|
||||||
(["master", "smtpd"], 25),
|
(["master", "smtpd"], 25),
|
||||||
("unbound", 53),
|
("unbound", 53),
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
from chatmaild.config import Config
|
from chatmaild.config import Config
|
||||||
from pyinfra import host
|
from pyinfra import host
|
||||||
from pyinfra.facts.server import Arch, Sysctl
|
from pyinfra.facts.server import Arch, Sysctl
|
||||||
@@ -118,7 +120,7 @@ def _configure_dovecot(config: Config, debug: bool = False) -> (bool, bool):
|
|||||||
|
|
||||||
# as per https://doc.dovecot.org/2.3/configuration_manual/os/
|
# as per https://doc.dovecot.org/2.3/configuration_manual/os/
|
||||||
# it is recommended to set the following inotify limits
|
# it is recommended to set the following inotify limits
|
||||||
if config.change_kernel_settings:
|
if not os.environ.get("CHATMAIL_NOSYSCTL"):
|
||||||
for name in ("max_user_instances", "max_user_watches"):
|
for name in ("max_user_instances", "max_user_watches"):
|
||||||
key = f"fs.inotify.{name}"
|
key = f"fs.inotify.{name}"
|
||||||
if host.get_fact(Sysctl)[key] > 65535:
|
if host.get_fact(Sysctl)[key] > 65535:
|
||||||
|
|||||||
@@ -15,9 +15,8 @@ def main():
|
|||||||
)
|
)
|
||||||
disable_mail = bool(os.environ.get("CHATMAIL_DISABLE_MAIL"))
|
disable_mail = bool(os.environ.get("CHATMAIL_DISABLE_MAIL"))
|
||||||
website_only = bool(os.environ.get("CHATMAIL_WEBSITE_ONLY"))
|
website_only = bool(os.environ.get("CHATMAIL_WEBSITE_ONLY"))
|
||||||
docker = bool(os.environ.get("CHATMAIL_DOCKER"))
|
|
||||||
|
|
||||||
deploy_chatmail(config_path, disable_mail, website_only, docker)
|
deploy_chatmail(config_path, disable_mail, website_only)
|
||||||
|
|
||||||
|
|
||||||
if pyinfra.is_cli:
|
if pyinfra.is_cli:
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ RUN python3 -m venv /opt/cmdeploy && \
|
|||||||
|
|
||||||
RUN CMDEPLOY_STAGES=install \
|
RUN CMDEPLOY_STAGES=install \
|
||||||
CHATMAIL_INI=/tmp/chatmail.ini \
|
CHATMAIL_INI=/tmp/chatmail.ini \
|
||||||
CHATMAIL_DOCKER=True \
|
CHATMAIL_NOSYSCTL=True \
|
||||||
/opt/cmdeploy/bin/pyinfra @local \
|
/opt/cmdeploy/bin/pyinfra @local \
|
||||||
/opt/chatmail/cmdeploy/src/cmdeploy/run.py -y
|
/opt/chatmail/cmdeploy/src/cmdeploy/run.py -y
|
||||||
|
|
||||||
@@ -78,6 +78,7 @@ RUN rm -f /tmp/chatmail.ini
|
|||||||
# --- End build-time install ---
|
# --- End build-time install ---
|
||||||
|
|
||||||
ENV CHATMAIL_INI=/etc/chatmail/chatmail.ini
|
ENV CHATMAIL_INI=/etc/chatmail/chatmail.ini
|
||||||
|
ENV PATH="/opt/cmdeploy/bin:${PATH}"
|
||||||
|
|
||||||
ARG SETUP_CHATMAIL_SERVICE_PATH=/lib/systemd/system/setup_chatmail.service
|
ARG SETUP_CHATMAIL_SERVICE_PATH=/lib/systemd/system/setup_chatmail.service
|
||||||
COPY ./docker/files/setup_chatmail.service "$SETUP_CHATMAIL_SERVICE_PATH"
|
COPY ./docker/files/setup_chatmail.service "$SETUP_CHATMAIL_SERVICE_PATH"
|
||||||
|
|||||||
@@ -50,7 +50,9 @@ chown opendkim:opendkim /etc/dkimkeys/opendkim.txt
|
|||||||
|
|
||||||
# Create chatmail.ini (skips if file already exists, e.g. volume-mounted)
|
# Create chatmail.ini (skips if file already exists, e.g. volume-mounted)
|
||||||
mkdir -p "$(dirname "$CHATMAIL_INI")"
|
mkdir -p "$(dirname "$CHATMAIL_INI")"
|
||||||
$CMDEPLOY init --config "$CHATMAIL_INI" $MAIL_DOMAIN || true
|
if [ ! -f "$CHATMAIL_INI" ]; then
|
||||||
|
$CMDEPLOY init --config "$CHATMAIL_INI" $MAIL_DOMAIN
|
||||||
|
fi
|
||||||
|
|
||||||
export CMDEPLOY_STAGES="${CMDEPLOY_STAGES:-configure,activate}"
|
export CMDEPLOY_STAGES="${CMDEPLOY_STAGES:-configure,activate}"
|
||||||
$CMDEPLOY run --config "$CHATMAIL_INI" --ssh-host @docker
|
$CMDEPLOY run --config "$CHATMAIL_INI" --ssh-host @docker
|
||||||
|
|||||||
Reference in New Issue
Block a user