feat: store the nginx conf file with the rest of the site code

Site was setup ad hoc, and not in a way that is trivally reproducible. With this, at least we can trivally copy and paste to a new server.
This commit is contained in:
Zachery Aaron Shores-Chmielewski 2026-01-18 08:22:25 +07:00
parent fd51454e86
commit 8002a0a472
12 changed files with 3821 additions and 0 deletions

3
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,3 @@
{
"rust-analyzer.cargo.target": "wasm32-unknown-unknown"
}

BIN
crates/pages/home/dist/favicon.ico vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

138
crates/pages/home/dist/index.html vendored Normal file
View file

@ -0,0 +1,138 @@
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- Disable zooming: -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<head>
<title>Zach's page</title>
<script type="module">
import init, * as bindings from '/zachery-lol-home.js';
const wasm = await init({ module_or_path: '/zachery-lol-home_bg.wasm' });
window.wasmBindings = bindings;
dispatchEvent(new CustomEvent("TrunkApplicationStarted", {detail: {wasm}}));
</script>
<!-- this is the base url relative to which other urls will be constructed. trunk will insert this from the public-url option -->
<base href="/" />
<link rel="icon" href="/favicon.ico" integrity="sha384-adiTkY7A3YEZdWqpY38nCsSmMtfCj6yG/HGAO0rbRDnX6McWyhWtZea4+aOgM5lx"/>
<link rel="manifest" href="manifest.json">
<meta name="theme-color" media="(prefers-color-scheme: light)" content="white">
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#404040">
<style>
html {
/* Remove touch delay: */
touch-action: manipulation;
}
body {
/* Light mode background color for what is not covered by the egui canvas,
or where the egui canvas is translucent. */
background: #909090;
}
@media (prefers-color-scheme: dark) {
body {
/* Dark mode background color for what is not covered by the egui canvas,
or where the egui canvas is translucent. */
background: #404040;
}
}
/* Allow canvas to fill entire web page: */
html,
body {
overflow: hidden;
margin: 0 !important;
padding: 0 !important;
height: 100%;
width: 100%;
}
/* Make canvas fill entire document: */
canvas {
margin-right: auto;
margin-left: auto;
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.centered {
margin-right: auto;
margin-left: auto;
display: block;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: #f0f0f0;
font-size: 24px;
font-family: Ubuntu-Light, Helvetica, sans-serif;
text-align: center;
}
/* ---------------------------------------------- */
/* Loading animation from https://loading.io/css/ */
.lds-dual-ring {
display: inline-block;
width: 24px;
height: 24px;
}
.lds-dual-ring:after {
content: " ";
display: block;
width: 24px;
height: 24px;
margin: 0px;
border-radius: 50%;
border: 3px solid #fff;
border-color: #fff transparent #fff transparent;
animation: lds-dual-ring 1.2s linear infinite;
}
@keyframes lds-dual-ring {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
</style>
<link rel="modulepreload" href="/zachery-lol-home.js" crossorigin="anonymous" integrity="sha384-8l+agPMa6sxMLq/oMk4ui9JdJ1uWqLuXx22BPK4ckKmpWjYvdpJTDKCD9JlBkEPX"><link rel="preload" href="/zachery-lol-home_bg.wasm" crossorigin="anonymous" integrity="sha384-Tr7jPArmwH8Ix8cl6VQj0aBum93N36PdKLjpLsZmTi6Tvw17EfVSm/tCVgFnw+Y3" as="fetch" type="application/wasm"></head>
<body>
<!-- The WASM code will resize the canvas dynamically -->
<!-- the id is hardcoded in main.rs . so, make sure both match. -->
<canvas id="the_canvas_id"></canvas>
<!-- the loading spinner will be removed in main.rs -->
<div class="centered" id="loading_text">
<noscript>You need javascript to use this website</noscript>
<p style="font-size:16px">
Loading…
</p>
<div class="lds-dual-ring"></div>
</div>
</body>
</html>

11
crates/pages/home/dist/manifest.json vendored Normal file
View file

@ -0,0 +1,11 @@
{
"name": "zachery.lol home",
"short_name": "zachery-lol-home",
"icons": [],
"lang": "en-US",
"id": "/index.html",
"start_url": "./index.html",
"display": "standalone",
"background_color": "white",
"theme_color": "white"
}

1686
crates/pages/home/dist/zachery-lol-home.js vendored Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

138
crates/pages/message-box/dist/index.html vendored Normal file
View file

@ -0,0 +1,138 @@
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- Disable zooming: -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<head>
<title>Zach's Message Box</title>
<script type="module">
import init, * as bindings from '/contact/message-box-81c3b0730baaa65a.js';
const wasm = await init({ module_or_path: '/contact/message-box-81c3b0730baaa65a_bg.wasm' });
window.wasmBindings = bindings;
dispatchEvent(new CustomEvent("TrunkApplicationStarted", {detail: {wasm}}));
</script>
<!-- this is the base url relative to which other urls will be constructed. trunk will insert this from the public-url option -->
<base href="/contact/" />
<link rel="icon" href="/contact/favicon-977e402a1f85b7b3.ico" integrity="sha384-adiTkY7A3YEZdWqpY38nCsSmMtfCj6yG/HGAO0rbRDnX6McWyhWtZea4+aOgM5lx"/>
<link rel="manifest" href="manifest.json">
<meta name="theme-color" media="(prefers-color-scheme: light)" content="white">
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#404040">
<style>
html {
/* Remove touch delay: */
touch-action: manipulation;
}
body {
/* Light mode background color for what is not covered by the egui canvas,
or where the egui canvas is translucent. */
background: #909090;
}
@media (prefers-color-scheme: dark) {
body {
/* Dark mode background color for what is not covered by the egui canvas,
or where the egui canvas is translucent. */
background: #404040;
}
}
/* Allow canvas to fill entire web page: */
html,
body {
overflow: hidden;
margin: 0 !important;
padding: 0 !important;
height: 100%;
width: 100%;
}
/* Make canvas fill entire document: */
canvas {
margin-right: auto;
margin-left: auto;
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.centered {
margin-right: auto;
margin-left: auto;
display: block;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: #f0f0f0;
font-size: 24px;
font-family: Ubuntu-Light, Helvetica, sans-serif;
text-align: center;
}
/* ---------------------------------------------- */
/* Loading animation from https://loading.io/css/ */
.lds-dual-ring {
display: inline-block;
width: 24px;
height: 24px;
}
.lds-dual-ring:after {
content: " ";
display: block;
width: 24px;
height: 24px;
margin: 0px;
border-radius: 50%;
border: 3px solid #fff;
border-color: #fff transparent #fff transparent;
animation: lds-dual-ring 1.2s linear infinite;
}
@keyframes lds-dual-ring {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
</style>
<link rel="modulepreload" href="/contact/message-box-81c3b0730baaa65a.js" crossorigin="anonymous" integrity="sha384-vm9LKVk1ImDC2qelN33GPA2icdCFzt9ems3lW6+/pvzinI1qEIojH5niV2mp1xEf"><link rel="preload" href="/contact/message-box-81c3b0730baaa65a_bg.wasm" crossorigin="anonymous" integrity="sha384-Fx451G7JvK+TUne33FqaswCa3UrCNzbE9P6TMYEinx32/DBE49W7G9lj6Sx4ktky" as="fetch" type="application/wasm"></head>
<body>
<!-- The WASM code will resize the canvas dynamically -->
<!-- the id is hardcoded in main.rs . so, make sure both match. -->
<canvas id="the_canvas_id"></canvas>
<!-- the loading spinner will be removed in main.rs -->
<div class="centered" id="loading_text">
<noscript>You need javascript to use this website</noscript>
<p style="font-size:16px">
Loading…
</p>
<div class="lds-dual-ring"></div>
</div>
</body>
</html>

View file

@ -0,0 +1,11 @@
{
"name": "Message Box",
"short_name": "message-box",
"icons": [],
"lang": "en-US",
"id": "/index.html",
"start_url": "./index.html",
"display": "standalone",
"background_color": "white",
"theme_color": "white"
}

File diff suppressed because it is too large Load diff

Binary file not shown.

55
nginx-setup/zachery.lol Normal file
View file

@ -0,0 +1,55 @@
server {
server_name zachery.lol www.zachery.lol;
error_log /var/log/nginx/zachery.lol.error.log;
access_log /var/log/nginx/zachery.lol.access.log;
location /code/ {
proxy_pass http://localhost:3001/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
# Optional: hide NGINX version
server_tokens off;
listen 443 ssl; # managed by Certbot
listen [::]:443 ssl ipv6only=on; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/zachery.lol/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/zachery.lol/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
}
server {
if ($host = www.zachery.lol) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = zachery.lol) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name zachery.lol www.zachery.lol;
return 404; # managed by Certbot
}