Към съдържанието

Настройки за бисквитки

Изберете кои видове бисквитки разрешавате. Можете да промените избора си по всяко време чрез „Настройки за бисквитки“ в долната част на всяка страница. Декларация за поверителност

Необходими

Винаги включени

Нужни са за вход, за запазване на количката и на Вашите избори. Те са винаги включени.

Кои бисквитки?
  • weboke_sessie, weboke_klant, weboke_remember: Вашата сесия и оставането в акаунта
  • weboke_basket: Вашата количка
  • wkBtwIncl: показване на цените с или без ДДС
  • wok_cookies: Вашият избор за бисквитките, 12 месеца

Измерват коя реклама води до посещение или поръчка, за да не плащаме за реклами без резултат.

Кои бисквитки?
  • Google Ads чрез Google Tag Manager (_gcl_au, _gcl_aw), до 90 дни
  • OpenAI Ads, реклами в ChatGPT
  • wok_aff: кой партньор Ви е препратил към нас (партньорска програма), 60 дни

4,6

Държава и език

Всяка държава има собствен сайт, с цените и ДДС на тази държава.

Преглед

Рецепти: Uptime Kuma и Vaultwarden

Модул 9: Docker и docker compose · Време за четене: 13 минути

Цел на урока: След този урок ще можете да стартирате Uptime Kuma и Vaultwarden с docker compose зад Caddy, с https, затворена регистрация, резервни копия на volumes и установен начин за актуализиране.

Основни понятия: reverse proxy контейнер, Caddyfile, автоматичен https, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websockets, резервно копие на volumes, docker compose pull, собствен header

Какво изграждаме

Две полезни услуги на Вашия собствен сървър, всяка на отделен поддомейн:

  • Uptime Kuma на status.example.com: програма за наблюдение с уеб интерфейс, която следи Вашите уебсайтове, портове и сертификати и Ви изпраща известие, когато нещо спре да работи (урок 8.3). Внимание: наблюдение, което работи на същия сървър като това, което наблюдава, не забелязва, когато целият сървър отпадне. Затова го използвайте за другите си сайтове и услуги или го поставете на втори сървър.
  • Vaultwarden на seyf.example.com: лека, независима сървърна версия, която работи с приложенията и разширенията за браузър на Bitwarden. Хранилището за пароли е чувствителен софтуер: правете това само ако сте готови да го поддържате и да правите резервни копия редовно. Напълно нормално е и просто да използвате мениджър на пароли от доставчик.

Пред тях поставяме Caddy в контейнер: той приема портове 80 и 443, сам се грижи за сертификатите от Let's Encrypt (уроци 7.3 и 7.4) и препраща трафика към правилния контейнер. Uptime Kuma и Vaultwarden сами не публикуват портове (урок 9.3).

internet ──443──> caddy ──> uptime-kuma:3001
                        └─> vaultwarden:80

Предварителни условия

  1. Docker Engine с плъгина compose (урок 9.2).
  2. Два DNS записа, които сочат към Вашия сървър, A и AAAA (урок 7.1): status.example.com и seyf.example.com.
  3. Свободни портове 80 и 443 на сървъра. Ако на тези портове вече работи системен nginx или Caddy, контейнерът на Caddy не може да ги използва. Тогава изберете: или спирате системния уеб сървър, или оставяте него да върши работата на proxy и публикувате контейнерите на 127.0.0.1 (урок 9.3). В тази рецепта това прави контейнерът на Caddy.
  4. Отворени в ufw 80/tcp, 443/tcp и за HTTP/3 също 443/udp (урок 5.2). Строго погледнато Docker заобикаля ufw, но така прегледът на Вашата защитна стена отговаря на действителността.

Файловете

Всичко се поставя в една папка, /srv/uslugi/:

/srv/uslugi/
├── compose.yaml
├── Caddyfile
└── .env

compose.yaml

services:
  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
      - caddy-config:/config

  uptime-kuma:
    image: louislam/uptime-kuma:2
    restart: unless-stopped
    volumes:
      - uptime-kuma:/app/data

  vaultwarden:
    image: vaultwarden/server:1.37.5
    restart: unless-stopped
    environment:
      DOMAIN: "https://seyf.example.com"
      SIGNUPS_ALLOWED: "true"
      ADMIN_TOKEN: ${VW_ADMIN_TOKEN}
    volumes:
      - ./vw-data:/data

volumes:
  caddy-data:
  caddy-config:
  uptime-kuma:

Преди да започнете, проверете коя е най-новата версия на Vaultwarden (releases в GitHub) и я въведете в tag. Само Caddy публикува портове; те трябва да са публични. Volumes caddy-data (сертификати), uptime-kuma и папката vw-data съдържат всичко, което трябва да запазите.

Caddyfile

{
	email upravlenie@example.com
}

status.example.com {
	reverse_proxy uptime-kuma:3001
	header {
		X-Weboke-Cursus "kod-ot-zadachata"
		defer
	}
}

seyf.example.com {
	reverse_proxy vaultwarden:80
}

Caddy автоматично получава сертификат и за двете имена и пренасочва http към https. uptime-kuma и vaultwarden са имената на услугите от compose файла: Caddy ги намира във вътрешната мрежа. Блокът header добавя допълнителен header ред във всеки отговор на status.example.com; него ще използвате в задачата като доказателство, че Вашият proxy контейнер работи. С defer header се задава, след като услугата отзад е дала своя отговор. Ако искате и HSTS, и другите headers за сигурност от урок 7.4, поставете ги в същия блок.

Сигурна настройка на Vaultwarden

Четири неща правят разликата между сигурно и опасно хранилище.

Първо: само през https. Уеб хранилището на Bitwarden използва криптографията на браузъра, а браузърите я предоставят само на https страници. Без https то следователно не работи добре, и това е за добро. Документацията на Vaultwarden препоръчва reverse proxy за https, като Caddy тук. Задайте DOMAIN на пълния https адрес.

Второ: затворена регистрация. С SIGNUPS_ALLOWED: "true" всеки, който намери страницата, може да създаде акаунт на Вашия сървър. Затова стартирайте, веднага създайте собствения си акаунт (или акаунти), задайте стойността на "false" и изпълнете отново docker compose up -d. Ако по-късно искате да добавите някого, използвайте функцията за покани в администраторския панел.

Трето: хеширан администраторски token. Администраторският панел (/admin) е защитен с ADMIN_TOKEN. Не поставяйте там четима парола, а Argon2 хеш. Създавате го със самия Vaultwarden:

anna@web1:/srv/uslugi$ sudo docker compose exec vaultwarden /vaultwarden hash
Password:
Confirm Password:

ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$...'

Поставете този ред в .env (т.е. VW_ADMIN_TOKEN='$argon2id$...', с единични кавички) и направете файла четим само за root: sudo chmod 600 .env. Във файл .env не е нужно да удвоявате знаците $; ако поставите хеша директно под environment: в compose файла, тогава е нужно (всеки $ става $$), иначе Compose се опитва да ги попълни като променливи. В /admin влизате с паролата, която сте въвели, а не с хеша. Внимание: настройките, които запазвате в администраторския панел, се записват в vw-data/config.json и тогава имат предимство пред променливите на средата.

Четвърто: резервно копие и възстановяване. Всичко се намира в vw-data: базата данни, прикачените файлове и ключовете. Включете тази папка в резервното си копие с restic (урок 8.2) и за базата данни следвайте указанията за резервни копия в wiki на Vaultwarden, за да не копирате наполовина записан файл. Тествайте възстановяването (задача O8.2): хранилище без работещо резервно копие е риск за всичките Ви пароли.

Известията между устройствата (websockets) при новите версии на Vaultwarden работят през същия порт; Caddy ги препраща без допълнителна настройка.

Настройка на Uptime Kuma

След docker compose up -d отворете https://status.example.com. При първото посещение Uptime Kuma Ви моли да създадете администраторски акаунт. Направете го веднага: докато този акаунт не съществува, всеки, който намери страницата, може да го създаде. Ако изобщо не искате този риск, първо премахнете блока status от Caddyfile, създайте акаунта през SSH тунел (урок 2.3) и след това върнете блока.

След това добавете монитори: HTTP монитор за Вашия уебсайт, TCP монитор за порт, предупреждение за сертификат и канал за известия (имейл, програма за чат или push услуга). Включете също двуфакторното удостоверяване в настройките на Uptime Kuma.

Стартиране и проверка

anna@web1:/srv/uslugi$ sudo docker compose up -d
anna@web1:/srv/uslugi$ sudo docker compose ps
NAME                     SERVICE       STATUS          PORTS
uslugi-caddy-1           caddy         Up 2 minutes    0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, ...
uslugi-uptime-kuma-1     uptime-kuma   Up 2 minutes (healthy)
uslugi-vaultwarden-1     vaultwarden   Up 2 minutes (healthy)
anna@web1:/srv/uslugi$ sudo docker compose logs caddy | grep -i "certificate obtained"
anna@web1:~$ curl -sI https://status.example.com | grep -i x-weboke
x-weboke-cursus: kod-ot-zadachata

Само Caddy има портове. Ако сертификатът не се получи, в логовете на Caddy е посочено защо: обикновено DNS още не сочи към сървъра или порт 80 не е достъпен (урок 7.3).

Актуализиране

Контейнерът не се актуализира от unattended-upgrades (урок 4.2). Определете за това постоянен момент, например на всеки две седмици:

anna@web1:/srv/uslugi$ sudo docker compose pull
anna@web1:/srv/uslugi$ sudo docker compose up -d
anna@web1:/srv/uslugi$ sudo docker image prune

pull изтегля най-новите images в рамките на избрания от Вас tag (т.е. caddy:2 остава в рамките на версия 2). За Vaultwarden с номер на версия първо променете tag, след като прочетете release notes. При нова основна версия винаги четете release notes: понякога трябва да промените нещо в настройките си. Преди голяма актуализация направете резервно копие на volumes.

Следете и съобщенията за сигурност от създателите. Уязвимост във Vaultwarden или Caddy се отстранява само ако Вие изтеглите новата версия.

На практика

Тази рецепта работи на всеки VPS с Docker, при WebOké или при друг доставчик. Това е самопомощ: доставчикът на Вашия VPS не управлява нищо вътре във Вашите контейнери. Направете snapshot, преди да я настроите за първи път, и ще можете да експериментирате спокойно.

Обобщение

  • Един compose файл с Caddy като reverse proxy контейнер; само Caddy публикува портове 80 и 443, услугите не публикуват нищо.
  • Caddy се грижи автоматично за сертификатите и https и може да задава собствени header редове с header.
  • Vaultwarden: https е задължителен, DOMAIN на https адреса, затворена регистрация след собствения Ви акаунт, ADMIN_TOKEN като Argon2 хеш в .env с права 600.
  • Uptime Kuma: веднага създайте администраторския акаунт и включете двуфакторното удостоверяване; наблюдавайте с него най-вече други сървъри и сайтове.
  • Правете резервни копия на volumes и на папката vw-data и актуализирайте с docker compose pull и up -d в постоянен момент.

Тест (quiz)

1. Защо в тази рецепта Uptime Kuma и Vaultwarden сами не публикуват портове?



2. Защо уеб хранилището на Vaultwarden не работи добре през обикновен http?



3. Създали сте собствения си акаунт във Vaultwarden. Коя е следващата стъпка?



4. Поставяте Argon2 хеша на администраторския token директно под environment: в compose.yaml и получавате предупреждения за непознати променливи. Защо?



5. Как актуализирате тези услуги?



Задача

Задача Z9.4: Докажете, че Вашият контейнер работи. Вземете в задачата своя личен код и го поставете в Caddyfile на Вашия Caddy контейнер като header X-Weboke-Cursus за Ваш поддомейн (например status.<вашият-домейн>). Презаредете Caddy и въведете името на хоста. Програмата изтегля https://<име-на-хост>/ и проверява дали сертификатът е валиден и дали header съдържа точно Вашия код. Освен това поставете изхода от docker compose ps и отговорете коя услуга единствена публикува портове.

Задача Z9.4: Докажете, че Вашият контейнер работи

Кликнете върху "Покажете моя код" и добавете заглавния ред X-Weboke-Cursus с този код във Вашия Caddyfile, например: header { X-Weboke-Cursus "<code>" }. Отвън не може да се види дали нещо работи в контейнер, затова поставете и изхода на docker compose ps (не го съхраняваме).




Това, което въвеждате, и резултатите от проверката не се съхраняват. Браузърът Ви запомня отговорите и дали сте изпълнили задачата. Ако сте влезли, запазваме само дали задачата е била (почти) правилна в Моите курсове; и там можете да го изтриете.

Още за четене

Моля, изчакайте…

Настройте домейните си

За всеки домейн настройте сървърите за имена, връзката с хостинга и кой ще бъде собственикът.

Домейните Ви се зареждат…