diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9817a89..18c3502 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,10 +3,9 @@ name: Build and Release on: push: tags: - - '*' + - "*" jobs: - build_windows: runs-on: windows-latest permissions: @@ -23,7 +22,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: "3.11" - name: Install Python Deps run: pip install -r requirements.txt @@ -61,7 +60,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: "3.11" - name: Install Python Deps run: pip install -r requirements.txt @@ -99,7 +98,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: "3.11" - name: Install Python Deps run: pip install -r requirements.txt @@ -120,3 +119,39 @@ jobs: omitDraftDuringUpdate: true omitNameDuringUpdate: true artifacts: "dist/*-linux.AppImage" + + build_docker: + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + steps: + - name: Clone Repo + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the GitHub Container registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Docker images + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: | + ghcr.io/liamcottle/reticulum-meshchat:latest + ghcr.io/liamcottle/reticulum-meshchat:${{ github.ref_name }} + labels: | + org.opencontainers.image.title=Reticulum MeshChat + org.opencontainers.image.description=Docker image for Reticulum MeshChat + org.opencontainers.image.url=https://github.com/liamcottle/reticulum-meshchat/pkgs/container/reticulum-meshchat/ diff --git a/.github/workflows/manual-docker-build.yml b/.github/workflows/manual-docker-build.yml new file mode 100644 index 0000000..5f43e49 --- /dev/null +++ b/.github/workflows/manual-docker-build.yml @@ -0,0 +1,42 @@ +name: Temporary manual trigger for Docker build + +on: + workflow_dispatch: + +jobs: + build_docker: + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + steps: + - name: Clone Repo + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the GitHub Container registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Docker images + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: | + ghcr.io/g7ufo/reticulum-meshchat:latest + ghcr.io/g7ufo/reticulum-meshchat:${{ github.ref_name }} + labels: | + org.opencontainers.image.title=Reticulum MeshChat + org.opencontainers.image.description=Docker image for Reticulum MeshChat + org.opencontainers.image.url=https://github.com/g7ufo/reticulum-meshchat/pkgs/container/reticulum-meshchat/ + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d3b0aad --- /dev/null +++ b/Dockerfile @@ -0,0 +1,30 @@ +# Build the frontend +FROM node:20-bookworm-slim AS build-frontend + +WORKDIR /src + +COPY *.json . +COPY *.js . +COPY src/frontend ./src/frontend + +RUN npm install --omit=dev && \ + npm install tailwindcss && \ + npm run build-frontend + +# Main app build +FROM python:3.11-bookworm + +WORKDIR /app + +COPY ./requirements.txt . +COPY --from=build-frontend /src/public public + +RUN pip install -r requirements.txt + +COPY *.py . +COPY src/__init__.py ./src/__init__.py +COPY src/backend ./src/backend +COPY *.json . + +CMD ["python", "meshchat.py", "--host=0.0.0.0", "--reticulum-config-dir=/config/.reticulum", "--storage-dir=/config/.meshchat", "--headless"] + diff --git a/README.md b/README.md index 394ff1b..b012a23 100644 --- a/README.md +++ b/README.md @@ -256,6 +256,13 @@ python meshchat.py --identity-base64 "GCN6mMhVemdNIK/fw97C1zvU17qjQPFTXRBotVckeG > NOTE: this is a randomly generated identity for example purposes. Do not use it, it has been leaked! + +## Running via Docker + +A very simple example of a `docker-compose.yml` file can be found [here](./docker-compose-example.yml). + +The reticulum config is auto-generated at startup in the `meshchat-config` volume along with the storage db used by meshchat. + ## Build Electron Application Reticulum MeshChat can be run from source via a command line, as explained above, or as a standalone application. diff --git a/docker-compose-example.yml b/docker-compose-example.yml new file mode 100644 index 0000000..e8eae7f --- /dev/null +++ b/docker-compose-example.yml @@ -0,0 +1,18 @@ +services: + reticulum-meshchat: + container_name: reticulum-meshchat + image: ghcr.io/liamcottle/reticulum-meshchat:latest + pull_policy: always + restart: unless-stopped + # Make the web interace accessible from the host at 8000. + ports: + - 0.0.0.0:8000:8000 + volumes: + meshchat-config:/config + # Uncomment if you have a USB device connected + # devices: + # - /dev/ttyUSB0:/dev/ttyUSB0 + +volumes: + meshchat-config: +