|
173 | 173 | RUN chmod +x /opt/csd-optimade/test-entrypoint.sh |
174 | 174 | CMD ["/opt/csd-optimade/test-entrypoint.sh"] |
175 | 175 |
|
| 176 | +FROM python-setup AS csd-optimade-server-with-csd-sidecar |
| 177 | + |
| 178 | +LABEL org.opencontainers.image.source="https://github.com/datalab-industries/csd-optimade" |
| 179 | +LABEL org.opencontainers.image.description="Server environment for the csd-optimade project" |
| 180 | + |
| 181 | +# Copy the CSD data into the serve image |
| 182 | +WORKDIR /opt/ccdc/ccdc-data |
| 183 | +COPY --from=compress-csd-data /opt/csd.tar.gz.gpg /opt/csd.tar.gz.gpg |
| 184 | + |
| 185 | +WORKDIR /opt/csd-optimade |
| 186 | +ENV CSD_DATA_DIRECTORY=/opt/ccdc/ccdc-data/csd |
| 187 | + |
| 188 | +# Copy the ingested CSD into the final image |
| 189 | +COPY --from=csd-ingester /opt/csd-optimade/csd-optimade.jsonl.gz.gpg /opt/csd-optimade/csd-optimade.jsonl.gz.gpg |
| 190 | + |
| 191 | +# Copy relevant csd-optimade build files only |
| 192 | +COPY LICENSE pyproject.toml uv.lock /opt/csd-optimade/ |
| 193 | +COPY src /opt/csd-optimade/src |
| 194 | + |
| 195 | +RUN --mount=type=cache,target=/root/.cache/uv \ |
| 196 | + uv sync --locked --extra-index-url https://pip.ccdc.cam.ac.uk && \ |
| 197 | + # Remove unecessary mandatory deps from csd-python-api |
| 198 | + uv pip uninstall tensorflow tensorflow-estimator xgboost keras jax google-pasta opt-einsum nvidia-nccl-cu12 && \ |
| 199 | + # Remove duplicated csd-python-api install |
| 200 | + rm -rf /opt/csd-optimade/.venv/lib/python3.11/site-packages/lib/ccdc |
| 201 | + |
| 202 | +COPY <<-"EOF" /opt/csd-optimade/serve-entrypoint.sh |
| 203 | +#!/bin/bash |
| 204 | +set -e |
| 205 | + |
| 206 | +if [ -z "$CSD_ACTIVATION_KEY" ]; then |
| 207 | + echo "CSD_ACTIVATION_KEY not set" >&2 |
| 208 | + exit 1 |
| 209 | +fi |
| 210 | + |
| 211 | +mkdir -p /root/.config/CCDC |
| 212 | +echo -e "[licensing_v1]\nlicence_key=${CSD_ACTIVATION_KEY}" > /root/.config/CCDC/ApplicationServices.ini |
| 213 | +# For some reason, this folder must be present when reading sqlite, otherwise it assumes it cannot |
| 214 | +mkdir -p /opt/ccdc/ccdc-software |
| 215 | + |
| 216 | +echo "Decrypting CSD data..." |
| 217 | +time gpg --batch --passphrase ${CSD_ACTIVATION_KEY} --decrypt /opt/csd.tar.gz.gpg > /opt/csd.tar.gz |
| 218 | +time tar -xzf /opt/csd.tar.gz -C /opt/ccdc/ccdc-data |
| 219 | +echo "Decompressing CSD data..." |
| 220 | + |
| 221 | +echo "Decrypting and decompressing CSD OPTIMADE format..." |
| 222 | +gpg --batch --passphrase ${CSD_ACTIVATION_KEY} --decrypt /opt/csd-optimade/csd-optimade.jsonl.gz.gpg | gunzip > /opt/csd-optimade/csd-optimade.jsonl |
| 223 | + |
| 224 | +exec uv run --no-sync csd-serve --drop-first /opt/csd-optimade/csd-optimade.jsonl |
| 225 | +EOF |
| 226 | + |
| 227 | +RUN chmod +x /opt/csd-optimade/serve-entrypoint.sh |
| 228 | +CMD ["/opt/csd-optimade/serve-entrypoint.sh"] |
| 229 | + |
176 | 230 | FROM python-setup AS csd-optimade-server |
177 | 231 | LABEL org.opencontainers.image.source="https://github.com/datalab-industries/csd-optimade" |
178 | 232 | LABEL org.opencontainers.image.description="Production environment for the csd-optimade project" |
|
0 commit comments