Compare commits
2 Commits
d2c05a5647
...
be32063fdc
Author | SHA1 | Date | |
---|---|---|---|
|
be32063fdc | ||
|
308da4955d |
@ -67,16 +67,19 @@ run mkdir -p "$new_nginx_conf_path"
|
||||
|
||||
for dir in /docker/* ; do
|
||||
service="$(basename "$dir")"
|
||||
|
||||
# Ignore _ prefixed directories
|
||||
[ "${service::1}" == '_' ] && continue
|
||||
[ ! -d "$dir" ] && continue
|
||||
|
||||
export DATA_DIR="/data/$service"
|
||||
mkdir -p "$DATA_DIR"
|
||||
|
||||
docker_service="$(echo "$service" | tr '.' '_')"
|
||||
driglibash_section_prefix="[$service] "
|
||||
export DATA_DIR="/data/$service"
|
||||
export HTTP_DIR="/srv/http/$service"
|
||||
export JC_SERVICE="$service"
|
||||
line_in_file "HTTP_DIR='$HTTP_DIR'" "/docker/$service/.env"
|
||||
line_in_file "DATA_DIR='$DATA_DIR'" "/docker/$service/.env"
|
||||
line_in_file "JC_SERVICE='$JC_SERVICE'" "/docker/$service/.env"
|
||||
|
||||
cd "/docker/$service"
|
||||
|
||||
# Is service meant to be on this server?
|
||||
@ -88,6 +91,7 @@ for dir in /docker/* ; do
|
||||
section "--------------------"
|
||||
section "Removing service"
|
||||
docker-compose down --rmi all --remove-orphans
|
||||
[ -d "$HTTP_DIR" ] && rm -r "$HTTP_DIR"
|
||||
fi
|
||||
|
||||
# If there is an install script?
|
||||
@ -97,12 +101,18 @@ for dir in /docker/* ; do
|
||||
stop
|
||||
unset -f start stop reload restart
|
||||
fi
|
||||
|
||||
# TODO check for leftover wg interfaces
|
||||
continue
|
||||
fi
|
||||
|
||||
mkdir -p "$DATA_DIR" "$HTTP_DIR"
|
||||
|
||||
|
||||
# If there is a docker-compose file and it has services in it
|
||||
if [ -f "/docker/$service/docker-compose.yml" ] && [ -n "$(grep '^[^#]*services' "/docker/$service/docker-compose.yml")" ] ; then
|
||||
section "-------------------- $service"
|
||||
|
||||
section "Logging to registry"
|
||||
# XXX Login to docker registry
|
||||
|
||||
@ -114,7 +124,7 @@ for dir in /docker/* ; do
|
||||
fi
|
||||
|
||||
|
||||
# If there is an install script?
|
||||
# If there is an install script
|
||||
if [ -f "/docker/$service/install.sh" ] ; then
|
||||
section "Running install script"
|
||||
. "/docker/$service/install.sh"
|
||||
@ -123,15 +133,26 @@ for dir in /docker/* ; do
|
||||
fi
|
||||
|
||||
|
||||
# If there is a wireguard vpn script
|
||||
for file in "/docker/$service/"wg-*.sh ; do
|
||||
section "Starting wg interface"
|
||||
if [ -x "$file" ] ; then
|
||||
wgif="$(basename "$file")"
|
||||
wgif="${wgif:3:-3}"
|
||||
"$file" $wgif > "/etc/wireguard/$wgif.conf"
|
||||
systemctl enable "wg-quick@$wgif"
|
||||
startwg.sh $wgif
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
# If there is a nginx conf file
|
||||
if [ -f "/docker/$service/nginx_server.conf" ] ; then
|
||||
section "Copy nginx conf"
|
||||
run cp "/docker/$service/nginx_server.conf" "$new_nginx_conf_path/$service"
|
||||
|
||||
if [ -f "/docker/$service/.env" ] ; then
|
||||
section "Template nginx conf with vars from '.env' file"
|
||||
run template.sh "/docker/$service/.env" < "/docker/$service/nginx_server.conf" > "$new_nginx_conf_path/$service"
|
||||
fi
|
||||
section "Template nginx conf with vars from '.env' file"
|
||||
run template.sh "/docker/$service/.env" < "/docker/$service/nginx_server.conf" > "$new_nginx_conf_path/$service"
|
||||
fi
|
||||
|
||||
# Do we need dummy cert?
|
||||
|
0
provisioning/roles/deploy_all/files/bin/list_overlay_mounts.sh
Normal file → Executable file
0
provisioning/roles/deploy_all/files/bin/list_overlay_mounts.sh
Normal file → Executable file
@ -1,8 +1,11 @@
|
||||
#!/bin/bash
|
||||
if [ "$#" -ne 1 ] ; then
|
||||
if [ "$1" = '-h' ] || [ "$1" = '--help' ] ; then
|
||||
echo "Usage: $0 <env_file>" >&2
|
||||
echo "This script read env_file variables and replace theire occurences in stdin" >&2
|
||||
exit 1
|
||||
exit 0
|
||||
fi
|
||||
if [ -f "$1" ] ; then
|
||||
bash -c 'set -a && . '"$1"' && envsubst "$(cat '"$1"' | grep -o ^.*= | sed "s/=//" | sed "s/^/$/")"'
|
||||
else
|
||||
cat /dev/stdin
|
||||
fi
|
||||
|
||||
bash -c 'set -a && . '"$1"' && envsubst "$(cat '"$1"' | grep -o ^.*= | sed "s/=//" | sed "s/^/$/")"'
|
||||
|
@ -1,6 +1,6 @@
|
||||
$TTL 604800
|
||||
@ IN SOA ns1.jean-cloud.net. contact.jean-cloud.org. (
|
||||
2023020700 ; Serial
|
||||
2023060100 ; Serial
|
||||
7200 ; Refresh
|
||||
7200 ; Retry
|
||||
2419200 ; Expire
|
||||
@ -22,6 +22,6 @@ $TTL 604800
|
||||
ns1 IN A 51.255.33.248
|
||||
ns2 IN A 172.104.154.21
|
||||
|
||||
benevoles IN A 51.178.80.171
|
||||
benevoles31 IN A 51.178.80.171
|
||||
benevoles IN CNAME max.jean-cloud.org.
|
||||
benevoles31 IN CNAME max.jean-cloud.org.
|
||||
|
||||
|
@ -1,23 +1,32 @@
|
||||
$TTL 604800
|
||||
@ IN SOA ns1.jean-cloud.net. contact.jean-cloud.org. (
|
||||
2023042200 ; Serial
|
||||
@ IN SOA max.jean-cloud.org. contact.jean-cloud.org. (
|
||||
2023052300 ; Serial
|
||||
604800 ; Refresh
|
||||
7200 ; Retry
|
||||
2419200 ; Expire
|
||||
604800 ) ; Negative Cache TTL
|
||||
|
||||
@ IN NS ns1.jean-cloud.net.
|
||||
@ IN NS ns5.he.net.
|
||||
@ IN NS ns4.he.net.
|
||||
@ IN NS ns3.he.net.
|
||||
@ IN NS ns2.he.net.
|
||||
; NS
|
||||
|
||||
@ IN NS max.jean-cloud.org.
|
||||
@ IN NS tetede.jean-cloud.org.
|
||||
|
||||
|
||||
; MAIL
|
||||
|
||||
@ IN MX 1 mx0.mail.ovh.net.
|
||||
@ IN MX 5 mx1.mail.ovh.net.
|
||||
@ IN MX 50 mx2.mail.ovh.net.
|
||||
@ IN MX 100 mx3.mail.ovh.net.
|
||||
@ IN MX 200 mx4.mail.ovh.net.
|
||||
@ IN TXT "v=spf1 include:mx.ovh.com ~all"
|
||||
|
||||
_autodiscover._tcp IN SRV 0 0 443 mailconfig.ovh.net.
|
||||
_imaps._tcp IN SRV 0 0 993 ssl0.ovh.net.
|
||||
_submission._tcp IN SRV 0 0 465 ssl0.ovh.net.
|
||||
|
||||
; web
|
||||
@ IN A 51.255.33.248
|
||||
|
||||
@ IN MX 1 mx1.mail.ovh.net.
|
||||
@ IN MX 5 mx2.mail.ovh.net.
|
||||
@ IN MX 10 mx3.mail.ovh.net.
|
||||
|
||||
www IN CNAME vandamme.jean-cloud.net.
|
||||
|
||||
www.registry IN CNAME nougaro.jean-cloud.net.
|
||||
@ -32,19 +41,16 @@ radiodemo IN CNAME tetede.jean-cloud.net.
|
||||
radiodemo-back IN CNAME montbonnot.jean-cloud.net.
|
||||
|
||||
|
||||
_autodiscover._tcp IN SRV 0 0 443 mailconfig.ovh.net.
|
||||
_imaps._tcp IN SRV 0 0 993 ssl0.ovh.net.
|
||||
_submission._tcp IN SRV 0 0 465 ssl0.ovh.net.
|
||||
;autoconfig IN SRV mailconfig.ovh.net.
|
||||
imap IN CNAME ssl0.ovh.net.
|
||||
smtp IN CNAME ssl0.ovh.net.
|
||||
mail IN CNAME ssl0.ovh.net.
|
||||
pop3 IN CNAME ssl0.ovh.net.
|
||||
|
||||
stream.paj.ports IN TXT 9002
|
||||
control.paj.ports IN TXT 9492
|
||||
stream.paj._ports IN TXT 9002
|
||||
control.paj._ports IN TXT 9492
|
||||
|
||||
pa1.studios IN CNAME carcasse.jean-cloud.net.
|
||||
pa1.studios IN CNAME tetede.jean-cloud.net.
|
||||
montpellier1.studios IN CNAME tetede.jean-cloud.net.
|
||||
|
||||
npm IN CNAME vandamme.jean-cloud.net.
|
||||
|
30
readme.md
Normal file
30
readme.md
Normal file
@ -0,0 +1,30 @@
|
||||
# Services Jean-Cloud
|
||||
|
||||
## Dossier installing
|
||||
Contient des scripts sh pour installer debian sur un disque dur. Qui ira ensuite se brancher dans un ordi :)
|
||||
|
||||
## Dossier provisioning
|
||||
Contient
|
||||
- des rôles ansible pour configurer les serveurs
|
||||
- un rôle ansible pour envoyer les services sur les serveurs
|
||||
- des scripts maisons à envoyer sur les serveurs
|
||||
- la conf DNS à envoyer sur les serveurs
|
||||
|
||||
## Dossier services
|
||||
Les services à faire tourner.
|
||||
|
||||
## scripts
|
||||
Le script deployer.sh va pour chaque service
|
||||
- Démarrer docker-compose si besoin
|
||||
- Copier le fichier nginx.conf dans sites-enabled si besoin (en remplaçant certaines variables) (en créant un faux certificat ssl si besoin)
|
||||
- Démarrer et activer une interface wg si un fichier `wg-*.conf` est présent.
|
||||
- Exécuter le script install.sh du service s’il existe
|
||||
|
||||
Le script letsencrypt.sh va renouveler tous les certificats dont le serveur a besoin (il va lire dans /etc/nginx/sites-enabled).
|
||||
|
||||
## Variables
|
||||
Le script deployer.sh crée les variables
|
||||
- DATA_DIR : là où sauvegarder des données
|
||||
- HTTP_DIR : là où mettre les fichiers web si ils sont statiques. Ce dossier peut être détruit à tout moment, il n’est pas sauvegardé.
|
||||
- JC_SERVICE : le nom du dossier service. Correspond souvent à l’adresse du service.
|
||||
Ces variables sont ajoutées au ficher .env du service. (écrasées si existantes donc).
|
@ -9,7 +9,6 @@ events {
|
||||
}
|
||||
|
||||
http {
|
||||
|
||||
##
|
||||
# Basic Settings
|
||||
##
|
||||
@ -70,18 +69,17 @@ http {
|
||||
##
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
include /etc/nginx/sites-enabled/*;
|
||||
server{
|
||||
listen 80 default_server;
|
||||
listen [::]:80 default_server;
|
||||
location '/.well-known/acme-challenge' {
|
||||
root /var/www/letsencrypt;
|
||||
default_type "text/plain";
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
}
|
||||
|
||||
server{
|
||||
listen 80 default_server;
|
||||
listen [::]:80 default_server;
|
||||
location '/.well-known/acme-challenge' {
|
||||
root /var/www/letsencrypt;
|
||||
default_type "text/plain";
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,2 +0,0 @@
|
||||
DATA_DIR=/data/benevoles.karnaval.fr
|
||||
JC_HOST=benevoles.karnaval.fr
|
@ -1,60 +0,0 @@
|
||||
version: '3'
|
||||
services:
|
||||
app:
|
||||
image: jeancloud/site-benevole:dev-karna
|
||||
environment:
|
||||
UID: 33
|
||||
MOUNT: /
|
||||
volumes:
|
||||
- /tmp/uwsgi/$JC_HOST:/tmp/uwsgi
|
||||
- $DATA_DIR/assets:/usr/src/app/assets
|
||||
- $DATA_DIR/media:/usr/src/app/media
|
||||
- $DATA_DIR/local_settings.py:/usr/src/app/site_benevole/local_settings.py
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: 172.29.17.100
|
||||
|
||||
db:
|
||||
image: postgres:9.6-alpine
|
||||
env_file: $DATA_DIR/postgres.env
|
||||
environment:
|
||||
POSTGRES_USER: benevoles
|
||||
POSTGRES_DB: benevoles
|
||||
volumes:
|
||||
- $DATA_DIR/db:/var/lib/postgresql/data
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: 172.29.17.101
|
||||
app2:
|
||||
image: jeancloud/site-benevole:dev-karna-debian
|
||||
environment:
|
||||
UID: 33
|
||||
MOUNT: /
|
||||
volumes:
|
||||
- /tmp/uwsgi/app2/$JC_HOST:/tmp/uwsgi
|
||||
- $DATA_DIR/app2/assets:/usr/src/app/assets
|
||||
- $DATA_DIR/app2/media:/usr/src/app/media
|
||||
- $DATA_DIR/app2/local_settings.py:/usr/src/app/site_benevole/local_settings.py
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: 172.29.17.110
|
||||
|
||||
db2:
|
||||
image: postgres:9.6-alpine
|
||||
env_file: $DATA_DIR/postgres.env
|
||||
environment:
|
||||
POSTGRES_USER: benevoles
|
||||
POSTGRES_DB: benevoles
|
||||
volumes:
|
||||
- $DATA_DIR/db2:/var/lib/postgresql/data
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: 172.29.17.111
|
||||
|
||||
networks:
|
||||
default:
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 172.29.17.0/24
|
@ -1,110 +0,0 @@
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
listen [::]:443 ssl http2;
|
||||
ssl_certificate /etc/letsencrypt/live/$JC_HOST/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/$JC_HOST/privkey.pem;
|
||||
server_name $JC_HOST benevoles31.karnaval.fr;
|
||||
|
||||
root /data/benevoles.karnaval.fr/assets;
|
||||
|
||||
gzip on;
|
||||
gzip_static on;
|
||||
gzip_types application/javascript image/* text/css application/font-woff application/font-woff2;
|
||||
gunzip on;
|
||||
|
||||
ssl_session_tickets off;
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_buffer_size 4k;
|
||||
client_max_body_size 4M;
|
||||
|
||||
location / {
|
||||
include uwsgi_params;
|
||||
uwsgi_pass unix:/tmp/uwsgi/benevoles.karnaval.fr/uwsgi.sock;
|
||||
}
|
||||
|
||||
location = /favicon.ico {
|
||||
root /data/benevoles.karnaval.fr/assets/;
|
||||
}
|
||||
location = /favicon-admin.ico {
|
||||
root /data/benevoles.karnaval.fr/assets/;
|
||||
}
|
||||
|
||||
location /assets/ {
|
||||
alias /data/benevoles.karnaval.fr/assets/;
|
||||
access_log off;
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
sendfile_max_chunk 1m;
|
||||
keepalive_timeout 65;
|
||||
location ~* \.(jpg|jpeg|png|gif|ico|woff|woff2)$ {
|
||||
access_log off;
|
||||
expires 5d;
|
||||
}
|
||||
}
|
||||
|
||||
location /media/ {
|
||||
alias /data/benevoles.karnaval.fr/media/;
|
||||
access_log off;
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
sendfile_max_chunk 1m;
|
||||
keepalive_timeout 65;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
server {
|
||||
listen 444 ssl http2;
|
||||
listen [::]:444 ssl http2;
|
||||
ssl_certificate /etc/letsencrypt/live/$JC_HOST/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/$JC_HOST/privkey.pem;
|
||||
server_name $JC_HOST;
|
||||
|
||||
root /data/benevoles.karnaval.fr/app2/assets;
|
||||
|
||||
gzip on;
|
||||
gzip_static on;
|
||||
gzip_types application/javascript image/* text/css application/font-woff application/font-woff2;
|
||||
gunzip on;
|
||||
|
||||
ssl_session_tickets off;
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_buffer_size 4k;
|
||||
client_max_body_size 4M;
|
||||
|
||||
location / {
|
||||
include uwsgi_params;
|
||||
uwsgi_pass unix:/tmp/uwsgi/app2/benevoles.karnaval.fr/app2/uwsgi.sock;
|
||||
}
|
||||
|
||||
location = /favicon.ico {
|
||||
root /data/benevoles.karnaval.fr/app2/assets/;
|
||||
}
|
||||
location = /favicon-admin.ico {
|
||||
root /data/benevoles.karnaval.fr/app2/assets/;
|
||||
}
|
||||
|
||||
location /assets/ {
|
||||
alias /data/benevoles.karnaval.fr/app2/assets/;
|
||||
access_log off;
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
sendfile_max_chunk 1m;
|
||||
keepalive_timeout 65;
|
||||
location ~* \.(jpg|jpeg|png|gif|ico|woff|woff2)$ {
|
||||
access_log off;
|
||||
expires 5d;
|
||||
}
|
||||
}
|
||||
|
||||
location /media/ {
|
||||
alias /data/benevoles.karnaval.fr/app2/media/;
|
||||
access_log off;
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
sendfile_max_chunk 1m;
|
||||
keepalive_timeout 65;
|
||||
}
|
||||
|
||||
|
||||
}
|
12
services/deployer.jean-cloud.org/nginx.conf
Normal file
12
services/deployer.jean-cloud.org/nginx.conf
Normal file
@ -0,0 +1,12 @@
|
||||
server {
|
||||
listen 443;
|
||||
listen [::]:443;
|
||||
server_name $SERVER_HOST;
|
||||
ssl_certificate /etc/letsencrypt/live/deployer.jean-cloud.org/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/deployer.jean-cloud.org/privkey.pem;
|
||||
location /reload {
|
||||
fastcgi_param SCRIPT_FILENAME /var/www/html/test.sh;
|
||||
fastcgi_pass unix:/var/run/fcgiwrap.socket;
|
||||
}
|
||||
}
|
||||
|
2
services/jean-cloud.net/install.sh
Normal file → Executable file
2
services/jean-cloud.net/install.sh
Normal file → Executable file
@ -3,7 +3,7 @@ set -euo pipefail
|
||||
|
||||
start() {
|
||||
podman pull docker.io/jeancloud/pelican-rclone-builder
|
||||
podman run -i --rm --env-file "$DATA_DIR/.env" -v "$DATA_DIR:/usr/local/app" docker.io/jeancloud/pelican-rclone-builder
|
||||
podman run -i --rm -e GIT_SOURCE_REPO='https://git.jean-cloud.net/adrian/jean-cloud_website' -v "$HTTP_DIR:/usr/local/app" docker.io/jeancloud/pelican-rclone-builder
|
||||
}
|
||||
|
||||
restart () {
|
||||
|
@ -4,7 +4,7 @@ server {
|
||||
ssl_certificate /etc/letsencrypt/live/jean-cloud.net/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/jean-cloud.net/privkey.pem;
|
||||
server_name jean-cloud.net www.jean-cloud.net jean-cloud.org www.jean-cloud.org;
|
||||
root /data/jean-cloud.net/output;
|
||||
root $HTTP_DIR/output;
|
||||
|
||||
# Security headers
|
||||
# We can create a file with the base security headers and include it.
|
||||
|
@ -4,7 +4,7 @@ set -euo pipefail
|
||||
start() {
|
||||
mkdir -p "$DATA_DIR/git"
|
||||
podman pull docker.io/jeancloud/pelican-rclone-builder
|
||||
podman run -i --rm --env-file "$DATA_DIR/.env" -v "$DATA_DIR/git:/usr/local/app" docker.io/jeancloud/pelican-rclone-builder
|
||||
podman run -i --rm --env-file "$DATA_DIR/.env" -v "$HTTP_DIR:/usr/local/app" docker.io/jeancloud/pelican-rclone-builder
|
||||
}
|
||||
|
||||
restart () {
|
||||
|
@ -4,7 +4,7 @@ server {
|
||||
ssl_certificate /etc/letsencrypt/live/lexicographe.jean-cloud.net/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/lexicographe.jean-cloud.net/privkey.pem;
|
||||
server_name lexicographe.jean-cloud.net;
|
||||
root /data/lexicographe.jean-cloud.net/git/output;
|
||||
root $HTTP_DIR/output;
|
||||
|
||||
# Security headers
|
||||
# We can create a file with the base security headers and include it.
|
||||
|
24
services/pa1.studios.oma-radio.fr/wg-pa1.sh
Executable file
24
services/pa1.studios.oma-radio.fr/wg-pa1.sh
Executable file
@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
. .env
|
||||
filename="$(basename "$0")"
|
||||
ifname="${filename:3:-3}"
|
||||
|
||||
echo "
|
||||
[Interface]
|
||||
PrivateKey = $(cat $DATA_DIR/privatekey)
|
||||
ListenPort = 51820
|
||||
Address = 10.100.1.254/32
|
||||
|
||||
[Peer] # adrian
|
||||
PublicKey = 14yKNmSfD2lrWU+d/RJBPNvh9pZ/nW4bK27F9nTgvk0=
|
||||
AllowedIPs = 10.100.1.253/32
|
||||
PersistentKeepalive = 25
|
||||
|
||||
[Peer] # Passerelle
|
||||
PublicKey = ZTKOW5DE8jPO8oMh5hAw/c1MQSlUaVxInMPz9Zdwzwo=
|
||||
AllowedIPs = 10.100.1.0/24,192.168.100.0/24
|
||||
PersistentKeepalive = 25
|
||||
"
|
24
services/radiodemo-back.oma-radio.fr/.env
Normal file
24
services/radiodemo-back.oma-radio.fr/.env
Normal file
@ -0,0 +1,24 @@
|
||||
NET=172.29.0
|
||||
TELECOM=.101
|
||||
MUX=.100
|
||||
ICECAST=.110
|
||||
WEBSERVER=.105
|
||||
SYSTEM_API=.107
|
||||
TZ=Europe/Paris
|
||||
OMA_DOCKER_VERSION=dev
|
||||
WEBSOCKET_PORT=2004
|
||||
TELECOM_SERVER_PORT=3494
|
||||
MUX_SERVER_PORT=9004
|
||||
RADIO_NAME_SIMPLE=radiodemo
|
||||
OMA_CONFIG_NomRadio=radiodemo
|
||||
OMA_CONFIG_LogLevel=8
|
||||
RADIO_NAME_PRETTY="Radio Démo"
|
||||
RADIO_HOST=radiodemo.oma-radio.fr
|
||||
COMPOSE_NAME=radiodemo-backoma-radiofr
|
||||
DOCKER_INSTANCES_PREFIX=radiodemo-backoma-radiofr
|
||||
DOCKER_INSTANCES_SUFIX=-1
|
||||
DATA_DIR=/home/data/radiodemo-back.oma-radio.fr
|
||||
SOUNDBASE_DIR=/home/data/radiodemo-back.oma-radio.fr/core/radioDemo
|
||||
USE_SSL=true
|
||||
PUBLIC_WEBSITE_UPSTREAM=https://static.oma-radio.fr/player-interface/1.5.0
|
||||
MANAGER_WEBSITE_UPSTREAM=https://static.oma-radio.fr/single-manager/1.1.1
|
232
services/radiodemo-back.oma-radio.fr/docker-compose.yml
Normal file
232
services/radiodemo-back.oma-radio.fr/docker-compose.yml
Normal file
@ -0,0 +1,232 @@
|
||||
version: '3'
|
||||
services:
|
||||
ambre_mux:
|
||||
image: registry.oma-radio.fr/mux:$OMA_DOCKER_VERSION
|
||||
env_file: .env
|
||||
environment:
|
||||
OMA_CONFIG_Client1Host: $NET.108
|
||||
OMA_CONFIG_TelecommandeHost: $NET$TELECOM
|
||||
volumes:
|
||||
- $SOUNDBASE_DIR/pige:/app/pige
|
||||
ports:
|
||||
- $MUX_SERVER_PORT:9000
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: $NET$MUX
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.50'
|
||||
memory: 100M
|
||||
|
||||
|
||||
saphir_telecom_server:
|
||||
image: registry.oma-radio.fr/telecom-server:$OMA_DOCKER_VERSION
|
||||
env_file: .env
|
||||
ports:
|
||||
- $TELECOM_SERVER_PORT:3490
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: $NET$TELECOM
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.50'
|
||||
memory: 100M
|
||||
|
||||
anthracite_jukebox:
|
||||
image: registry.oma-radio.fr/jukebox:$OMA_DOCKER_VERSION
|
||||
env_file: .env
|
||||
environment:
|
||||
OMA_CONFIG_TelecommandeHost: $NET$TELECOM
|
||||
OMA_CONFIG_Client1Host: $NET$MUX
|
||||
volumes:
|
||||
- $SOUNDBASE_DIR:/app/soundBase
|
||||
- $DATA_DIR/secours-jingle.wavM:/app/secours/secours-jingle.wavM
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: $NET.102
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.50'
|
||||
memory: 100M
|
||||
|
||||
azurite_jukebox_simulator:
|
||||
image: registry.oma-radio.fr/jukebox-simulator:$OMA_DOCKER_VERSION
|
||||
env_file: .env
|
||||
environment:
|
||||
OMA_CONFIG_TelecommandeHost: $NET$TELECOM
|
||||
volumes:
|
||||
- $SOUNDBASE_DIR:/app/soundBase
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: $NET.103
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.50'
|
||||
memory: 100M
|
||||
|
||||
# aventurine_transcode:
|
||||
# image: registry.oma-radio.fr/transcode:$OMA_DOCKER_VERSION
|
||||
# env_file: .env
|
||||
# restart: unless-stopped
|
||||
|
||||
|
||||
agate_importer:
|
||||
image: registry.oma-radio.fr/baseimport:$OMA_DOCKER_VERSION
|
||||
env_file: .env
|
||||
environment:
|
||||
OMA_CONFIG_TelecommandeHost: $NET$TELECOM
|
||||
volumes:
|
||||
- $SOUNDBASE_DIR:/app/soundBase
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: $NET.104
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.50'
|
||||
memory: 500M
|
||||
|
||||
amarante_webserver:
|
||||
image: registry.oma-radio.fr/webserver:$OMA_DOCKER_VERSION
|
||||
env_file: .env
|
||||
environment:
|
||||
OMA_CONFIG_TelecommandeHost: $NET$TELECOM
|
||||
OMA_CONFIG_PigeTxtLoadFic: off
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- $SOUNDBASE_DIR:/soundbase
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: $NET$WEBSERVER
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.50'
|
||||
memory: 100M
|
||||
|
||||
rubis_base_mg:
|
||||
image: registry.oma-radio.fr/base-mg:$OMA_DOCKER_VERSION
|
||||
env_file: .env
|
||||
environment:
|
||||
OMA_CONFIG_TelecommandeHost: $NET$TELECOM
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- $SOUNDBASE_DIR:/soundbase
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: $NET.106
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.50'
|
||||
memory: 100M
|
||||
|
||||
|
||||
system_api:
|
||||
image: registry.oma-radio.fr/system-api:dev
|
||||
env_file: .env
|
||||
environment:
|
||||
OMA_CONFIG_TelecommandeHost: $NET$TELECOM
|
||||
UID: 33
|
||||
SOUNDBASE_PATH: /soundbase
|
||||
MOUNT: /api
|
||||
CONFIG_PATH: /config
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /tmp/uwsgi/$RADIO_HOST:/tmp/uwsgi
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- $SOUNDBASE_DIR:/soundbase
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: $NET.107
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.50'
|
||||
memory: 500M
|
||||
|
||||
transcode:
|
||||
image: savonet/liquidsoap:v2.1.4
|
||||
env_file: .env
|
||||
volumes:
|
||||
- ./icecast.liq:/transcode.liq
|
||||
- $SOUNDBASE_DIR:/soundbase
|
||||
command: /transcode.liq
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: $NET.108
|
||||
|
||||
#radioking:
|
||||
# image: registry.oma-radio.fr/liquidsoap:1.3.7
|
||||
# env_file: .env
|
||||
# volumes:
|
||||
# - ./radioking.liq:/radioking.liq
|
||||
# command: /radioking.liq
|
||||
# restart: unless-stopped
|
||||
# networks:
|
||||
# default:
|
||||
# ipv4_address: $NET.111
|
||||
|
||||
#ammolite_mp3_addon:
|
||||
# image: registry.oma-radio.fr/mp3addon:$OMA_DOCKER_VERSION
|
||||
# env_file: .env
|
||||
# environment:
|
||||
# OMA_CONFIG_TelecommandeHost: $NET.101
|
||||
# OMA_CONFIG_PigePrefix: /opt
|
||||
# restart: unless-stopped
|
||||
# volumes:
|
||||
# - $SOUNDBASE_DIR:/app/soundbase
|
||||
# networks:
|
||||
# default:
|
||||
# ipv4_address: $NET.109
|
||||
# deploy:
|
||||
# resources:
|
||||
# limits:
|
||||
# cpus: '0.05'
|
||||
|
||||
# doxy:
|
||||
# image: qnib/doxy
|
||||
# volumes:
|
||||
# - /tmp/radiodemo.oma-radio.fr/doxy:/tmp/doxy
|
||||
# - /data/radiodemo.oma-radio.fr/doxy.pattern:/etc/doxy.pattern
|
||||
# - /var/run/docker.sock:/var/run/docker.sock
|
||||
# environment:
|
||||
# DOXY_PROXY_SOCKET: /tmp/doxy/doxy.sock
|
||||
|
||||
icecast:
|
||||
image: infiniteproject/icecast
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
# echo -n "source:pass" | base64
|
||||
ICECAST_SOURCE_PASSWORD: JsCabjWJUZXrrrKCaaRZma5wD4YKj5LQLXv6f
|
||||
ICECAST_ADMIN_PASSWORD: STh5LrPMvp876KPoajCPEUpehE98JPqZ6sEixSnzJ42CR2MdyPMBYfzjGpbAzajNgw8jsuLh
|
||||
ICECAST_RELAY_PASSWORD: r2LgmDocgyYh7DqhSsey8tM99wxdViTpLtyi9tcWHtokC73QnC6kQLRRb58VUy5FXYnStRsG
|
||||
ICECAST_ADMIN_USERNAME: admin
|
||||
ICECAST_ADMIN_EMAIL: contact@oma-radio.fr
|
||||
ICECAST_LOCATION: Rhône-Alpes
|
||||
TZ: Europe/Paris
|
||||
healthcheck:
|
||||
test: "wget http://localhost:8000/direct.ogg -O - -t 1 -T 3 -S --spider 2>&1 | grep '200 OK' && wget http://localhost:8000/direct.mp3 -O - -t 1 -T 3 -S --spider 2>&1 | grep '200 OK'"
|
||||
interval: 5m0s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 1m0s
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: $NET$ICECAST
|
||||
|
||||
networks:
|
||||
default:
|
||||
ipam:
|
||||
config:
|
||||
- subnet: $NET.0/24
|
20
services/radiodemo-back.oma-radio.fr/generate_nat.sh
Executable file
20
services/radiodemo-back.oma-radio.fr/generate_nat.sh
Executable file
@ -0,0 +1,20 @@
|
||||
function extract_ports_from_compose {
|
||||
if [ "$#" -ne 1 ] ; then
|
||||
echo "function extract_ports_from_dockerfile needs 1 parameter : docker-compose file" >&2
|
||||
exit 1
|
||||
fi
|
||||
ports=false
|
||||
while read line ; do
|
||||
if [ "$line" = 'ports:' ] ; then
|
||||
ports=true
|
||||
elif "$ports" ; then
|
||||
if [[ "$line" != -* ]] ; then
|
||||
ports=false
|
||||
else
|
||||
echo $line | tr -d ' ' | tail -c +2
|
||||
fi
|
||||
fi
|
||||
done < docker-compose.yml
|
||||
}
|
||||
|
||||
extract_ports_from_compose docker-compose.yml | ../_deployer/template.sh .env
|
40
services/radiodemo-back.oma-radio.fr/icecast.liq
Normal file
40
services/radiodemo-back.oma-radio.fr/icecast.liq
Normal file
@ -0,0 +1,40 @@
|
||||
#!/usr/bin/liquidsoap
|
||||
#
|
||||
def integrity_check(filename)
|
||||
log.important("Integrity check of #{filename}.")
|
||||
ts = string.split(separator='/', filename)
|
||||
ts = int_of_string(list.hd(string.split(separator='\.', list.nth(ts, list.length(ts)-1))))
|
||||
if ts mod 60 == 0 then
|
||||
log.important("#{filename} is ok")
|
||||
else
|
||||
log.important("#{filename} is to fix")
|
||||
end
|
||||
end
|
||||
|
||||
# Mux
|
||||
input1 = mksafe(input.harbor("direct.ogg",port=8000,password="JsCabjWJUZXrrrKCaaRZma5wD4YKj5LQLXv6f"))
|
||||
|
||||
# Direct mp3
|
||||
output.icecast(
|
||||
%mp3(bitrate=128, samplerate=22050, stereo=false),
|
||||
mount="/direct.mp3",
|
||||
host="icecast", port=8000, password="JsCabjWJUZXrrrKCaaRZma5wD4YKj5LQLXv6f",
|
||||
input1)
|
||||
|
||||
# Radioking
|
||||
#output.icecast(
|
||||
# %mp3(bitrate=128, samplerate=22050, stereo=false),
|
||||
# mount="/test355",
|
||||
# host="live.radioking.com", port=80, user="", password="",
|
||||
# input)
|
||||
|
||||
# Direct ogg
|
||||
output.icecast(
|
||||
%vorbis(samplerate=44100, channels=1, quality=0.2),
|
||||
mount="/direct.ogg",
|
||||
host="icecast", port=8000, password="JsCabjWJUZXrrrKCaaRZma5wD4YKj5LQLXv6f",
|
||||
input1)
|
||||
|
||||
# Pige
|
||||
output.file(%vorbis(samplerate=44100, channels=1, quality=0.2), {"/soundbase/pige/#{int_of_float(time())}.ogg"}, input1, reopen_when={0s}, reopen_delay=1.0, on_close=integrity_check)
|
||||
|
223
services/radiodemo-back.oma-radio.fr/nginx_server.conf
Normal file
223
services/radiodemo-back.oma-radio.fr/nginx_server.conf
Normal file
@ -0,0 +1,223 @@
|
||||
# Parameters:
|
||||
# radio name
|
||||
# file path
|
||||
# ws port (local)
|
||||
# wss port (open)
|
||||
# upload service port
|
||||
# ssl certs location
|
||||
|
||||
# TODO
|
||||
# /speedtest-down returns random data
|
||||
# can use : openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > randomfile.bin
|
||||
# /speedtest-up just eat everything it can
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name $RADIO_HOST;
|
||||
|
||||
root $SOUNDBASE_DIR/website;
|
||||
index index.html;
|
||||
add_header Access-Control-Allow-Origin https://radio.karnaval.fr;
|
||||
|
||||
|
||||
location = /direct.ogg {
|
||||
proxy_pass http://172.29.0.110:8000/direct.ogg;
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
}
|
||||
location = /direct.mp3 {
|
||||
proxy_pass http://172.29.0.110:8000/direct.mp3;
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
}
|
||||
|
||||
location = /api { rewrite ^ /api/; }
|
||||
location ~ /api/pigeindex(/.*) {
|
||||
include uwsgi_params;
|
||||
uwsgi_param PATH_INFO "/pigeindex$1";
|
||||
uwsgi_param SCRIPT_NAME /api;
|
||||
uwsgi_pass unix:/tmp/uwsgi/$RADIO_HOST/uwsgi-api.sock;
|
||||
client_max_body_size 0;
|
||||
uwsgi_connect_timeout 6000;
|
||||
uwsgi_send_timeout 6000;
|
||||
uwsgi_read_timeout 6000;
|
||||
send_timeout 6000;
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
|
||||
}
|
||||
location ~ /api(/.*) {
|
||||
auth_basic "Entrez votre identifiant et mot de passe";
|
||||
auth_basic_user_file $SOUNDBASE_DIR/users.htpasswd;
|
||||
include uwsgi_params;
|
||||
uwsgi_param PATH_INFO "$1";
|
||||
uwsgi_param SCRIPT_NAME /api;
|
||||
uwsgi_pass unix:/tmp/uwsgi/$RADIO_HOST/uwsgi-api.sock;
|
||||
client_max_body_size 0;
|
||||
proxy_connect_timeout 6000;
|
||||
proxy_send_timeout 60000;
|
||||
proxy_read_timeout 6000;
|
||||
send_timeout 6000;
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
add_header Access-Control-Allow-Origin https://radio.karnaval.fr;
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
}
|
||||
|
||||
location /pige{
|
||||
alias $SOUNDBASE_DIR/pige;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /pigeMp3{
|
||||
alias $SOUNDBASE_DIR/pigeMp3;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /png {
|
||||
alias $SOUNDBASE_DIR/png;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /webpL {
|
||||
alias $SOUNDBASE_DIR/webpL;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /webpH {
|
||||
alias $SOUNDBASE_DIR/webpH;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /ogg {
|
||||
alias $SOUNDBASE_DIR/ogg;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /txt {
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
add_header Access-Control-Allow-Origin https://radio.karnaval.fr;
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
alias $SOUNDBASE_DIR/txt;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /wavM {
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
alias $SOUNDBASE_DIR/wavM;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /import {
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
alias $SOUNDBASE_DIR/import;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /export {
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
alias $SOUNDBASE_DIR/export;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /wav {
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
alias $SOUNDBASE_DIR/wav;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /fiches {
|
||||
alias $SOUNDBASE_DIR/fiches;
|
||||
try_files $uri $uri/ =404;
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
add_header Access-Control-Allow-Origin https://radio.karnaval.fr;
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
|
||||
}
|
||||
location /prg {
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
alias $SOUNDBASE_DIR/prg;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /listes {
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
alias $SOUNDBASE_DIR/listes;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location /statique {
|
||||
alias $SOUNDBASE_DIR/statique;
|
||||
try_files $uri $uri/ =404;
|
||||
# kill cache
|
||||
add_header Last-Modified $date_gmt;
|
||||
add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
add_header Access-Control-Allow-Origin https://radio.karnaval.fr;
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
etag off;
|
||||
}
|
||||
|
||||
# Admin interface
|
||||
location /manager {
|
||||
auth_basic "Entrez votre identifiant et mot de passe";
|
||||
auth_basic_user_file $SOUNDBASE_DIR/users.htpasswd;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location = /favicon.ico {
|
||||
return 301 /favicon.webp;
|
||||
}
|
||||
|
||||
# for js, css, html — dynamic site, players
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
add_header Cache-Control 'public must-revalidate';
|
||||
add_header Access-Control-Allow-Origin https://radio.karnaval.fr;
|
||||
}
|
||||
}
|
7
services/radiodemo-back.oma-radio.fr/radioking.liq
Normal file
7
services/radiodemo-back.oma-radio.fr/radioking.liq
Normal file
@ -0,0 +1,7 @@
|
||||
input = mksafe(input.http("http://172.29.0.110:8000/direct.mp3"))
|
||||
output.icecast(
|
||||
%mp3(bitrate=128, samplerate=22050, stereo=false),
|
||||
mount="/test355",
|
||||
host="live.radioking.com", port=80, user="test_test29", password="S9tx3VBhl",
|
||||
input)
|
||||
|
20
services/radiodemo-back.oma-radio.fr/wg-radiodemo.sh
Executable file
20
services/radiodemo-back.oma-radio.fr/wg-radiodemo.sh
Executable file
@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
. .env
|
||||
|
||||
[ -f "$DATA_DIR/privatekey" ] || echo 'No privatekey found' && exit 1
|
||||
|
||||
echo "
|
||||
[Interface]
|
||||
PrivateKey = $(cat "$DATA_DIR/privatekey")
|
||||
Address = 10.29.0.1/32
|
||||
ListenPort = 55820
|
||||
|
||||
[Peer]
|
||||
PublicKey = uXAXi3rthdRY2zkSgHpl3EqxQnxdw3aiAwNX6HhFHgI=
|
||||
AllowedIPs = 10.29.0.254/32
|
||||
Endpoint = radiodemo.oma-radio.fr:55820
|
||||
PersistentKeepalive = 30
|
||||
"
|
9
services/radiodemo.oma-radio.fr/.env
Normal file
9
services/radiodemo.oma-radio.fr/.env
Normal file
@ -0,0 +1,9 @@
|
||||
ENDPOINT=10.29.0.1
|
||||
WEBSERVER=.105
|
||||
MUX=.100
|
||||
TELECOM=.101
|
||||
NET=172.29.0
|
||||
WEBSOCKET_PORT=2004
|
||||
RADIO_HOST=radiodemo.oma-radio.fr
|
||||
MUX_SERVER_PORT=9004
|
||||
TELECOM_SERVER_PORT=3494
|
1
services/radiodemo.oma-radio.fr/docker-compose.yml
Normal file
1
services/radiodemo.oma-radio.fr/docker-compose.yml
Normal file
@ -0,0 +1 @@
|
||||
version: '3'
|
37
services/radiodemo.oma-radio.fr/nginx_server.conf
Normal file
37
services/radiodemo.oma-radio.fr/nginx_server.conf
Normal file
@ -0,0 +1,37 @@
|
||||
map $http_upgrade $connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
server{
|
||||
listen $WEBSOCKET_PORT ssl;
|
||||
listen [::]:$WEBSOCKET_PORT ssl;
|
||||
ssl_certificate /etc/letsencrypt/live/$RADIO_HOST/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/$RADIO_HOST/privkey.pem;
|
||||
|
||||
location / {
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://172.29.0.105:9000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_read_timeout 120s;
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
server_name $RADIO_HOST;
|
||||
ssl_certificate /etc/letsencrypt/live/$RADIO_HOST/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/$RADIO_HOST/privkey.pem;
|
||||
|
||||
location / {
|
||||
proxy_pass http://$ENDPOINT;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
}
|
||||
|
||||
|
||||
}
|
33
services/radiodemo.oma-radio.fr/wg-radiodemo.sh
Executable file
33
services/radiodemo.oma-radio.fr/wg-radiodemo.sh
Executable file
@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
. .env
|
||||
|
||||
wgif="$1"
|
||||
|
||||
echo "
|
||||
[Interface]
|
||||
PrivateKey = $(cat $DATA_DIR/privatekey)
|
||||
Address = 10.29.0.254/32
|
||||
ListenPort = 55820
|
||||
|
||||
# packet forwarding
|
||||
PreUp = sysctl -w net.ipv4.ip_forward=1
|
||||
|
||||
# port forwarding
|
||||
PreUp = iptables -t nat -A PREROUTING -p tcp --dport $MUX_SERVER_PORT -j DNAT --to-destination $ENDPOINT:$MUX_SERVER_PORT
|
||||
PreUp = iptables -t nat -A PREROUTING -p tcp --dport $TELECOM_SERVER_PORT -j DNAT --to-destination $ENDPOINT:$TELECOM_SERVER_PORT
|
||||
|
||||
PostDown = iptables -t nat -D PREROUTING -p tcp --dport $MUX_SERVER_PORT -j DNAT --to-destination $ENDPOINT:$MUX_SERVER_PORT
|
||||
PostDown = iptables -t nat -D PREROUTING -p tcp --dport $TELECOM_SERVER_PORT -j DNAT --to-destination $ENDPOINT:$TELECOM_SERVER_PORT
|
||||
|
||||
# packet masquerading
|
||||
PreUp = iptables -t nat -A POSTROUTING -o $wgif -j MASQUERADE
|
||||
PostDown = iptables -t nat -D POSTROUTING -o $wgif-j MASQUERADE
|
||||
|
||||
# remote settings for the private server
|
||||
[Peer]
|
||||
PublicKey = 1YIpMhZGrZRnZPlrTjtCfjvXXGk8j0Ug2AfcHEtN/hE=
|
||||
AllowedIPs = 10.29.0.1/32,$NET.0/24
|
||||
"
|
Loading…
Reference in New Issue
Block a user