mirror of
				https://github.com/searxng/searxng.git
				synced 2025-10-31 02:27:06 -04:00 
			
		
		
		
	We can leverage the immutable nature of containers to add additional optimizations. No debugging or tinkering inside containers, so stripping all unused symbols inside `venv` should be fine. We are also going to compile the bytecode ourselves to modify some parameters related to reproducibility. With these small changes, we have reduced the `venv` layer size by 10MB~
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
| FROM ghcr.io/searxng/base:searxng-builder AS builder
 | |
| 
 | |
| COPY ./requirements.txt ./requirements-server.txt ./
 | |
| 
 | |
| ENV UV_NO_MANAGED_PYTHON="true"
 | |
| ENV UV_NATIVE_TLS="true"
 | |
| 
 | |
| ARG TIMESTAMP_VENV="0"
 | |
| 
 | |
| RUN --mount=type=cache,id=uv,target=/root/.cache/uv set -eux -o pipefail; \
 | |
|     export SOURCE_DATE_EPOCH="$TIMESTAMP_VENV"; \
 | |
|     uv venv; \
 | |
|     uv pip install --requirements ./requirements.txt --requirements ./requirements-server.txt; \
 | |
|     uv cache prune --ci; \
 | |
|     find ./.venv/lib/ -type f -exec strip --strip-unneeded {} + || true; \
 | |
|     find ./.venv/lib/ -type d -name "__pycache__" -exec rm -rf {} +; \
 | |
|     find ./.venv/lib/ -type f -name "*.pyc" -delete; \
 | |
|     python -m compileall -q -f -j 0 --invalidation-mode=unchecked-hash ./.venv/lib/; \
 | |
|     find ./.venv/lib/python*/site-packages/*.dist-info/ -type f -name "RECORD" -exec sort -t, -k1,1 -o {} {} \;; \
 | |
|     find ./.venv/ -exec touch -h --date="@$TIMESTAMP_VENV" {} +
 | |
| 
 | |
| # use "--exclude=./searx/version_frozen.py" when actions/runner-images updates to Podman 5.0+
 | |
| COPY ./searx/ ./searx/
 | |
| 
 | |
| ARG TIMESTAMP_SETTINGS="0"
 | |
| 
 | |
| RUN set -eux -o pipefail; \
 | |
|     python -m compileall -q -f -j 0 --invalidation-mode=unchecked-hash ./searx/; \
 | |
|     find ./searx/static/ -type f \
 | |
|     \( -name "*.html" -o -name "*.css" -o -name "*.js" -o -name "*.svg" \) \
 | |
|     -exec gzip -9 -k {} + \
 | |
|     -exec brotli -9 -k {} + \
 | |
|     -exec gzip --test {}.gz + \
 | |
|     -exec brotli --test {}.br +; \
 | |
|     touch -c --date="@$TIMESTAMP_SETTINGS" ./searx/settings.yml
 |