Bro c'est un gros baka qui ne sais pas écrire des docker

This commit is contained in:
Antoine Bartuccio 2021-06-12 12:09:04 +02:00
parent a9b4198f93
commit 5737277256
5 changed files with 64 additions and 9 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
*~ *~
state.json state.json
*.xml

33
Dockerfile Normal file
View File

@ -0,0 +1,33 @@
# docker build . -t radio-bullshit && docker run --rm -p 8000:8000 -v `pwd`/jingles:/jingles -v `pwd`/songs:/songs radio-bullshit
FROM python:3.9
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y icecast2 ices2
RUN pip install jinja2 j2cli
WORKDIR /config
RUN adduser zambla
COPY icecast.xml.jinja .
COPY ices.xml.jinja .
COPY next_song.py /opt
COPY yt_sync.py /opt
RUN chmod +x /opt/yt_sync.py /opt/next_song.py
RUN mkdir -p /songs /jingles /var/log/icecast
RUN chown -R zambla:zambla /config
RUN chown -R zambla:zambla /opt
RUN chown -R zambla:zambla /songs
RUN chown -R zambla:zambla /jingles
RUN chown -R zambla:zambla /var/log/icecast
RUN chown -R zambla:zambla /usr/share/icecast2
COPY entrypoint.sh /opt/entrypoint.sh
RUN chmod +x /opt/entrypoint.sh
ENTRYPOINT [ "/opt/entrypoint.sh" ]

20
entrypoint.sh Executable file
View File

@ -0,0 +1,20 @@
#!/bin/bash -e
export hostname=${HOSTNAME:=localhost}
export port=${PORT:=8000}
export max_listeners=${MAX_LISTENERS:=30}
export admin_user=${ADMIN_USER:=admin}
export admin_password=${ADMIN_PASSWORD:=admin}
pass_gen="python3 -c 'import secrets, string; print(\"\".join((secrets.choice(string.ascii_letters + string.digits) for i in range(20))))'"
export source_username=$(eval $pass_gen)
export source_password=$(eval $pass_gen)
pip install youtube-dl
j2 ices.xml.jinja > ices.xml
j2 icecast.xml.jinja > icecast.xml
runuser -l zambla -c 'icecast2 -c /config/icecast.xml &'
runuser -l zambla -c 'ices2 /config/ices.xml'

View File

@ -9,7 +9,7 @@
</metadata> </metadata>
<input> <input>
<param name="type">script</param> <param name="type">script</param>
<param name="program">next_song.py</param> <param name="program">/opt/next_song.py</param>
</input> </input>
<instance> <instance>
<username>{{ source_username }}</username> <username>{{ source_username }}</username>

View File

@ -4,25 +4,26 @@ import random, glob, os, json
if __name__ == "__main__": if __name__ == "__main__":
script_dir = os.path.dirname(os.path.abspath(__file__)) songs_folder = "/songs"
jingles_folder = "/jingles"
if not os.path.isfile(f"{script_dir}/state.json"): if not os.path.isfile(f"{songs_folder}/state.json"):
# create state file if it doesnt exist # create state file if it doesnt exist
with open(f"{script_dir}/state.json", "w") as f: with open(f"{songs_folder}/state.json", "w") as f:
state = {"current_song_type": "jingle"} state = {"current_song_type": "jingle"}
json.dump(state, f, indent=4) json.dump(state, f, indent=4)
else: else:
with open(f"{script_dir}/state.json") as f: with open(f"{songs_folder}/state.json") as f:
state = json.load(f) state = json.load(f)
if state["current_song_type"] == "song": if state["current_song_type"] == "song":
state["current_song_type"] = "jingle" state["current_song_type"] = "jingle"
print(random.choice(glob.glob(f"{script_dir}/jingles/*.ogg"))) print(random.choice(glob.glob(f"{jingles_folder}/*.ogg")))
elif state["current_song_type"] == "jingle": elif state["current_song_type"] == "jingle":
state["current_song_type"] = "song" state["current_song_type"] = "song"
print(random.choice(glob.glob(f"{script_dir}/songs/*.ogg"))) print(random.choice(glob.glob(f"{songs_folder}/*.ogg")))
else: else:
exit(1) exit(1)
with open(f"{script_dir}/state.json", "w") as f: with open(f"{songs_folder}/state.json", "w") as f:
json.dump(state, f, indent=4) json.dump(state, f, indent=4)