Bro c'est un gros baka qui ne sais pas écrire des docker
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,2 +1,3 @@ | |||||||
| *~ | *~ | ||||||
| state.json | state.json | ||||||
|  | *.xml | ||||||
							
								
								
									
										33
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								Dockerfile
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								entrypoint.sh
									
									
									
									
									
										Executable 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' | ||||||
| @@ -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> | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								next_song.py
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								next_song.py
									
									
									
									
									
								
							| @@ -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) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user