commit 0e583a14c3cf51082c6b45ed9d3a77fbf855e4b7 Author: Seth Van Niekerk Date: Wed Oct 8 14:48:12 2025 -0400 Beginning of History diff --git a/.gitea/workflows/build-image.yml b/.gitea/workflows/build-image.yml new file mode 100644 index 0000000..768a07f --- /dev/null +++ b/.gitea/workflows/build-image.yml @@ -0,0 +1,32 @@ +name: Build & Push Docker Image + +on: push + +jobs: + build-and-publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Output Repository Information + run: | + echo This workflow will build and push a Docker image to: + echo ${{ vars.REPO_ADDRESS }}/${{ vars.REPO_USER }}/${{ vars.REPO_NAME }}:latest + echo https://${{ vars.REPO_ADDRESS }}/${{ vars.REPO_USER }}/${{ vars.REPO_NAME }} + + - name: Build Docker Image + run: | + docker build -t ${{ vars.REPO_ADDRESS }}/${{ vars.REPO_USER }}/${{ vars.REPO_NAME }}:latest --output type=docker --platform linux/amd64 . + + - name: Log in to Container Repo + uses: docker/login-action@v3 + with: + username: ${{ vars.REPO_USER }} + registry: ${{ vars.REPO_ADDRESS }} + password: ${{ secrets.REPO_TOKEN }} + + - name: Push Docker Image + run: | + echo "Pushing Docker image with tag: latest to ${{ vars.REPO_ADDRESS }}" + docker push ${{ vars.REPO_ADDRESS }}/${{ vars.REPO_USER }}/${{ vars.REPO_NAME }}:latest + docker rmi ${{ vars.REPO_ADDRESS }}/${{ vars.REPO_USER }}/${{ vars.REPO_NAME }}:latest || true diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..647de35 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,84 @@ +# Create a RuneLite docker image with Selkies support. + +FROM ghcr.io/linuxserver/baseimage-selkies:ubuntunoble + +# Environment variables for Selkies +ENV \ +# CUSTOM_PORT="8080" \ + CUSTOM_HTTPS_PORT="8181" \ + TITLE="RuneLite" \ + SELKIES_MANUAL_WIDTH="1366" \ + SELKIES_MANUAL_HEIGHT="768" \ + SELKIES_FRAMERATE="30" \ + SELKIES_SCALING_DPI="96" \ +# SELKIES_AUDIO_ENABLED="false" \ + SELKIES_GAMEPAD_ENABLED="false" \ + SELKIES_UI_SIDEBAR_SHOW_GAMEPADS="false" +# SELKIES_UI_SIDEBAR_SHOW_AUDIO_SETTINGS="false" + +RUN apt-get update && apt-get install -y --no-install-recommends \ + default-jre \ + wget \ + libnotify-bin \ + notification-daemon \ + && rm -rf /var/lib/apt/lists/* + +# Add RuneLite icon for Selkies interface and favicon +COPY icons/ /usr/share/selkies/www/ + +# Inject iOS webapp meta tags and auth fix into Selkies HTML (if index.html exists) +RUN if [ -f /usr/share/selkies/www/index.html ]; then \ + sed -i '/<\/head>/i\' /usr/share/selkies/www/index.html && \ + sed -i '/<\/head>/i\' /usr/share/selkies/www/index.html && \ + sed -i '/<\/head>/i\' /usr/share/selkies/www/index.html && \ + sed -i '/<\/head>/i\' /usr/share/selkies/www/index.html && \ + sed -i '/<\/head>/i\' /usr/share/selkies/www/index.html && \ + sed -i '/<\/head>/i\' /usr/share/selkies/www/index.html && \ + sed -i '/<\/head>/i\' /usr/share/selkies/www/index.html && \ + sed -i '/<\/head>/i\' /usr/share/selkies/www/index.html && \ + echo "" ; \ + fi + + + +ENV RUNELITE_URL="https://github.com/runelite/launcher/releases/latest/download/RuneLite.jar" +ADD runelite /usr/local/bin +RUN wget $RUNELITE_URL -P /usr/local/bin \ + && chmod +x /usr/local/bin/RuneLite.jar \ + && chmod +x /usr/local/bin/runelite + +# Configure window manager to hide title bars and maximize windows +RUN mkdir -p /etc/xdg/openbox && \ + echo '' > /etc/xdg/openbox/rc.xml && \ + echo '' >> /etc/xdg/openbox/rc.xml && \ + echo ' ' >> /etc/xdg/openbox/rc.xml && \ + echo ' Clearlooks' >> /etc/xdg/openbox/rc.xml && \ + echo ' ' >> /etc/xdg/openbox/rc.xml && \ + echo ' ' >> /etc/xdg/openbox/rc.xml && \ + echo ' ' >> /etc/xdg/openbox/rc.xml && \ + echo ' true' >> /etc/xdg/openbox/rc.xml && \ + echo ' no' >> /etc/xdg/openbox/rc.xml && \ + echo ' ' >> /etc/xdg/openbox/rc.xml && \ + echo ' ' >> /etc/xdg/openbox/rc.xml && \ + echo '' >> /etc/xdg/openbox/rc.xml + +# Note: PulseAudio configuration handled by Selkies base image + +# Use LinuxServer.io's autostart mechanism instead of custom cont-init.d +RUN mkdir -p /defaults && \ + echo '/usr/local/bin/runelite' > /defaults/autostart + +# Also create desktop autostart as backup +RUN mkdir -p /config/.config/autostart && \ + echo '[Desktop Entry]' > /config/.config/autostart/runelite.desktop && \ + echo 'Type=Application' >> /config/.config/autostart/runelite.desktop && \ + echo 'Exec=/usr/local/bin/runelite' >> /config/.config/autostart/runelite.desktop && \ + echo 'Hidden=false' >> /config/.config/autostart/runelite.desktop && \ + echo 'NoDisplay=false' >> /config/.config/autostart/runelite.desktop && \ + echo 'X-GNOME-Autostart-enabled=true' >> /config/.config/autostart/runelite.desktop && \ + echo 'Name=RuneLite' >> /config/.config/autostart/runelite.desktop && \ + chown -R abc:abc /config/.config + +# Expose Selkies web interface ports +EXPOSE 8181 +# EXPOSE 8080 8181 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..725425c --- /dev/null +++ b/README.md @@ -0,0 +1,72 @@ +# RuneLite Docker + +A containerized RuneLite client that runs in your browser using Selkies WebRTC technology. This allows you to play Old School RuneScape through RuneLite from any device with a web browser, including mobile devices and tablets. + +## Quick Start + +```bash +docker run -d \ + --name runelite \ + -p 8181:8181 \ + -v /path/to/appdata/.runelite:/config/.runelite:rw \ + -v /path/to/appdata/.credentials/credentials.properties:/config/.runelite/credentials.properties:ro \ + ghcr.io/sethwv/rune-docker:latest +``` + +## Access + +Once the container is running, access RuneLite through your web browser: + +- **HTTPS (Recommended)**: `https://localhost:8181` +- **PWA Installation**: On mobile devices, use "Add to Home Screen" for a native app experience + +## Mobile Setup (iOS/Android) + +1. Open your browser and navigate to the container URL +2. Tap the "Share" button (iOS) or browser menu (Android) +3. Select "Add to Home Screen" or "Install App" +4. The RuneLite PWA will be added to your home screen +5. Launch from home screen for a fullscreen experience + +## RuneLite Account Integration + +### ⚠️ Important Security Warning + +To use RuneLite with your account logged in (for plugin sync and settings), you must provide a complete `.runelite` folder from an existing RuneLite installation. This folder contains sensitive authentication data. + +**Critical Security Implications:** + +1. **One-Click Account Access**: Anyone who can access the web interface URL can immediately access your logged-in RuneScape character without additional authentication +2. **Credential File Exposure**: If logged in, you will need to include `credentials.properties` with your account authentication tokens +3. **Full Account Control**: Logged-in users have complete access to your character + +### Setting Up Account Integration + +If you accept these risks and want RuneLite account features: + +1. **For Jagex Account users:** + - Ensure `credentials.properties` is present in your `.runelite` folder + - See [RuneLite Jagex Account Guide](https://github.com/runelite/runelite/wiki/Using-Jagex-Accounts) + +2. **Prepare your .runelite folder:** + ```bash + # Copy from your local RuneLite installation + # Windows: %USERPROFILE%\.runelite + # macOS: ~/.runelite + # Linux: ~/.runelite + cp -r ~/.runelite /path/to/appdata/.runelite + + # Set proper permissions for security + chmod 700 /path/to/appdata/.runelite + ``` + +3. **For enhanced security, separate credentials file:** + ```bash + # Create secure credentials directory + mkdir -p /path/to/appdata/.credentials + chmod 700 /path/to/appdata/.credentials + + # Move credentials file to separate location + mv /path/to/appdata/.runelite/credentials.properties /path/to/appdata/.credentials/ + chmod 600 /path/to/appdata/.credentials/credentials.properties + ``` \ No newline at end of file diff --git a/icons/apple-touch-icon-144x144.png b/icons/apple-touch-icon-144x144.png new file mode 100644 index 0000000..a7cb079 Binary files /dev/null and b/icons/apple-touch-icon-144x144.png differ diff --git a/icons/apple-touch-icon-152x152.png b/icons/apple-touch-icon-152x152.png new file mode 100644 index 0000000..c49e273 Binary files /dev/null and b/icons/apple-touch-icon-152x152.png differ diff --git a/icons/apple-touch-icon.png b/icons/apple-touch-icon.png new file mode 100644 index 0000000..7c5d429 Binary files /dev/null and b/icons/apple-touch-icon.png differ diff --git a/icons/favicon.ico b/icons/favicon.ico new file mode 100644 index 0000000..709e776 Binary files /dev/null and b/icons/favicon.ico differ diff --git a/icons/favicon.png b/icons/favicon.png new file mode 100644 index 0000000..709e776 Binary files /dev/null and b/icons/favicon.png differ diff --git a/icons/icon.png b/icons/icon.png new file mode 100644 index 0000000..13136c8 Binary files /dev/null and b/icons/icon.png differ diff --git a/icons/manifest.json b/icons/manifest.json new file mode 100644 index 0000000..e72fbd6 --- /dev/null +++ b/icons/manifest.json @@ -0,0 +1,37 @@ +{ + "name": "RuneLite", + "short_name": "RuneLite", + "description": "RuneLite OSRS Client in Browser", + "start_url": "/", + "display": "fullscreen", + "orientation": "landscape", + "theme_color": "#ff6600", + "background_color": "#000000", + "icons": [ + { + "src": "icon.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "apple-touch-icon.png", + "sizes": "180x180", + "type": "image/png" + }, + { + "src": "apple-touch-icon-152x152.png", + "sizes": "152x152", + "type": "image/png" + }, + { + "src": "apple-touch-icon-144x144.png", + "sizes": "144x144", + "type": "image/png" + }, + { + "src": "favicon.png", + "sizes": "32x32", + "type": "image/png" + } + ] +} \ No newline at end of file diff --git a/icons/webapp-meta.html b/icons/webapp-meta.html new file mode 100644 index 0000000..ed2e47e --- /dev/null +++ b/icons/webapp-meta.html @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/runelite b/runelite new file mode 100644 index 0000000..92cebba --- /dev/null +++ b/runelite @@ -0,0 +1,7 @@ +#!/bin/bash + +# Ensure we're using the correct home directory +export HOME=/config + +# Run RuneLite with proper Java options for containerized environment +exec java -jar /usr/local/bin/RuneLite.jar \ No newline at end of file