1 Commits

Author SHA1 Message Date
4e7fb22621 chore: build youtube-dl from source 2019-11-27 14:11:25 -07:00
6 changed files with 26 additions and 50 deletions

View File

@@ -1,3 +0,0 @@
### Authors
- Joe Fleming ([w33ble](https://github.com/w33ble))

View File

@@ -1,8 +0,0 @@
### Changelog
#### 1.1.0 (27 November 2019)
- initial commit [`b66eb8a`](https://git.w33ble.com/w33ble/youtube-dl-web/commit/b66eb8abe793f7d551f1c44612a0b7e32d9b05b4)
- feat: functional download server [`eb35ae5`](https://git.w33ble.com/w33ble/youtube-dl-web/commit/eb35ae5dfdb76c6f144920e0c49b0313c9dbfb22)
- doc: update readme [`a955d20`](https://git.w33ble.com/w33ble/youtube-dl-web/commit/a955d20a52201d7d6ed56d8db077adf654e18636)
- feat: allow cleanup via REMOVE_DOWNLOAD env [`3792de3`](https://git.w33ble.com/w33ble/youtube-dl-web/commit/3792de3c91f307403eee6acec5a914cdf5ab9809)
- docs: add note about REMOVE_DOWNLOAD to readme [`16d971d`](https://git.w33ble.com/w33ble/youtube-dl-web/commit/16d971d8bbc9f82d83d3aee40119b179123303e2)

View File

@@ -1,17 +1,37 @@
# create build from source
FROM python:3 AS build
WORKDIR /build
RUN set -xe \
&& apt-get update -y \
&& apt-get install -y zip pandoc \
&& curl -L https://github.com/ytdl-org/youtube-dl/archive/master.zip -o youtube-dl-master.zip \
&& unzip youtube-dl-master.zip
WORKDIR /build/youtube-dl-master
RUN set -xe \
&& make
# add the build to the web container
FROM node:12-alpine FROM node:12-alpine
# install youtube-dl WORKDIR /app
# copy the build
COPY --from=build /build/youtube-dl-master/youtube-dl /usr/local/bin
# install dependencies
RUN set -xe \ RUN set -xe \
&& chmod a+rx /usr/local/bin/youtube-dl \
&& apk add --no-cache ca-certificates \ && apk add --no-cache ca-certificates \
ffmpeg \ ffmpeg \
openssl \ openssl \
python3 \ python3 \
&& pip3 install --upgrade pip \ && ln -s /usr/bin/python3 /usr/bin/python
&& pip3 install youtube-dl
# install app dependencies # install app dependencies
WORKDIR /app
RUN npm install -g yarn RUN npm install -g yarn
COPY package.json yarn.lock ./ COPY package.json yarn.lock ./
RUN yarn install RUN yarn install

View File

@@ -15,26 +15,6 @@ docker run -it --rm -p 8080:8080 -v $PWD/data:/app/data w33ble/youtube-dl-web
Then hit `http://localhost:8080`, passing in a `url` and optionally a `format` query parameter for where to download from. Then hit `http://localhost:8080`, passing in a `url` and optionally a `format` query parameter for where to download from.
### Automatic cleanup
By default, this image will both send the download in the web response as well as save it to disk. This is handy if you're saving those downloads via a volume.
If you don't want to keep the downloads around, you can use the `REMOVE_DOWNLOAD` environment to tell the server to clean up the download after sending it in the web request. Setting the value to `1` or `true` is all it takes:
```sh
docker run -it --rm -p 8080:8080 --env REMOVE_DOWNLOAD=1 w33ble/youtube-dl-web
```
Running it like this, the result from youtube-dl will only be useful from the web response. The file is cleaned up after sending so using the shared volume doesn't make sense.
## Deploy to Docker Hub
```sh
docker build . -t youtube-dl
docker tag youtube-dl USERNAME/youtube-dl:latest
docker push USERNAME/youtube-dl:latest
```
## License ## License
MIT © [w33ble](https://github.com/w33ble) MIT © [w33ble](https://github.com/w33ble)

View File

@@ -1,6 +1,6 @@
{ {
"name": "youtube-dl-web", "name": "youtube-dl-web",
"version": "1.1.0", "version": "0.0.0",
"description": "youtube-dl wrapped in a simple web server", "description": "youtube-dl wrapped in a simple web server",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

View File

@@ -89,19 +89,6 @@ module.exports = async function server(req, res) {
sent = true; sent = true;
}); });
} }
sent = true; sent = true;
// clean up the download if told to
res.on('finish', () => {
const { REMOVE_DOWNLOAD } = process.env;
if (!REMOVE_DOWNLOAD) return;
const shouldRemove = REMOVE_DOWNLOAD === '1' || REMOVE_DOWNLOAD.toLowerCase() === 'true';
if (shouldRemove) {
logger.info('Removing local file:', dlFilepath);
fs.unlinkSync(dlFilepath);
}
});
}); });
}; };