47 lines
		
	
	
	
		
			931 B
		
	
	
	
		
			Docker
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			931 B
		
	
	
	
		
			Docker
		
	
	
	
	
	
############
 | 
						|
# build ui #
 | 
						|
############
 | 
						|
 | 
						|
ARG NODE_VERSION=18.16
 | 
						|
ARG PYTHON_VERSION=3.11-slim
 | 
						|
FROM node:${NODE_VERSION} AS build-ui
 | 
						|
 | 
						|
# env setup
 | 
						|
WORKDIR /usr/local/src/advent22_ui
 | 
						|
 | 
						|
# install advent22_ui dependencies
 | 
						|
COPY ui/package*.json ui/yarn*.lock ./
 | 
						|
RUN yarn install --production false
 | 
						|
 | 
						|
# copy and build advent22_ui
 | 
						|
COPY ui ./
 | 
						|
RUN yarn build --dest /tmp/advent22_ui/html
 | 
						|
 | 
						|
###########
 | 
						|
# web app #
 | 
						|
###########
 | 
						|
 | 
						|
ARG PYTHON_VERSION
 | 
						|
FROM tiangolo/uvicorn-gunicorn:python${PYTHON_VERSION} AS production
 | 
						|
 | 
						|
# env setup
 | 
						|
WORKDIR /usr/local/src/advent22_api
 | 
						|
ENV \  
 | 
						|
    PRODUCTION_MODE="true" \
 | 
						|
    PORT="8000" \
 | 
						|
    MODULE_NAME="advent22_api.app"
 | 
						|
EXPOSE 8000
 | 
						|
 | 
						|
# install advent22_api
 | 
						|
COPY api ./
 | 
						|
RUN set -ex; \
 | 
						|
    # remove example app
 | 
						|
    rm -rf /app; \
 | 
						|
    \
 | 
						|
    python -m pip --no-cache-dir install ./
 | 
						|
 | 
						|
# add prepared advent22_ui
 | 
						|
COPY --from=build-ui /tmp/advent22_ui /usr/local/share/advent22_ui
 | 
						|
 | 
						|
# run as unprivileged user
 | 
						|
USER nobody
 |