0.10.0-1 Update
This commit is contained in:
@@ -143,7 +143,9 @@ router.post(
|
|||||||
logger.info('post:audiobook:upload', {
|
logger.info('post:audiobook:upload', {
|
||||||
reqId: req.reqId,
|
reqId: req.reqId,
|
||||||
originalName: req.file.originalname,
|
originalName: req.file.originalname,
|
||||||
sizeBytes: Number(req.file.size || 0)
|
sizeBytes: Number(req.file.size || 0),
|
||||||
|
mimeType: String(req.file.mimetype || '').trim() || null,
|
||||||
|
tempPath: String(req.file.path || '').trim() || null
|
||||||
});
|
});
|
||||||
const result = await pipelineService.uploadAudiobookFile(req.file, {
|
const result = await pipelineService.uploadAudiobookFile(req.file, {
|
||||||
format: req.body?.format,
|
format: req.body?.format,
|
||||||
|
|||||||
@@ -10804,6 +10804,14 @@ class PipelineService extends EventEmitter {
|
|||||||
try {
|
try {
|
||||||
await historyService.resetProcessLog(job.id);
|
await historyService.resetProcessLog(job.id);
|
||||||
await historyService.appendLog(job.id, 'SYSTEM', `AAX-Upload empfangen: ${originalName}`);
|
await historyService.appendLog(job.id, 'SYSTEM', `AAX-Upload empfangen: ${originalName}`);
|
||||||
|
logger.info('audiobook:upload:received', {
|
||||||
|
jobId: job.id,
|
||||||
|
originalName,
|
||||||
|
tempFilePath,
|
||||||
|
rawBaseDir,
|
||||||
|
outputFormat,
|
||||||
|
startImmediately
|
||||||
|
});
|
||||||
|
|
||||||
const probeConfig = audiobookService.buildProbeCommand(ffprobeCommand, tempFilePath);
|
const probeConfig = audiobookService.buildProbeCommand(ffprobeCommand, tempFilePath);
|
||||||
const captured = await this.runCapturedCommand(probeConfig.cmd, probeConfig.args);
|
const captured = await this.runCapturedCommand(probeConfig.cmd, probeConfig.args);
|
||||||
@@ -10822,12 +10830,25 @@ class PipelineService extends EventEmitter {
|
|||||||
rawTemplate,
|
rawTemplate,
|
||||||
originalName
|
originalName
|
||||||
);
|
);
|
||||||
|
logger.info('audiobook:upload:staging', {
|
||||||
|
jobId: job.id,
|
||||||
|
tempFilePath,
|
||||||
|
rawDir: storagePaths.rawDir,
|
||||||
|
rawFilePath: storagePaths.rawFilePath,
|
||||||
|
rawTemplate,
|
||||||
|
outputTemplate
|
||||||
|
});
|
||||||
|
|
||||||
ensureDir(storagePaths.rawDir);
|
ensureDir(storagePaths.rawDir);
|
||||||
fs.renameSync(tempFilePath, storagePaths.rawFilePath);
|
moveFileWithFallback(tempFilePath, storagePaths.rawFilePath);
|
||||||
stagedRawDir = storagePaths.rawDir;
|
stagedRawDir = storagePaths.rawDir;
|
||||||
stagedRawFilePath = storagePaths.rawFilePath;
|
stagedRawFilePath = storagePaths.rawFilePath;
|
||||||
chownRecursive(storagePaths.rawDir, settings?.raw_dir_owner);
|
chownRecursive(storagePaths.rawDir, settings?.raw_dir_owner);
|
||||||
|
logger.info('audiobook:upload:staged', {
|
||||||
|
jobId: job.id,
|
||||||
|
stagedRawDir,
|
||||||
|
stagedRawFilePath
|
||||||
|
});
|
||||||
|
|
||||||
const makemkvInfo = this.withAnalyzeContextMediaProfile({
|
const makemkvInfo = this.withAnalyzeContextMediaProfile({
|
||||||
status: 'SUCCESS',
|
status: 'SUCCESS',
|
||||||
@@ -10899,6 +10920,14 @@ class PipelineService extends EventEmitter {
|
|||||||
...(startResult && typeof startResult === 'object' ? startResult : {})
|
...(startResult && typeof startResult === 'object' ? startResult : {})
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
logger.error('audiobook:upload:failed', {
|
||||||
|
jobId: job.id,
|
||||||
|
originalName,
|
||||||
|
tempFilePath,
|
||||||
|
stagedRawDir,
|
||||||
|
stagedRawFilePath,
|
||||||
|
error: errorToMeta(error)
|
||||||
|
});
|
||||||
const updatePayload = {
|
const updatePayload = {
|
||||||
status: 'ERROR',
|
status: 'ERROR',
|
||||||
last_state: 'ERROR',
|
last_state: 'ERROR',
|
||||||
|
|||||||
@@ -119,6 +119,64 @@ info "Frontend-Host: $FRONTEND_HOST"
|
|||||||
|
|
||||||
command_exists() { command -v "$1" &>/dev/null; }
|
command_exists() { command -v "$1" &>/dev/null; }
|
||||||
|
|
||||||
|
nginx_replace_or_insert_directive() {
|
||||||
|
local file="$1"
|
||||||
|
local directive_regex="$2"
|
||||||
|
local desired_line="$3"
|
||||||
|
local anchor_regex="$4"
|
||||||
|
local directive_sed_regex="${directive_regex//\//\\/}"
|
||||||
|
local anchor_sed_regex="${anchor_regex//\//\\/}"
|
||||||
|
local desired_sed_line="${desired_line//\//\\/}"
|
||||||
|
|
||||||
|
if grep -Eq "$directive_regex" "$file"; then
|
||||||
|
sed -i -E "0,/$directive_sed_regex/s//${desired_sed_line}/" "$file"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
sed -i "/$anchor_sed_regex/a\\$desired_line" "$file"
|
||||||
|
}
|
||||||
|
|
||||||
|
patch_existing_ripster_nginx_site() {
|
||||||
|
local file="$1"
|
||||||
|
local backup_file="${file}.bak-$(date +%Y%m%d%H%M%S)"
|
||||||
|
|
||||||
|
[[ -f "$file" ]] || return 1
|
||||||
|
|
||||||
|
cp -a "$file" "$backup_file"
|
||||||
|
info "Bestehende nginx-Konfiguration erkannt - ergänze Upload-/Proxy-Settings"
|
||||||
|
info "Backup erstellt: $backup_file"
|
||||||
|
|
||||||
|
nginx_replace_or_insert_directive \
|
||||||
|
"$file" \
|
||||||
|
'^[[:space:]]*client_max_body_size[[:space:]]+[^;]+;' \
|
||||||
|
' client_max_body_size 8G;' \
|
||||||
|
'server_name .*;'
|
||||||
|
|
||||||
|
nginx_replace_or_insert_directive \
|
||||||
|
"$file" \
|
||||||
|
'^[[:space:]]*proxy_connect_timeout[[:space:]]+[^;]+;' \
|
||||||
|
' proxy_connect_timeout 60s;' \
|
||||||
|
'location /api/ {'
|
||||||
|
|
||||||
|
nginx_replace_or_insert_directive \
|
||||||
|
"$file" \
|
||||||
|
'^[[:space:]]*proxy_send_timeout[[:space:]]+[^;]+;' \
|
||||||
|
' proxy_send_timeout 3600s;' \
|
||||||
|
'location /api/ {'
|
||||||
|
|
||||||
|
nginx_replace_or_insert_directive \
|
||||||
|
"$file" \
|
||||||
|
'^[[:space:]]*proxy_read_timeout[[:space:]]+[^;]+;' \
|
||||||
|
' proxy_read_timeout 3600s;' \
|
||||||
|
'location /api/ {'
|
||||||
|
|
||||||
|
nginx_replace_or_insert_directive \
|
||||||
|
"$file" \
|
||||||
|
'^[[:space:]]*proxy_request_buffering[[:space:]]+[^;]+;' \
|
||||||
|
' proxy_request_buffering off;' \
|
||||||
|
'location /api/ {'
|
||||||
|
}
|
||||||
|
|
||||||
install_node() {
|
install_node() {
|
||||||
header "Node.js installieren"
|
header "Node.js installieren"
|
||||||
local required_major=20
|
local required_major=20
|
||||||
@@ -844,7 +902,10 @@ ok "ripster-backend.service erstellt"
|
|||||||
if [[ "$SKIP_NGINX" == false ]]; then
|
if [[ "$SKIP_NGINX" == false ]]; then
|
||||||
header "nginx konfigurieren"
|
header "nginx konfigurieren"
|
||||||
|
|
||||||
cat > /etc/nginx/sites-available/ripster <<EOF
|
if [[ -f /etc/nginx/sites-available/ripster ]]; then
|
||||||
|
patch_existing_ripster_nginx_site /etc/nginx/sites-available/ripster
|
||||||
|
else
|
||||||
|
cat > /etc/nginx/sites-available/ripster <<EOF
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name ${FRONTEND_HOST} _;
|
server_name ${FRONTEND_HOST} _;
|
||||||
@@ -866,8 +927,10 @@ server {
|
|||||||
proxy_set_header Host \$host;
|
proxy_set_header Host \$host;
|
||||||
proxy_set_header X-Real-IP \$remote_addr;
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
proxy_read_timeout 300s;
|
proxy_read_timeout 3600s;
|
||||||
proxy_connect_timeout 10s;
|
proxy_send_timeout 3600s;
|
||||||
|
proxy_connect_timeout 60s;
|
||||||
|
proxy_request_buffering off;
|
||||||
}
|
}
|
||||||
|
|
||||||
# WebSocket → Backend
|
# WebSocket → Backend
|
||||||
@@ -882,6 +945,7 @@ server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
# Alte Default-Seite deaktivieren, Ripster aktivieren
|
# Alte Default-Seite deaktivieren, Ripster aktivieren
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
rm -f /etc/nginx/sites-enabled/default
|
||||||
|
|||||||
70
install.sh
70
install.sh
@@ -124,6 +124,64 @@ download_file() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nginx_replace_or_insert_directive() {
|
||||||
|
local file="$1"
|
||||||
|
local directive_regex="$2"
|
||||||
|
local desired_line="$3"
|
||||||
|
local anchor_regex="$4"
|
||||||
|
local directive_sed_regex="${directive_regex//\//\\/}"
|
||||||
|
local anchor_sed_regex="${anchor_regex//\//\\/}"
|
||||||
|
local desired_sed_line="${desired_line//\//\\/}"
|
||||||
|
|
||||||
|
if grep -Eq "$directive_regex" "$file"; then
|
||||||
|
sed -i -E "0,/$directive_sed_regex/s//${desired_sed_line}/" "$file"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
sed -i "/$anchor_sed_regex/a\\$desired_line" "$file"
|
||||||
|
}
|
||||||
|
|
||||||
|
patch_existing_ripster_nginx_site() {
|
||||||
|
local file="$1"
|
||||||
|
local backup_file="${file}.bak-$(date +%Y%m%d%H%M%S)"
|
||||||
|
|
||||||
|
[[ -f "$file" ]] || return 1
|
||||||
|
|
||||||
|
cp -a "$file" "$backup_file"
|
||||||
|
info "Bestehende nginx-Konfiguration erkannt - ergänze Upload-/Proxy-Settings"
|
||||||
|
info "Backup erstellt: $backup_file"
|
||||||
|
|
||||||
|
nginx_replace_or_insert_directive \
|
||||||
|
"$file" \
|
||||||
|
'^[[:space:]]*client_max_body_size[[:space:]]+[^;]+;' \
|
||||||
|
' client_max_body_size 8G;' \
|
||||||
|
'server_name .*;'
|
||||||
|
|
||||||
|
nginx_replace_or_insert_directive \
|
||||||
|
"$file" \
|
||||||
|
'^[[:space:]]*proxy_connect_timeout[[:space:]]+[^;]+;' \
|
||||||
|
' proxy_connect_timeout 60s;' \
|
||||||
|
'location /api/ {'
|
||||||
|
|
||||||
|
nginx_replace_or_insert_directive \
|
||||||
|
"$file" \
|
||||||
|
'^[[:space:]]*proxy_send_timeout[[:space:]]+[^;]+;' \
|
||||||
|
' proxy_send_timeout 3600s;' \
|
||||||
|
'location /api/ {'
|
||||||
|
|
||||||
|
nginx_replace_or_insert_directive \
|
||||||
|
"$file" \
|
||||||
|
'^[[:space:]]*proxy_read_timeout[[:space:]]+[^;]+;' \
|
||||||
|
' proxy_read_timeout 3600s;' \
|
||||||
|
'location /api/ {'
|
||||||
|
|
||||||
|
nginx_replace_or_insert_directive \
|
||||||
|
"$file" \
|
||||||
|
'^[[:space:]]*proxy_request_buffering[[:space:]]+[^;]+;' \
|
||||||
|
' proxy_request_buffering off;' \
|
||||||
|
'location /api/ {'
|
||||||
|
}
|
||||||
|
|
||||||
install_node() {
|
install_node() {
|
||||||
header "Node.js installieren"
|
header "Node.js installieren"
|
||||||
local required_major=20
|
local required_major=20
|
||||||
@@ -647,7 +705,10 @@ ok "ripster-backend.service erstellt"
|
|||||||
if [[ "$SKIP_NGINX" == false ]]; then
|
if [[ "$SKIP_NGINX" == false ]]; then
|
||||||
header "nginx konfigurieren"
|
header "nginx konfigurieren"
|
||||||
|
|
||||||
cat > /etc/nginx/sites-available/ripster <<EOF
|
if [[ -f /etc/nginx/sites-available/ripster ]]; then
|
||||||
|
patch_existing_ripster_nginx_site /etc/nginx/sites-available/ripster
|
||||||
|
else
|
||||||
|
cat > /etc/nginx/sites-available/ripster <<EOF
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name ${FRONTEND_HOST} _;
|
server_name ${FRONTEND_HOST} _;
|
||||||
@@ -666,8 +727,10 @@ server {
|
|||||||
proxy_set_header Host \$host;
|
proxy_set_header Host \$host;
|
||||||
proxy_set_header X-Real-IP \$remote_addr;
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
proxy_read_timeout 300s;
|
proxy_read_timeout 3600s;
|
||||||
proxy_connect_timeout 10s;
|
proxy_send_timeout 3600s;
|
||||||
|
proxy_connect_timeout 60s;
|
||||||
|
proxy_request_buffering off;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /ws {
|
location /ws {
|
||||||
@@ -681,6 +744,7 @@ server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
rm -f /etc/nginx/sites-enabled/default
|
||||||
ln -sf /etc/nginx/sites-available/ripster /etc/nginx/sites-enabled/ripster
|
ln -sf /etc/nginx/sites-available/ripster /etc/nginx/sites-enabled/ripster
|
||||||
|
|||||||
Reference in New Issue
Block a user