Beginning of History
All checks were successful
Build & Push Docker Image / build-and-publish (push) Successful in 8s
All checks were successful
Build & Push Docker Image / build-and-publish (push) Successful in 8s
This commit is contained in:
32
.gitea/workflows/build-image.yml
Normal file
32
.gitea/workflows/build-image.yml
Normal 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
84
Dockerfile
Normal 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
|
||||
105
README.md
Normal file
105
README.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# 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**: The `.runelite` folder contains `credentials.properties` with your account authentication tokens
|
||||
3. **Full Account Control**: Logged-in users have complete access to your character, including trading, dropping items, and account actions
|
||||
|
||||
### Setting Up Account Integration
|
||||
|
||||
If you accept these risks and want RuneLite account features:
|
||||
|
||||
1. **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
|
||||
```
|
||||
|
||||
2. **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
|
||||
```
|
||||
|
||||
3. **Run with the volume mappings**
|
||||
|
||||
4. **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)
|
||||
|
||||
### Security Recommendations
|
||||
|
||||
If using account integration:
|
||||
|
||||
- **Restrict Network Access**: Use firewall rules or VPN to limit who can access the web interface
|
||||
- **Use a Dedicated Account**: Consider using a separate RuneScape account for this setup
|
||||
- **Regular Monitoring**: Monitor your account for unauthorized access
|
||||
- **Secure the Host**: Ensure the Docker host system is properly secured
|
||||
- **File Permissions**: Restrict access to folders on the host system:
|
||||
```bash
|
||||
chmod 700 /path/to/appdata/.runelite
|
||||
chmod 700 /path/to/appdata/.credentials
|
||||
chmod 600 /path/to/appdata/.credentials/credentials.properties
|
||||
```
|
||||
|
||||
### Alternative: Guest Mode
|
||||
|
||||
For maximum security, run without account integration:
|
||||
- No `.runelite` folder or credentials mapping
|
||||
- RuneLite runs in guest mode
|
||||
- No plugin sync or account-specific settings
|
||||
- Complete isolation from your main account
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- The container runs with minimal privileges
|
||||
- RuneLite configuration is isolated in Docker volumes
|
||||
- HTTPS is enabled by default for secure connections
|
||||
- Consider using a reverse proxy for additional security in production
|
||||
- **WARNING**: Account integration exposes significant security risks (see above section)
|
||||
BIN
icons/apple-touch-icon-144x144.png
Normal file
BIN
icons/apple-touch-icon-144x144.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
BIN
icons/apple-touch-icon-152x152.png
Normal file
BIN
icons/apple-touch-icon-152x152.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
BIN
icons/apple-touch-icon.png
Normal file
BIN
icons/apple-touch-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 61 KiB |
BIN
icons/favicon.ico
Normal file
BIN
icons/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
BIN
icons/favicon.png
Normal file
BIN
icons/favicon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
BIN
icons/icon.png
Normal file
BIN
icons/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
37
icons/manifest.json
Normal file
37
icons/manifest.json
Normal 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
22
icons/webapp-meta.html
Normal 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
7
runelite
Normal 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
37
supervisord.conf
Normal 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
|
||||
Reference in New Issue
Block a user