reload all NGINX servers after adding a vhost (#90)
continuous-integration/drone/push Build is passing Details

Currently, only the NGINX server on biloba is reloaded after adding a new vhost or renewing an SSL certificate. The NGINX server on chamomile should also be reloaded, since chamomile is a warm standby for biloba.

This PR adds a new config option in ceod.ini to specify the shell command to reload the web servers.

Reviewed-on: #90
Co-authored-by: Max Erenberg <merenber@csclub.uwaterloo.ca>
Co-committed-by: Max Erenberg <merenber@csclub.uwaterloo.ca>
This commit is contained in:
Max Erenberg 2023-01-22 17:20:55 -05:00 committed by Yiao Shen
parent 4394c4e277
commit f84965c8e1
4 changed files with 9 additions and 5 deletions

View File

@ -4,7 +4,7 @@ import os
import re import re
import shutil import shutil
import subprocess import subprocess
from typing import List, Dict, Tuple from typing import List, Dict, Tuple, Union
import jinja2 import jinja2
from zope import component from zope import component
@ -53,6 +53,7 @@ class VHostManager:
self.max_vhosts_per_account = cfg.get('cloud vhosts_max_vhosts_per_account') self.max_vhosts_per_account = cfg.get('cloud vhosts_max_vhosts_per_account')
self.vhost_ip_min = ipaddress.ip_address(cfg.get('cloud vhosts_ip_range_min')) self.vhost_ip_min = ipaddress.ip_address(cfg.get('cloud vhosts_ip_range_min'))
self.vhost_ip_max = ipaddress.ip_address(cfg.get('cloud vhosts_ip_range_max')) self.vhost_ip_max = ipaddress.ip_address(cfg.get('cloud vhosts_ip_range_max'))
self.reload_web_server_cmd = cfg.get('cloud vhosts_reload_web_server_cmd')
self.acme_challenge_dir = cfg.get('cloud vhosts_acme_challenge_dir') self.acme_challenge_dir = cfg.get('cloud vhosts_acme_challenge_dir')
self.acme_dir = '/root/.acme.sh' self.acme_dir = '/root/.acme.sh'
@ -82,12 +83,12 @@ class VHostManager:
"""Return a list of all vhost files for this user.""" """Return a list of all vhost files for this user."""
return glob.glob(os.path.join(self.vhost_dir, username + '_*')) return glob.glob(os.path.join(self.vhost_dir, username + '_*'))
def _run(self, args: List[str]): def _run(self, args: Union[List[str], str], **kwargs):
subprocess.run(args, check=True) subprocess.run(args, check=True, **kwargs)
def _reload_web_server(self): def _reload_web_server(self):
logger.debug('Reloading NGINX') logger.debug('Reloading NGINX')
self._run(['systemctl', 'reload', 'nginx']) self._run(self.reload_web_server_cmd, shell=True)
def is_valid_domain(self, username: str, domain: str) -> bool: def is_valid_domain(self, username: str, domain: str) -> bool:
if VALID_DOMAIN_RE.match(domain) is None: if VALID_DOMAIN_RE.match(domain) is None:
@ -150,7 +151,7 @@ class VHostManager:
self.acme_sh, '--install-cert', '-d', domain, self.acme_sh, '--install-cert', '-d', domain,
'--key-file', key_path, '--key-file', key_path,
'--fullchain-file', cert_path, '--fullchain-file', cert_path,
'--reloadcmd', 'systemctl reload nginx', '--reloadcmd', self.reload_web_server_cmd,
]) ])
def _delete_cert(self, domain: str, cert_path: str, key_path: str): def _delete_cert(self, domain: str, cert_path: str, key_path: str):

View File

@ -97,6 +97,7 @@ members_domain = csclub.cloud
k8s_members_domain = k8s.csclub.cloud k8s_members_domain = k8s.csclub.cloud
ip_range_min = 172.19.134.10 ip_range_min = 172.19.134.10
ip_range_max = 172.19.134.160 ip_range_max = 172.19.134.160
reload_web_server_cmd = /root/bin/reload-nginx.sh
[k8s] [k8s]
members_clusterrole = csc-members-default members_clusterrole = csc-members-default

View File

@ -91,6 +91,7 @@ members_domain = csclub.cloud
k8s_members_domain = k8s.csclub.cloud k8s_members_domain = k8s.csclub.cloud
ip_range_min = 172.19.134.10 ip_range_min = 172.19.134.10
ip_range_max = 172.19.134.160 ip_range_max = 172.19.134.160
reload_web_server_cmd = systemctl reload nginx
[k8s] [k8s]
members_clusterrole = csc-members-default members_clusterrole = csc-members-default

View File

@ -90,6 +90,7 @@ members_domain = csclub.cloud
k8s_members_domain = k8s.csclub.cloud k8s_members_domain = k8s.csclub.cloud
ip_range_min = 172.19.134.10 ip_range_min = 172.19.134.10
ip_range_max = 172.19.134.160 ip_range_max = 172.19.134.160
reload_web_server_cmd = systemctl reload nginx
[k8s] [k8s]
members_clusterrole = csc-members-default members_clusterrole = csc-members-default