Moved nginx config deployment to pyinfra_nginx module

This commit is contained in:
missytake 2023-07-07 09:08:25 +02:00
parent d6b8e08bc3
commit 0f3271a1e9
2 changed files with 45 additions and 2 deletions

View file

@ -1 +1 @@
from .nginx import deploy_nginx
from .nginx import deploy_nginx, add_nginx_domain

View file

@ -5,8 +5,9 @@ from io import StringIO
from pyinfra import host
from pyinfra.api.deploy import deploy
from pyinfra.operations import files, server, apt
from pyinfra.operations import files, server, apt, systemd
from pyinfra.facts.deb import DebPackages
from pyinfra_acmetool import deploy_acmetool
def _install_nginx():
if not host.get_fact(DebPackages):
@ -18,6 +19,48 @@ def _install_nginx():
_sudo = True,
)
def add_nginx_domain(domain: str, config_path: str, enabled=True):
"""Let a domain be handled by nginx, create a Let's Encrypt certificate for it, and deploy the config.
:param domain: the domain of the website
:param config_path: the local path to the nginx config file
:param enabled: whether the site should be enabled at /etc/nginx/sites-enabled
"""
default_config_link = files.link(
path="/etc/nginx/sites-enabled/default", present=False
)
need_restart = default_config_link.changed
deploy_acmetool(nginx_hook=True, domains=[domain])
config = files.put(
src=config_path,
dest=f"/etc/nginx/sites-available/{domain}",
user="root",
group="root",
mode="644",
)
if enabled:
config_link = files.link(
path=f"/etc/nginx/sites-enabled/{domain}",
target=f"/etc/nginx/sites-available/{domain}",
user="root",
group="root",
present=enabled,
)
if config.changed or config_link.changed:
need_restart = True
systemd.service(
name="NGINX should be enabled and running",
service="nginx.service",
running=True,
enabled=True,
restarted=need_restart,
)
@deploy("Deploy nginx")
def deploy_nginx():
_install_nginx()