Skip to content

Commit 1cb11dd

Browse files
committed
feat: scaffold nginx gateway and service indexes
0 parents  commit 1cb11dd

3 files changed

Lines changed: 390 additions & 0 deletions

File tree

nginx/html/lab-env-index.html

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
<!doctype html>
2+
<html lang="it">
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1" />
6+
<title>Lab - Ambienti di Sviluppo</title>
7+
<style>
8+
:root {
9+
color-scheme: light;
10+
}
11+
body {
12+
font-family: "Segoe UI", Arial, sans-serif;
13+
margin: 0;
14+
padding: 32px;
15+
background: #f6f7fb;
16+
color: #1c1f2a;
17+
}
18+
.card {
19+
max-width: 900px;
20+
margin: 0 auto;
21+
background: #ffffff;
22+
border-radius: 12px;
23+
box-shadow: 0 8px 24px rgba(19, 22, 33, 0.08);
24+
padding: 28px;
25+
}
26+
h1 {
27+
margin: 0 0 8px 0;
28+
font-size: 28px;
29+
}
30+
p {
31+
margin: 0 0 20px 0;
32+
color: #4a5064;
33+
}
34+
.grid {
35+
display: grid;
36+
gap: 16px;
37+
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
38+
}
39+
.tile {
40+
border: 1px solid #e3e6ef;
41+
border-radius: 10px;
42+
padding: 16px;
43+
background: #fafbff;
44+
}
45+
.tile h2 {
46+
margin: 0 0 8px 0;
47+
font-size: 18px;
48+
}
49+
ul {
50+
list-style: none;
51+
padding: 0;
52+
margin: 0;
53+
}
54+
li + li {
55+
margin-top: 8px;
56+
}
57+
a {
58+
color: #1b5fd6;
59+
text-decoration: none;
60+
}
61+
a:hover {
62+
text-decoration: underline;
63+
}
64+
.badge {
65+
display: inline-block;
66+
font-size: 12px;
67+
padding: 2px 8px;
68+
border-radius: 999px;
69+
background: #eef2ff;
70+
color: #3b4cca;
71+
margin-left: 6px;
72+
}
73+
</style>
74+
</head>
75+
<body>
76+
<div class="card">
77+
<h1>Ambienti di Sviluppo</h1>
78+
<p>Seleziona un ambiente di sviluppo disponibile nel lab.</p>
79+
<div class="grid">
80+
<div class="tile">
81+
<h2>Node.js</h2>
82+
<ul>
83+
<li><a href="/lab/env/node/">Node 360</a><span class="badge">code-server</span></li>
84+
</ul>
85+
</div>
86+
<div class="tile">
87+
<h2>Python</h2>
88+
<ul>
89+
<li><a href="/lab/env/python/">Python Dev</a><span class="badge">code-server</span></li>
90+
</ul>
91+
</div>
92+
<div class="tile">
93+
<h2>AI</h2>
94+
<ul>
95+
<li><a href="/lab/env/ai/">AI Lab</a><span class="badge">code-server</span></li>
96+
</ul>
97+
</div>
98+
<div class="tile">
99+
<h2>C++</h2>
100+
<ul>
101+
<li><a href="/lab/env/cpp/">C++ Dev</a><span class="badge">code-server</span></li>
102+
</ul>
103+
</div>
104+
</div>
105+
<p><a href="/lab/">Torna all'indice</a></p>
106+
</div>
107+
</body>
108+
</html>

nginx/html/lab-index.html

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
<!doctype html>
2+
<html lang="it">
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1" />
6+
<title>Lab - Indice Servizi</title>
7+
<style>
8+
:root {
9+
color-scheme: light;
10+
}
11+
body {
12+
font-family: "Segoe UI", Arial, sans-serif;
13+
margin: 0;
14+
padding: 32px;
15+
background: #f6f7fb;
16+
color: #1c1f2a;
17+
}
18+
.card {
19+
max-width: 900px;
20+
margin: 0 auto;
21+
background: #ffffff;
22+
border-radius: 12px;
23+
box-shadow: 0 8px 24px rgba(19, 22, 33, 0.08);
24+
padding: 28px;
25+
}
26+
h1 {
27+
margin: 0 0 8px 0;
28+
font-size: 28px;
29+
}
30+
p {
31+
margin: 0 0 20px 0;
32+
color: #4a5064;
33+
}
34+
.grid {
35+
display: grid;
36+
gap: 16px;
37+
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
38+
}
39+
.tile {
40+
border: 1px solid #e3e6ef;
41+
border-radius: 10px;
42+
padding: 16px;
43+
background: #fafbff;
44+
}
45+
.tile h2 {
46+
margin: 0 0 8px 0;
47+
font-size: 18px;
48+
}
49+
ul {
50+
list-style: none;
51+
padding: 0;
52+
margin: 0;
53+
}
54+
li + li {
55+
margin-top: 8px;
56+
}
57+
a {
58+
color: #1b5fd6;
59+
text-decoration: none;
60+
}
61+
a:hover {
62+
text-decoration: underline;
63+
}
64+
.badge {
65+
display: inline-block;
66+
font-size: 12px;
67+
padding: 2px 8px;
68+
border-radius: 999px;
69+
background: #eef2ff;
70+
color: #3b4cca;
71+
margin-left: 6px;
72+
}
73+
</style>
74+
</head>
75+
<body>
76+
<div class="card">
77+
<h1>Lab - Indice Servizi</h1>
78+
<p>Accesso rapido ai servizi del lab sotto il prefisso <strong>/lab</strong>.</p>
79+
<div class="grid">
80+
<div class="tile">
81+
<h2>Dev</h2>
82+
<ul>
83+
<li><a href="/lab/dev/gitea/">Gitea</a></li>
84+
</ul>
85+
</div>
86+
<div class="tile">
87+
<h2>Env</h2>
88+
<ul>
89+
<li><a href="/lab/env/">Ambienti di sviluppo</a></li>
90+
</ul>
91+
</div>
92+
<div class="tile">
93+
<h2>Design</h2>
94+
<ul>
95+
<li><a href="/lab/design/penpot/">Penpot</a></li>
96+
<li><a href="/lab/design/drawio/">Draw.io</a></li>
97+
</ul>
98+
</div>
99+
<div class="tile">
100+
<h2>Docs</h2>
101+
<ul>
102+
<li><a href="/lab/docs/marktext/">MarkText</a><span class="badge">GUI</span></li>
103+
<li><a href="/lab/docs/bookstack/">BookStack</a></li>
104+
</ul>
105+
</div>
106+
</div>
107+
</div>
108+
</body>
109+
</html>

nginx/nginx.conf

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
worker_processes auto;
2+
3+
events {
4+
worker_connections 1024;
5+
}
6+
7+
http {
8+
include /etc/nginx/mime.types;
9+
default_type application/octet-stream;
10+
sendfile on;
11+
12+
map $http_upgrade $connection_upgrade {
13+
default upgrade;
14+
'' close;
15+
}
16+
17+
client_max_body_size 350m;
18+
19+
server {
20+
listen 8080;
21+
server_name _;
22+
return 301 https://$host:8443$request_uri;
23+
}
24+
25+
server {
26+
listen 8443 ssl;
27+
server_name _;
28+
29+
root /usr/share/nginx/html;
30+
31+
ssl_certificate /etc/nginx/certs/fullchain.pem;
32+
ssl_certificate_key /etc/nginx/certs/privkey.pem;
33+
ssl_protocols TLSv1.2 TLSv1.3;
34+
ssl_session_cache shared:SSL:10m;
35+
ssl_session_timeout 10m;
36+
37+
add_header Strict-Transport-Security "max-age=31536000" always;
38+
39+
location = /lab { return 301 /lab/; }
40+
location = /lab/ { try_files /lab-index.html =404; }
41+
location = /lab/index.html { try_files /lab-index.html =404; }
42+
43+
location = /lab/env { return 301 /lab/env/; }
44+
location = /lab/env/ { try_files /lab-env-index.html =404; }
45+
location = /lab/env/index.html { try_files /lab-env-index.html =404; }
46+
47+
location = /lab/dev/gitea { return 301 /lab/dev/gitea/; }
48+
location /lab/dev/gitea/ {
49+
proxy_set_header Host $host;
50+
proxy_set_header X-Real-IP $remote_addr;
51+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
52+
proxy_set_header X-Forwarded-Proto $scheme;
53+
proxy_set_header X-Forwarded-Prefix /lab/dev/gitea;
54+
proxy_pass http://gitea:3000/;
55+
}
56+
57+
location = /lab/design/penpot { return 301 /lab/design/penpot/; }
58+
location /lab/design/penpot/ws/notifications {
59+
proxy_http_version 1.1;
60+
proxy_set_header Upgrade $http_upgrade;
61+
proxy_set_header Connection $connection_upgrade;
62+
proxy_set_header Host $host;
63+
proxy_set_header X-Forwarded-Proto $scheme;
64+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
65+
proxy_set_header X-Forwarded-Prefix /lab/design/penpot;
66+
proxy_pass http://penpot-frontend:8080/ws/notifications;
67+
}
68+
location /lab/design/penpot/ {
69+
proxy_set_header Host $host;
70+
proxy_set_header X-Real-IP $remote_addr;
71+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
72+
proxy_set_header X-Forwarded-Proto $scheme;
73+
proxy_set_header X-Forwarded-Prefix /lab/design/penpot;
74+
proxy_pass http://penpot-frontend:8080/;
75+
}
76+
77+
location = /lab/design/drawio { return 301 /lab/design/drawio/; }
78+
location /lab/design/drawio/ {
79+
proxy_set_header Host $host;
80+
proxy_set_header X-Real-IP $remote_addr;
81+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
82+
proxy_set_header X-Forwarded-Proto $scheme;
83+
proxy_set_header X-Forwarded-Prefix /lab/design/drawio;
84+
proxy_pass http://drawio:8080/;
85+
}
86+
87+
location = /lab/docs/marktext { return 301 /lab/docs/marktext/; }
88+
location /lab/docs/marktext/ {
89+
proxy_set_header Host $host;
90+
proxy_set_header X-Real-IP $remote_addr;
91+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
92+
proxy_set_header X-Forwarded-Proto $scheme;
93+
proxy_set_header X-Forwarded-Prefix /lab/docs/marktext;
94+
proxy_pass http://marktext:5800/;
95+
}
96+
location ~ ^/lab/docs/marktext/(websockify.*)$ {
97+
proxy_http_version 1.1;
98+
proxy_set_header Upgrade $http_upgrade;
99+
proxy_set_header Connection $connection_upgrade;
100+
proxy_set_header Host $host;
101+
proxy_set_header X-Forwarded-Proto $scheme;
102+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
103+
proxy_read_timeout 86400;
104+
proxy_pass http://marktext:5800/$1;
105+
}
106+
107+
location = /lab/docs/bookstack { return 301 /lab/docs/bookstack/; }
108+
location /lab/docs/bookstack/ {
109+
proxy_set_header Host $host;
110+
proxy_set_header X-Real-IP $remote_addr;
111+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
112+
proxy_set_header X-Forwarded-Proto $scheme;
113+
proxy_set_header X-Forwarded-Prefix /lab/docs/bookstack;
114+
proxy_pass http://bookstack:80/;
115+
}
116+
117+
location = /lab/env/node { return 301 /lab/env/node/; }
118+
location /lab/env/node/ {
119+
proxy_http_version 1.1;
120+
proxy_set_header Upgrade $http_upgrade;
121+
proxy_set_header Connection $connection_upgrade;
122+
proxy_set_header Host $host;
123+
proxy_set_header X-Real-IP $remote_addr;
124+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
125+
proxy_set_header X-Forwarded-Proto $scheme;
126+
proxy_set_header X-Forwarded-Prefix /lab/env/node;
127+
proxy_read_timeout 86400;
128+
proxy_pass http://node-dev:8080/;
129+
}
130+
131+
location = /lab/env/python { return 301 /lab/env/python/; }
132+
location /lab/env/python/ {
133+
proxy_http_version 1.1;
134+
proxy_set_header Upgrade $http_upgrade;
135+
proxy_set_header Connection $connection_upgrade;
136+
proxy_set_header Host $host;
137+
proxy_set_header X-Real-IP $remote_addr;
138+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
139+
proxy_set_header X-Forwarded-Proto $scheme;
140+
proxy_set_header X-Forwarded-Prefix /lab/env/python;
141+
proxy_read_timeout 86400;
142+
proxy_pass http://python-dev:8080/;
143+
}
144+
145+
location = /lab/env/ai { return 301 /lab/env/ai/; }
146+
location /lab/env/ai/ {
147+
proxy_http_version 1.1;
148+
proxy_set_header Upgrade $http_upgrade;
149+
proxy_set_header Connection $connection_upgrade;
150+
proxy_set_header Host $host;
151+
proxy_set_header X-Real-IP $remote_addr;
152+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
153+
proxy_set_header X-Forwarded-Proto $scheme;
154+
proxy_set_header X-Forwarded-Prefix /lab/env/ai;
155+
proxy_read_timeout 86400;
156+
proxy_pass http://ai-dev:8080/;
157+
}
158+
159+
location = /lab/env/cpp { return 301 /lab/env/cpp/; }
160+
location /lab/env/cpp/ {
161+
proxy_http_version 1.1;
162+
proxy_set_header Upgrade $http_upgrade;
163+
proxy_set_header Connection $connection_upgrade;
164+
proxy_set_header Host $host;
165+
proxy_set_header X-Real-IP $remote_addr;
166+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
167+
proxy_set_header X-Forwarded-Proto $scheme;
168+
proxy_set_header X-Forwarded-Prefix /lab/env/cpp;
169+
proxy_read_timeout 86400;
170+
proxy_pass http://cpp-dev:8080/;
171+
}
172+
}
173+
}

0 commit comments

Comments
 (0)