import the dwarven empire
This commit is contained in:
parent
363b83f93d
commit
0c57aa32c6
23 changed files with 1167 additions and 2 deletions
16
doc/00_nginx-base.txt
Normal file
16
doc/00_nginx-base.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
|
||||
apt-get install --no-install-recommends \
|
||||
nginx nginx-core libnginx-mod-stream \
|
||||
certbot python3-certbot-nginx
|
||||
|
||||
cd /etc/nginx/modules-enabled
|
||||
|
||||
rm \
|
||||
50-mod-http-geoip.conf \
|
||||
50-mod-http-image-filter.conf \
|
||||
50-mod-http-xslt-filter.conf \
|
||||
50-mod-mail.conf \
|
||||
70-mod-stream-geoip.conf
|
||||
|
||||
cp security.conf /etc/nginx/conf.d/
|
||||
|
||||
21
doc/00_xyzzy-ee.txt
Normal file
21
doc/00_xyzzy-ee.txt
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
|
||||
cp xyzzy.ee.conf.bootstrap \
|
||||
/etc/nginx/sites-available/xyzzy.ee.conf
|
||||
|
||||
cd /etc/nginx/sites-enabled
|
||||
rm default
|
||||
ln -s /etc/nginx/sites-available/xyzzy.ee.conf 00xyzzy.ee.conf
|
||||
cd -
|
||||
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
|
||||
certbot --nginx -d xyzzy.ee,www.xyzzy.ee \
|
||||
--agree-tos -m "hostmaster@xyzzy.ee" --no-eff-email \
|
||||
--deploy-hook "systemctl reload nginx"
|
||||
|
||||
cp xyzzy.ee.conf /etc/nginx/sites-available/xyzzy.ee.conf
|
||||
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
|
||||
20
doc/01_xyzzy-fi.txt
Normal file
20
doc/01_xyzzy-fi.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
cp xyzzy.fi.conf.bootstrap \
|
||||
/etc/nginx/sites-available/xyzzy.fi.conf
|
||||
|
||||
cd /etc/nginx/sites-enabled
|
||||
ln -s /etc/nginx/sites-available/xyzzy.fi.conf 01xyzzy.fi.conf
|
||||
cd -
|
||||
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
|
||||
certbot --nginx -d xyzzy.fi,www.xyzzy.fi \
|
||||
--agree-tos -m "hostmaster@xyzzy.fi" --no-eff-email \
|
||||
--deploy-hook "systemctl reload nginx"
|
||||
|
||||
cp xyzzy.fi.conf /etc/nginx/sites-available/xyzzy.fi.conf
|
||||
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
|
||||
20
doc/02_git-xyzzy-ee.txt
Normal file
20
doc/02_git-xyzzy-ee.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
cp git.xyzzy.ee.conf.bootstrap \
|
||||
/etc/nginx/sites-available/git.xyzzy.ee.conf
|
||||
|
||||
cd /etc/nginx/sites-enabled
|
||||
ln -s /etc/nginx/sites-available/git.xyzzy.ee.conf 02git.xyzzy.ee.conf
|
||||
cd -
|
||||
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
|
||||
certbot --nginx -d git.xyzzy.ee \
|
||||
--agree-tos -m "hostmaster@xyzzy.ee" --no-eff-email \
|
||||
--deploy-hook "systemctl reload nginx"
|
||||
|
||||
cp git.xyzzy.ee.conf /etc/nginx/sites-available/git.xyzzy.ee.conf
|
||||
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
|
||||
20
doc/03_dwarvenruins-com.txt
Normal file
20
doc/03_dwarvenruins-com.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
cp dwarvenruins.com.conf.bootstrap \
|
||||
/etc/nginx/sites-available/dwarvenruins.com.conf
|
||||
|
||||
cd /etc/nginx/sites-enabled
|
||||
ln -s /etc/nginx/sites-available/dwarvenruins.com.conf 03dwarvenruins.com.conf
|
||||
cd -
|
||||
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
|
||||
certbot --nginx -d dwarvenruins.com,www.dwarvenruins.com \
|
||||
--agree-tos -m "hostmaster@dwarvenruins.com" --no-eff-email \
|
||||
--deploy-hook "systemctl reload nginx"
|
||||
|
||||
cp dwarvenruins.com.conf /etc/nginx/sites-available/dwarvenruins.com.conf
|
||||
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
|
||||
20
doc/04_dwarvenmail-com.txt
Normal file
20
doc/04_dwarvenmail-com.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
cp dwarvenmail.com.conf.bootstrap \
|
||||
/etc/nginx/sites-available/dwarvenmail.com.conf
|
||||
|
||||
cd /etc/nginx/sites-enabled
|
||||
ln -s /etc/nginx/sites-available/dwarvenmail.com.conf 04dwarvenmail.com.conf
|
||||
cd -
|
||||
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
|
||||
certbot --nginx -d dwarvenmail.com,www.dwarvenmail.com \
|
||||
--agree-tos -m "hostmaster@dwarvenmail.com" --no-eff-email \
|
||||
--deploy-hook "systemctl reload nginx"
|
||||
|
||||
cp dwarvenmail.com.conf /etc/nginx/sites-available/dwarvenmail.com.conf
|
||||
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
|
||||
20
doc/05_dwarvenvault-com.txt
Normal file
20
doc/05_dwarvenvault-com.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
cp dwarvenvault.com.conf.bootstrap \
|
||||
/etc/nginx/sites-available/dwarvenvault.com.conf
|
||||
|
||||
cd /etc/nginx/sites-enabled
|
||||
ln -s /etc/nginx/sites-available/dwarvenvault.com.conf 05dwarvenvault.com.conf
|
||||
cd -
|
||||
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
|
||||
certbot --nginx -d dwarvenvault.com,www.dwarvenvault.com \
|
||||
--agree-tos -m "hostmaster@dwarvenvault.com" --no-eff-email \
|
||||
--deploy-hook "systemctl reload nginx"
|
||||
|
||||
cp dwarvenvault.com.conf /etc/nginx/sites-available/dwarvenvault.com.conf
|
||||
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
|
||||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
Debian 12 minimal installation, ensure the SSH server and standard system tools are included.
|
||||
|
||||
Note: text files to help with nginx deployment and/or migrating sites to new hosts/VMs (certbot et. al) are ancillary to this document.
|
||||
|
||||
|
||||
## Base Configuration
|
||||
|
||||
|
|
@ -90,10 +92,18 @@ else
|
|||
fi
|
||||
```
|
||||
|
||||
After confirming the change is correct:
|
||||
Ensure SSH client alive is configured in `/etc/ssh/sshd_config`:
|
||||
|
||||
```
|
||||
systemctl restart sshd
|
||||
TCPKeepAlive yes
|
||||
ClientAliveInterval 60
|
||||
ClientAliveCountMax 3
|
||||
```
|
||||
|
||||
After confirming the `sshd_config` changes are correct:
|
||||
|
||||
```
|
||||
systemctl restart sshd.service
|
||||
```
|
||||
|
||||
Test logging in again as the user and sudo to root in another term.
|
||||
100
etc/nginx/sites-available/dwarvenmail.com.conf
Normal file
100
etc/nginx/sites-available/dwarvenmail.com.conf
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
# dwarvenmail.com
|
||||
# www.dwarvenmail.com
|
||||
|
||||
server {
|
||||
server_name dwarvenmail.com;
|
||||
root /var/xyzzy/html/dwarvenmail;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
listen [::]:443 ssl; # managed by Certbot
|
||||
listen 443 ssl; # managed by Certbot
|
||||
ssl_certificate /etc/letsencrypt/live/dwarvenmail.com/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/dwarvenmail.com/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
# https://ssl-config.mozilla.org/
|
||||
add_header Strict-Transport-Security "max-age=15724800" always;
|
||||
|
||||
# OCSP stapling
|
||||
ssl_stapling on;
|
||||
ssl_stapling_verify on;
|
||||
ssl_trusted_certificate /etc/letsencrypt/live/dwarvenmail.com/chain.pem;
|
||||
resolver 9.9.9.9 8.8.8.8 1.1.1.1;
|
||||
resolver_timeout 5s;
|
||||
|
||||
# https://observatory.mozilla.org
|
||||
add_header X-Frame-Options "SAMEORIGIN";
|
||||
add_header X-Content-Type-Options "nosniff";
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin";
|
||||
add_header Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';";
|
||||
}
|
||||
|
||||
server {
|
||||
server_name www.dwarvenmail.com;
|
||||
root /var/xyzzy/html/dwarvenmail;
|
||||
index index.html;
|
||||
|
||||
location ~ /\.well-known {
|
||||
allow all;
|
||||
}
|
||||
|
||||
location ~ / {
|
||||
return 301 $scheme://dwarvenmail.com$request_uri;
|
||||
}
|
||||
|
||||
listen [::]:443 ssl; # managed by Certbot
|
||||
listen 443 ssl; # managed by Certbot
|
||||
ssl_certificate /etc/letsencrypt/live/dwarvenmail.com/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/dwarvenmail.com/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
# https://ssl-config.mozilla.org/
|
||||
add_header Strict-Transport-Security "max-age=15724800" always;
|
||||
|
||||
# OCSP stapling
|
||||
ssl_stapling on;
|
||||
ssl_stapling_verify on;
|
||||
ssl_trusted_certificate /etc/letsencrypt/live/dwarvenmail.com/chain.pem;
|
||||
resolver 9.9.9.9 8.8.8.8 1.1.1.1;
|
||||
resolver_timeout 5s;
|
||||
|
||||
# https://observatory.mozilla.org
|
||||
add_header X-Frame-Options "SAMEORIGIN";
|
||||
add_header X-Content-Type-Options "nosniff";
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin";
|
||||
add_header Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';";
|
||||
}
|
||||
|
||||
server {
|
||||
if ($host = dwarvenmail.com) {
|
||||
return 301 https://$host$request_uri;
|
||||
} # managed by Certbot
|
||||
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name dwarvenmail.com;
|
||||
root /var/xyzzy/html/dwarvenmail;
|
||||
index index.html;
|
||||
return 404; # managed by Certbot
|
||||
}
|
||||
|
||||
server {
|
||||
if ($host = www.dwarvenmail.com) {
|
||||
return 301 https://$host$request_uri;
|
||||
} # managed by Certbot
|
||||
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name www.dwarvenmail.com;
|
||||
root /var/xyzzy/html/dwarvenmail;
|
||||
index index.html;
|
||||
return 404; # managed by Certbot
|
||||
}
|
||||
31
etc/nginx/sites-available/dwarvenmail.com.conf.bootstrap
Normal file
31
etc/nginx/sites-available/dwarvenmail.com.conf.bootstrap
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# dwarvenmail.com
|
||||
# www.dwarvenmail.com
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name dwarvenmail.com;
|
||||
root /var/xyzzy/html/dwarvenmail;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name www.dwarvenmail.com;
|
||||
root /var/xyzzy/html/dwarvenmail;
|
||||
index index.html;
|
||||
|
||||
location ~ /\.well-known {
|
||||
allow all;
|
||||
}
|
||||
|
||||
location ~ / {
|
||||
return 301 $scheme://dwarvenmail.com$request_uri;
|
||||
}
|
||||
}
|
||||
101
etc/nginx/sites-available/dwarvenruins.com.conf
Normal file
101
etc/nginx/sites-available/dwarvenruins.com.conf
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
# dwarvenruins.com
|
||||
# www.dwarvenruins.com
|
||||
|
||||
server {
|
||||
server_name dwarvenruins.com;
|
||||
root /var/xyzzy/html/dwarvenruins;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
listen [::]:443 ssl; # managed by Certbot
|
||||
listen 443 ssl; # managed by Certbot
|
||||
ssl_certificate /etc/letsencrypt/live/dwarvenruins.com/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/dwarvenruins.com/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
# https://ssl-config.mozilla.org/
|
||||
add_header Strict-Transport-Security "max-age=15724800" always;
|
||||
|
||||
# OCSP stapling
|
||||
ssl_stapling on;
|
||||
ssl_stapling_verify on;
|
||||
ssl_trusted_certificate /etc/letsencrypt/live/dwarvenruins.com/chain.pem;
|
||||
resolver 9.9.9.9 8.8.8.8 1.1.1.1;
|
||||
resolver_timeout 5s;
|
||||
|
||||
# https://observatory.mozilla.org
|
||||
add_header X-Frame-Options "SAMEORIGIN";
|
||||
add_header X-Content-Type-Options "nosniff";
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin";
|
||||
add_header Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';";
|
||||
}
|
||||
|
||||
server {
|
||||
server_name www.dwarvenruins.com;
|
||||
root /var/xyzzy/html/dwarvenruins;
|
||||
index index.html;
|
||||
|
||||
location ~ /\.well-known {
|
||||
allow all;
|
||||
}
|
||||
|
||||
location ~ / {
|
||||
return 301 $scheme://dwarvenruins.com$request_uri;
|
||||
}
|
||||
|
||||
listen [::]:443 ssl; # managed by Certbot
|
||||
listen 443 ssl; # managed by Certbot
|
||||
ssl_certificate /etc/letsencrypt/live/dwarvenruins.com/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/dwarvenruins.com/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
# https://ssl-config.mozilla.org/
|
||||
add_header Strict-Transport-Security "max-age=15724800" always;
|
||||
|
||||
# OCSP stapling
|
||||
ssl_stapling on;
|
||||
ssl_stapling_verify on;
|
||||
ssl_trusted_certificate /etc/letsencrypt/live/dwarvenruins.com/chain.pem;
|
||||
resolver 9.9.9.9 8.8.8.8 1.1.1.1;
|
||||
resolver_timeout 5s;
|
||||
|
||||
# https://observatory.mozilla.org
|
||||
add_header X-Frame-Options "SAMEORIGIN";
|
||||
add_header X-Content-Type-Options "nosniff";
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin";
|
||||
add_header Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';";
|
||||
}
|
||||
|
||||
server {
|
||||
if ($host = dwarvenruins.com) {
|
||||
return 301 https://$host$request_uri;
|
||||
} # managed by Certbot
|
||||
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name dwarvenruins.com;
|
||||
root /var/xyzzy/html/dwarvenruins;
|
||||
index index.html;
|
||||
return 404; # managed by Certbot
|
||||
}
|
||||
|
||||
server {
|
||||
if ($host = www.dwarvenruins.com) {
|
||||
return 301 https://$host$request_uri;
|
||||
} # managed by Certbot
|
||||
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name www.dwarvenruins.com;
|
||||
root /var/xyzzy/html/dwarvenruins;
|
||||
index index.html;
|
||||
return 404; # managed by Certbot
|
||||
}
|
||||
|
||||
31
etc/nginx/sites-available/dwarvenruins.com.conf.bootstrap
Normal file
31
etc/nginx/sites-available/dwarvenruins.com.conf.bootstrap
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# dwarvenruins.com
|
||||
# www.dwarvenruins.com
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name dwarvenruins.com;
|
||||
root /var/xyzzy/html/dwarvenruins;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name www.dwarvenruins.com;
|
||||
root /var/xyzzy/html/dwarvenruins;
|
||||
index index.html;
|
||||
|
||||
location ~ /\.well-known {
|
||||
allow all;
|
||||
}
|
||||
|
||||
location ~ / {
|
||||
return 301 $scheme://dwarvenruins.com$request_uri;
|
||||
}
|
||||
}
|
||||
100
etc/nginx/sites-available/dwarvenvault.com.conf
Normal file
100
etc/nginx/sites-available/dwarvenvault.com.conf
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
# dwarvenvault.com
|
||||
# www.dwarvenvault.com
|
||||
|
||||
server {
|
||||
server_name dwarvenvault.com;
|
||||
root /var/xyzzy/html/dwarvenvault;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
listen [::]:443 ssl; # managed by Certbot
|
||||
listen 443 ssl; # managed by Certbot
|
||||
ssl_certificate /etc/letsencrypt/live/dwarvenvault.com/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/dwarvenvault.com/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
# https://ssl-config.mozilla.org/
|
||||
add_header Strict-Transport-Security "max-age=15724800" always;
|
||||
|
||||
# OCSP stapling
|
||||
ssl_stapling on;
|
||||
ssl_stapling_verify on;
|
||||
ssl_trusted_certificate /etc/letsencrypt/live/dwarvenvault.com/chain.pem;
|
||||
resolver 9.9.9.9 8.8.8.8 1.1.1.1;
|
||||
resolver_timeout 5s;
|
||||
|
||||
# https://observatory.mozilla.org
|
||||
add_header X-Frame-Options "SAMEORIGIN";
|
||||
add_header X-Content-Type-Options "nosniff";
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin";
|
||||
add_header Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';";
|
||||
}
|
||||
|
||||
server {
|
||||
server_name www.dwarvenvault.com;
|
||||
root /var/xyzzy/html/dwarvenvault;
|
||||
index index.html;
|
||||
|
||||
location ~ /\.well-known {
|
||||
allow all;
|
||||
}
|
||||
|
||||
location ~ / {
|
||||
return 301 $scheme://dwarvenvault.com$request_uri;
|
||||
}
|
||||
|
||||
listen [::]:443 ssl; # managed by Certbot
|
||||
listen 443 ssl; # managed by Certbot
|
||||
ssl_certificate /etc/letsencrypt/live/dwarvenvault.com/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/dwarvenvault.com/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
# https://ssl-config.mozilla.org/
|
||||
add_header Strict-Transport-Security "max-age=15724800" always;
|
||||
|
||||
# OCSP stapling
|
||||
ssl_stapling on;
|
||||
ssl_stapling_verify on;
|
||||
ssl_trusted_certificate /etc/letsencrypt/live/dwarvenvault.com/chain.pem;
|
||||
resolver 9.9.9.9 8.8.8.8 1.1.1.1;
|
||||
resolver_timeout 5s;
|
||||
|
||||
# https://observatory.mozilla.org
|
||||
add_header X-Frame-Options "SAMEORIGIN";
|
||||
add_header X-Content-Type-Options "nosniff";
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin";
|
||||
add_header Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';";
|
||||
}
|
||||
|
||||
server {
|
||||
if ($host = dwarvenvault.com) {
|
||||
return 301 https://$host$request_uri;
|
||||
} # managed by Certbot
|
||||
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name dwarvenvault.com;
|
||||
root /var/xyzzy/html/dwarvenvault;
|
||||
index index.html;
|
||||
return 404; # managed by Certbot
|
||||
}
|
||||
|
||||
server {
|
||||
if ($host = www.dwarvenvault.com) {
|
||||
return 301 https://$host$request_uri;
|
||||
} # managed by Certbot
|
||||
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name www.dwarvenvault.com;
|
||||
root /var/xyzzy/html/dwarvenvault;
|
||||
index index.html;
|
||||
return 404; # managed by Certbot
|
||||
}
|
||||
31
etc/nginx/sites-available/dwarvenvault.com.conf.bootstrap
Normal file
31
etc/nginx/sites-available/dwarvenvault.com.conf.bootstrap
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# dwarvenvault.com
|
||||
# www.dwarvenvault.com
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name dwarvenvault.com;
|
||||
root /var/xyzzy/html/dwarvenvault;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name www.dwarvenvault.com;
|
||||
root /var/xyzzy/html/dwarvenvault;
|
||||
index index.html;
|
||||
|
||||
location ~ /\.well-known {
|
||||
allow all;
|
||||
}
|
||||
|
||||
location ~ / {
|
||||
return 301 $scheme://dwarvenvault.com$request_uri;
|
||||
}
|
||||
}
|
||||
BIN
html/dwarvenmail/favicon.ico
Normal file
BIN
html/dwarvenmail/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
157
html/dwarvenmail/index.css
Normal file
157
html/dwarvenmail/index.css
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
header,section{
|
||||
display:block;
|
||||
}
|
||||
body{
|
||||
font-size:16px;
|
||||
margin:0 auto;
|
||||
line-height:1.4;
|
||||
background:#0b0c0d;
|
||||
color:#d4d4d4;
|
||||
font-family:"Noto Sans", Futura, Verdana, "Liberation Sans", sans-serif;
|
||||
}
|
||||
a{
|
||||
color:#7a9e55;
|
||||
text-decoration:none;
|
||||
}
|
||||
a:hover{
|
||||
text-decoration:underline;
|
||||
}
|
||||
::selection {
|
||||
color:#000;
|
||||
background:#7a9e55;
|
||||
}
|
||||
h1{
|
||||
font-size:2em;
|
||||
margin:.67em 0;
|
||||
}
|
||||
#page{
|
||||
position:relative;
|
||||
}
|
||||
#header{
|
||||
padding-top:50px;
|
||||
transform:translate3d(0,0,0);
|
||||
}
|
||||
.title-wrapper{
|
||||
text-align:center;
|
||||
}
|
||||
.content{
|
||||
margin-left:auto;
|
||||
margin-right:auto;
|
||||
padding:1px 20px;
|
||||
position:relative;
|
||||
z-index:2;
|
||||
min-width:270px;
|
||||
}
|
||||
.title-group.animate{
|
||||
animation:slide-fade-in .8s ease;
|
||||
}
|
||||
.title{
|
||||
font-size:42px;
|
||||
line-height:1.2;
|
||||
margin:40px 0 0;
|
||||
word-wrap:break-word;
|
||||
}
|
||||
.title a:active{
|
||||
transform:translateY(1px);
|
||||
}
|
||||
.title a{
|
||||
color:#e4e4e4;
|
||||
display:block;
|
||||
text-decoration:none;
|
||||
}
|
||||
.description{
|
||||
color:#c69500;
|
||||
margin:50px 0 0;
|
||||
display:block;
|
||||
}
|
||||
.title+.description{
|
||||
margin-top:10px!important;
|
||||
}
|
||||
.footdesc{
|
||||
color:#c79908;
|
||||
margin:20px 0 0;
|
||||
display:block;
|
||||
}
|
||||
.footlink {
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
}
|
||||
.footlink.animate {
|
||||
animation:slide-fade-in .8s ease;
|
||||
}
|
||||
.middle {
|
||||
overflow: auto;
|
||||
margin: auto;
|
||||
display: inline;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
@media screen and (max-width:568px){
|
||||
.content{
|
||||
padding:1px 10px;
|
||||
}
|
||||
.title{
|
||||
font-size:36px;
|
||||
margin-top:30px;
|
||||
}
|
||||
.description{
|
||||
margin-top:35px;
|
||||
max-width:80%;
|
||||
margin-left:auto;
|
||||
margin-right:auto;
|
||||
}
|
||||
.title+.description{
|
||||
margin-top:4px!important;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slide-fade-in{
|
||||
0%{
|
||||
opacity:0;
|
||||
transform:translate3d(0,20px,0);
|
||||
}
|
||||
to{
|
||||
opacity:1;
|
||||
transform:translate3d(0,0,0);
|
||||
}
|
||||
}
|
||||
|
||||
.divTable {
|
||||
font-size: 16px;
|
||||
line-height: 2.0;
|
||||
display: table;
|
||||
margin: auto;
|
||||
border: 1px solid #444;
|
||||
}
|
||||
.divTable.animate {
|
||||
animation:slide-fade-in .8s ease;
|
||||
}
|
||||
.divTableRow {
|
||||
display: table-row;
|
||||
}
|
||||
.divTableHeading {
|
||||
display: table-header-group;
|
||||
background-color: #ddd;
|
||||
}
|
||||
.divTableCell, .divTableHead {
|
||||
vertical-align: middle;
|
||||
display: table-cell;
|
||||
padding: 5px 10px;
|
||||
border: 1px solid #444;
|
||||
}
|
||||
.divTableHeading {
|
||||
display: table-header-group;
|
||||
background-color: #ddd;
|
||||
font-weight: bold;
|
||||
}
|
||||
.divTableFoot {
|
||||
display: table-footer-group;
|
||||
font-weight: bold;
|
||||
background-color: #ddd;
|
||||
}
|
||||
.divTableBody {
|
||||
display: table-row-group;
|
||||
}
|
||||
.valign {
|
||||
vertical-align: middle;
|
||||
}
|
||||
51
html/dwarvenmail/index.html
Normal file
51
html/dwarvenmail/index.html
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Dwarven Mail</title>
|
||||
<meta name="description" content="email for the deep folk">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" media="screen" href="index.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<section id="page">
|
||||
|
||||
<header id="header">
|
||||
<div class="title-wrapper content">
|
||||
<div class="title-group">
|
||||
<h1 class="title">Dwarven Mail</h1>
|
||||
<span class="description">
|
||||
<em>email for the deep folk</em>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<br />
|
||||
|
||||
<main id="main">
|
||||
<!-- you have my shield -->
|
||||
</main>
|
||||
|
||||
<footer id="footer">
|
||||
<!-- and my axe -->
|
||||
<div class="footlink">
|
||||
<span class="footdesc">
|
||||
[
|
||||
<a target="_blank" href="https://dwarvenruins.com/">dwarven ruins</a> |
|
||||
<a target="_blank" href="https://dwarvenvault.com/">dwarven vault</a>
|
||||
]
|
||||
</span>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<br />
|
||||
|
||||
</section>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
BIN
html/dwarvenruins/favicon.ico
Normal file
BIN
html/dwarvenruins/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
157
html/dwarvenruins/index.css
Normal file
157
html/dwarvenruins/index.css
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
header,section{
|
||||
display:block;
|
||||
}
|
||||
body{
|
||||
font-size:16px;
|
||||
margin:0 auto;
|
||||
line-height:1.4;
|
||||
background:#0b0c0d;
|
||||
color:#d4d4d4;
|
||||
font-family:"Noto Sans", Futura, Verdana, "Liberation Sans", sans-serif;
|
||||
}
|
||||
a{
|
||||
color:#7a9e55;
|
||||
text-decoration:none;
|
||||
}
|
||||
a:hover{
|
||||
text-decoration:underline;
|
||||
}
|
||||
::selection {
|
||||
color:#000;
|
||||
background:#7a9e55;
|
||||
}
|
||||
h1{
|
||||
font-size:2em;
|
||||
margin:.67em 0;
|
||||
}
|
||||
#page{
|
||||
position:relative;
|
||||
}
|
||||
#header{
|
||||
padding-top:50px;
|
||||
transform:translate3d(0,0,0);
|
||||
}
|
||||
.title-wrapper{
|
||||
text-align:center;
|
||||
}
|
||||
.content{
|
||||
margin-left:auto;
|
||||
margin-right:auto;
|
||||
padding:1px 20px;
|
||||
position:relative;
|
||||
z-index:2;
|
||||
min-width:270px;
|
||||
}
|
||||
.title-group.animate{
|
||||
animation:slide-fade-in .8s ease;
|
||||
}
|
||||
.title{
|
||||
font-size:42px;
|
||||
line-height:1.2;
|
||||
margin:40px 0 0;
|
||||
word-wrap:break-word;
|
||||
}
|
||||
.title a:active{
|
||||
transform:translateY(1px);
|
||||
}
|
||||
.title a{
|
||||
color:#e4e4e4;
|
||||
display:block;
|
||||
text-decoration:none;
|
||||
}
|
||||
.description{
|
||||
color:#c69500;
|
||||
margin:50px 0 0;
|
||||
display:block;
|
||||
}
|
||||
.title+.description{
|
||||
margin-top:10px!important;
|
||||
}
|
||||
.footdesc{
|
||||
color:#c79908;
|
||||
margin:20px 0 0;
|
||||
display:block;
|
||||
}
|
||||
.footlink {
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
}
|
||||
.footlink.animate {
|
||||
animation:slide-fade-in .8s ease;
|
||||
}
|
||||
.middle {
|
||||
overflow: auto;
|
||||
margin: auto;
|
||||
display: inline;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
@media screen and (max-width:568px){
|
||||
.content{
|
||||
padding:1px 10px;
|
||||
}
|
||||
.title{
|
||||
font-size:36px;
|
||||
margin-top:30px;
|
||||
}
|
||||
.description{
|
||||
margin-top:35px;
|
||||
max-width:80%;
|
||||
margin-left:auto;
|
||||
margin-right:auto;
|
||||
}
|
||||
.title+.description{
|
||||
margin-top:4px!important;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slide-fade-in{
|
||||
0%{
|
||||
opacity:0;
|
||||
transform:translate3d(0,20px,0);
|
||||
}
|
||||
to{
|
||||
opacity:1;
|
||||
transform:translate3d(0,0,0);
|
||||
}
|
||||
}
|
||||
|
||||
.divTable {
|
||||
font-size: 16px;
|
||||
line-height: 2.0;
|
||||
display: table;
|
||||
margin: auto;
|
||||
border: 1px solid #444;
|
||||
}
|
||||
.divTable.animate {
|
||||
animation:slide-fade-in .8s ease;
|
||||
}
|
||||
.divTableRow {
|
||||
display: table-row;
|
||||
}
|
||||
.divTableHeading {
|
||||
display: table-header-group;
|
||||
background-color: #ddd;
|
||||
}
|
||||
.divTableCell, .divTableHead {
|
||||
vertical-align: middle;
|
||||
display: table-cell;
|
||||
padding: 5px 10px;
|
||||
border: 1px solid #444;
|
||||
}
|
||||
.divTableHeading {
|
||||
display: table-header-group;
|
||||
background-color: #ddd;
|
||||
font-weight: bold;
|
||||
}
|
||||
.divTableFoot {
|
||||
display: table-footer-group;
|
||||
font-weight: bold;
|
||||
background-color: #ddd;
|
||||
}
|
||||
.divTableBody {
|
||||
display: table-row-group;
|
||||
}
|
||||
.valign {
|
||||
vertical-align: middle;
|
||||
}
|
||||
51
html/dwarvenruins/index.html
Normal file
51
html/dwarvenruins/index.html
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Dwarven Ruins</title>
|
||||
<meta name="description" content="puzzles, traps and loot oh my">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" media="screen" href="index.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<section id="page">
|
||||
|
||||
<header id="header">
|
||||
<div class="title-wrapper content">
|
||||
<div class="title-group">
|
||||
<h1 class="title">Dwarven Ruins</h1>
|
||||
<span class="description">
|
||||
<em>watch your head</em>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<br />
|
||||
|
||||
<main id="main">
|
||||
<!-- bring a torch you might get eaten by a grue -->
|
||||
</main>
|
||||
|
||||
<footer id="footer">
|
||||
<!-- support your local humane shelter -->
|
||||
<div class="footlink">
|
||||
<span class="footdesc">
|
||||
[
|
||||
<a target="_blank" href="https://dwarvenmail.com/">dwarven mail</a> |
|
||||
<a target="_blank" href="https://dwarvenvault.com/">dwarven vault</a>
|
||||
]
|
||||
</span>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<br />
|
||||
|
||||
</section>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
BIN
html/dwarvenvault/favicon.ico
Normal file
BIN
html/dwarvenvault/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
157
html/dwarvenvault/index.css
Normal file
157
html/dwarvenvault/index.css
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
header,section{
|
||||
display:block;
|
||||
}
|
||||
body{
|
||||
font-size:16px;
|
||||
margin:0 auto;
|
||||
line-height:1.4;
|
||||
background:#0b0c0d;
|
||||
color:#d4d4d4;
|
||||
font-family:"Noto Sans", Futura, Verdana, "Liberation Sans", sans-serif;
|
||||
}
|
||||
a{
|
||||
color:#7a9e55;
|
||||
text-decoration:none;
|
||||
}
|
||||
a:hover{
|
||||
text-decoration:underline;
|
||||
}
|
||||
::selection {
|
||||
color:#000;
|
||||
background:#7a9e55;
|
||||
}
|
||||
h1{
|
||||
font-size:2em;
|
||||
margin:.67em 0;
|
||||
}
|
||||
#page{
|
||||
position:relative;
|
||||
}
|
||||
#header{
|
||||
padding-top:50px;
|
||||
transform:translate3d(0,0,0);
|
||||
}
|
||||
.title-wrapper{
|
||||
text-align:center;
|
||||
}
|
||||
.content{
|
||||
margin-left:auto;
|
||||
margin-right:auto;
|
||||
padding:1px 20px;
|
||||
position:relative;
|
||||
z-index:2;
|
||||
min-width:270px;
|
||||
}
|
||||
.title-group.animate{
|
||||
animation:slide-fade-in .8s ease;
|
||||
}
|
||||
.title{
|
||||
font-size:42px;
|
||||
line-height:1.2;
|
||||
margin:40px 0 0;
|
||||
word-wrap:break-word;
|
||||
}
|
||||
.title a:active{
|
||||
transform:translateY(1px);
|
||||
}
|
||||
.title a{
|
||||
color:#e4e4e4;
|
||||
display:block;
|
||||
text-decoration:none;
|
||||
}
|
||||
.description{
|
||||
color:#c69500;
|
||||
margin:50px 0 0;
|
||||
display:block;
|
||||
}
|
||||
.title+.description{
|
||||
margin-top:10px!important;
|
||||
}
|
||||
.footdesc{
|
||||
color:#c79908;
|
||||
margin:20px 0 0;
|
||||
display:block;
|
||||
}
|
||||
.footlink {
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
}
|
||||
.footlink.animate {
|
||||
animation:slide-fade-in .8s ease;
|
||||
}
|
||||
.middle {
|
||||
overflow: auto;
|
||||
margin: auto;
|
||||
display: inline;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
@media screen and (max-width:568px){
|
||||
.content{
|
||||
padding:1px 10px;
|
||||
}
|
||||
.title{
|
||||
font-size:36px;
|
||||
margin-top:30px;
|
||||
}
|
||||
.description{
|
||||
margin-top:35px;
|
||||
max-width:80%;
|
||||
margin-left:auto;
|
||||
margin-right:auto;
|
||||
}
|
||||
.title+.description{
|
||||
margin-top:4px!important;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slide-fade-in{
|
||||
0%{
|
||||
opacity:0;
|
||||
transform:translate3d(0,20px,0);
|
||||
}
|
||||
to{
|
||||
opacity:1;
|
||||
transform:translate3d(0,0,0);
|
||||
}
|
||||
}
|
||||
|
||||
.divTable {
|
||||
font-size: 16px;
|
||||
line-height: 2.0;
|
||||
display: table;
|
||||
margin: auto;
|
||||
border: 1px solid #444;
|
||||
}
|
||||
.divTable.animate {
|
||||
animation:slide-fade-in .8s ease;
|
||||
}
|
||||
.divTableRow {
|
||||
display: table-row;
|
||||
}
|
||||
.divTableHeading {
|
||||
display: table-header-group;
|
||||
background-color: #ddd;
|
||||
}
|
||||
.divTableCell, .divTableHead {
|
||||
vertical-align: middle;
|
||||
display: table-cell;
|
||||
padding: 5px 10px;
|
||||
border: 1px solid #444;
|
||||
}
|
||||
.divTableHeading {
|
||||
display: table-header-group;
|
||||
background-color: #ddd;
|
||||
font-weight: bold;
|
||||
}
|
||||
.divTableFoot {
|
||||
display: table-footer-group;
|
||||
font-weight: bold;
|
||||
background-color: #ddd;
|
||||
}
|
||||
.divTableBody {
|
||||
display: table-row-group;
|
||||
}
|
||||
.valign {
|
||||
vertical-align: middle;
|
||||
}
|
||||
51
html/dwarvenvault/index.html
Normal file
51
html/dwarvenvault/index.html
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Dwarven Vault</title>
|
||||
<meta name="description" content="shiny tchotchkes">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" media="screen" href="index.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<section id="page">
|
||||
|
||||
<header id="header">
|
||||
<div class="title-wrapper content">
|
||||
<div class="title-group">
|
||||
<h1 class="title">Dwarven Vault</h1>
|
||||
<span class="description">
|
||||
<em>shiny tchotchkes</em>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<br />
|
||||
|
||||
<main id="main">
|
||||
<!-- you have my shield -->
|
||||
</main>
|
||||
|
||||
<footer id="footer">
|
||||
<!-- and my axe -->
|
||||
<div class="footlink">
|
||||
<span class="footdesc">
|
||||
[
|
||||
<a target="_blank" href="https://dwarvenruins.com/">dwarven ruins</a> |
|
||||
<a target="_blank" href="https://dwarvenmail.com/">dwarven mail</a>
|
||||
]
|
||||
</span>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<br />
|
||||
|
||||
</section>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue