Files
linux-install-helper/vaultwarden/deploy.sh

84 lines
2.5 KiB
Bash
Raw Normal View History

2025-04-25 12:49:13 +02:00
#!/bin/bash
2025-04-25 15:38:43 +02:00
. ./env.sh
2025-04-25 12:49:13 +02:00
set -e
mkdir -p $DATA_FOLDER
2025-05-02 20:39:28 +02:00
if systemctl --user list-units --full --all | grep -q "vaultwarden-${CONTAINER_NAME}.service"; then
systemctl --user stop vaultwarden-${CONTAINER_NAME}.service
2025-04-25 13:06:07 +02:00
fi
2025-04-25 12:49:13 +02:00
2025-05-02 20:39:28 +02:00
if podman container exists "$CONTAINER_NAME"; then
echo "Stop and delete existing container $CONTAINER_NAME"
if podman inspect -f '{{.State.Running}}' "$CONTAINER_NAME" | grep -q true; then
podman stop "$CONTAINER_NAME"
fi
podman rm "$CONTAINER_NAME"
fi
2025-04-25 12:49:13 +02:00
podman create \
--name vaultwarden \
--restart=unless-stopped \
2025-04-25 16:34:16 +02:00
-e DOMAIN=https://$DOMAIN \
2025-05-04 11:51:24 +02:00
-e SHOW_PASSWORD_HINT=true \
-e SMTP_HOST=$SMTP_HOST \
-e SMTP_FROM=$SMTP_FROM \
-e SMTP_PORT=$SMTP_PORT \
-e SMTP_SECURITY=$SMTP_SECURITY \
-e SMTP_USERNAME=$SMTP_USERNAME \
-e SMTP_PASSWORD=$SMTP_PASSWORD \
2025-04-25 12:49:13 +02:00
-p $PORT:80 \
-v $DATA_FOLDER:/data \
docker.io/vaultwarden/server:latest
podman generate systemd \
--new \
--name $CONTAINER_NAME \
--files \
2025-05-02 20:39:28 +02:00
--container-prefix=vaultwarden \
2025-04-25 12:49:13 +02:00
--restart-policy=always
mkdir -p $USER_SYSTEMD
mv vaultwarden-$CONTAINER_NAME.service $USER_SYSTEMD
2025-04-25 12:49:13 +02:00
systemctl --user daemon-reload
2025-05-02 20:39:28 +02:00
systemctl --user enable --now vaultwarden-$CONTAINER_NAME.service
2025-04-25 12:49:13 +02:00
2025-04-25 15:38:43 +02:00
sudo loginctl enable-linger $USER
# generate haproxy blocks
sudo mkdir -p $SERVICE_DIR
echo "crt $SSL_PATH/fullchain.pem" | sudo tee $SERVICE_DIR/cert.block > /dev/null
ACL_CFG=$(cat <<EOF
acl is_vw hdr(host) -i $DOMAIN
use_backend vw_backend if is_vw
EOF
)
echo "$ACL_CFG" | sudo tee $SERVICE_DIR/acl.block > /dev/null
BACKEND_CFG=$(cat <<EOF
backend vw_backend
mode http
option httpchk GET /
option forwardfor
# Set the Source IP in the X-Real-IP header
http-request set-header X-Real-IP %[src]
server vwhttp 127.0.0.1:$PORT alpn http/1.1 check
EOF
)
echo "$BACKEND_CFG" | sudo tee $SERVICE_DIR/backend.block > /dev/null
echo "Generate backup script"
BACKUP_FILE="vw_backup.sh"
cp backup.sh $BACKUP_FILE
sed -i "s|^SOURCE=\"\"|SOURCE=\"$VW_FOLDER\"|" "$BACKUP_FILE"
sed -i "s|^LOCAL_BACKUP=\"\$HOME/.local/backup/\"|LOCAL_BACKUP=\"\$HOME/.local/backup/$CONTAINER_NAME\"|" "$BACKUP_FILE"
sed -i "s|^REMOTE=\"\"|REMOTE=\"$BACKUP_REMOTE\"|" "$BACKUP_FILE"
sed -i "s|===container-service===|vaultwarden-${CONTAINER_NAME}.service|g" "$BACKUP_FILE"
mv $BACKUP_FILE $VW_FOLDER
(crontab -l 2>/dev/null; echo "0 2 * * * $VW_FOLDER/$BACKUP_FILE") | crontab -
echo "Deploy completed, manually run haproxy to generate new config."
2025-05-05 22:49:00 +02:00
# on local, allow ufw port from wireguard
echo "Manually config backup remote."