diff --git a/docker/server/entrypoint.sh b/docker/server/entrypoint.sh index c326937916..6a87468490 100644 --- a/docker/server/entrypoint.sh +++ b/docker/server/entrypoint.sh @@ -7,9 +7,21 @@ if [ -n "${GOOGLE_APPLICATION_CREDENTIALS_JSON}" ]; then echo "${GOOGLE_APPLICATION_CREDENTIALS_JSON}" > "${GOOGLE_APPLICATION_CREDENTIALS_DIR}/application_default_credentials.json" fi +DB_PATH="${HOME}/.dstack/server/data/sqlite.db" +mkdir -p "$(dirname "$DB_PATH")" if [[ -z "${LITESTREAM_REPLICA_URL}" ]]; then - dstack server --host 0.0.0.0 + exec dstack server --host 0.0.0.0 else - litestream restore -if-replica-exists -o ${HOME}/.dstack/server/data/sqlite.db ${LITESTREAM_REPLICA_URL} - litestream replicate -exec "dstack server --host 0.0.0.0" ${HOME}/.dstack/server/data/sqlite.db ${LITESTREAM_REPLICA_URL} + if [[ ! -f "$DB_PATH" ]]; then + echo "Attempting Litestream restore..." + if ! output=$(litestream restore -o "$DB_PATH" "$LITESTREAM_REPLICA_URL" 2>&1); then + if echo "$output" | grep -qiE "cannot calc restore plan"; then + echo "No replica snapshots found; starting with empty database." + else + echo "$output" >&2 + exit 1 + fi + fi + fi + exec litestream replicate -exec "dstack server --host 0.0.0.0" "$DB_PATH" "$LITESTREAM_REPLICA_URL" fi diff --git a/docker/server/release/Dockerfile b/docker/server/release/Dockerfile index c58df71112..8bd739b885 100644 --- a/docker/server/release/Dockerfile +++ b/docker/server/release/Dockerfile @@ -13,9 +13,9 @@ RUN apt-get update && apt-get install -y \ sqlite3 \ && rm -rf /var/lib/apt/lists/* -RUN if [ $(uname -m) = "aarch64" ]; then ARCH="arm64"; else ARCH="amd64"; fi && \ - curl https://github.com/benbjohnson/litestream/releases/download/v0.3.9/litestream-v0.3.9-linux-$ARCH.deb -O -L && \ - dpkg -i litestream-v0.3.9-linux-$ARCH.deb +RUN if [ $(uname -m) = "aarch64" ]; then ARCH="arm64"; else ARCH="x86_64"; fi && \ + curl https://github.com/benbjohnson/litestream/releases/download/v0.5.0/litestream-0.5.0-linux-$ARCH.deb -O -L && \ + dpkg -i litestream-0.5.0-linux-$ARCH.deb ADD https://astral.sh/uv/install.sh /uv-installer.sh RUN sh /uv-installer.sh && rm /uv-installer.sh diff --git a/docker/server/stgn/Dockerfile b/docker/server/stgn/Dockerfile index 1d01942ae7..c6138bd8f3 100644 --- a/docker/server/stgn/Dockerfile +++ b/docker/server/stgn/Dockerfile @@ -11,9 +11,9 @@ RUN apt-get update && apt-get install -y \ sqlite3 \ && rm -rf /var/lib/apt/lists/* -RUN if [ $(uname -m) = "aarch64" ]; then ARCH="arm64"; else ARCH="amd64"; fi && \ - curl https://github.com/benbjohnson/litestream/releases/download/v0.3.9/litestream-v0.3.9-linux-$ARCH.deb -O -L && \ - dpkg -i litestream-v0.3.9-linux-$ARCH.deb +RUN if [ $(uname -m) = "aarch64" ]; then ARCH="arm64"; else ARCH="x86_64"; fi && \ + curl https://github.com/benbjohnson/litestream/releases/download/v0.5.0/litestream-0.5.0-linux-$ARCH.deb -O -L && \ + dpkg -i litestream-0.5.0-linux-$ARCH.deb ADD https://astral.sh/uv/install.sh /uv-installer.sh RUN sh /uv-installer.sh && rm /uv-installer.sh