Preskoči na vsebino

Implementacija Astro strani s Traefik in Systemd

Ta vodila vas vodi skozi postopek uvajanja vaše Astro Starlight strani na produkcijski strežnik. Po končanju boste imeli popolnoma funkcionalno spletno stran z avtomatskimi SSL certifikati, uravnoteženjem obremenitve in avtomatskim upravljanjem storitev. Vodila predpostavlja, da imate osnovno znanje Linux ukazne vrstice in dostop do strežnika z Debian/Ubuntu ter nameščenimi Docker in Docker Compose.

  • Strežnik z Debian/Ubuntu
  • Nameščena Docker in Docker Compose
  • Domena (npr. <example.com>)
  • Osnovno znanje Linux ukazne vrstice
  • Node.js 18.17 ali novejše

Če še nimate Astro projekta, ga ustvarite s privzetim predlogo:

Terminal window
npm create astro@latest my-site

Vodič vas bo poprosil za izbire (privzeto: Starlight, prazna konfiguracija itd.). Ko je ustvarjen, pojdite v imenik projekta:

Terminal window
cd my-site

Pregled arhitekture

Internet → Traefik (SSL/Vrata 443) → Busybox httpd (Statične datoteke)
Systemd upravljanje storitev
  • Traefik: Obravnava SSL certifikate, usmerjanje in uravnoteženje obremenitve
  • Busybox httpd: Lahka spletna strežnica, ki servira statične Astro datoteke
  • Systemd: Upravlja življenjski cikel storitve in avtomatske ponovne zagon
  1. Namestite odvisnosti in zgradite

    Terminal window
    npm install
    npm run build
  2. Preverite izhod gradnje

    Terminal window
    ls -la dist/

    Videti bi morali statične datoteke vaše strani v mapi dist/.

  1. Ustvarite mapo za uvajanje

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

    Terminal window
    sudo cp -r dist /etc/docker-compose/<your_site>/
  3. Ustvarite Docker datoteke Ustvarite naslednje datoteke v /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. Ustvarite systemd predlogo storitve

    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 naložite systemd

    Terminal window
    sudo systemctl daemon-reload
  1. Dodajte A zapis Usmerite svojo domeno (<example.com>) na IP naslov vašega strežnika.

  2. Preverite širjenje DNS

    Terminal window
    nslookup <example.com>
  1. Zaženite storitev

    Terminal window
    sudo systemctl start docker-compose@<your_site>
  2. Omogočite ob zagonu

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

    Terminal window
    sudo systemctl status docker-compose@<your_site>
  1. Preverite Traefik nadzorno ploščo Obiščite http://<your_server_ip>:8080 za ogled Traefik nadzorne plošče.

  2. Preizkusite HTTPS Obiščite https://<example.com> - videti bi morali svojo Astro stran z veljavnim SSL certifikatom.

  3. Preverite dnevnike

    Terminal window
    sudo journalctl -u docker-compose@<your_site> -f
  1. Zgradite novo različico

    Terminal window
    npm run build
  2. Posodobite datoteke uvajanja

    Terminal window
    sudo cp -r dist/* /etc/docker-compose/<your_site>/dist/
  3. Ponovno naložite storitev

    Terminal window
    sudo systemctl reload docker-compose@<your_site>
Terminal window
# Preverite Docker status
sudo systemctl status docker
# Preverite compose dnevnike
sudo docker compose -f /etc/docker-compose/<your_site>/compose.yaml logs
Terminal window
# Preverite Traefik dnevnike
sudo docker logs traefik
# Preverite usmerjanje domene
curl -I https://<example.com>
Terminal window
# Popravite dovoljenja
sudo chown -R $USER:$USER /etc/docker-compose/<your_site>/
  • Spremenite privzeta vrata Traefik nadzorne plošče (8080) v produkciji
  • Uporabite močna gesla za vse izpostavljene storitve
  • Ohranite Docker in Traefik posodobljena
  • Redno spremljajte dnevnike

Sedaj imate produkcijsko pripravljeno uvajanje Astro strani z:

  • Avtomatskimi SSL certifikati
  • Uravnoteženjem obremenitve in usmerjanjem
  • Spremljanjem storitve in avtomatskim ponovnim zagonom
  • Enostavnimi posodobitvami in vzdrževanjem

Naslednji koraki: