This commit is contained in:
@@ -82,6 +82,7 @@ Default workflow mode uses user services (`systemctl --user`) and rootless Podma
|
|||||||
- `SYSTEMD_SCOPE=user`
|
- `SYSTEMD_SCOPE=user`
|
||||||
- `PODMAN_USE_SUDO=false`
|
- `PODMAN_USE_SUDO=false`
|
||||||
- quadlet target: `~/.config/containers/systemd/kubeviz.container`
|
- quadlet target: `~/.config/containers/systemd/kubeviz.container`
|
||||||
|
- user unit target in quadlet should be `WantedBy=default.target`
|
||||||
|
|
||||||
So no root sudo is required for normal deploy runs.
|
So no root sudo is required for normal deploy runs.
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ Wants=network-online.target
|
|||||||
[Container]
|
[Container]
|
||||||
ContainerName=kubeviz
|
ContainerName=kubeviz
|
||||||
Image=localhost/kubeviz:prod
|
Image=localhost/kubeviz:prod
|
||||||
Pull=always
|
Pull=never
|
||||||
|
|
||||||
# Attach to the same user-defined network as Traefik.
|
# Attach to the same user-defined network as Traefik.
|
||||||
Network=edge
|
Network=traefik
|
||||||
|
|
||||||
Environment=TZ=Europe/Berlin
|
Environment=TZ=Europe/Berlin
|
||||||
Environment=ADDR=:8080
|
Environment=ADDR=:8080
|
||||||
@@ -35,7 +35,7 @@ Label=traefik.http.routers.kubeviz.middlewares=kubeviz-sec-headers,kubeviz-auth
|
|||||||
Label=traefik.http.services.kubeviz.loadbalancer.server.port=8080
|
Label=traefik.http.services.kubeviz.loadbalancer.server.port=8080
|
||||||
Label=traefik.docker.network=traefik
|
Label=traefik.docker.network=traefik
|
||||||
Label=traefik.http.middlewares.kubeviz-sec-headers.headers.customResponseHeaders.Content-Security-Policy=default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self'; script-src-elem 'self' 'unsafe-inline'; connect-src 'self' wss: https:; font-src 'self' data:; worker-src 'self' blob:;
|
Label=traefik.http.middlewares.kubeviz-sec-headers.headers.customResponseHeaders.Content-Security-Policy=default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self'; script-src-elem 'self' 'unsafe-inline'; connect-src 'self' wss: https:; font-src 'self' data:; worker-src 'self' blob:;
|
||||||
Label="traefik.http.middlewares.auth.basicauth.users=smb:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"
|
Label="traefik.http.middlewares.kubeviz-auth.basicauth.users=smb:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"
|
||||||
[Service]
|
[Service]
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=3
|
RestartSec=3
|
||||||
@@ -43,4 +43,4 @@ TimeoutStartSec=90
|
|||||||
TimeoutStopSec=20
|
TimeoutStopSec=20
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=default.target
|
||||||
|
|||||||
@@ -41,6 +41,9 @@ else
|
|||||||
if [ -z "${XDG_RUNTIME_DIR:-}" ]; then
|
if [ -z "${XDG_RUNTIME_DIR:-}" ]; then
|
||||||
export XDG_RUNTIME_DIR="/run/user/$(id -u)"
|
export XDG_RUNTIME_DIR="/run/user/$(id -u)"
|
||||||
fi
|
fi
|
||||||
|
if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then
|
||||||
|
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "${REGISTRY_AUTH_FILE:-}" ] && [ -f "${REGISTRY_AUTH_FILE}" ]; then
|
if [ -n "${REGISTRY_AUTH_FILE:-}" ] && [ -f "${REGISTRY_AUTH_FILE}" ]; then
|
||||||
@@ -63,6 +66,7 @@ fi
|
|||||||
|
|
||||||
SOURCE_IMAGE="${IMAGE_REPO}:ci-${BUILD_ID}"
|
SOURCE_IMAGE="${IMAGE_REPO}:ci-${BUILD_ID}"
|
||||||
RELEASE_IMAGE="${IMAGE_REPO}:${IMAGE_TAG}"
|
RELEASE_IMAGE="${IMAGE_REPO}:${IMAGE_TAG}"
|
||||||
|
QUADLET_IMAGE="${QUADLET_IMAGE:-${RELEASE_IMAGE}}"
|
||||||
|
|
||||||
echo "Building ${SOURCE_IMAGE}"
|
echo "Building ${SOURCE_IMAGE}"
|
||||||
"${PODMAN_CMD[@]}" build --pull=always -t "${SOURCE_IMAGE}" .
|
"${PODMAN_CMD[@]}" build --pull=always -t "${SOURCE_IMAGE}" .
|
||||||
@@ -79,9 +83,17 @@ if [ "${INSTALL_QUADLET}" = "true" ]; then
|
|||||||
if [ "${SYSTEMD_SCOPE}" = "system" ]; then
|
if [ "${SYSTEMD_SCOPE}" = "system" ]; then
|
||||||
sudo mkdir -p "${QUADLET_TARGET_DIR}"
|
sudo mkdir -p "${QUADLET_TARGET_DIR}"
|
||||||
sudo cp "${QUADLET_SRC}" "${QUADLET_TARGET_DIR}/kubeviz.container"
|
sudo cp "${QUADLET_SRC}" "${QUADLET_TARGET_DIR}/kubeviz.container"
|
||||||
|
sudo sed -i \
|
||||||
|
-e "s#^Image=.*#Image=${QUADLET_IMAGE}#" \
|
||||||
|
-e "s#^Pull=.*#Pull=never#" \
|
||||||
|
"${QUADLET_TARGET_DIR}/kubeviz.container"
|
||||||
else
|
else
|
||||||
mkdir -p "${QUADLET_TARGET_DIR}"
|
mkdir -p "${QUADLET_TARGET_DIR}"
|
||||||
cp "${QUADLET_SRC}" "${QUADLET_TARGET_DIR}/kubeviz.container"
|
cp "${QUADLET_SRC}" "${QUADLET_TARGET_DIR}/kubeviz.container"
|
||||||
|
sed -i \
|
||||||
|
-e "s#^Image=.*#Image=${QUADLET_IMAGE}#" \
|
||||||
|
-e "s#^Pull=.*#Pull=never#" \
|
||||||
|
"${QUADLET_TARGET_DIR}/kubeviz.container"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -89,6 +101,15 @@ echo "Reloading ${SYSTEMD_SCOPE} systemd and restarting ${SERVICE_NAME}"
|
|||||||
"${SYSTEMCTL_CMD[@]}" daemon-reload
|
"${SYSTEMCTL_CMD[@]}" daemon-reload
|
||||||
"${SYSTEMCTL_CMD[@]}" enable --now "${SERVICE_NAME}"
|
"${SYSTEMCTL_CMD[@]}" enable --now "${SERVICE_NAME}"
|
||||||
"${SYSTEMCTL_CMD[@]}" restart "${SERVICE_NAME}"
|
"${SYSTEMCTL_CMD[@]}" restart "${SERVICE_NAME}"
|
||||||
"${SYSTEMCTL_CMD[@]}" is-active --quiet "${SERVICE_NAME}"
|
if ! "${SYSTEMCTL_CMD[@]}" is-active --quiet "${SERVICE_NAME}"; then
|
||||||
|
echo "Service ${SERVICE_NAME} is not active. Showing diagnostics..."
|
||||||
|
"${SYSTEMCTL_CMD[@]}" status "${SERVICE_NAME}" || true
|
||||||
|
if [ "${SYSTEMD_SCOPE}" = "system" ]; then
|
||||||
|
sudo journalctl -u "${SERVICE_NAME}" -n 200 --no-pager || true
|
||||||
|
else
|
||||||
|
journalctl --user -u "${SERVICE_NAME}" -n 200 --no-pager || true
|
||||||
|
fi
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Deployment successful: ${RELEASE_IMAGE}"
|
echo "Deployment successful: ${RELEASE_IMAGE}"
|
||||||
|
|||||||
Reference in New Issue
Block a user