Blame

b1250b Tebby Dog 2025-07-06 22:09:41 1
# Flash-Container
2
e69bc2 Tebby Dog 2025-07-06 22:33:37 3
Skip the fairy-tale, just give me the code already --> [Click Here](https://teb.codes/2-Code/Docker/Flash-Container#usage)
b1250b Tebby Dog 2025-07-06 22:09:41 4
5
# FlashContainer: Host & Serve Flash (.swf) Files with Ruffle
6
7
**FlashContainer** is a lightweight container designed to host and serve Flash `.swf` files using the Ruffle emulator. This allows you to easily run and view Flash-based content in a modern browser, even after Flash's official deprecation.
8
9
## How It Works
10
11
This container runs a web server using Node.js and serves `.swf` files via the [Ruffle](https://ruffle.rs/) emulator, which is a Flash Player emulator written in Rust. The emulator provides a modern way to play old Flash content by converting it to formats supported by current browsers.
12
13
- **Ruffle Integration**: The container downloads the latest nightly release of Ruffle, ensuring up-to-date compatibility with `.swf` files.
14
- **http-server**: This serves the content via HTTP, exposing it on port 80.
15
- **External SWF File**: You can map your own `.swf` files via Docker volume, making it easy to change content without modifying the image itself.
16
17
## Usage
18
19
1. **Pull the Image**
20
```bash
21
docker pull tebwritescode/flashcontainer
22
```
23
24
2. **Run the Container**
25
26
Mount your `.swf` file into the container with a volume mapping:
27
28
```bash
29
docker run -d -p 80:80 -v /path/to/your/game.swf:/app/game.swf tebwritescode/flashcontainer
30
```
31
32
- `/path/to/your/game.swf` should be replaced with the path to your local `.swf` file.
33
- The container will serve your `.swf` file at `http://localhost`.
34
35
3. **Access the Website**
36
37
Open a browser and navigate to `http://localhost` (or the IP where your container is hosted) to view and interact with your Flash file.
38
39
## Features
40
41
- **Serve Flash Content Easily**: Simple setup for serving `.swf` files.
42
- **Ruffle Emulator**: Play Flash content in a browser without needing Flash Player.
43
- **Volume Mapping**: No need to modify the container—just swap out the `.swf` file.
44
- **Lightweight**: Minimal image size using Node.js and Ruffle.
45
46
## Customization
47
48
- You can modify the HTML file that hosts the `.swf` content by editing `index.html` and adjusting the Ruffle embed configurations.
49
- Use different `.swf` files by swapping the file you mount to `/app/game.swf`.
50
51
## Requirements
52
53
- Docker installed on your host machine.
54
- A valid `.swf` file to be served.
55
56
## Screenshots
57
![Landing Page](https://nc.tebplex.tv/apps/files_sharing/publicpreview/ScQpa7TSDMAQx8s?file=/&fileId=3630&x=3024&y=1964&a=true&etag=ac32f5388179a139bd9052daa7046537)
58
59
![Responsive](https://nc.tebplex.tv/apps/files_sharing/publicpreview/AgAbowa3NRSBxy9?file=/&fileId=3645&x=3024&y=1964&a=true&etag=c92438fe09b99fc567ecfed90eabb69c)
60
61
![Ruffle](https://nc.tebplex.tv/apps/files_sharing/publicpreview/P9kWwmKEGrWdfB2?file=/&fileId=3578&x=3024&y=1964&a=true&etag=9449023d2a1bb1b329988829c73a705d)
62
63
---
64
## Source
65
Dockerfile
66
67
```
68
# Base image with Node.js and http-server to serve files
69
FROM node:20-bullseye
70
71
# Install http-server globally to serve files
72
RUN npm install -g http-server
73
74
# Set working directory
75
WORKDIR /app
76
77
# Download the specified nightly release of the Ruffle self-hosted package
78
# Install additional dependencies: Java, Git
79
RUN apt-get update && apt-get install -y \
80
default-jdk \
81
maven \
82
git \
83
default-mysql-client \
84
libasound2-dev \
85
libxcb-shape0-dev \
86
libxcb-xfixes0-dev \
87
libgtk-3-dev \
88
libudev-dev \
89
libxcb-xinput-dev \
90
libxcb-xkb-dev \
91
libxcb-cursor-dev \
92
default-jre-headless \
93
cmake \
94
g++ \
95
unzip \
96
wget \
97
&& apt-get clean \
98
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
99
. "$HOME/.cargo/env"
100
101
# Install curl and jq to fetch the latest Ruffle nightly release
102
RUN apt-get update && apt-get install -y curl jq
103
104
# Download the latest nightly release of Ruffle
105
RUN LATEST_RELEASE_URL=$(curl -s https://api.github.com/repos/ruffle-rs/ruffle/releases | jq -r '.[] | select(.prerelease == true) | .assets[].browser_download_url | select(contains("web-selfhosted.zip"))' | head -n 1) && \
106
wget $LATEST_RELEASE_URL -O /tmp/ruffle-nightly.zip && \
107
mkdir -p /app/ruffle && \
108
unzip /tmp/ruffle-nightly.zip -d /app/ruffle && \
109
rm /tmp/ruffle-nightly.zip
110
111
# Take out the trash
112
RUN rm -rf ./ruffle-nightly-2024_10_13-web-selfhosted.zip
113
114
# Copy the local HTML file into the container
115
COPY ./index.html /app/index.html
116
117
# Copy the local game file into the container
118
#COPY ./game.swf /app/game.swf
119
120
# Expose port 80 for serving the SWF game
121
EXPOSE 80
122
123
# Command to serve the game using http-server
124
CMD ["http-server", ".", "-p", "80"]
125
```
126
127
index.html
128
129
```
130
<!DOCTYPE html>
131
<html lang="en">
132
<head>
133
<meta charset="UTF-8">
134
<meta name="viewport" content="width=device-width, initial-scale=1.0">
135
<script src="ruffle/ruffle.js"></script>
136
<style>
137
html, body {
138
margin: 0;
139
padding: 0;
140
width: 100%;
141
height: 100%;
142
}
143
144
#ruffle-player {
145
width: 100%;
146
height: 100%;
147
}
148
</style>
149
</head>
150
<body>
151
<script>
152
window.RufflePlayer = window.RufflePlayer || {};
153
154
window.RufflePlayer.config = {
155
"letterbox": "on",
156
}
157
158
window.addEventListener("DOMContentLoaded", () => {
159
let ruffle = window.RufflePlayer.newest();
160
let player = ruffle.createPlayer();
161
player.style.width = "100%"; // Set player's width to 100%
162
player.style.height = "100%"; // Set player's height to 100%
163
document.body.appendChild(player);
164
player.load("game.swf"); // Load the local SWF file named game.swf
165
});
166
</script>
167
</body>
168
</html>
169
```
170
---
171
172
173
174
By using **FlashContainer**, you can keep your favorite Flash content alive and playable through modern web technologies.