Initial commit of unified Docker build and standalone image.
This commit is contained in:
parent
8a6625f19f
commit
f9221fb335
|
@ -6,9 +6,9 @@
|
||||||
!bin
|
!bin
|
||||||
!config
|
!config
|
||||||
!resources/locale/compiled
|
!resources/locale/compiled
|
||||||
!util/docker/web
|
!util/docker
|
||||||
!util/openapi.php
|
!util/openapi.php
|
||||||
!web
|
!web
|
||||||
!templates
|
!templates
|
||||||
!plugins
|
!plugins
|
||||||
!crowdin.yaml
|
!crowdin.yaml
|
||||||
|
|
80
Dockerfile
80
Dockerfile
|
@ -1,17 +1,72 @@
|
||||||
# Base install step (done first for caching purposes).
|
# Base install step (done first for caching purposes).
|
||||||
FROM ubuntu:focal as base
|
FROM ubuntu:focal as build_base
|
||||||
|
|
||||||
ENV TZ="UTC"
|
ENV TZ="UTC"
|
||||||
|
|
||||||
# Run base build process
|
# Run base build process
|
||||||
COPY ./util/docker/web/ /bd_build
|
COPY ./util/docker/base/ /bd_build_base
|
||||||
|
|
||||||
RUN chmod a+x /bd_build/*.sh \
|
RUN chmod a+x /bd_build_base/*.sh \
|
||||||
&& /bd_build/prepare.sh \
|
&& /bd_build_base/prepare.sh \
|
||||||
&& /bd_build/add_user.sh \
|
&& /bd_build_base/add_user.sh \
|
||||||
&& /bd_build/setup.sh \
|
&& /bd_build_base/setup.sh \
|
||||||
&& /bd_build/cleanup.sh \
|
&& /bd_build_base/cleanup.sh \
|
||||||
&& rm -rf /bd_build
|
&& rm -rf /bd_build_base
|
||||||
|
|
||||||
|
#
|
||||||
|
# Icecast build stage (for later copy)
|
||||||
|
#
|
||||||
|
FROM azuracast/icecast-kh-ac:2.4.0-kh15-ac1 AS build_icecast
|
||||||
|
|
||||||
|
#
|
||||||
|
# Liquidsoap build stage
|
||||||
|
#
|
||||||
|
FROM build_base AS build_liquidsoap
|
||||||
|
|
||||||
|
# Install build tools
|
||||||
|
RUN apt-get update \
|
||||||
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -q -y --no-install-recommends \
|
||||||
|
build-essential libssl-dev libcurl4-openssl-dev bubblewrap unzip m4 software-properties-common \
|
||||||
|
ocaml opam \
|
||||||
|
autoconf automake
|
||||||
|
|
||||||
|
USER azuracast
|
||||||
|
|
||||||
|
RUN opam init --disable-sandboxing -a --bare && opam switch create ocaml-system.4.08.1
|
||||||
|
|
||||||
|
# Uncomment to Pin specific commit of Liquidsoap
|
||||||
|
RUN cd ~/ \
|
||||||
|
&& git clone --recursive https://github.com/savonet/liquidsoap.git \
|
||||||
|
&& cd liquidsoap \
|
||||||
|
&& git checkout 75d530c86bf638e3c50c08b7802d92270288e31b \
|
||||||
|
&& opam pin add --no-action liquidsoap .
|
||||||
|
|
||||||
|
ARG opam_packages="ladspa.0.1.5 ffmpeg.0.4.3 samplerate.0.1.4 taglib.0.3.3 mad.0.4.5 faad.0.4.0 fdkaac.0.3.1 lame.0.3.3 vorbis.0.7.1 cry.0.6.1 flac.0.1.5 opus.0.1.3 duppy.0.8.0 ssl liquidsoap"
|
||||||
|
RUN opam install -y ${opam_packages}
|
||||||
|
|
||||||
|
FROM build_base AS build_final
|
||||||
|
|
||||||
|
# Run base build process
|
||||||
|
COPY ./util/docker/final/ /bd_build_final
|
||||||
|
|
||||||
|
RUN chmod a+x /bd_build_final/*.sh \
|
||||||
|
&& /bd_build_final/setup.sh \
|
||||||
|
&& /bd_build_final/cleanup.sh \
|
||||||
|
&& rm -rf /bd_build_final
|
||||||
|
|
||||||
|
#
|
||||||
|
# Final unified container build
|
||||||
|
#
|
||||||
|
FROM build_final
|
||||||
|
|
||||||
|
# Import Icecast-KH from build container
|
||||||
|
COPY --from=build_icecast /usr/local/bin/icecast /usr/local/bin/icecast
|
||||||
|
COPY --from=build_icecast /usr/local/share/icecast /usr/local/share/icecast
|
||||||
|
|
||||||
|
# Import Liquidsoap from build container
|
||||||
|
COPY --from=build_liquidsoap --chown=azuracast:azuracast /var/azuracast/.opam/ocaml-system.4.08.1 /var/azuracast/.opam/ocaml-system.4.08.1
|
||||||
|
|
||||||
|
RUN ln -s /var/azuracast/.opam/ocaml-system.4.08.1/bin/liquidsoap /usr/local/bin/liquidsoap
|
||||||
|
|
||||||
#
|
#
|
||||||
# START Operations as `azuracast` user
|
# START Operations as `azuracast` user
|
||||||
|
@ -32,14 +87,17 @@ COPY --chown=azuracast:azuracast . .
|
||||||
RUN composer dump-autoload --optimize --classmap-authoritative \
|
RUN composer dump-autoload --optimize --classmap-authoritative \
|
||||||
&& touch /var/azuracast/.docker
|
&& touch /var/azuracast/.docker
|
||||||
|
|
||||||
VOLUME ["/var/azuracast/www_tmp", "/var/azuracast/backups", "/var/azuracast/sftpgo/persist"]
|
# Include radio services in PATH
|
||||||
|
ENV PATH="${PATH}:/var/azuracast/servers/shoutcast2"
|
||||||
|
|
||||||
|
VOLUME ["/var/azuracast/www_tmp", "/var/azuracast/backups", "/var/azuracast/sftpgo/persist", "/var/azuracast/servers/shoutcast2"]
|
||||||
|
|
||||||
#
|
#
|
||||||
# END Operations as `azuracast` user
|
# END Operations as `azuracast` user
|
||||||
#
|
#
|
||||||
USER root
|
USER root
|
||||||
|
|
||||||
EXPOSE 80 2022
|
EXPOSE 80 2022 9001 8000-8999
|
||||||
|
|
||||||
# Nginx Proxy environment variables.
|
# Nginx Proxy environment variables.
|
||||||
ENV VIRTUAL_HOST="azuracast.local" \
|
ENV VIRTUAL_HOST="azuracast.local" \
|
||||||
|
@ -48,7 +106,7 @@ ENV VIRTUAL_HOST="azuracast.local" \
|
||||||
# Sensible default environment variables.
|
# Sensible default environment variables.
|
||||||
ENV LANG="en_US.UTF-8" \
|
ENV LANG="en_US.UTF-8" \
|
||||||
APPLICATION_ENV="production" \
|
APPLICATION_ENV="production" \
|
||||||
ENABLE_ADVANCED_FEATURES="false" \
|
AZURACAST_DOCKER_STANDALONE_MODE=0 \
|
||||||
MYSQL_HOST="mariadb" \
|
MYSQL_HOST="mariadb" \
|
||||||
MYSQL_PORT=3306 \
|
MYSQL_PORT=3306 \
|
||||||
MYSQL_USER="azuracast" \
|
MYSQL_USER="azuracast" \
|
||||||
|
|
|
@ -61,6 +61,11 @@ return function (Application $console) {
|
||||||
)->setDescription(__('Convert translated locale files into PHP arrays.'));
|
)->setDescription(__('Convert translated locale files into PHP arrays.'));
|
||||||
|
|
||||||
// Setup
|
// Setup
|
||||||
|
$console->command(
|
||||||
|
'azuracast:setup:initialize',
|
||||||
|
Command\InitializeCommand::class
|
||||||
|
)->setDescription(__('Ensure key settings are initialized within AzuraCast.'));
|
||||||
|
|
||||||
$console->command(
|
$console->command(
|
||||||
'azuracast:config:migrate',
|
'azuracast:config:migrate',
|
||||||
Command\MigrateConfigCommand::class
|
Command\MigrateConfigCommand::class
|
||||||
|
|
|
@ -27,9 +27,3 @@ services:
|
||||||
context: ../docker-azuracast-redis
|
context: ../docker-azuracast-redis
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:6379:6379"
|
- "127.0.0.1:6379:6379"
|
||||||
|
|
||||||
stations:
|
|
||||||
build:
|
|
||||||
context: ../docker-azuracast-radio
|
|
||||||
volumes:
|
|
||||||
- ./util/local_ssl:/etc/nginx/certs
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ version : '2.2'
|
||||||
services :
|
services :
|
||||||
nginx_proxy :
|
nginx_proxy :
|
||||||
container_name : nginx_proxy
|
container_name : nginx_proxy
|
||||||
image : "azuracast/azuracast_nginx_proxy:${AZURACAST_VERSION:-latest}"
|
image : "ghcr.io/azuracast/nginx_proxy:${AZURACAST_VERSION:-latest}"
|
||||||
ports :
|
ports :
|
||||||
- '${AZURACAST_HTTP_PORT:-80}:80'
|
- '${AZURACAST_HTTP_PORT:-80}:80'
|
||||||
- '${AZURACAST_HTTPS_PORT:-443}:443'
|
- '${AZURACAST_HTTPS_PORT:-443}:443'
|
||||||
|
@ -34,7 +34,7 @@ services :
|
||||||
|
|
||||||
nginx_proxy_letsencrypt :
|
nginx_proxy_letsencrypt :
|
||||||
container_name : nginx_proxy_letsencrypt
|
container_name : nginx_proxy_letsencrypt
|
||||||
image : "azuracast/azuracast_nginx_proxy_letsencrypt:${AZURACAST_VERSION:-latest}"
|
image : "ghcr.io/azuracast/nginx_proxy_letsencrypt:${AZURACAST_VERSION:-latest}"
|
||||||
volumes_from :
|
volumes_from :
|
||||||
- nginx_proxy
|
- nginx_proxy
|
||||||
volumes :
|
volumes :
|
||||||
|
@ -48,19 +48,19 @@ services :
|
||||||
|
|
||||||
web :
|
web :
|
||||||
container_name : azuracast_web
|
container_name : azuracast_web
|
||||||
image : "azuracast/azuracast_web_v2:${AZURACAST_VERSION:-latest}"
|
image : "ghcr.io/azuracast/web:${AZURACAST_VERSION:-latest}"
|
||||||
# Want to customize the HTTP/S ports? Follow the instructions here:
|
# Want to customize the HTTP/S ports? Follow the instructions here:
|
||||||
# https://docs.azuracast.com/en/administration/docker#using-non-standard-ports
|
# https://docs.azuracast.com/en/administration/docker#using-non-standard-ports
|
||||||
ports :
|
ports :
|
||||||
- '${AZURACAST_SFTP_PORT:-2022}:2022'
|
- '${AZURACAST_SFTP_PORT:-2022}:2022'
|
||||||
depends_on :
|
depends_on :
|
||||||
- mariadb
|
- mariadb
|
||||||
- stations
|
|
||||||
- redis
|
- redis
|
||||||
env_file : azuracast.env
|
env_file : azuracast.env
|
||||||
environment :
|
environment :
|
||||||
LANG : ${LANG:-en_US.UTF-8}
|
LANG : ${LANG:-en_US.UTF-8}
|
||||||
AZURACAST_DC_REVISION : 11
|
AZURACAST_DC_REVISION : 12
|
||||||
|
AZURACAST_DOCKER_STANDALONE_MODE : 1
|
||||||
AZURACAST_VERSION : ${AZURACAST_VERSION:-latest}
|
AZURACAST_VERSION : ${AZURACAST_VERSION:-latest}
|
||||||
AZURACAST_SFTP_PORT : ${AZURACAST_SFTP_PORT:-2022}
|
AZURACAST_SFTP_PORT : ${AZURACAST_SFTP_PORT:-2022}
|
||||||
VIRTUAL_HOST : ${LETSENCRYPT_HOST:-azuracast.local}
|
VIRTUAL_HOST : ${LETSENCRYPT_HOST:-azuracast.local}
|
||||||
|
@ -91,7 +91,7 @@ services :
|
||||||
|
|
||||||
mariadb :
|
mariadb :
|
||||||
container_name : azuracast_mariadb
|
container_name : azuracast_mariadb
|
||||||
image : "azuracast/azuracast_db:${AZURACAST_VERSION:-latest}"
|
image : "ghcr.io/azuracast/db:${AZURACAST_VERSION:-latest}"
|
||||||
volumes :
|
volumes :
|
||||||
- db_data:/var/lib/mysql
|
- db_data:/var/lib/mysql
|
||||||
env_file : azuracast.env
|
env_file : azuracast.env
|
||||||
|
@ -102,7 +102,7 @@ services :
|
||||||
|
|
||||||
redis :
|
redis :
|
||||||
container_name : azuracast_redis
|
container_name : azuracast_redis
|
||||||
image : "azuracast/azuracast_redis:${AZURACAST_VERSION:-latest}"
|
image : "ghcr.io/azuracast/redis:${AZURACAST_VERSION:-latest}"
|
||||||
sysctls :
|
sysctls :
|
||||||
net.core.somaxconn : 1024
|
net.core.somaxconn : 1024
|
||||||
volumes :
|
volumes :
|
||||||
|
@ -112,174 +112,6 @@ services :
|
||||||
restart : always
|
restart : always
|
||||||
logging : *default-logging
|
logging : *default-logging
|
||||||
|
|
||||||
stations :
|
|
||||||
container_name : azuracast_stations
|
|
||||||
image : "azuracast/azuracast_radio:${AZURACAST_VERSION:-latest}"
|
|
||||||
ports :
|
|
||||||
# This default mapping is the outgoing and incoming ports for the first 50 stations.
|
|
||||||
# You can override this port mapping in your own docker-compose.override.yml file.
|
|
||||||
# For instructions, see:
|
|
||||||
# https://docs.azuracast.com/en/administration/docker#expanding-the-station-port-range
|
|
||||||
- '8000:8000'
|
|
||||||
- '8005:8005'
|
|
||||||
- '8006:8006'
|
|
||||||
- '8010:8010'
|
|
||||||
- '8015:8015'
|
|
||||||
- '8016:8016'
|
|
||||||
- '8020:8020'
|
|
||||||
- '8025:8025'
|
|
||||||
- '8026:8026'
|
|
||||||
- '8030:8030'
|
|
||||||
- '8035:8035'
|
|
||||||
- '8036:8036'
|
|
||||||
- '8040:8040'
|
|
||||||
- '8045:8045'
|
|
||||||
- '8046:8046'
|
|
||||||
- '8050:8050'
|
|
||||||
- '8055:8055'
|
|
||||||
- '8056:8056'
|
|
||||||
- '8060:8060'
|
|
||||||
- '8065:8065'
|
|
||||||
- '8066:8066'
|
|
||||||
- '8070:8070'
|
|
||||||
- '8075:8075'
|
|
||||||
- '8076:8076'
|
|
||||||
- '8090:8090'
|
|
||||||
- '8095:8095'
|
|
||||||
- '8096:8096'
|
|
||||||
- '8100:8100'
|
|
||||||
- '8105:8105'
|
|
||||||
- '8106:8106'
|
|
||||||
- '8110:8110'
|
|
||||||
- '8115:8115'
|
|
||||||
- '8116:8116'
|
|
||||||
- '8120:8120'
|
|
||||||
- '8125:8125'
|
|
||||||
- '8126:8126'
|
|
||||||
- '8130:8130'
|
|
||||||
- '8135:8135'
|
|
||||||
- '8136:8136'
|
|
||||||
- '8140:8140'
|
|
||||||
- '8145:8145'
|
|
||||||
- '8146:8146'
|
|
||||||
- '8150:8150'
|
|
||||||
- '8155:8155'
|
|
||||||
- '8156:8156'
|
|
||||||
- '8160:8160'
|
|
||||||
- '8165:8165'
|
|
||||||
- '8166:8166'
|
|
||||||
- '8170:8170'
|
|
||||||
- '8175:8175'
|
|
||||||
- '8176:8176'
|
|
||||||
- '8180:8180'
|
|
||||||
- '8185:8185'
|
|
||||||
- '8186:8186'
|
|
||||||
- '8190:8190'
|
|
||||||
- '8195:8195'
|
|
||||||
- '8196:8196'
|
|
||||||
- '8200:8200'
|
|
||||||
- '8205:8205'
|
|
||||||
- '8206:8206'
|
|
||||||
- '8210:8210'
|
|
||||||
- '8215:8215'
|
|
||||||
- '8216:8216'
|
|
||||||
- '8220:8220'
|
|
||||||
- '8225:8225'
|
|
||||||
- '8226:8226'
|
|
||||||
- '8230:8230'
|
|
||||||
- '8235:8235'
|
|
||||||
- '8236:8236'
|
|
||||||
- '8240:8240'
|
|
||||||
- '8245:8245'
|
|
||||||
- '8246:8246'
|
|
||||||
- '8250:8250'
|
|
||||||
- '8255:8255'
|
|
||||||
- '8256:8256'
|
|
||||||
- '8260:8260'
|
|
||||||
- '8265:8265'
|
|
||||||
- '8266:8266'
|
|
||||||
- '8270:8270'
|
|
||||||
- '8275:8275'
|
|
||||||
- '8276:8276'
|
|
||||||
- '8280:8280'
|
|
||||||
- '8285:8285'
|
|
||||||
- '8286:8286'
|
|
||||||
- '8290:8290'
|
|
||||||
- '8295:8295'
|
|
||||||
- '8296:8296'
|
|
||||||
- '8300:8300'
|
|
||||||
- '8305:8305'
|
|
||||||
- '8306:8306'
|
|
||||||
- '8310:8310'
|
|
||||||
- '8315:8315'
|
|
||||||
- '8316:8316'
|
|
||||||
- '8320:8320'
|
|
||||||
- '8325:8325'
|
|
||||||
- '8326:8326'
|
|
||||||
- '8330:8330'
|
|
||||||
- '8335:8335'
|
|
||||||
- '8336:8336'
|
|
||||||
- '8340:8340'
|
|
||||||
- '8345:8345'
|
|
||||||
- '8346:8346'
|
|
||||||
- '8350:8350'
|
|
||||||
- '8355:8355'
|
|
||||||
- '8356:8356'
|
|
||||||
- '8360:8360'
|
|
||||||
- '8365:8365'
|
|
||||||
- '8366:8366'
|
|
||||||
- '8370:8370'
|
|
||||||
- '8375:8375'
|
|
||||||
- '8376:8376'
|
|
||||||
- '8380:8380'
|
|
||||||
- '8385:8385'
|
|
||||||
- '8386:8386'
|
|
||||||
- '8390:8390'
|
|
||||||
- '8395:8395'
|
|
||||||
- '8396:8396'
|
|
||||||
- '8400:8400'
|
|
||||||
- '8405:8405'
|
|
||||||
- '8406:8406'
|
|
||||||
- '8410:8410'
|
|
||||||
- '8415:8415'
|
|
||||||
- '8416:8416'
|
|
||||||
- '8420:8420'
|
|
||||||
- '8425:8425'
|
|
||||||
- '8426:8426'
|
|
||||||
- '8430:8430'
|
|
||||||
- '8435:8435'
|
|
||||||
- '8436:8436'
|
|
||||||
- '8440:8440'
|
|
||||||
- '8445:8445'
|
|
||||||
- '8446:8446'
|
|
||||||
- '8450:8450'
|
|
||||||
- '8455:8455'
|
|
||||||
- '8456:8456'
|
|
||||||
- '8460:8460'
|
|
||||||
- '8465:8465'
|
|
||||||
- '8466:8466'
|
|
||||||
- '8470:8470'
|
|
||||||
- '8475:8475'
|
|
||||||
- '8476:8476'
|
|
||||||
- '8480:8480'
|
|
||||||
- '8485:8485'
|
|
||||||
- '8486:8486'
|
|
||||||
- '8490:8490'
|
|
||||||
- '8495:8495'
|
|
||||||
- '8496:8496'
|
|
||||||
volumes :
|
|
||||||
- station_data:/var/azuracast/stations
|
|
||||||
- shoutcast2_install:/var/azuracast/servers/shoutcast2
|
|
||||||
- letsencrypt:/etc/nginx/certs
|
|
||||||
- tmp_data:/var/azuracast/www_tmp
|
|
||||||
networks :
|
|
||||||
- frontend
|
|
||||||
- backend
|
|
||||||
init : true
|
|
||||||
restart : always
|
|
||||||
ulimits : *default-ulimits
|
|
||||||
logging : *default-logging
|
|
||||||
|
|
||||||
networks :
|
networks :
|
||||||
frontend :
|
frontend :
|
||||||
driver : bridge
|
driver : bridge
|
||||||
|
|
22
docker.sh
22
docker.sh
|
@ -111,6 +111,11 @@ __dotenv_cmd=.env
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Shortcut to have Docker run YQ files
|
||||||
|
yq() {
|
||||||
|
docker run --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"
|
||||||
|
}
|
||||||
|
|
||||||
# This is a general-purpose function to ask Yes/No questions in Bash, either
|
# This is a general-purpose function to ask Yes/No questions in Bash, either
|
||||||
# with or without a default answer. It keeps repeating the question until it
|
# with or without a default answer. It keeps repeating the question until it
|
||||||
# gets a valid answer.
|
# gets a valid answer.
|
||||||
|
@ -201,6 +206,19 @@ setup-release() {
|
||||||
.env --file .env set AZURACAST_VERSION=${AZURACAST_VERSION}
|
.env --file .env set AZURACAST_VERSION=${AZURACAST_VERSION}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Add Ports to Docker Compose
|
||||||
|
add-ports-to-docker-compose() {
|
||||||
|
local LEGACY_PORTS
|
||||||
|
LEGACY_PORTS="8000,8005,8006,8010,8015,8016,8020,8025,8026,8030,8035,8036,8040,8045,8046,8050,8055,8056,8060,8065,8066,8070,8075,8076,8090,8095,8096,8100,8105,8106,8110,8115,8116,8120,8125,8126,8130,8135,8136,8140,8145,8146,8150,8155,8156,8160,8165,8166,8170,8175,8176,8180,8185,8186,8190,8195,8196,8200,8205,8206,8210,8215,8216,8220,8225,8226,8230,8235,8236,8240,8245,8246,8250,8255,8256,8260,8265,8266,8270,8275,8276,8280,8285,8286,8290,8295,8296,8300,8305,8306,8310,8315,8316,8320,8325,8326,8330,8335,8336,8340,8345,8346,8350,8355,8356,8360,8365,8366,8370,8375,8376,8380,8385,8386,8390,8395,8396,8400,8405,8406,8410,8415,8416,8420,8425,8426,8430,8435,8436,8440,8445,8446,8450,8455,8456,8460,8465,8466,8470,8475,8476,8480,8485,8486,8490,8495,8496"
|
||||||
|
|
||||||
|
.env --file .env get AZURACAST_STATION_PORTS
|
||||||
|
|
||||||
|
local PORTS
|
||||||
|
PORTS="${REPLY:-$LEGACY_PORTS}"
|
||||||
|
|
||||||
|
yq eval ".services.web.ports += [$PORTS]" -i docker-compose.yml
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Run the initial installer of Docker and AzuraCast.
|
# Run the initial installer of Docker and AzuraCast.
|
||||||
# Usage: ./docker.sh install
|
# Usage: ./docker.sh install
|
||||||
|
@ -285,6 +303,8 @@ install() {
|
||||||
else
|
else
|
||||||
curl -fsSL https://raw.githubusercontent.com/AzuraCast/AzuraCast/main/docker-compose.sample.yml -o docker-compose.yml
|
curl -fsSL https://raw.githubusercontent.com/AzuraCast/AzuraCast/main/docker-compose.sample.yml -o docker-compose.yml
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
add-ports-to-docker-compose
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ask "Customize AzuraCast ports?" N; then
|
if ask "Customize AzuraCast ports?" N; then
|
||||||
|
@ -384,6 +404,8 @@ update() {
|
||||||
|
|
||||||
cp docker-compose.yml docker-compose.backup.yml
|
cp docker-compose.yml docker-compose.backup.yml
|
||||||
mv docker-compose.new.yml docker-compose.yml
|
mv docker-compose.new.yml docker-compose.yml
|
||||||
|
|
||||||
|
add-ports-to-docker-compose
|
||||||
else
|
else
|
||||||
rm docker-compose.new.yml
|
rm docker-compose.new.yml
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Command;
|
||||||
|
|
||||||
|
use App\Entity;
|
||||||
|
use App\Environment;
|
||||||
|
use Psr\Container\ContainerInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||||
|
|
||||||
|
class InitializeCommand extends CommandAbstract
|
||||||
|
{
|
||||||
|
public function __invoke(
|
||||||
|
SymfonyStyle $io,
|
||||||
|
OutputInterface $output,
|
||||||
|
Environment $environment,
|
||||||
|
ContainerInterface $di,
|
||||||
|
Entity\Repository\SettingsRepository $settingsRepo,
|
||||||
|
Entity\Repository\StationRepository $stationRepo,
|
||||||
|
Entity\Repository\StorageLocationRepository $storageLocationRepo
|
||||||
|
): int {
|
||||||
|
$io->title(__('Initialize AzuraCast'));
|
||||||
|
$io->writeln(__('Initializing essential settings...'));
|
||||||
|
|
||||||
|
$io->listing(
|
||||||
|
[
|
||||||
|
__('Environment: %s', ucfirst($environment->getAppEnvironment())),
|
||||||
|
__('Installation Method: %s', $environment->isDocker() ? 'Docker' : 'Ansible'),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$io->newLine();
|
||||||
|
$io->section(__('Running Database Migrations'));
|
||||||
|
|
||||||
|
$this->runCommand(
|
||||||
|
$output,
|
||||||
|
'migrations:migrate',
|
||||||
|
[
|
||||||
|
'--allow-no-migration' => true,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$io->newLine();
|
||||||
|
$io->section(__('Generating Database Proxy Classes'));
|
||||||
|
|
||||||
|
$this->runCommand($output, 'orm:generate-proxies');
|
||||||
|
|
||||||
|
$io->newLine();
|
||||||
|
$io->section(__('Reload System Data'));
|
||||||
|
|
||||||
|
$this->runCommand($output, 'cache:clear');
|
||||||
|
$this->runCommand($output, 'queue:clear');
|
||||||
|
|
||||||
|
$stationRepo->clearNowPlaying();
|
||||||
|
|
||||||
|
// Clear settings that should be reset upon update.
|
||||||
|
$settings = $settingsRepo->readSettings();
|
||||||
|
$settings->setNowplaying(null);
|
||||||
|
$settings->updateUpdateLastRun();
|
||||||
|
$settings->setUpdateResults(null);
|
||||||
|
|
||||||
|
if ('127.0.0.1' !== $settings->getExternalIp()) {
|
||||||
|
$settings->setExternalIp(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
$settingsRepo->writeSettings($settings);
|
||||||
|
|
||||||
|
$storageLocationRepo->createDefaultStorageLocations();
|
||||||
|
|
||||||
|
$io->newLine();
|
||||||
|
$io->success(
|
||||||
|
[
|
||||||
|
__('AzuraCast is now initialized.'),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,10 +2,8 @@
|
||||||
|
|
||||||
namespace App\Console\Command;
|
namespace App\Console\Command;
|
||||||
|
|
||||||
use App\Entity;
|
|
||||||
use App\Environment;
|
use App\Environment;
|
||||||
use App\Service\AzuraCastCentral;
|
use App\Service\AzuraCastCentral;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
|
||||||
use Psr\Container\ContainerInterface;
|
use Psr\Container\ContainerInterface;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||||
|
@ -17,9 +15,6 @@ class SetupCommand extends CommandAbstract
|
||||||
OutputInterface $output,
|
OutputInterface $output,
|
||||||
Environment $environment,
|
Environment $environment,
|
||||||
ContainerInterface $di,
|
ContainerInterface $di,
|
||||||
Entity\Repository\SettingsRepository $settingsRepo,
|
|
||||||
Entity\Repository\StationRepository $stationRepo,
|
|
||||||
Entity\Repository\StorageLocationRepository $storageLocationRepo,
|
|
||||||
AzuraCastCentral $acCentral,
|
AzuraCastCentral $acCentral,
|
||||||
bool $update = false,
|
bool $update = false,
|
||||||
bool $loadFixtures = false
|
bool $loadFixtures = false
|
||||||
|
@ -27,36 +22,7 @@ class SetupCommand extends CommandAbstract
|
||||||
$io->title(__('AzuraCast Setup'));
|
$io->title(__('AzuraCast Setup'));
|
||||||
$io->writeln(__('Welcome to AzuraCast. Please wait while some key dependencies of AzuraCast are set up...'));
|
$io->writeln(__('Welcome to AzuraCast. Please wait while some key dependencies of AzuraCast are set up...'));
|
||||||
|
|
||||||
$io->listing(
|
$this->runCommand($output, 'azuracast:setup:initialize');
|
||||||
[
|
|
||||||
__('Environment: %s', ucfirst($environment->getAppEnvironment())),
|
|
||||||
__('Installation Method: %s', $environment->isDocker() ? 'Docker' : 'Ansible'),
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($update) {
|
|
||||||
$io->note(__('Running in update mode.'));
|
|
||||||
}
|
|
||||||
|
|
||||||
$conn = $di->get(EntityManagerInterface::class)->getConnection();
|
|
||||||
|
|
||||||
$io->newLine();
|
|
||||||
$io->section(__('Running Database Migrations'));
|
|
||||||
|
|
||||||
$conn->ping();
|
|
||||||
$this->runCommand(
|
|
||||||
$output,
|
|
||||||
'migrations:migrate',
|
|
||||||
[
|
|
||||||
'--allow-no-migration' => true,
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
$io->newLine();
|
|
||||||
$io->section(__('Generating Database Proxy Classes'));
|
|
||||||
|
|
||||||
$conn->ping();
|
|
||||||
$this->runCommand($output, 'orm:generate-proxies');
|
|
||||||
|
|
||||||
if ($loadFixtures || (!$environment->isProduction() && !$update)) {
|
if ($loadFixtures || (!$environment->isProduction() && !$update)) {
|
||||||
$io->newLine();
|
$io->newLine();
|
||||||
|
@ -65,36 +31,11 @@ class SetupCommand extends CommandAbstract
|
||||||
$this->runCommand($output, 'azuracast:setup:fixtures');
|
$this->runCommand($output, 'azuracast:setup:fixtures');
|
||||||
}
|
}
|
||||||
|
|
||||||
$io->newLine();
|
|
||||||
$io->section(__('Reload System Data'));
|
|
||||||
|
|
||||||
$this->runCommand($output, 'cache:clear');
|
|
||||||
|
|
||||||
$this->runCommand($output, 'queue:clear');
|
|
||||||
|
|
||||||
$settings = $settingsRepo->readSettings();
|
|
||||||
$settings->setNowplaying(null);
|
|
||||||
|
|
||||||
$stationRepo->clearNowPlaying();
|
|
||||||
|
|
||||||
$io->newLine();
|
$io->newLine();
|
||||||
$io->section(__('Refreshing All Stations'));
|
$io->section(__('Refreshing All Stations'));
|
||||||
|
|
||||||
$conn->ping();
|
|
||||||
$this->runCommand($output, 'azuracast:radio:restart');
|
$this->runCommand($output, 'azuracast:radio:restart');
|
||||||
|
|
||||||
// Clear settings that should be reset upon update.
|
|
||||||
$settings->updateUpdateLastRun();
|
|
||||||
$settings->setUpdateResults(null);
|
|
||||||
|
|
||||||
if ('127.0.0.1' !== $settings->getExternalIp()) {
|
|
||||||
$settings->setExternalIp(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
$settingsRepo->writeSettings($settings);
|
|
||||||
|
|
||||||
$storageLocationRepo->createDefaultStorageLocations();
|
|
||||||
|
|
||||||
$io->newLine();
|
$io->newLine();
|
||||||
|
|
||||||
if ($update) {
|
if ($update) {
|
||||||
|
|
|
@ -19,7 +19,7 @@ class Version
|
||||||
public const RELEASE_CHANNEL_STABLE = 'stable';
|
public const RELEASE_CHANNEL_STABLE = 'stable';
|
||||||
|
|
||||||
// phpcs:disable Generic.Files.LineLength
|
// phpcs:disable Generic.Files.LineLength
|
||||||
public const LATEST_COMPOSE_REVISION = 11;
|
public const LATEST_COMPOSE_REVISION = 12;
|
||||||
public const LATEST_COMPOSE_URL = 'https://raw.githubusercontent.com/AzuraCast/AzuraCast/main/docker-compose.sample.yml';
|
public const LATEST_COMPOSE_URL = 'https://raw.githubusercontent.com/AzuraCast/AzuraCast/main/docker-compose.sample.yml';
|
||||||
|
|
||||||
public const UPDATE_URL = 'https://docs.azuracast.com/en/getting-started/updates';
|
public const UPDATE_URL = 'https://docs.azuracast.com/en/getting-started/updates';
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source /bd_build/buildconfig
|
source /bd_build_base/buildconfig
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
$minimal_apt_get_install sudo
|
$minimal_apt_get_install sudo
|
||||||
|
@ -18,4 +18,4 @@ mkdir -p /var/azuracast/www /var/azuracast/backups /var/azuracast/www_tmp /var/a
|
||||||
chown -R azuracast:azuracast /var/azuracast
|
chown -R azuracast:azuracast /var/azuracast
|
||||||
chmod -R 777 /var/azuracast/www_tmp
|
chmod -R 777 /var/azuracast/www_tmp
|
||||||
|
|
||||||
echo 'azuracast ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
|
echo 'azuracast ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
|
|
@ -1,9 +1,9 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source /bd_build/buildconfig
|
source /bd_build_base/buildconfig
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
apt-get clean
|
apt-get clean
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
rm -rf /tmp/tmp*
|
rm -rf /tmp/tmp*
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source /bd_build/buildconfig
|
source /bd_build_base/buildconfig
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
## Prevent initramfs updates from trying to run grub and lilo.
|
## Prevent initramfs updates from trying to run grub and lilo.
|
||||||
|
@ -14,7 +14,7 @@ echo -n no > /etc/container_environment/INITRD
|
||||||
echo "UTC" > /etc/timezone
|
echo "UTC" > /etc/timezone
|
||||||
|
|
||||||
# Avoid ERROR: invoke-rc.d: policy-rc.d denied execution of start.
|
# Avoid ERROR: invoke-rc.d: policy-rc.d denied execution of start.
|
||||||
sed -i "s/^exit 101$/exit 0/" /usr/sbin/policy-rc.d
|
sed -i "s/^exit 101$/exit 0/" /usr/sbin/policy-rc.d
|
||||||
|
|
||||||
## Enable Ubuntu Universe, Multiverse, and deb-src for main.
|
## Enable Ubuntu Universe, Multiverse, and deb-src for main.
|
||||||
sed -i 's/^#\s*\(deb.*main restricted\)$/\1/g' /etc/apt/sources.list
|
sed -i 's/^#\s*\(deb.*main restricted\)$/\1/g' /etc/apt/sources.list
|
||||||
|
@ -67,4 +67,4 @@ chmod 700 /etc/container_environment
|
||||||
groupadd -g 8377 docker_env
|
groupadd -g 8377 docker_env
|
||||||
chown :docker_env /etc/container_environment.sh /etc/container_environment.json
|
chown :docker_env /etc/container_environment.sh /etc/container_environment.json
|
||||||
chmod 640 /etc/container_environment.sh /etc/container_environment.json
|
chmod 640 /etc/container_environment.sh /etc/container_environment.json
|
||||||
ln -s /etc/container_environment.sh /etc/profile.d/
|
ln -s /etc/container_environment.sh /etc/profile.d/
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
source /bd_build_base/buildconfig
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# Install scripts commonly used during setup.
|
||||||
|
$minimal_apt_get_install runit curl wget tar zip unzip git rsync tzdata gpg-agent openssh-client
|
||||||
|
|
||||||
|
# Run service setup for all setup scripts
|
||||||
|
for f in /bd_build_base/setup/*.sh; do
|
||||||
|
bash "$f" -H
|
||||||
|
done
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
source /bd_build_base/buildconfig
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# Only install Icecast deps (Icecast is handled by another container).
|
||||||
|
$minimal_apt_get_install libxml2 libxslt1-dev libvorbis-dev openssl
|
||||||
|
|
||||||
|
mkdir -p /etc/nginx
|
||||||
|
chown azuracast:azuracast /etc/nginx
|
||||||
|
|
||||||
|
openssl req -new -nodes -x509 -subj "/C=US/ST=Texas/L=Austin/O=IT/CN=localhost" \
|
||||||
|
-days 365 -extensions v3_ca \
|
||||||
|
-keyout /etc/nginx/ssl.key \
|
||||||
|
-out /etc/nginx/ssl.crt
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
source /bd_build_base/buildconfig
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# Only install Liquidsoap deps (Liquidsoap build is handled by another container).
|
||||||
|
$minimal_apt_get_install libfaad-dev libfdk-aac-dev libflac-dev libmad0-dev libmp3lame-dev libogg-dev \
|
||||||
|
libopus-dev libpcre3-dev libtag1-dev libsamplerate0-dev libavcodec-dev libavfilter-dev \
|
||||||
|
libavformat-dev libavresample-dev libavutil-dev libpostproc-dev libswresample-dev \
|
||||||
|
ladspa-sdk multimedia-audio-plugins swh-plugins tap-plugins lsp-plugins-ladspa
|
|
@ -0,0 +1,4 @@
|
||||||
|
export LC_ALL=C
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
minimal_apt_get_install='apt-get install -y --no-install-recommends'
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
source /bd_build_final/buildconfig
|
||||||
|
set -x
|
||||||
|
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
rm -rf /tmp/tmp*
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
if [ `whoami` != 'azuracast' ]; then
|
if [ `whoami` != 'azuracast' ]; then
|
||||||
echo 'This script must be run as the "azuracast" user. Rerunning...'
|
echo 'This script must be run as the "azuracast" user. Rerunning...'
|
||||||
sudo -E -u azuracast azuracast_cli "$@"
|
setuser azuracast azuracast_cli "$@"
|
||||||
exit 1
|
exit $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd /var/azuracast/www
|
cd /var/azuracast/www
|
||||||
php bin/console "$@"
|
php bin/console "$@"
|
|
@ -9,8 +9,8 @@ bool() {
|
||||||
|
|
||||||
if [ $(whoami) != 'azuracast' ]; then
|
if [ $(whoami) != 'azuracast' ]; then
|
||||||
echo 'This script must be run as the "azuracast" user. Rerunning...'
|
echo 'This script must be run as the "azuracast" user. Rerunning...'
|
||||||
sudo -E -u azuracast azuracast_install "$@"
|
setuser azuracast azuracast_install "$@"
|
||||||
exit 1
|
exit $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "AzuraCast Setup"
|
echo "AzuraCast Setup"
|
|
@ -9,8 +9,8 @@ bool() {
|
||||||
|
|
||||||
if [ $(whoami) != 'azuracast' ]; then
|
if [ $(whoami) != 'azuracast' ]; then
|
||||||
echo 'This script must be run as the "azuracast" user. Rerunning...'
|
echo 'This script must be run as the "azuracast" user. Rerunning...'
|
||||||
sudo -E -u azuracast azuracast_install "$@"
|
setuser azuracast azuracast_restore "$@"
|
||||||
exit 1
|
exit $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "AzuraCast Setup"
|
echo "AzuraCast Setup"
|
|
@ -2,4 +2,4 @@
|
||||||
|
|
||||||
source /etc/container_environment.sh
|
source /etc/container_environment.sh
|
||||||
|
|
||||||
sudo -E -u azuracast "$@" >/proc/1/fd/1 2>/proc/1/fd/2
|
setuser azuracast "$@" >/proc/1/fd/1 2>/proc/1/fd/2
|
|
@ -0,0 +1,64 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
'''
|
||||||
|
Copyright (c) 2013-2015 Phusion Holding B.V.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
'''
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import pwd
|
||||||
|
|
||||||
|
|
||||||
|
def abort(message):
|
||||||
|
sys.stderr.write("setuser: %s\n" % message)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
'''
|
||||||
|
A simple alternative to sudo that executes a command as a user by setting
|
||||||
|
the user ID and user parameters to those described by the system and then
|
||||||
|
using execvp(3) to execute the command without the necessity of a TTY
|
||||||
|
'''
|
||||||
|
|
||||||
|
username = sys.argv[1]
|
||||||
|
try:
|
||||||
|
user = pwd.getpwnam(username)
|
||||||
|
except KeyError:
|
||||||
|
abort("user %s not found" % username)
|
||||||
|
os.initgroups(username, user.pw_gid)
|
||||||
|
os.setgid(user.pw_gid)
|
||||||
|
os.setuid(user.pw_uid)
|
||||||
|
os.environ['USER'] = username
|
||||||
|
os.environ['HOME'] = user.pw_dir
|
||||||
|
os.environ['UID'] = str(user.pw_uid)
|
||||||
|
try:
|
||||||
|
os.execvp(sys.argv[2], sys.argv[2:])
|
||||||
|
except OSError as e:
|
||||||
|
abort("cannot execute %s: %s" % (sys.argv[2], str(e)))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
if len(sys.argv) < 3:
|
||||||
|
sys.stderr.write("Usage: /sbin/setuser USERNAME COMMAND [args..]\n")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
main()
|
|
@ -1,6 +1,8 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
/usr/sbin/tmpreaper 12h --protect '.tmpreaper' --verbose \
|
/usr/sbin/tmpreaper 12h --protect '.tmpreaper' --verbose \
|
||||||
|
/tmp \
|
||||||
/tmp/azuracast_nginx_client \
|
/tmp/azuracast_nginx_client \
|
||||||
/tmp/azuracast_fastcgi_temp \
|
/tmp/azuracast_fastcgi_temp \
|
||||||
> /proc/1/fd/1 2> /proc/1/fd/2
|
/var/azuracast/stations/*/temp \
|
||||||
|
> /proc/1/fd/1 2> /proc/1/fd/2
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
source /bd_build_final/buildconfig
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# Install common scripts
|
||||||
|
cp -rT /bd_build_final/scripts/ /usr/local/bin
|
||||||
|
chmod -R a+x /usr/local/bin
|
||||||
|
|
||||||
|
# Install runit scripts
|
||||||
|
cp -rT /bd_build_final/startup_scripts/. /etc/my_init.d/
|
||||||
|
cp -rT /bd_build_final/service/. /etc/service/
|
||||||
|
cp -rT /bd_build_final/service_standalone/. /etc/service_standalone/
|
||||||
|
|
||||||
|
chmod -R +x /etc/service
|
||||||
|
chmod -R +x /etc/service_standalone
|
||||||
|
chmod -R +x /etc/my_init.d
|
||||||
|
|
||||||
|
# Run service setup for all setup scripts
|
||||||
|
for f in /bd_build_final/setup/*.sh; do
|
||||||
|
bash "$f" -H
|
||||||
|
done
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source /bd_build/buildconfig
|
source /bd_build_final/buildconfig
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
add-apt-repository -y ppa:chris-needham/ppa
|
add-apt-repository -y ppa:chris-needham/ppa
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source /bd_build/buildconfig
|
source /bd_build_final/buildconfig
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
$minimal_apt_get_install cron
|
$minimal_apt_get_install cron
|
||||||
|
@ -20,5 +20,5 @@ rm -f /etc/cron.daily/dpkg
|
||||||
rm -f /etc/cron.daily/password
|
rm -f /etc/cron.daily/password
|
||||||
rm -f /etc/cron.weekly/fstrim
|
rm -f /etc/cron.weekly/fstrim
|
||||||
|
|
||||||
cp -r /bd_build/cron/. /etc/cron.d/
|
cp -r /bd_build_final/cron/. /etc/cron.d/
|
||||||
chmod -R 600 /etc/cron.d/*
|
chmod -R 600 /etc/cron.d/*
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source /bd_build/buildconfig
|
source /bd_build_final/buildconfig
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source /bd_build/buildconfig
|
source /bd_build_final/buildconfig
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
DOCKERIZE_VERSION=v0.6.1
|
DOCKERIZE_VERSION=v0.6.1
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source /bd_build/buildconfig
|
source /bd_build_final/buildconfig
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
$minimal_apt_get_install flac
|
$minimal_apt_get_install flac
|
|
@ -1,13 +1,13 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source /bd_build/buildconfig
|
source /bd_build_final/buildconfig
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
$minimal_apt_get_install nginx nginx-common nginx-extras openssl
|
$minimal_apt_get_install nginx nginx-common nginx-extras openssl
|
||||||
|
|
||||||
# Install nginx and configuration
|
# Install nginx and configuration
|
||||||
cp /bd_build/nginx/nginx.conf /etc/nginx/nginx.conf
|
cp /bd_build_final/nginx/nginx.conf /etc/nginx/nginx.conf
|
||||||
cp /bd_build/nginx/azuracast.conf.tmpl /etc/nginx/azuracast.conf.tmpl
|
cp /bd_build_final/nginx/azuracast.conf.tmpl /etc/nginx/azuracast.conf.tmpl
|
||||||
|
|
||||||
mkdir -p /etc/nginx/azuracast.conf.d/
|
mkdir -p /etc/nginx/azuracast.conf.d/
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source /bd_build/buildconfig
|
source /bd_build_final/buildconfig
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
PHP_VERSION=8.0
|
PHP_VERSION=8.0
|
||||||
|
@ -20,8 +20,8 @@ touch /run/php/php${PHP_VERSION}-fpm.pid
|
||||||
|
|
||||||
echo "PHP_VERSION=${PHP_VERSION}" >>/etc/php/.version
|
echo "PHP_VERSION=${PHP_VERSION}" >>/etc/php/.version
|
||||||
|
|
||||||
cp /bd_build/php/php.ini.tmpl /etc/php/${PHP_VERSION}/fpm/05-azuracast.ini.tmpl
|
cp /bd_build_final/php/php.ini.tmpl /etc/php/${PHP_VERSION}/fpm/05-azuracast.ini.tmpl
|
||||||
cp /bd_build/php/www.conf.tmpl /etc/php/${PHP_VERSION}/fpm/www.conf.tmpl
|
cp /bd_build_final/php/www.conf.tmpl /etc/php/${PHP_VERSION}/fpm/www.conf.tmpl
|
||||||
|
|
||||||
# Install Composer
|
# Install Composer
|
||||||
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
|
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
|
||||||
|
@ -29,7 +29,7 @@ curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --fil
|
||||||
# Install PHP SPX profiler
|
# Install PHP SPX profiler
|
||||||
$minimal_apt_get_install php${PHP_VERSION}-dev zlib1g-dev build-essential
|
$minimal_apt_get_install php${PHP_VERSION}-dev zlib1g-dev build-essential
|
||||||
|
|
||||||
cd /bd_build
|
cd /bd_build_final
|
||||||
git clone https://github.com/NoiseByNorthwest/php-spx.git
|
git clone https://github.com/NoiseByNorthwest/php-spx.git
|
||||||
cd php-spx
|
cd php-spx
|
||||||
phpize
|
phpize
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source /bd_build/buildconfig
|
source /bd_build_final/buildconfig
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
add-apt-repository -y ppa:sftpgo/sftpgo
|
add-apt-repository -y ppa:sftpgo/sftpgo
|
||||||
|
@ -10,7 +10,7 @@ $minimal_apt_get_install sftpgo
|
||||||
|
|
||||||
mkdir -p /var/azuracast/sftpgo/persist /var/azuracast/sftpgo/backups
|
mkdir -p /var/azuracast/sftpgo/persist /var/azuracast/sftpgo/backups
|
||||||
|
|
||||||
cp /bd_build/sftpgo/sftpgo.json /var/azuracast/sftpgo/sftpgo.json
|
cp /bd_build_final/sftpgo/sftpgo.json /var/azuracast/sftpgo/sftpgo.json
|
||||||
|
|
||||||
touch /var/azuracast/sftpgo/sftpgo.db
|
touch /var/azuracast/sftpgo/sftpgo.db
|
||||||
chown -R azuracast:azuracast /var/azuracast/sftpgo
|
chown -R azuracast:azuracast /var/azuracast/sftpgo
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
source /bd_build_final/buildconfig
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# $minimal_apt_get_install python3-minimal python3-pip
|
||||||
|
# pip3 install setuptools supervisor
|
||||||
|
|
||||||
|
$minimal_apt_get_install supervisor
|
||||||
|
|
||||||
|
# mkdir -p /etc/supervisor
|
||||||
|
cp /bd_build_final/supervisor/supervisord.conf /etc/supervisor/supervisord.conf
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
source /bd_build_final/buildconfig
|
||||||
|
set -x
|
||||||
|
|
||||||
|
$minimal_apt_get_install tmpreaper
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source /bd_build/buildconfig
|
source /bd_build_final/buildconfig
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
$minimal_apt_get_install vorbis-tools
|
$minimal_apt_get_install vorbis-tools
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
bool() {
|
||||||
|
case "$1" in
|
||||||
|
Y* | y* | true | TRUE | 1) return 0 ;;
|
||||||
|
esac
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
STANDALONE_MODE=${AZURACAST_DOCKER_STANDALONE_MODE:-0}
|
||||||
|
|
||||||
|
if bool "$STANDALONE_MODE"; then
|
||||||
|
echo "Running in standalone mode; enabling optional services..."
|
||||||
|
|
||||||
|
cp /etc/service_standalone/. /etc/service/
|
||||||
|
else
|
||||||
|
echo "Not running in standalone mode; skipping optional services."
|
||||||
|
fi
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
shopt -s dotglob
|
||||||
|
rm -rf /var/azuracast/www_tmp/*
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
azuracast_cli azuracast:setup:initialize
|
|
@ -0,0 +1,25 @@
|
||||||
|
[unix_http_server]
|
||||||
|
file=/tmp/supervisor.sock ; (the path to the socket file)
|
||||||
|
|
||||||
|
[inet_http_server] ; inet (TCP) server disabled by default
|
||||||
|
port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
|
||||||
|
|
||||||
|
[supervisord]
|
||||||
|
user=root
|
||||||
|
logfile=/var/azuracast/www_tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
|
||||||
|
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
|
||||||
|
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
|
||||||
|
loglevel=info ; (log level;default info; others: debug,warn,trace)
|
||||||
|
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
|
||||||
|
nodaemon=true ; (start in foreground if true;default false)
|
||||||
|
minfds=1024 ; (min. avail startup file descriptors;default 1024)
|
||||||
|
minprocs=200 ; (min. avail process descriptors;default 200)
|
||||||
|
|
||||||
|
[rpcinterface:supervisor]
|
||||||
|
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
||||||
|
|
||||||
|
[supervisorctl]
|
||||||
|
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
|
||||||
|
|
||||||
|
[include]
|
||||||
|
files = /var/azuracast/stations/*/config/supervisord.conf conf.d/*
|
|
@ -1,26 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
source /bd_build/buildconfig
|
|
||||||
set -x
|
|
||||||
|
|
||||||
# Install common scripts
|
|
||||||
cp -rT /bd_build/scripts/ /usr/local/bin
|
|
||||||
chmod -R a+x /usr/local/bin
|
|
||||||
|
|
||||||
# Install runit
|
|
||||||
$minimal_apt_get_install runit
|
|
||||||
|
|
||||||
# Install runit scripts
|
|
||||||
cp -rT /bd_build/startup_scripts/. /etc/my_init.d/
|
|
||||||
cp -rT /bd_build/runit/. /etc/service/
|
|
||||||
|
|
||||||
chmod -R +x /etc/service
|
|
||||||
chmod -R +x /etc/my_init.d
|
|
||||||
|
|
||||||
# Install scripts commonly used during setup.
|
|
||||||
$minimal_apt_get_install curl wget tar zip unzip git rsync tzdata gpg-agent openssh-client
|
|
||||||
|
|
||||||
# Run service setup for all setup scripts
|
|
||||||
for f in /bd_build/setup/*.sh; do
|
|
||||||
bash "$f" -H
|
|
||||||
done
|
|
|
@ -1,6 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
source /bd_build/buildconfig
|
|
||||||
set -x
|
|
||||||
|
|
||||||
$minimal_apt_get_install tmpreaper
|
|
|
@ -1,24 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Duplicate php-worker runit script based on environment variable
|
|
||||||
|
|
||||||
echo "Additional workers currently disabled."
|
|
||||||
exit 0
|
|
||||||
# Temporarily disabled. Explanation:
|
|
||||||
# The current worker setup uses MariaDB as the underlying message queue implementation. Multiple workers on the same
|
|
||||||
# queues causes multiple process to have write locks on the same table of the same database at the same time, which
|
|
||||||
# can tend to create a condition where the processes "pile up" on each other, causing semaphore lock overflow issues
|
|
||||||
# that can bring down an installation rather easily.
|
|
||||||
#
|
|
||||||
# Disabling this script forces a single worker to run to process message queues.
|
|
||||||
|
|
||||||
echo "Adding $ADDITIONAL_MEDIA_SYNC_WORKER_COUNT additional workers"
|
|
||||||
|
|
||||||
for ((WORKER_NUMBER = 1; WORKER_NUMBER <= ADDITIONAL_MEDIA_SYNC_WORKER_COUNT; WORKER_NUMBER++)); do
|
|
||||||
echo "Adding worker $WORKER_NUMBER..."
|
|
||||||
cp -r /etc/service/php-worker "/etc/service/php-worker-${WORKER_NUMBER}"
|
|
||||||
|
|
||||||
sed -i "s/app_worker_0/app_worker_${WORKER_NUMBER}/" "/etc/service/php-worker-${WORKER_NUMBER}/run"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Done"
|
|
Loading…
Reference in New Issue