First
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
# /opt/docker/core/caddy/Caddyfile (bcrypt-хеш скрыт — реальный в файле на VPS)
|
||||
(protected) {
|
||||
basic_auth {
|
||||
admin <bcrypt-хеш в файле на VPS>
|
||||
}
|
||||
}
|
||||
portainer.nao-kvn.ru {
|
||||
import protected
|
||||
reverse_proxy portainer:9000
|
||||
}
|
||||
status.nao-kvn.ru {
|
||||
import protected
|
||||
reverse_proxy uptime-kuma:3001
|
||||
}
|
||||
vault.nao-kvn.ru {
|
||||
reverse_proxy vaultwarden:80
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
# /opt/docker/core/docker-compose.yml (ADMIN_TOKEN скрыт — реальный в файле на VPS)
|
||||
services:
|
||||
caddy:
|
||||
image: caddy:2
|
||||
restart: unless-stopped
|
||||
ports: ["80:80", "443:443"]
|
||||
volumes:
|
||||
- ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro
|
||||
- caddy_data:/data
|
||||
- caddy_config:/config
|
||||
networks: [proxy]
|
||||
|
||||
portainer:
|
||||
image: portainer/portainer-ce:lts
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- portainer_data:/data
|
||||
networks: [proxy]
|
||||
|
||||
uptime-kuma:
|
||||
image: louislam/uptime-kuma:1
|
||||
restart: unless-stopped
|
||||
volumes: [uptime_data:/app/data]
|
||||
networks: [proxy]
|
||||
|
||||
vaultwarden:
|
||||
image: vaultwarden/server:latest
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
DOMAIN: "https://vault.nao-kvn.ru"
|
||||
SIGNUPS_ALLOWED: "false"
|
||||
ADMIN_TOKEN: "<задан в файле на VPS>"
|
||||
volumes: [vaultwarden_data:/data]
|
||||
networks: [proxy]
|
||||
|
||||
volumes: { caddy_data: , caddy_config: , portainer_data: , uptime_data: , vaultwarden_data: }
|
||||
networks: { proxy: }
|
||||
@@ -0,0 +1 @@
|
||||
{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }
|
||||
@@ -0,0 +1,10 @@
|
||||
# /etc/fail2ban/jail.local
|
||||
[DEFAULT]
|
||||
banaction = ufw
|
||||
bantime = 1h
|
||||
findtime = 10m
|
||||
maxretry = 5
|
||||
|
||||
[sshd]
|
||||
enabled = true
|
||||
backend = systemd
|
||||
@@ -0,0 +1,15 @@
|
||||
# rclone remotes — /root/.config/rclone/rclone.conf
|
||||
Секреты (токен Google Drive, obscured-пароль SMB) — в самом rclone.conf на VPS, здесь не приводятся.
|
||||
|
||||
## gdrive (Google Drive)
|
||||
- type: drive, scope: drive.file (видит только свои файлы)
|
||||
- путь бэкапов: `gdrive:vaultwarden-backups/`
|
||||
- (пере)авторизация: на машине с браузером `rclone config` (auto-config), затем скопировать
|
||||
`~/.config/rclone/rclone.conf` на VPS в `/root/.config/rclone/`.
|
||||
|
||||
## homesmb (домашний SMB через WG)
|
||||
- type: smb, host: 172.16.0.1, user: only_vps, pass: зашифрован (--obscure)
|
||||
- путь: `"homesmb:TOSHIBA EXT/vaultwarden-backups/"` (кавычки из-за пробела в имени шары)
|
||||
- пересоздать:
|
||||
`rclone config create homesmb smb host 172.16.0.1 user only_vps pass "<пароль>" --obscure`
|
||||
- зависит от поднятого туннеля wg0.
|
||||
@@ -0,0 +1,6 @@
|
||||
# /etc/ssh/sshd_config.d/00-hardening.conf
|
||||
# Префикс 00- намеренно: sshd берёт первое значение, перебивает cloud-init.
|
||||
PasswordAuthentication no
|
||||
KbdInteractiveAuthentication no
|
||||
PermitRootLogin prohibit-password
|
||||
PubkeyAuthentication yes
|
||||
@@ -0,0 +1,12 @@
|
||||
# /etc/wireguard/wg0.conf (приватный ключ и endpoint скрыты — реальные в файле на VPS)
|
||||
[Interface]
|
||||
PrivateKey = <в файле на VPS>
|
||||
Address = 10.0.0.5/32
|
||||
|
||||
[Peer]
|
||||
PublicKey = <публичный ключ WG-сервера Keenetic>
|
||||
Endpoint = 91.122.209.x:<порт>
|
||||
AllowedIPs = 10.0.0.0/24, 172.16.0.0/24
|
||||
PersistentKeepalive = 25
|
||||
# VPS в туннеле 10.0.0.5; Keenetic 10.0.0.1; домашняя LAN/SMB 172.16.0.0/24 (хост 172.16.0.1)
|
||||
# systemd: wg-quick@wg0 enabled (автоподъём при загрузке)
|
||||
Reference in New Issue
Block a user