Preskoči na sadržaj

Implementacija Astro stranice s Traefik i Systemd

Ovaj vodič vas vodi kroz postupak uvajanja vaše Astro Starlight stranice na produkcijski poslužitelj. Po završetku ćete imati potpuno funkcionalnu web stranicu s automatskim SSL certifikatima, uravnoteživanjem opterećenja i automatskim upravljanjem usluga. Vodič pretpostavlja da imate osnovno znanje Linux naredbenog retka i pristup poslužitelju s Debian/Ubuntu te instaliranim Docker i Docker Compose.

  • Poslužitelj s Debian/Ubuntu
  • Instalirani Docker i Docker Compose
  • Naziv domene (npr. <example.com>)
  • Osnovno znanje Linux naredbenog retka
  • Node.js 18.17 ili noviji

Ako još nemate Astro projekt, kreirajte ga koristeći službeni CLI:

Terminal window
npm create astro@latest my-site

Čarobnjak će vas voditi kroz izbore (zadano: Starlight, prazna konfiguracija, itd.). Kad je kreiran, prijeđite u direktorij projekta:

Terminal window
cd my-site
Internet → Traefik (SSL/Port 443) → Busybox httpd (Statičke datoteke)
Systemd upravljanje uslugama
  • Traefik: Rukuje SSL certifikatima, usmjeravanjem i uravnoteživanjem opterećenja
  • Busybox httpd: Lagani web poslužitelj koji servira statičke Astro datoteke
  • Systemd: Upravlja životnim ciklusom usluge i automatskim ponovnim pokretanjima
  1. Instalirajte ovisnosti i izgradite

    Terminal window
    npm install
    npm run build
  2. Provjerite izlaz izgradnje

    Terminal window
    ls -la dist/

    Trebali biste vidjeti statičke datoteke svoje stranice u mapi dist/.

  1. Stvorite mapu za uvajanje

    Terminal window
    sudo mkdir -p /etc/docker-compose/<your_site>
  2. Kopirajte datoteke izgradnje

    Terminal window
    sudo cp -r dist /etc/docker-compose/<your_site>/
  3. Stvorite Docker datoteke Stvorite sljedeće datoteke u /etc/docker-compose/<your_site>/:

services:
traefik:
image: traefik:latest
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.letsencrypt.acme.email=<your_email>"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- letsencrypt:/letsencrypt
networks:
- web
restart: unless-stopped
web:
image: busybox:1.36
command: httpd -f -p 80 -h /www
volumes:
- /etc/docker-compose/<your_site>/dist:/www:ro
labels:
- "traefik.enable=true"
- "traefik.http.routers.<your_site>.rule=Host(`<example.com>`)"
- "traefik.http.routers.<your_site>.entrypoints=websecure"
- "traefik.http.routers.<your_site>.tls.certresolver=letsencrypt"
- "traefik.http.services.<your_site>.loadbalancer.server.port=80"
networks:
- web
restart: unless-stopped
volumes:
letsencrypt:
networks:
web:
driver: bridge
  1. Stvorite systemd predložak usluge

    Terminal window
    sudo tee /etc/systemd/system/docker-compose@.service > /dev/null <<EOF
    [Unit]
    Description=docker-compose %i service
    Requires=docker.service network-online.target
    After=docker.service network-online.target
    [Service]
    WorkingDirectory=/etc/docker-compose/%i
    Type=simple
    TimeoutStartSec=15min
    Restart=always
    ExecStartPre=/usr/bin/docker compose pull --quiet
    ExecStartPre=/usr/bin/docker compose build
    ExecStart=/usr/bin/docker compose up --remove-orphans
    ExecStop=/usr/bin/docker compose down --remove-orphans
    ExecReload=/usr/bin/docker compose pull --quiet
    ExecReload=/usr/bin/docker compose build
    [Install]
    WantedBy=multi-user.target
    EOF
  2. Ponovno učitajte systemd

    Terminal window
    sudo systemctl daemon-reload
  1. Dodajte A zapis Usmjerite svoju domenu (<example.com>) na IP adresu svog poslužitelja.

  2. Provjerite širenje DNS-a

    Terminal window
    nslookup <example.com>
  1. Pokrenite uslugu

    Terminal window
    sudo systemctl start docker-compose@<your_site>
  2. Omogućite pri pokretanju

    Terminal window
    sudo systemctl enable docker-compose@<your_site>
  3. Provjerite status

    Terminal window
    sudo systemctl status docker-compose@<your_site>
  1. Provjerite Traefik nadzornu ploču Posjetite http://<your_server_ip>:8080 da vidite Traefik nadzornu ploču.

  2. Testirajte HTTPS Posjetite https://<example.com> - trebali biste vidjeti svoju Astro stranicu s valjanim SSL certifikatom.

  3. Provjerite zapisnike

    Terminal window
    sudo journalctl -u docker-compose@<your_site> -f
  1. Izgradite novu verziju

    Terminal window
    npm run build
  2. Ažurirajte datoteke uvajanja

    Terminal window
    sudo cp -r dist/* /etc/docker-compose/<your_site>/dist/
  3. Ponovno učitajte uslugu

    Terminal window
    sudo systemctl reload docker-compose@<your_site>
Terminal window
# Provjerite Docker status
sudo systemctl status docker
# Provjerite compose zapisnike
sudo docker compose -f /etc/docker-compose/<your_site>/compose.yaml logs
Terminal window
# Provjerite Traefik zapisnike
sudo docker logs traefik
# Provjerite usmjeravanje domene
curl -I https://<example.com>
Terminal window
# Ispravite dozvole
sudo chown -R $USER:$USER /etc/docker-compose/<your_site>/
  • Promijenite zadana vrata Traefik nadzorne ploče (8080) u produkciji
  • Koristite jaka lozinke za sve izložene usluge
  • Držite Docker i Traefik ažurirane
  • Redovito nadzirajte zapisnike

Sada imate produkcijsko spremno uvajanje Astro stranice s:

  • Automatskim SSL certifikatima
  • Uravnoteživanjem opterećenja i usmjeravanjem
  • Nadzorom usluge i automatskim ponovnim pokretanjem
  • Jednostavnim ažuriranjima i održavanjem

Sljedeći koraci: