Retro Bulletin Board Systems on atproto. Web app and TUI. atbbs.xyz
python tui atproto bbs
at master 46 lines 1.2 kB view raw
1FROM node:22-slim AS frontend 2 3WORKDIR /app 4COPY package.json ./ 5RUN npm install 6COPY web/static/input.css web/static/input.css 7COPY web/templates/ web/templates/ 8COPY web/ts/ web/ts/ 9 10RUN npx @tailwindcss/cli -i web/static/input.css -o web/static/style.css --minify 11RUN npx esbuild web/ts/main.ts --bundle --outfile=web/static/app.js --minify 12 13 14FROM python:3.14-slim 15 16WORKDIR /app 17 18COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv 19 20# Copy source 21COPY pyproject.toml uv.lock README.md ./ 22COPY cli/ cli/ 23COPY core/ core/ 24COPY tui/ tui/ 25COPY web/ web/ 26 27# Copy built frontend assets 28COPY --from=frontend /app/web/static/style.css web/static/style.css 29COPY --from=frontend /app/web/static/app.js web/static/app.js 30 31# Remove TS source 32RUN rm -rf web/ts 33 34# Install Python package 35RUN uv sync --frozen --no-dev 36 37RUN mkdir -p /data 38 39ENV ATBBS_DATA_DIR=/data 40ENV PYTHONUNBUFFERED=1 41 42EXPOSE 8000 43 44HEALTHCHECK --interval=30s --timeout=5s CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/')" || exit 1 45 46CMD ["uv", "run", "atbbs", "serve", "--host", "0.0.0.0", "--port", "8000", "--workers", "3", "--data-dir", "/data"]