Compare commits
8 commits
1249c9b4f1
...
187b0440c8
Author | SHA1 | Date | |
---|---|---|---|
187b0440c8 | |||
bdb9fa064d | |||
d3ba9db0c6 | |||
3dffc05c9d | |||
6616ae7417 | |||
dc40295dde | |||
1d8361cc5f | |||
35243fdba6 |
14 changed files with 49 additions and 16 deletions
|
@ -13,6 +13,9 @@
|
||||||
'deb',
|
'deb',
|
||||||
'deb-src',
|
'deb-src',
|
||||||
},
|
},
|
||||||
|
'options': { # optional
|
||||||
|
'aarch': 'amd64',
|
||||||
|
},
|
||||||
'urls': {
|
'urls': {
|
||||||
'https://deb.debian.org/debian',
|
'https://deb.debian.org/debian',
|
||||||
},
|
},
|
||||||
|
|
|
@ -62,6 +62,7 @@ files = {
|
||||||
'/usr/lib/nagios/plugins/check_apt_upgradable': {
|
'/usr/lib/nagios/plugins/check_apt_upgradable': {
|
||||||
'mode': '0755',
|
'mode': '0755',
|
||||||
},
|
},
|
||||||
|
# /etc/kernel/postinst.d/apt-auto-removal
|
||||||
}
|
}
|
||||||
|
|
||||||
actions = {
|
actions = {
|
||||||
|
|
|
@ -40,7 +40,7 @@ ENABLE_OPENID_SIGNUP = false
|
||||||
[service]
|
[service]
|
||||||
REGISTER_EMAIL_CONFIRM = true
|
REGISTER_EMAIL_CONFIRM = true
|
||||||
ENABLE_NOTIFY_MAIL = true
|
ENABLE_NOTIFY_MAIL = true
|
||||||
DISABLE_REGISTRATION = false
|
DISABLE_REGISTRATION = true
|
||||||
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
|
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
|
||||||
ENABLE_CAPTCHA = false
|
ENABLE_CAPTCHA = false
|
||||||
REQUIRE_SIGNIN_VIEW = false
|
REQUIRE_SIGNIN_VIEW = false
|
||||||
|
|
|
@ -69,6 +69,9 @@ defaults = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
'nginx': {
|
||||||
|
'has_websockets': True,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -144,6 +147,7 @@ def dns(metadata):
|
||||||
def nginx(metadata):
|
def nginx(metadata):
|
||||||
return {
|
return {
|
||||||
'nginx': {
|
'nginx': {
|
||||||
|
'has_websockets': True,
|
||||||
'vhosts': {
|
'vhosts': {
|
||||||
metadata.get('grafana/hostname'): {
|
metadata.get('grafana/hostname'): {
|
||||||
'content': 'grafana/vhost.conf',
|
'content': 'grafana/vhost.conf',
|
||||||
|
|
|
@ -31,5 +31,13 @@ http {
|
||||||
}
|
}
|
||||||
|
|
||||||
% endif
|
% endif
|
||||||
include /etc/nginx/sites/*;
|
|
||||||
|
% if has_websockets:
|
||||||
|
map $http_upgrade $connection_upgrade {
|
||||||
|
default upgrade;
|
||||||
|
'' close;
|
||||||
|
}
|
||||||
|
% endif
|
||||||
|
|
||||||
|
include /etc/nginx/sites-enabled/*;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ directories = {
|
||||||
'svc_systemd:nginx:restart',
|
'svc_systemd:nginx:restart',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'/etc/nginx/sites': {
|
'/etc/nginx/sites-available': {
|
||||||
'purge': True,
|
'purge': True,
|
||||||
'triggers': {
|
'triggers': {
|
||||||
'svc_systemd:nginx:restart',
|
'svc_systemd:nginx:restart',
|
||||||
|
@ -25,6 +25,13 @@ directories = {
|
||||||
'purge': True,
|
'purge': True,
|
||||||
'owner': 'www-data',
|
'owner': 'www-data',
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# temp
|
||||||
|
'/var/www/certbot': {
|
||||||
|
'owner': 'www-data',
|
||||||
|
'group': 'www-data',
|
||||||
|
'mode': '0755',
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
files = {
|
files = {
|
||||||
|
@ -33,6 +40,7 @@ files = {
|
||||||
'context': {
|
'context': {
|
||||||
'modules': node.metadata.get('nginx/modules'),
|
'modules': node.metadata.get('nginx/modules'),
|
||||||
'worker_processes': node.metadata.get('vm/cores'),
|
'worker_processes': node.metadata.get('vm/cores'),
|
||||||
|
'has_websockets': node.metadata.get('nginx/has_websockets'),
|
||||||
},
|
},
|
||||||
'triggers': {
|
'triggers': {
|
||||||
'svc_systemd:nginx:restart',
|
'svc_systemd:nginx:restart',
|
||||||
|
@ -75,6 +83,12 @@ files = {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
symlinks = {
|
||||||
|
'/etc/nginx/sites-enabled': {
|
||||||
|
'target': '/etc/nginx/sites-available',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
actions = {
|
actions = {
|
||||||
'nginx-generate-dhparam': {
|
'nginx-generate-dhparam': {
|
||||||
'command': 'openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096',
|
'command': 'openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096',
|
||||||
|
@ -93,7 +107,7 @@ svc_systemd = {
|
||||||
|
|
||||||
|
|
||||||
for name, config in node.metadata.get('nginx/vhosts').items():
|
for name, config in node.metadata.get('nginx/vhosts').items():
|
||||||
files[f'/etc/nginx/sites/{name}'] = {
|
files[f'/etc/nginx/sites-available/{name}'] = {
|
||||||
'content': Template(filename=join(repo.path, 'data', config['content'])).render(
|
'content': Template(filename=join(repo.path, 'data', config['content'])).render(
|
||||||
server_name=name,
|
server_name=name,
|
||||||
**config.get('context', {}),
|
**config.get('context', {}),
|
||||||
|
@ -109,6 +123,6 @@ for name, config in node.metadata.get('nginx/vhosts').items():
|
||||||
}
|
}
|
||||||
|
|
||||||
if name in node.metadata.get('letsencrypt/domains'):
|
if name in node.metadata.get('letsencrypt/domains'):
|
||||||
files[f'/etc/nginx/sites/{name}']['needs'].append(
|
files[f'/etc/nginx/sites-available/{name}']['needs'].append(
|
||||||
f'action:letsencrypt_ensure-some-certificate_{name}',
|
f'action:letsencrypt_ensure-some-certificate_{name}',
|
||||||
)
|
)
|
||||||
|
|
|
@ -18,6 +18,7 @@ defaults = {
|
||||||
'nginx': {
|
'nginx': {
|
||||||
'vhosts': {},
|
'vhosts': {},
|
||||||
'modules': set(),
|
'modules': set(),
|
||||||
|
'has_websockets': False,
|
||||||
},
|
},
|
||||||
'systemd': {
|
'systemd': {
|
||||||
'units': {
|
'units': {
|
||||||
|
|
|
@ -2,12 +2,14 @@ directories = {
|
||||||
'/etc/redis': {
|
'/etc/redis': {
|
||||||
'purge': True,
|
'purge': True,
|
||||||
'owner': 'redis',
|
'owner': 'redis',
|
||||||
|
'mode': '2770',
|
||||||
'needs': [
|
'needs': [
|
||||||
'pkg_apt:redis-server',
|
'pkg_apt:redis-server',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'/var/lib/redis': {
|
'/var/lib/redis': {
|
||||||
'owner': 'redis',
|
'owner': 'redis',
|
||||||
|
'mode': '0750',
|
||||||
'needs': [
|
'needs': [
|
||||||
'pkg_apt:redis-server',
|
'pkg_apt:redis-server',
|
||||||
],
|
],
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
map $http_upgrade $connection_upgrade {
|
|
||||||
default upgrade;
|
|
||||||
'' close;
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen 443 ssl http2;
|
listen 443 ssl http2;
|
||||||
listen [::]:443 ssl http2;
|
listen [::]:443 ssl http2;
|
||||||
|
|
|
@ -8,6 +8,10 @@ server {
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
% if websockets:
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection $connection_upgrade;
|
||||||
|
% endif
|
||||||
proxy_pass ${target};
|
proxy_pass ${target};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,4 +6,8 @@ for root, dirs, files in walk(join(repo_path, "groups")):
|
||||||
if filename.endswith(".py"):
|
if filename.endswith(".py"):
|
||||||
group = join(root, filename)
|
group = join(root, filename)
|
||||||
with open(group, 'r', encoding='utf-8') as f:
|
with open(group, 'r', encoding='utf-8') as f:
|
||||||
groups[splitext(basename(filename))[0]] = eval(f.read())
|
try:
|
||||||
|
groups[splitext(basename(filename))[0]] = eval(f.read())
|
||||||
|
except:
|
||||||
|
print(f"Error parsing {group}:")
|
||||||
|
raise
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
# https://stackoverflow.com/a/18266970
|
# https://stackoverflow.com/a/18266970
|
||||||
|
|
||||||
from Crypto.PublicKey import RSA
|
from Crypto.PublicKey import RSA
|
||||||
from Crypto.Hash import HMAC
|
|
||||||
from struct import pack
|
from struct import pack
|
||||||
from hashlib import sha3_512
|
from hashlib import sha3_512
|
||||||
from cryptography.hazmat.primitives.serialization import load_der_private_key
|
from cryptography.hazmat.primitives.serialization import load_der_private_key
|
||||||
from functools import cache
|
from functools import cache
|
||||||
from cache_to_disk import cache_to_disk
|
|
||||||
|
|
||||||
|
|
||||||
class PRNG(object):
|
class PRNG(object):
|
||||||
|
@ -22,7 +20,6 @@ class PRNG(object):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
@cache_to_disk(30)
|
|
||||||
def _generate_deterministic_rsa_private_key(secret_bytes):
|
def _generate_deterministic_rsa_private_key(secret_bytes):
|
||||||
return RSA.generate(2048, randfunc=PRNG(secret_bytes)).export_key('DER')
|
return RSA.generate(2048, randfunc=PRNG(secret_bytes)).export_key('DER')
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{
|
{
|
||||||
|
'dummy': True,
|
||||||
'hostname': '192.168.179.20',
|
'hostname': '192.168.179.20',
|
||||||
'groups': [
|
'groups': [
|
||||||
'debian-12',
|
'debian-12',
|
||||||
|
|
|
@ -3,5 +3,4 @@ pycryptodome
|
||||||
PyNaCl
|
PyNaCl
|
||||||
PyYAML
|
PyYAML
|
||||||
pyqrcode
|
pyqrcode
|
||||||
cache_to_disk
|
|
||||||
setuptools
|
setuptools
|
||||||
|
|
Loading…
Reference in a new issue