Add pelajaran 1 (Nginx) and pelajaran 2 (Node) lab starters.
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
# learn — lab fullstack + homelab
|
||||
|
||||
Repo Gitea: https://git.sayudha.uk/sayudhalw/learn
|
||||
|
||||
Edit di Cursor di Mac, commit, lalu `git push`. Deploy ke `ubuntu-vm` terpisah (Docker).
|
||||
|
||||
## Isi (`main`)
|
||||
|
||||
| Folder | Pelajaran | Port di VM |
|
||||
|--------|-----------|------------|
|
||||
| `pelajaran-1/` | Nginx + HTML statis | `8088` |
|
||||
| `pelajaran-2/` | Node.js di Docker | `8091` |
|
||||
|
||||
## Git remote
|
||||
|
||||
```bash
|
||||
git remote -v
|
||||
# gitea git@gitea:sayudhalw/learn.git
|
||||
```
|
||||
|
||||
Butuh entry SSH (sudah disarankan di mesin ini):
|
||||
|
||||
```text
|
||||
Host gitea
|
||||
HostName 192.168.0.104
|
||||
Port 2222
|
||||
User git
|
||||
ProxyJump proxmox
|
||||
```
|
||||
|
||||
## Sync kode ke ubuntu-vm (jalankan container)
|
||||
|
||||
```bash
|
||||
rsync -av pelajaran-1/ ubuntu-vm:~/learn/pelajaran-1/
|
||||
rsync -av pelajaran-2/ ubuntu-vm:~/learn/pelajaran-2/
|
||||
```
|
||||
|
||||
```bash
|
||||
ssh ubuntu-vm 'cd ~/learn/pelajaran-1 && docker compose up -d'
|
||||
ssh ubuntu-vm 'cd ~/learn/pelajaran-2 && docker compose up -d --build'
|
||||
```
|
||||
|
||||
## Tunnel browser (dari Mac)
|
||||
|
||||
```bash
|
||||
ssh -N -L 8088:127.0.0.1:8088 ubuntu-vm # pelajaran 1
|
||||
ssh -N -L 8091:127.0.0.1:8091 ubuntu-vm # pelajaran 2
|
||||
```
|
||||
@@ -0,0 +1,8 @@
|
||||
services:
|
||||
web:
|
||||
image: nginx:alpine
|
||||
ports:
|
||||
- "8088:80"
|
||||
volumes:
|
||||
- ./index.html:/usr/share/nginx/html/index.html:ro
|
||||
restart: unless-stopped
|
||||
@@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="id">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Hello Homelab</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: system-ui, sans-serif;
|
||||
max-width: 40rem;
|
||||
margin: 4rem auto;
|
||||
padding: 0 1rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
code {
|
||||
background: #eee;
|
||||
padding: 0.1rem 0.3rem;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello dari homelab</h1>
|
||||
<p>Ini halaman statis di Docker di VM Ubuntu (Proxmox).</p>
|
||||
<p>Host: <code>ubuntu-vm</code> · Hypervisor: <code>sayudha</code> (PVE 9.2)</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,5 @@
|
||||
FROM node:22-alpine
|
||||
WORKDIR /app
|
||||
COPY server.js .
|
||||
EXPOSE 3000
|
||||
CMD ["node", "server.js"]
|
||||
@@ -0,0 +1,6 @@
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "8091:3000"
|
||||
restart: unless-stopped
|
||||
@@ -0,0 +1,30 @@
|
||||
const http = require("http");
|
||||
|
||||
const server = http.createServer((request, response) => {
|
||||
// request = apa yang browser minta
|
||||
// response = apa yang kita kirim balik
|
||||
|
||||
const waktu = new Date().toLocaleString("id-ID");
|
||||
|
||||
response.writeHead(200, {
|
||||
"Content-Type": "text/html; charset=utf-8",
|
||||
});
|
||||
|
||||
response.end(`<!DOCTYPE html>
|
||||
<html lang="id">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>Hello Node</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello dari Node di homelab</h1>
|
||||
<p>Ini bukan file HTML diam. Teks di bawah dibuat oleh JavaScript saat request datang.</p>
|
||||
<p>Waktu server sekarang: <strong>${waktu}</strong></p>
|
||||
<p>Path yang diminta: <code>${request.url}</code></p>
|
||||
</body>
|
||||
</html>`);
|
||||
});
|
||||
|
||||
server.listen(3000, () => {
|
||||
console.log("Server siap di port 3000");
|
||||
});
|
||||
Reference in New Issue
Block a user