From 6dfd8edc7ebba2a80e1d3d94ece4f800c033c0b0 Mon Sep 17 00:00:00 2001 From: Buster Neece Date: Mon, 6 Nov 2023 20:05:14 -0600 Subject: [PATCH] Add Official AzuraCast One-Click App Manifest (#1013) * Add AzuraCast official CapRover manifest. * Add AzuraCast logo. * Specify MariaDB root password. * Apply formatting fixes. --- public/v4/apps/azuracast.yml | 213 ++++++++++++++++++++++++++++++++++ public/v4/logos/azuracast.png | Bin 0 -> 13915 bytes 2 files changed, 213 insertions(+) create mode 100644 public/v4/apps/azuracast.yml create mode 100644 public/v4/logos/azuracast.png diff --git a/public/v4/apps/azuracast.yml b/public/v4/apps/azuracast.yml new file mode 100644 index 0000000..74cc025 --- /dev/null +++ b/public/v4/apps/azuracast.yml @@ -0,0 +1,213 @@ +captainVersion: 4 +services: + $$cap_appname: + caproverExtra: + containerHttpPort: '80' + websocketSupport: 'true' + image: ghcr.io/azuracast/azuracast:$$cap_AZURACAST_VERSION + hostname: $$cap_appname.$$cap_root_domain + restart: unless-stopped + ports: + - $$cap_AZURACAST_SFTP_PORT:$$cap_AZURACAST_SFTP_PORT + - '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' + environment: + AZURACAST_VERSION: $$cap_AZURACAST_VERSION + AZURACAST_SFTP_PORT: $$cap_AZURACAST_SFTP_PORT + MYSQL_ROOT_PASSWORD: $$cap_AZURACAST_DB_PASSWORD + PUID: $$cap_AZURACAST_PUID + PGID: $$cap_AZURACAST_PGID + volumes: + - $$cap_appname-stations:/var/azuracast/stations + - $$cap_appname-backups:/var/azuracast/backups + - $$cap_appname-db:/var/lib/mysql + - $$cap_appname-storage:/var/azuracast/storage +caproverOneClickApp: + instructions: + start: |- + AzuraCast is a "web radio station in a box". We include everything you need to broadcast your own Internet + radio station, along with a powerful web interface to manage your stations, let live DJs connect to your stream, + and view detailed reports about your audience. + + Note: This one-click app exposes all the ports in the range from 8000-8500 that are needed to run your first + 50 stations, both for outgoing broadcasting and incoming DJ connections. If you're solely using the AzuraCast + AutoDJ, these ports aren't necessary as you can just enable the "Use Web Proxy" setting inside AzuraCast. If you + plan to use direct ports or accept incoming DJ connections, ensure the ports in the range from 8000 to 8500 + (excluding port 8080, as it's commonly used for other applications) are not used by other applications and are cleared + through your firewall. + end: |- + AzuraCast is up and running! You should now complete the web setup in your browser at + http://$$cap_appname.$$cap_root_domain/ + displayName: AzuraCast + isOfficial: true + description: Self-hosted web radio management suite + documentation: https://www.azuracast.com/docs + variables: + - id: $$cap_AZURACAST_VERSION + label: Version + description: Valid values include "latest" for Rolling Release, "stable" for Stable release channel, and any specific version. + defaultValue: 'latest' + - id: $$cap_AZURACAST_DB_PASSWORD + label: MariaDB Root Password + description: Specify a password for the root user of the built-in MariaDB database. + validRegex: /.{1,}/ + - id: $$cap_AZURACAST_PUID + label: User ID for AzuraCast User (Advanced) + defaultValue: '1000' + description: User ID that the process uses; changing this is only necessary if you're using custom file mounts. + validRegex: /.{1,}/ + - id: $$cap_AZURACAST_PGID + label: Group ID for AzuraCast User (Advanced) + defaultValue: '1000' + description: Group ID that the process uses; changing this is only necessary if you're using custom file mounts. + validRegex: /.{1,}/ + - id: $$cap_AZURACAST_SFTP_PORT + label: SFTP Port (Advanced) + description: Port used by station managers to connect via SFTP to manage media in bulk. + defaultValue: 2022 + validRegex: /.{1,}/ diff --git a/public/v4/logos/azuracast.png b/public/v4/logos/azuracast.png new file mode 100644 index 0000000000000000000000000000000000000000..f61c2f0f996ce671e856e264f55e7ebe8bb53cda GIT binary patch literal 13915 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