請參考 1.Ubuntu 24.04 安裝 laravel 12 的過程記錄,完成Ubuntu 24.04 + Apache2 + PHP 8.4 + Mariadb + Laravel 12 的相關設定。
一、在 Ubuntu 24.04 安裝 yt-dlp:
由於Ubuntu 24.04 內建套件通常偏舊,建議用官方 binary。
1.指令如下:
sudo apt update
sudo apt install ffmpeg -y
sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
sudo chmod a+rx /usr/local/bin/yt-dlp
2.測試是否安裝成功,指令:
yt-dlp --version
二、Laravel 設定
注意:不要同步執行下載,會卡住 Apache。改用 Queue。
1.建立 Job,指令:
php artisan make:job DownloadYoutubeVideo
2.修改 Job,指令:
cd ~/home/webadmin/html/mylaravel12/app/Jobs/
nano DownloadYoutubeVideo.php
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Symfony\Component\Process\Process;
class DownloadYoutubeVideo implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $url;
public function __construct($url)
{
$this->url = $url;
}
public function handle(): void
{
$process = new Process([
'/usr/local/bin/yt-dlp',
'-f', 'bestvideo+bestaudio',
'--merge-output-format', 'mp4',
'-o', storage_path('app/public/%(title)s.%(ext)s'),
$this->url
]);
$process->setTimeout(3600);
$process->run();
}
}
3.修改 Controller.php
<?php
namespace App\Http\Controllers;
use App\Jobs\DownloadYoutubeVideo;
abstract class Controller
{
//
public function download(Request $request) {
$request->validate([
'url' => 'required|url'
]);
DownloadYoutubeVideo::dispatch($request->url);
return back()->with('success', '影片已加入下載佇列');
}
}
4.設定 Queue
開發環境最簡單方式:
(1).env
QUEUE_CONNECTION=database
(2).建立 queue table
php artisan queue:table
php artisan migrate
(3).啟動 queue worker:
php artisan queue:work
5.設定 storage 連結,指令:
php artisan storage:link