Beginning of History
All checks were successful
Build & Push Docker Image / build-and-publish (push) Successful in 13s
All checks were successful
Build & Push Docker Image / build-and-publish (push) Successful in 13s
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
|
||||||
72
README.md
Normal file
72
README.md
Normal 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
|
||||||
|
```
|
||||||
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">
|
||||||
Reference in New Issue
Block a user