Preskoči na sadržaj

Postavljanje Astro stranice uz Traefik i systemd

Izvorni Markdown kôd .md
---
title: Postavljanje Astro stranice uz Traefik i systemd
description: Potpuni vodič za postavljanje vaše Astro Starlight stranice koristeći Docker, Traefik reverse proxy i upravljanje uslugama uz systemd
---

import { Steps } from '@astrojs/starlight/components';

Ovaj vas vodič vodi kroz postupak postavljanja 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 uslugama. Vodič pretpostavlja da imate osnovno znanje Linux naredbenog retka i pristup poslužitelju s Debian/Ubuntu te instaliranim Docker i Docker Compose.

## Preduvjeti

* 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

## Postavljanje vašeg Astro projekta

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

```bash
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:

```bash
cd my-site
```

## Pregled arhitekture

```
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

## Korak 1: Izgradite svoju Astro stranicu

<Steps>

1. **Instalirajte ovisnosti i izgradite**
   ```bash
   npm install
   npm run build
   ```

2. **Provjerite izlaz izgradnje**
   ```bash
   ls -la dist/
   ```
   Trebali biste vidjeti statičke datoteke svoje stranice u mapi `dist/`.

</Steps>

## Korak 2: Pripremite mapu za postavljanje

<Steps>

1. **Stvorite mapu za postavljanje**
   ```bash
    sudo mkdir -p /etc/docker-compose/<your_site>
    ```

2. **Kopirajte datoteke izgradnje**
    ```bash
    sudo cp -r dist /etc/docker-compose/<your_site>/
    ```

3. **Stvorite Docker datoteke**
    Stvorite sljedeće datoteke u `/etc/docker-compose/<your_site>/`:

</Steps>

### compose.yaml

```yaml
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
```

## Korak 3: Konfigurirajte Systemd uslugu

<Steps>

1. **Stvorite systemd predložak usluge**
   ```bash
   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**
   ```bash
   sudo systemctl daemon-reload
   ```

</Steps>

## Korak 4: Konfigurirajte DNS

<Steps>

1. **Dodajte A zapis**
    Usmjerite svoju domenu (`<example.com>`) na IP adresu svog poslužitelja.

2. **Provjerite širenje DNS-a**
    ```bash
    nslookup <example.com>
    ```

</Steps>

## Korak 5: Pokrenite uslugu

<Steps>

1. **Pokrenite uslugu**
    ```bash
    sudo systemctl start docker-compose@<your_site>
    ```

2. **Omogućite pri pokretanju**
    ```bash
    sudo systemctl enable docker-compose@<your_site>
    ```

3. **Provjerite status**
    ```bash
    sudo systemctl status docker-compose@<your_site>
    ```

</Steps>

## Korak 6: Provjerite postavljanje

<Steps>

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**
    ```bash
    sudo journalctl -u docker-compose@<your_site> -f
    ```

</Steps>

## Ažuriranje svoje stranice

<Steps>

1. **Izgradite novu verziju**
   ```bash
   npm run build
   ```

2. **Ažurirajte datoteke postavljanja**
    ```bash
    sudo cp -r dist/* /etc/docker-compose/<your_site>/dist/
    ```

3. **Ponovno učitajte uslugu**
    ```bash
    sudo systemctl reload docker-compose@<your_site>
    ```

</Steps>

## Rješavanje problema

### Usluga se ne pokreće
```bash
# Provjerite Docker status
sudo systemctl status docker

# Provjerite compose zapisnike
sudo docker compose -f /etc/docker-compose/<your_site>/compose.yaml logs
```

### Problemi s SSL certifikatom
```bash
# Provjerite Traefik zapisnike
sudo docker logs traefik

# Provjerite usmjeravanje domene
curl -I https://<example.com>
```

### Problemi s dozvolama
```bash
# Ispravite dozvole
sudo chown -R $USER:$USER /etc/docker-compose/<your_site>/
```

## Sigurnosna razmatranja

- Promijenite zadana vrata Traefik nadzorne ploče (8080) u produkciji
- Koristite jake lozinke za sve izložene usluge
- Držite Docker i Traefik ažurirane
- Redovito nadzirajte zapisnike

## Zaključak

Sada imate produkcijski spremno postavljanje 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:**

* Provjerite [Traefik dokumentaciju](https://doc.traefik.io/traefik/) za napredne konfiguracije
* Pogledajte [Docker Compose dokumentaciju](https://docs.docker.com/compose/) za više opcija
* Razmislite o dodavanju nadzora s alatima poput Prometheus ili Grafana

Ovaj vas vodič vodi kroz postupak postavljanja 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 uslugama. 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 postavljanje

    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 postavljanja

    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 jake lozinke za sve izložene usluge
  • Držite Docker i Traefik ažurirane
  • Redovito nadzirajte zapisnike

Sada imate produkcijski spremno postavljanje 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: