Beginning of History
All checks were successful
Build & Push Docker Image / build-and-publish (push) Successful in 9s

This commit is contained in:
2025-10-08 14:48:12 -04:00
commit 1013b72807
13 changed files with 291 additions and 0 deletions

View File

@@ -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

84
Dockerfile Normal file
View File

@@ -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\<!-- RuneLite iOS WebApp Support -->' /usr/share/selkies/www/index.html && \
sed -i '/<\/head>/i\<meta name="apple-mobile-web-app-capable" content="yes">' /usr/share/selkies/www/index.html && \
sed -i '/<\/head>/i\<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">' /usr/share/selkies/www/index.html && \
sed -i '/<\/head>/i\<meta name="apple-mobile-web-app-title" content="RuneLite">' /usr/share/selkies/www/index.html && \
sed -i '/<\/head>/i\<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">' /usr/share/selkies/www/index.html && \
sed -i '/<\/head>/i\<link rel="apple-touch-icon" sizes="152x152" href="apple-touch-icon-152x152.png">' /usr/share/selkies/www/index.html && \
sed -i '/<\/head>/i\<link rel="manifest" href="manifest.json">' /usr/share/selkies/www/index.html && \
sed -i '/<\/head>/i\<meta name="theme-color" content="#ff6600">' /usr/share/selkies/www/index.html && \
echo "<!-- Auth fix temporarily disabled -->" ; \
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 '<?xml version="1.0" encoding="UTF-8"?>' > /etc/xdg/openbox/rc.xml && \
echo '<openbox_config xmlns="http://openbox.org/3.4/rc">' >> /etc/xdg/openbox/rc.xml && \
echo ' <theme>' >> /etc/xdg/openbox/rc.xml && \
echo ' <name>Clearlooks</name>' >> /etc/xdg/openbox/rc.xml && \
echo ' </theme>' >> /etc/xdg/openbox/rc.xml && \
echo ' <applications>' >> /etc/xdg/openbox/rc.xml && \
echo ' <application class="*">' >> /etc/xdg/openbox/rc.xml && \
echo ' <maximized>true</maximized>' >> /etc/xdg/openbox/rc.xml && \
echo ' <decor>no</decor>' >> /etc/xdg/openbox/rc.xml && \
echo ' </application>' >> /etc/xdg/openbox/rc.xml && \
echo ' </applications>' >> /etc/xdg/openbox/rc.xml && \
echo '</openbox_config>' >> /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

72
README.md Normal file
View File

@@ -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
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
icons/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
icons/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
icons/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
icons/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

37
icons/manifest.json Normal file
View File

@@ -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"
}
]
}

22
icons/webapp-meta.html Normal file
View File

@@ -0,0 +1,22 @@
<!-- iOS Web App Meta Tags -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title" content="RuneLite">
<meta name="mobile-web-app-capable" content="yes">
<meta name="application-name" content="RuneLite">
<!-- iOS Icons -->
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
<link rel="apple-touch-icon" sizes="152x152" href="apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="144x144" href="apple-touch-icon-144x144.png">
<!-- Standard Icons -->
<link rel="icon" type="image/png" sizes="32x32" href="favicon.png">
<link rel="shortcut icon" href="favicon.ico">
<!-- Web App Manifest -->
<link rel="manifest" href="manifest.json">
<!-- Theme Color -->
<meta name="theme-color" content="#ff6600">
<meta name="msapplication-TileColor" content="#ff6600">

7
runelite Normal file
View File

@@ -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

37
supervisord.conf Normal file
View File

@@ -0,0 +1,37 @@
[supervisord]
nodaemon=true
user=root
[program:xvfb]
command=/usr/bin/Xvfb :1 -screen 0 1038x503x24 -ac +extension GLX +render -noreset
autorestart=true
priority=100
[program:openbox]
command=/usr/bin/openbox --config-file /etc/xdg/openbox/rc.xml
environment=DISPLAY=:1
autorestart=true
priority=200
user=runescape
[program:x11vnc]
command=/usr/bin/x11vnc -display :1 -nopw -listen localhost -xkb
autorestart=true
priority=300
[program:novnc-http]
command=/opt/noVNC/utils/novnc_proxy --vnc localhost:5900 --listen 6080
autorestart=true
priority=400
[program:novnc-https]
command=/opt/noVNC/utils/novnc_proxy --vnc localhost:5900 --listen 6443 --cert /opt/noVNC/self.pem
autorestart=true
priority=401
[program:runelite]
command=/usr/local/bin/runelite
environment=DISPLAY=:1
autorestart=false
priority=500
user=runescape