Compare commits
12 commits
Author | SHA1 | Date | |
---|---|---|---|
|
9f5efb4cdd | ||
|
a08e810ed4 | ||
bc2e1f2be3 | |||
5496b47b21 | |||
f0fea0fe97 | |||
bd27c82805 | |||
|
8a791f1493 | ||
|
85f2d23e54 | ||
9e94766060 | |||
71c8114e68 | |||
b95afbf722 | |||
a5b53f38ba |
5 changed files with 62 additions and 189 deletions
50
Dockerfile
50
Dockerfile
|
@ -1,28 +1,42 @@
|
||||||
FROM tomcat:8-jre8
|
FROM r.batts.cloud/debian:bookworm as extract
|
||||||
LABEL MAINTAINER Cyrille Nofficial<cynoffic@cyrilix.fr>
|
COPY jre-8u411-linux-x64.tar.gz /
|
||||||
|
RUN mkdir -p /usr/java &&\
|
||||||
|
tar -C /usr/java -xvf jre-8u411-linux-x64.tar.gz
|
||||||
|
|
||||||
ENV SUBSONIC_VERSION 6.1.1
|
FROM r.batts.cloud/debian:bookworm
|
||||||
|
ENV SUBSONIC_VERSION 6.1.6
|
||||||
LABEL version="$SUBSONIC_VERSION"
|
ENV JAVA_HOME /usr/java/jre1.8.0_411
|
||||||
|
ENV PATH $JAVA_HOME/bin:$PATH
|
||||||
LABEL description="Subsonic media streamer"
|
LABEL description="Subsonic media streamer"
|
||||||
|
LABEL version="$SUBSONIC_VERSION"
|
||||||
|
|
||||||
RUN apt-get update &&\
|
## TODO redo with https://github.com/airsonic-advanced/airsonic-advanced/releases/tag/v10.6.0
|
||||||
apt-get -y install libav-tools lame &&\
|
|
||||||
|
RUN apt update &&\
|
||||||
|
apt -y dist-upgrade &&\
|
||||||
|
apt -y install --no-install-recommends ffmpeg lame &&\
|
||||||
|
apt clean -y &&\
|
||||||
|
rm -rf /var/lib/apt/lists/* &&\
|
||||||
mkdir -p /opt/data/transcode /opt/music/ /opt/playlist/ /opt/podcast/ &&\
|
mkdir -p /opt/data/transcode /opt/music/ /opt/playlist/ /opt/podcast/ &&\
|
||||||
ln -s /usr/bin/lame /opt/data/transcode/lame &&\
|
ln -s /usr/bin/lame /opt/data/transcode/lame &&\
|
||||||
ln -s /usr/bin/avconv /opt/data/transcode/ffmpeg &&\
|
ln -s /usr/bin/avconv /opt/data/transcode/ffmpeg &&\
|
||||||
cd ${CATALINA_HOME}/webapps/ &&\
|
curl -o subsonic.tar.gz -SL "https://sourceforge.net/projects/subsonic/files/subsonic/$SUBSONIC_VERSION/subsonic-$SUBSONIC_VERSION-standalone.tar.gz/download" &&\
|
||||||
rm -rf ROOT &&\
|
mkdir -p /opt/subsonic &&\
|
||||||
wget "http://downloads.sourceforge.net/project/subsonic/subsonic/$SUBSONIC_VERSION/subsonic-$SUBSONIC_VERSION-war.zip?r=http%3A%2F%2Fwww.subsonic.org%2Fpages%2Fdownload2.jsp%3Ftarget%3Dsubsonic-$SUBSONIC_VERSION-standalone.tar.gz&ts=1431096340&use_mirror=garr" \
|
tar -C /opt/subsonic -xf subsonic.tar.gz &&\
|
||||||
-O subsonic.war.zip --quiet &&\
|
rm /subsonic.tar.gz
|
||||||
unzip subsonic.war.zip && rm subsonic.war.zip && mv subsonic.war ROOT.war
|
COPY --from=extract /usr/java/jre1.8.0_411 /usr/java/jre1.8.0_411
|
||||||
|
EXPOSE 4040
|
||||||
ADD server.xml /usr/local/tomcat/conf/
|
EXPOSE 4043
|
||||||
ENV JAVA_OPTS="-Dsubsonic.contextPath=/ -Dsubsonic.home=/opt/data -Dsubsonic.defaultMusicFolder=/opt/music/ -Dsubsonic.defaultPodcastFolder=/opt/podcast/ -Dsubsonic.defaultPlaylistFolder=/opt/playlist/"
|
|
||||||
|
|
||||||
VOLUME /opt/data
|
VOLUME /opt/data
|
||||||
VOLUME /opt/music/
|
VOLUME /opt/music/
|
||||||
VOLUME /opt/playlist/
|
VOLUME /opt/playlist/
|
||||||
VOLUME /opt/podcast/
|
VOLUME /opt/podcast/
|
||||||
|
ENV SUBSONIC_HOME /opt/data
|
||||||
|
ENV SUBSONIC_PORT 4040
|
||||||
|
ENV SUBSONIC_HTTPS_PORT 0
|
||||||
|
ENV SUBSONIC_MAX_MEMORY 250
|
||||||
|
ENV SUBSONIC_DEFAULT_MUSIC_FOLDER /opt/music
|
||||||
|
ENV SUBSONIC_DEFAULT_PODCAST_FOLDER /opt/podcast
|
||||||
|
ENV SUBSONIC_DEFAULT_PLAYLIST_FOLDER /opt/playlist
|
||||||
|
ENV HOME /opt/data
|
||||||
|
CMD /opt/subsonic/subsonic.sh && tail -f /opt/data/subsonic_sh.log
|
||||||
|
|
30
README.md
30
README.md
|
@ -1,37 +1,27 @@
|
||||||
|
|
||||||
This repository contains configuration files for building a
|
This repository contains configuration files for building a [Docker](https://github.com/docker/docker) image for the Subsonic media streamer.
|
||||||
Docker (http://docker.io) image for the Subsonic media streamer.
|
|
||||||
|
|
||||||
## Noteworthy
|
## Noteworthy
|
||||||
|
|
||||||
* Subsonic 6.0 (http://www.subsonic.org)
|
* Subsonic (http://www.subsonic.org)
|
||||||
|
* Still is Java 8 ... (https://www.java.com/download/manual.jsp)
|
||||||
|
|
||||||
## Build your own image
|
## Build your own image
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ docker build -t <your-name>/docker-subsonic .
|
docker build -t $USER/subsonic .
|
||||||
```
|
```
|
||||||
|
|
||||||
## Get a pre-built image
|
|
||||||
|
|
||||||
A current image is available as a trusted build from the Docker index:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ docker pull cyrilix/subsonic
|
|
||||||
```
|
|
||||||
|
|
||||||
The repository page is at
|
|
||||||
https://index.docker.io/u/cyrilix/subsonic/
|
|
||||||
|
|
||||||
|
|
||||||
## Run a container with this image
|
## Run a container with this image
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ docker run \
|
docker run \
|
||||||
--detach \
|
-it \
|
||||||
--publish 8080:8080 \
|
--rm \
|
||||||
|
-p 4040:4040 \
|
||||||
|
-p 4043:4043 \
|
||||||
--volume "/wherever/your/music/is:/opt/music/:ro" \
|
--volume "/wherever/your/music/is:/opt/music/:ro" \
|
||||||
<your-name>/subsonic
|
$USER/subsonic
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
0
data/.gitkeep
Normal file
0
data/.gitkeep
Normal file
18
docker-compose.yml
Normal file
18
docker-compose.yml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
subsonic:
|
||||||
|
#image: vbatts/subsonic
|
||||||
|
network_mode: "host"
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
read_only: true
|
||||||
|
tmpfs:
|
||||||
|
- /tmp
|
||||||
|
#ports:
|
||||||
|
#- 0.0.0.0:4040:4040/tcp
|
||||||
|
#- 0.0.0.0:4043:4043/tcp
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./data:/opt/data/
|
||||||
|
- /mnt/audio/Music:/opt/music
|
149
server.xml
149
server.xml
|
@ -1,149 +0,0 @@
|
||||||
<?xml version='1.0' encoding='utf-8'?>
|
|
||||||
<!--
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
contributor license agreements. See the NOTICE file distributed with
|
|
||||||
this work for additional information regarding copyright ownership.
|
|
||||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
||||||
(the "License"); you may not use this file except in compliance with
|
|
||||||
the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
-->
|
|
||||||
<!-- Note: A "Server" is not itself a "Container", so you may not
|
|
||||||
define subcomponents such as "Valves" at this level.
|
|
||||||
Documentation at /docs/config/server.html
|
|
||||||
-->
|
|
||||||
<Server port="8005" shutdown="SHUTDOWN">
|
|
||||||
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
|
|
||||||
<!-- Security listener. Documentation at /docs/config/listeners.html
|
|
||||||
<Listener className="org.apache.catalina.security.SecurityListener" />
|
|
||||||
-->
|
|
||||||
<!--APR library loader. Documentation at /docs/apr.html -->
|
|
||||||
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
|
|
||||||
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
|
|
||||||
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
|
|
||||||
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
|
|
||||||
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
|
|
||||||
|
|
||||||
<!-- Global JNDI resources
|
|
||||||
Documentation at /docs/jndi-resources-howto.html
|
|
||||||
-->
|
|
||||||
<GlobalNamingResources>
|
|
||||||
<!-- Editable user database that can also be used by
|
|
||||||
UserDatabaseRealm to authenticate users
|
|
||||||
-->
|
|
||||||
<Resource name="UserDatabase" auth="Container"
|
|
||||||
type="org.apache.catalina.UserDatabase"
|
|
||||||
description="User database that can be updated and saved"
|
|
||||||
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
|
|
||||||
pathname="conf/tomcat-users.xml" />
|
|
||||||
</GlobalNamingResources>
|
|
||||||
|
|
||||||
<!-- A "Service" is a collection of one or more "Connectors" that share
|
|
||||||
a single "Container" Note: A "Service" is not itself a "Container",
|
|
||||||
so you may not define subcomponents such as "Valves" at this level.
|
|
||||||
Documentation at /docs/config/service.html
|
|
||||||
-->
|
|
||||||
<Service name="Catalina">
|
|
||||||
|
|
||||||
<!--The connectors can use a shared executor, you can define one or more named thread pools-->
|
|
||||||
<!--
|
|
||||||
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
|
|
||||||
maxThreads="150" minSpareThreads="4"/>
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
<!-- A "Connector" represents an endpoint by which requests are received
|
|
||||||
and responses are returned. Documentation at :
|
|
||||||
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
|
|
||||||
Java AJP Connector: /docs/config/ajp.html
|
|
||||||
APR (HTTP/AJP) Connector: /docs/apr.html
|
|
||||||
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
|
|
||||||
-->
|
|
||||||
<Connector port="8080" protocol="HTTP/1.1"
|
|
||||||
connectionTimeout="20000"
|
|
||||||
redirectPort="8443" />
|
|
||||||
<!-- A "Connector" using the shared thread pool-->
|
|
||||||
<!--
|
|
||||||
<Connector executor="tomcatThreadPool"
|
|
||||||
port="8080" protocol="HTTP/1.1"
|
|
||||||
connectionTimeout="20000"
|
|
||||||
redirectPort="8443" />
|
|
||||||
-->
|
|
||||||
<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
|
|
||||||
This connector uses the NIO implementation that requires the JSSE
|
|
||||||
style configuration. When using the APR/native implementation, the
|
|
||||||
OpenSSL style configuration is required as described in the APR/native
|
|
||||||
documentation -->
|
|
||||||
<!--
|
|
||||||
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
|
|
||||||
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
|
|
||||||
clientAuth="false" sslProtocol="TLS" />
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Define an AJP 1.3 Connector on port 8009 -->
|
|
||||||
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
|
|
||||||
|
|
||||||
|
|
||||||
<!-- An Engine represents the entry point (within Catalina) that processes
|
|
||||||
every request. The Engine implementation for Tomcat stand alone
|
|
||||||
analyzes the HTTP headers included with the request, and passes them
|
|
||||||
on to the appropriate Host (virtual host).
|
|
||||||
Documentation at /docs/config/engine.html -->
|
|
||||||
|
|
||||||
<!-- You should set jvmRoute to support load-balancing via AJP ie :
|
|
||||||
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
|
|
||||||
-->
|
|
||||||
<Engine name="Catalina" defaultHost="localhost">
|
|
||||||
|
|
||||||
<!--For clustering, please take a look at documentation at:
|
|
||||||
/docs/cluster-howto.html (simple how to)
|
|
||||||
/docs/config/cluster.html (reference documentation) -->
|
|
||||||
<!--
|
|
||||||
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Use the LockOutRealm to prevent attempts to guess user passwords
|
|
||||||
via a brute-force attack -->
|
|
||||||
<Realm className="org.apache.catalina.realm.LockOutRealm">
|
|
||||||
<!-- This Realm uses the UserDatabase configured in the global JNDI
|
|
||||||
resources under the key "UserDatabase". Any edits
|
|
||||||
that are performed against this UserDatabase are immediately
|
|
||||||
available for use by the Realm. -->
|
|
||||||
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
|
|
||||||
resourceName="UserDatabase"/>
|
|
||||||
</Realm>
|
|
||||||
|
|
||||||
<Host name="localhost" appBase="webapps"
|
|
||||||
unpackWARs="true" autoDeploy="true">
|
|
||||||
|
|
||||||
|
|
||||||
<Valve className="org.apache.catalina.valves.RemoteIpValve"
|
|
||||||
remoteIpHeader="X-FORWARDED-FOR"
|
|
||||||
proxiesHeader="X-FORWARDED-BY"
|
|
||||||
protocolHeader="X-FORWARDED-PROTO"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- SingleSignOn valve, share authentication between web applications
|
|
||||||
Documentation at: /docs/config/valve.html -->
|
|
||||||
<!--
|
|
||||||
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Access log processes all example.
|
|
||||||
Documentation at: /docs/config/valve.html
|
|
||||||
Note: The pattern used is equivalent to using pattern="common" -->
|
|
||||||
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
|
|
||||||
prefix="localhost_access_log" suffix=".txt"
|
|
||||||
pattern="%h %l %u %t "%r" %s %b" />
|
|
||||||
|
|
||||||
</Host>
|
|
||||||
</Engine>
|
|
||||||
</Service>
|
|
||||||
</Server>
|
|
Loading…
Add table
Add a link
Reference in a new issue