← All Posts
June 2, 20264 min read

Cum si de ce hostez websitul meu pe un sony vaio 2013

Cum si de ce hostez websitul meu pe un sony vaio 2013

Cum si de ce hostez websitul meu pe un sony vaio 2013

Probabil nu mulți dintre voi își hostează propriul website și e probabil un lucru bun. Problema mea era mereu de ce — că nimeni nu o face. Lucrez în IT de aproape 5 ani deja, dar am fost pasionat de tehnologie din copilărie. Cei 5 ani sunt anii în care am început să consider asta ceva serios, pentru că prima mea tangentă cu IT-ul a fost consola mea Dandi pe care mă jucam Mario — și nici prin gând nu mi-ar fi trecut că oamenii pot face bani din asta.

Pe de o parte, tehnologiile au devenit cu mult mai complexe și sofisticate, dar pe de altă parte au devenit și mai înfricoșătoare — acum, având datele unui om, poți să îi controlezi viața. Cu un Dandi nu puteai face chestia asta.

Există un comedian stand-up de origine chineză care glumește că toți americanii se mândresc că cumpără lucruri scumpe, pe când părinții lui și toți chinezii se mândresc că plătesc mai puțin și fac chilipiruri. Și pentru că am trăit 10 ani în China, probabil am luat puțin din filozofia asta cu mine.

Deci, când m-am gândit să îmi fac un website personal, prima întrebare nu a fost "ce platformă aleg?" — a fost "de ce să plătesc lunar pentru ceva ce pot rula eu?"

Și uite cum am ajuns să hosteaz vmwhoami.com pe un Sony Vaio din 2013.

Hardware-ul

E un laptop vechi cu un procesor Intel Core i3, 8 GB RAM și un SSD de 500 GB. L-am transformat în server Ubuntu și l-am băgat într-un dulap. Nu arată a datacenter, dar funcționează.

Ce rulează pe el

Toată infrastructura e containerizată cu Docker. La momentul scrierii acestui articol, pe mașina asta rulează simultan:

  • vmwhoami.com — site-ul pe care îl citești acum (Nuxt 3 frontend + FastAPI backend + PostgreSQL)

  • bodylevelup.com — un alt proiect, un website pentru fitness (tot Nuxt 3 + FastAPI)

  • MinIO — storage pentru imagini și fișiere, ca un fel de S3 propriu

  • n8n — automatizări (reminder-uri, workflows)

  • Ollama — un model AI care rulează local (a trebuia sa il opresc consuma prea multa memorie)

  • Nginx Proxy Manager — reverse proxy pentru toate domeniile

  • Cloudflare Tunnel — cum ajunge traficul de pe internet până la laptopul din dulap, fără să expun IP-ul acasă

De ce Cloudflare Tunnel și nu un IP static?

Furnizorul meu de internet îmi dă un IP dinamic și, sincer, nici nu vreau să expun direct adresa de acasă pe internet. Cloudflare Tunnel creează o conexiune criptată outbound de pe serverul meu către rețeaua Cloudflare — ei primesc request-urile, le trimit prin tunel la mine, și eu răspund. Gratuit. Fără port forwarding, fără IP static, fără risc.

# docker-compose.yml

services:

frontend:

build: ./frontend

networks:

- nginxproxymanager_default

environment:

- NUXT_PUBLIC_API_BASE=https://api.vmwhoami.com

- NODE_ENV=production

- NITRO_PORT=3000

- NITRO_HOST=0.0.0.0

- VITE_API_URL=https://api.vmwhoami.com

expose:

- "3000"

restart: unless-stopped

mem_limit: 256m

cpus: 0.3

healthcheck:

test: ["CMD-SHELL", "curl -f http://localhost:3000 || exit 1"]

interval: 30s

timeout: 5s

retries: 3

api:

networks:

- nginxproxymanager_default

build:

context: ./backend

dockerfile: Dockerfile

args:

USER_ID: ${HOST_UID:-1000}

GROUP_ID: ${HOST_GID:-1000}

user: "${HOST_UID:-1000}:${HOST_GID:-1000}"

expose:

- "8001"

environment:

- DATABASE_URL=${DATABASE_URL}

- OLLAMA_HOST=http://ollama:11434

- SECRET_KEY=${SECRET_KEY}

- MAIL_USERNAME=${MAIL_USERNAME}

- MAIL_PASSWORD=${MAIL_PASSWORD}

- MAIL_FROM=${MAIL_FROM}

- MAIL_FROM_NAME=${MAIL_FROM_NAME}

- MAIL_PORT=${MAIL_PORT}

- MAIL_SERVER=${MAIL_SERVER}

- MAIL_STARTTLS=${MAIL_STARTTLS}

- MAIL_SSL_TLS=${MAIL_SSL_TLS}

- ADMIN_EMAILS=${ADMIN_EMAILS}

- MINIO_ENDPOINT=minio:9000

- MINIO_ROOT_USER=${MINIO_ROOT_USER}

- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}

- MINIO_BUCKET_NAME=${MINIO_BUCKET_NAME:-images}

- MINIO_USE_SSL=false

- MINIO_PUBLIC_URL=${MINIO_PUBLIC_URL}

depends_on:

- db

- minio

volumes:

- ./backend/app:/app/app

- ./backend/alembic:/app/alembic

- ./backend/alembic.ini:/app/alembic.ini

- vector_store_data:/app/app/vector_store

command: uvicorn app.main:app --host 0.0.0.0 --port 8001

restart: unless-stopped

mem_limit: 512m

cpus: 0.5

db:

image: postgres:17

networks:

- nginxproxymanager_default

expose:

- "5432"

environment:

- POSTGRES_DB=${POSTGRES_DB}

- POSTGRES_USER=${POSTGRES_USER}

- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

volumes:

- postgres_data:/var/lib/postgresql/data

restart: always

deploy:

resources:

limits:

memory: 1G

minio:

image: minio/minio:latest

container_name: vmwhoami_minio

networks:

- nginxproxymanager_default

expose:

- "9000"

environment:

- MINIO_ROOT_USER=${MINIO_ROOT_USER}

- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}

- MINIO_BROWSER_REDIRECT_URL=http://localhost:9001

- MINIO_SERVER_URL=https://cdn.vmwhoami.com

volumes:

- minio_data:/data

command: server /data --console-address ":9001"

healthcheck:

test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]

interval: 30s

timeout: 10s

retries: 3

restart: unless-stopped

volumes:

postgres_data:

vector_store_data:

minio_data:

networks:

nginxproxymanager_default:

external: true

Cât costă?

Un VPS decent, cu resursele astea, ar costa undeva între 20 și 40€/lună. Laptopul l-am avut deja. Cloudflare Tunnel e gratuit. Domeniul costă câțiva euro pe an. Consumul electric al unui laptop vechi e undeva la 15–20 W — adică aproape nimic pe lună.

E filozofia chineză aplicată în IT.

Published June 2, 2026

← All Posts