A simple tool which lets you scrape twitter accounts and crosspost them to bluesky accounts! Comes with a CLI and a webapp for managing profiles! Works with images/videos/link embeds/threads.
1# syntax=docker/dockerfile:1.7
2
3FROM oven/bun:1-slim AS build
4
5WORKDIR /app
6
7RUN apt-get update \
8 && apt-get install -y --no-install-recommends \
9 python3 \
10 make \
11 g++ \
12 ca-certificates \
13 && rm -rf /var/lib/apt/lists/*
14
15COPY package.json ./
16COPY bun.lock ./bun.lock
17COPY scripts ./scripts
18
19RUN bun install --frozen-lockfile
20
21COPY . .
22
23RUN bun run build \
24 && bun install --frozen-lockfile --production
25
26
27FROM oven/bun:1-slim AS runtime
28
29WORKDIR /app
30
31ENV NODE_ENV=production \
32 HOST=0.0.0.0 \
33 PORT=3000 \
34 TWEETS2BSKY_DATA_DIR=/app/data \
35 SCHEDULED_ACCOUNT_TIMEOUT_MS=480000 \
36 CHROME_BIN=/usr/bin/chromium \
37 PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
38
39RUN apt-get update \
40 && apt-get install -y --no-install-recommends \
41 chromium \
42 ca-certificates \
43 tini \
44 && rm -rf /var/lib/apt/lists/*
45
46COPY --from=build /app/package.json ./package.json
47COPY --from=build /app/bun.lock ./bun.lock
48COPY --from=build /app/node_modules ./node_modules
49COPY --from=build /app/dist ./dist
50COPY --from=build /app/web/dist ./web/dist
51COPY --from=build /app/public ./public
52
53RUN mkdir -p /app/data \
54 && ln -sf /app/data/config.json /app/config.json
55
56VOLUME ["/app/data"]
57
58EXPOSE 3000
59
60HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=5 CMD ["bun", "-e", "fetch('http://127.0.0.1:' + (process.env.PORT || 3000) + '/api/auth/bootstrap-status').then((res) => process.exit(res.ok ? 0 : 1)).catch(() => process.exit(1))"]
61
62ENTRYPOINT ["/usr/bin/tini", "--"]
63CMD ["bun", "dist/index.js"]