Compare commits
25 Commits
Author | SHA1 | Date | |
---|---|---|---|
ae39dd8db4 | |||
2154421f4a | |||
6e4e4be40d | |||
d2cf269638 | |||
79c099482b | |||
ee59c6548a | |||
b52a23c517 | |||
a9ceea78f7 | |||
76fcb32ddb | |||
e6a5429b18 | |||
9bd769c038 | |||
32c6eeef08 | |||
2ef7d70796 | |||
9759153960 | |||
b4983c4e8c | |||
4f782d1103 | |||
e36184e0cc | |||
eee3b84569 | |||
|
a2c58d4012 | ||
|
8c46aa8df5 | ||
|
d66dbf5824 | ||
|
d21e66940e | ||
|
429ff0cc41 | ||
|
d8ef67a251 | ||
|
95bd308223 |
59
Dockerfile
59
Dockerfile
@ -1,39 +1,32 @@
|
|||||||
FROM java:8
|
FROM jeanblanchard/tomcat:8
|
||||||
MAINTAINER Cyrille Nofficial<cynoffic@cyrilix.fr>
|
|
||||||
|
|
||||||
ENV SUBSONIC_VERSION 5.2.1
|
ENV AIRSONIC_VERSION="10.5.0" LC_ALL="C.UTF-8" LANG="C.UTF-8" LANGUAGE="C.UTF-8" TZ="Europe/Berlin" MAX_MEM="256"
|
||||||
ENV PORT 8080
|
|
||||||
ENV CONTEXT_PATH /
|
|
||||||
|
|
||||||
LABEL version="$SUBSONIC_VERSION"
|
LABEL maintainer="Markus Birth <markus@birth-online.de>"
|
||||||
LABEL description="Subsonic media streamer"
|
LABEL version="$AIRSONIC_VERSION"
|
||||||
|
LABEL description="Airsonic is a free, web-based media streamer, providing ubiquitious access to your music."
|
||||||
|
LABEL org.label-schema.name="Airsonic" \
|
||||||
|
org.label-schema.url="https://airsonic.github.io/" \
|
||||||
|
org.label-schema.vcs-type="Git" \
|
||||||
|
org.label-schema.vcs-url="https://github.com/airsonic/airsonic"
|
||||||
|
|
||||||
RUN apt-get update &&\
|
RUN apk upgrade -U \
|
||||||
apt-get -y install libav-tools lame &&\
|
&& apk add ca-certificates openssl ffmpeg lame tzdata \
|
||||||
adduser --system --home /opt/subsonic subsonic &&\
|
&& cp /usr/share/zoneinfo/${TZ} /etc/localtime \
|
||||||
mkdir -p /opt/data/transcode /opt/music/ /opt/playlist/ /opt/podcast/ &&\
|
&& echo "${TZ}" > /etc/timezone \
|
||||||
chown -R subsonic /opt/data /opt/playlist/ /opt/podcast/ &&\
|
&& mkdir -p /data/transcode /music/ /playlists/ /podcasts/ \
|
||||||
ln -s /usr/bin/lame /opt/data/transcode/lame &&\
|
&& ln -s /usr/bin/lame /data/transcode/lame \
|
||||||
ln -s /usr/bin/avconv /opt/data/transcode/ffmpeg &&\
|
&& ln -s /usr/bin/ffmpeg /data/transcode/ffmpeg \
|
||||||
wget "http://downloads.sourceforge.net/project/subsonic/subsonic/$SUBSONIC_VERSION/subsonic-$SUBSONIC_VERSION-standalone.tar.gz?r=http%3A%2F%2Fwww.subsonic.org%2Fpages%2Fdownload2.jsp%3Ftarget%3Dsubsonic-$SUBSONIC_VERSION-standalone.tar.gz&ts=1431096340&use_mirror=garr" \
|
&& cd ${CATALINA_HOME}/webapps/ \
|
||||||
-O- --quiet | tar zxv -C /opt/subsonic
|
&& rm -rf ROOT \
|
||||||
|
&& wget -q "https://github.com/airsonic/airsonic/releases/download/v${AIRSONIC_VERSION}/airsonic.war" \
|
||||||
|
-O ROOT.war \
|
||||||
|
&& apk del tzdata \
|
||||||
|
&& rm -rf /var/cache/*
|
||||||
|
|
||||||
VOLUME /opt/data
|
ADD server.xml ${CATALINA_HOME}/conf/
|
||||||
VOLUME /opt/music/
|
ENV JAVA_OPTS="-Xmx${MAX_MEM}m -Dserver.host=0.0.0.0 -Dserver.contextPath=/ -Dairsonic.home=/data -Dairsonic.defaultMusicFolder=/music/ -Dairsonic.defaultPodcastFolder=/podcasts/ -Dairsonic.defaultPlaylistFolder=/playlists/ -Djava.awt.headless=true"
|
||||||
VOLUME /opt/playlist/
|
|
||||||
VOLUME /opt/podcast/
|
|
||||||
|
|
||||||
EXPOSE $PORT
|
VOLUME ["/data", "/music/", "/playlists/", "/podcasts/"]
|
||||||
WORKDIR /opt/subsonic
|
|
||||||
|
|
||||||
USER subsonic
|
EXPOSE 8080
|
||||||
CMD java -Xmx100m \
|
|
||||||
-Dsubsonic.home=/opt/data \
|
|
||||||
-Dsubsonic.port=$PORT \
|
|
||||||
-Dsubsonic.contextPath=$CONTEXT_PATH \
|
|
||||||
-Dsubsonic.defaultMusicFolder=/opt/music/ \
|
|
||||||
-Dsubsonic.defaultPodcastFolder=/opt/podcast/ \
|
|
||||||
-Dsubsonic.defaultPlaylistFolder=/opt/playlist/ \
|
|
||||||
-Djava.awt.headless=true \
|
|
||||||
-verbose:gc \
|
|
||||||
-jar /opt/subsonic/subsonic-booter-jar-with-dependencies.jar
|
|
||||||
|
60
README.md
60
README.md
@ -1,44 +1,64 @@
|
|||||||
|
|
||||||
This repository contains configuration files for building a
|
This repository contains configuration files for building a
|
||||||
Docker (http://docker.io) image for the Subsonic media streamer.
|
[Docker](https://docker.com/) image for the Airsonic media streamer.
|
||||||
|
|
||||||
## Noteworthy
|
[](https://imagelayers.io/?images=mbirth/airsonic:latest 'Get your own badge on imagelayers.io')
|
||||||
|
[](http://microbadger.com/#/images/mbirth/airsonic "Get your own image badge on microbadger.com")
|
||||||
|
|
||||||
* Subsonic 5.2.1 (http://www.subsonic.org)
|
|
||||||
|
|
||||||
## Build your own image
|
Noteworthy
|
||||||
|
----------
|
||||||
|
|
||||||
|
* [Airsonic 10.5.0](https://airsonic.github.io/)
|
||||||
|
* based on [cyrilix](https://github.com/cyrilix)/[docker-subsonic](https://github.com/cyrilix/docker-subsonic)
|
||||||
|
* uses [jeanblanchard](https://github.com/jeanblanchard)/[tomcat](https://hub.docker.com/r/jeanblanchard/tomcat/) with Alpine Linux
|
||||||
|
* compiles to a 266 MB image instead of [cyrilix](https://hub.docker.com/r/cyrilix/subsonic/)'s 484 MB
|
||||||
|
|
||||||
|
|
||||||
|
Volumes
|
||||||
|
-------
|
||||||
|
|
||||||
|
* `/data` --- Directory to store Airsonic's log, configuration and database
|
||||||
|
* `/music` --- Default music folder
|
||||||
|
* `/podcasts` --- Default podcast folder
|
||||||
|
* `/playlists` --- Default playlist folder
|
||||||
|
|
||||||
|
|
||||||
|
Environment Variables
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
* `TZ` --- timezone setting, default: `Europe/Berlin`
|
||||||
|
* `MAX_MEM` --- maximum Java heap size in megabytes, default: `256`
|
||||||
|
|
||||||
|
|
||||||
|
Build your own image
|
||||||
|
--------------------
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ docker build -t <your-name>/docker-subsonic .
|
$ docker build -t <your-name>/docker-airsonic .
|
||||||
```
|
```
|
||||||
|
|
||||||
## Get a pre-built image
|
|
||||||
|
Get a pre-built image
|
||||||
|
---------------------
|
||||||
|
|
||||||
A current image is available as a trusted build from the Docker index:
|
A current image is available as a trusted build from the Docker index:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ docker pull cyrilix/subsonic
|
$ docker pull mbirth/airsonic
|
||||||
```
|
```
|
||||||
|
|
||||||
The repository page is at
|
The repository page is at
|
||||||
https://index.docker.io/u/cyrilix/subsonic/
|
https://hub.docker.com/r/mbirth/airsonic/
|
||||||
|
|
||||||
|
|
||||||
## Run a container with this image
|
Run a container with this image
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ docker run \
|
$ docker run \
|
||||||
--detach \
|
--detach \
|
||||||
--publish 8080:8080 \
|
--publish 8080:8080 \
|
||||||
--volume "/wherever/your/music/is:/opt/music/:ro" \
|
--volume "/wherever/your/music/is:/music/:ro" \
|
||||||
<your-name>/subsonic
|
<your-name>/airsonic
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
Specify env variables:
|
|
||||||
|
|
||||||
* CONTEXT_PATH = The context path, i.e., the last part of the Subsonic URL. Typically '/' or '/subsonic'. Default '/'
|
|
||||||
* PORT = The port on which Subsonic will listen for incoming HTTP traffic. Default: 8080
|
|
||||||
|
|
||||||
|
149
server.xml
Normal file
149
server.xml
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
<?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" URIEncoding="utf-8" />
|
||||||
|
<!-- 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" URIEncoding="utf-8" />
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 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>
|
Reference in New Issue
Block a user