add Dockerfile and docker-compose for multi-stage build; update .gitignore and various HTML examples
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -6,3 +6,4 @@
|
|||||||
*.png
|
*.png
|
||||||
/pb_data/storage/
|
/pb_data/storage/
|
||||||
/pb_data/storage/**
|
/pb_data/storage/**
|
||||||
|
*.DS_Store
|
||||||
24
Dockerfile
Normal file
24
Dockerfile
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# Multi-stage Dockerfile for Go (PocketBase) project
|
||||||
|
# --- Build Stage ---
|
||||||
|
FROM golang:1.21-alpine AS builder
|
||||||
|
WORKDIR /app
|
||||||
|
COPY go.mod .
|
||||||
|
COPY go.sum .
|
||||||
|
RUN go mod download
|
||||||
|
COPY . .
|
||||||
|
RUN CGO_ENABLED=0 GOOS=linux go build -o server main.go
|
||||||
|
|
||||||
|
# --- Development Stage ---
|
||||||
|
FROM golang:1.21-alpine AS dev
|
||||||
|
WORKDIR /app
|
||||||
|
COPY --from=builder /app /app
|
||||||
|
EXPOSE 8080
|
||||||
|
CMD ["go", "run", "main.go"]
|
||||||
|
|
||||||
|
# --- Production Stage ---
|
||||||
|
FROM alpine:3.18 AS prod
|
||||||
|
WORKDIR /app
|
||||||
|
COPY --from=builder /app/server /app/server
|
||||||
|
COPY pb_public /app/pb_public
|
||||||
|
EXPOSE 8080
|
||||||
|
CMD ["/app/server"]
|
||||||
20
docker-compose.yml
Normal file
20
docker-compose.yml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
services:
|
||||||
|
app-prod:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
target: prod
|
||||||
|
image: dbr-app:latest
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- POCKETBASE_HTTP_ADDR=0.0.0.0:8080
|
||||||
|
volumes:
|
||||||
|
- ./pb_public:/app/pb_public:ro
|
||||||
|
- ./pb_data:/app/pb_data
|
||||||
|
command: ["/app/server", "serve", "--http=0.0.0.0:8080"]
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
pb_public: {}
|
||||||
|
pb_data: {}
|
||||||
@@ -50,7 +50,8 @@
|
|||||||
// Check if HLS.js is supported
|
// Check if HLS.js is supported
|
||||||
if (Hls.isSupported()) {
|
if (Hls.isSupported()) {
|
||||||
const hls = new Hls();
|
const hls = new Hls();
|
||||||
const proxyUrl = 'http://127.0.0.1:8090/cors?url=https://brevent.akamaized.net/hls/live/2028222/event_05/master1080p5000.m3u8';
|
const localwindowurl = window.location.origin;
|
||||||
|
const proxyUrl = localwindowurl + '/cors?url=https://brevent.akamaized.net/hls/live/2028222/event_05/master1080p5000.m3u8';
|
||||||
hls.loadSource(proxyUrl);
|
hls.loadSource(proxyUrl);
|
||||||
hls.attachMedia(videoPlayer);
|
hls.attachMedia(videoPlayer);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -35,25 +35,11 @@
|
|||||||
<body>
|
<body>
|
||||||
<div id="video-container">
|
<div id="video-container">
|
||||||
<video id="videoPlayer" controls autoplay playsinline muted></video>
|
<video id="videoPlayer" controls autoplay playsinline muted></video>
|
||||||
<button id="fullscreen-button">Fullscreen</button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
|
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
|
||||||
<script>
|
<script>
|
||||||
const videoPlayer = document.getElementById('videoPlayer');
|
const videoPlayer = document.getElementById('videoPlayer');
|
||||||
const fullscreenButton = document.getElementById('fullscreen-button');
|
|
||||||
|
|
||||||
fullscreenButton.addEventListener('click', () => {
|
|
||||||
if (videoPlayer.requestFullscreen) {
|
|
||||||
videoPlayer.requestFullscreen();
|
|
||||||
} else if (videoPlayer.mozRequestFullScreen) { /* Firefox */
|
|
||||||
videoPlayer.mozRequestFullScreen();
|
|
||||||
} else if (videoPlayer.webkitRequestFullscreen) { /* Chrome, Safari & Opera */
|
|
||||||
videoPlayer.webkitRequestFullscreen();
|
|
||||||
} else if (videoPlayer.msRequestFullscreen) { /* IE/Edge */
|
|
||||||
videoPlayer.msRequestFullscreen();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Add event listener when video ends to loop it
|
// Add event listener when video ends to loop it
|
||||||
videoPlayer.addEventListener('ended', function() {
|
videoPlayer.addEventListener('ended', function() {
|
||||||
@@ -64,7 +50,8 @@
|
|||||||
// Check if HLS.js is supported
|
// Check if HLS.js is supported
|
||||||
if (Hls.isSupported()) {
|
if (Hls.isSupported()) {
|
||||||
const hls = new Hls();
|
const hls = new Hls();
|
||||||
hls.loadSource('https://ch-fra-n16.livespotting.com/vpu/qjkdtjva/4ctm3g1a_720.m3u8');
|
const proxyUrl = 'https://ch-fra-n16.livespotting.com/vpu/qjkdtjva/4ctm3g1a_720.m3u8';
|
||||||
|
hls.loadSource(proxyUrl);
|
||||||
hls.attachMedia(videoPlayer);
|
hls.attachMedia(videoPlayer);
|
||||||
} else {
|
} else {
|
||||||
console.error('HLS not supported');
|
console.error('HLS not supported');
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<iframe src="https://webtv.feratel.com/webtv/?cam=3175&design=v4&pg=5EB12424-7C2D-428A-BEFF-0C9140CD772F" id="embedded-frame"></iframe>
|
<iframe src="https://webtv.feratel.com/webtv/?design=v4&pg=5EB12424-7C2D-428A-BEFF-0C9140CD772F&cam=3175" id="embedded-frame"></iframe>
|
||||||
<script>
|
<script>
|
||||||
const iframe = document.getElementById('embedded-frame');
|
const iframe = document.getElementById('embedded-frame');
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<iframe src="https://radar.wo-cloud.com/desktop/rr/interactive?wry=51.83,10.78&wrn=V2VybmlnZXJvZGU%3D&wrg=10454&wrf=true&wrx=51.83,10.78&wro=true&wrm=8" id="embedded-frame"></iframe>
|
<iframe src="https://radar.wo-cloud.com/desktop/wr/interactive?wry=51.83,10.78&wrn=V2VybmlnZXJvZGU%3D&wrg=10454&wrf=false&wrx=51.83,10.78&wro=true&wrm=9" id="embedded-frame"></iframe>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const iframe = document.getElementById('embedded-frame');
|
const iframe = document.getElementById('embedded-frame');
|
||||||
|
|||||||
6
go.mod
6
go.mod
@@ -2,7 +2,10 @@ module dbr-backend
|
|||||||
|
|
||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
require github.com/pocketbase/pocketbase v0.12.1-0.20230130105451-250642a8f97f
|
require (
|
||||||
|
github.com/labstack/echo/v5 v5.0.0-20220201181537-ed2888cfa198
|
||||||
|
github.com/pocketbase/pocketbase v0.12.1-0.20230130105451-250642a8f97f
|
||||||
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/AlecAivazis/survey/v2 v2.3.6 // indirect
|
github.com/AlecAivazis/survey/v2 v2.3.6 // indirect
|
||||||
@@ -43,7 +46,6 @@ require (
|
|||||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
|
||||||
github.com/labstack/echo/v5 v5.0.0-20220201181537-ed2888cfa198 // indirect
|
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.17 // indirect
|
github.com/mattn/go-isatty v0.0.17 // indirect
|
||||||
github.com/mattn/go-sqlite3 v1.14.16 // indirect
|
github.com/mattn/go-sqlite3 v1.14.16 // indirect
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
|
|
||||||
const sliderArrayQuery = [];
|
const sliderArrayQuery = [];
|
||||||
|
|
||||||
const pb = new PocketBase('http://192.168.178.57:8090');
|
const pb = new PocketBase('http://127.0.0.1:8080');
|
||||||
|
|
||||||
const media = pb.collection('media').getFullList(2000, {
|
const media = pb.collection('media').getFullList(2000, {
|
||||||
sort: '-created',
|
sort: '-created',
|
||||||
|
|||||||
131
pb_schema.json
Normal file
131
pb_schema.json
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "_pb_users_auth_",
|
||||||
|
"name": "users",
|
||||||
|
"type": "auth",
|
||||||
|
"system": false,
|
||||||
|
"schema": [
|
||||||
|
{
|
||||||
|
"id": "users_name",
|
||||||
|
"name": "name",
|
||||||
|
"type": "text",
|
||||||
|
"system": false,
|
||||||
|
"required": false,
|
||||||
|
"unique": false,
|
||||||
|
"options": {
|
||||||
|
"min": null,
|
||||||
|
"max": null,
|
||||||
|
"pattern": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "users_avatar",
|
||||||
|
"name": "avatar",
|
||||||
|
"type": "file",
|
||||||
|
"system": false,
|
||||||
|
"required": false,
|
||||||
|
"unique": false,
|
||||||
|
"options": {
|
||||||
|
"maxSelect": 1,
|
||||||
|
"maxSize": 5242880,
|
||||||
|
"mimeTypes": [
|
||||||
|
"image/jpeg",
|
||||||
|
"image/png",
|
||||||
|
"image/svg+xml",
|
||||||
|
"image/gif",
|
||||||
|
"image/webp"
|
||||||
|
],
|
||||||
|
"thumbs": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"listRule": "id = @request.auth.id",
|
||||||
|
"viewRule": "id = @request.auth.id",
|
||||||
|
"createRule": "",
|
||||||
|
"updateRule": "id = @request.auth.id",
|
||||||
|
"deleteRule": "id = @request.auth.id",
|
||||||
|
"options": {
|
||||||
|
"allowEmailAuth": true,
|
||||||
|
"allowOAuth2Auth": true,
|
||||||
|
"allowUsernameAuth": true,
|
||||||
|
"exceptEmailDomains": null,
|
||||||
|
"manageRule": null,
|
||||||
|
"minPasswordLength": 8,
|
||||||
|
"onlyEmailDomains": null,
|
||||||
|
"requireEmail": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "pgdcj2dyt12pena",
|
||||||
|
"name": "media",
|
||||||
|
"type": "base",
|
||||||
|
"system": false,
|
||||||
|
"schema": [
|
||||||
|
{
|
||||||
|
"id": "dy3k4o8r",
|
||||||
|
"name": "media",
|
||||||
|
"type": "file",
|
||||||
|
"system": false,
|
||||||
|
"required": false,
|
||||||
|
"unique": false,
|
||||||
|
"options": {
|
||||||
|
"maxSelect": 1,
|
||||||
|
"maxSize": 52428800,
|
||||||
|
"mimeTypes": [
|
||||||
|
"image/jpeg",
|
||||||
|
"video/x-matroska",
|
||||||
|
"image/png",
|
||||||
|
"image/vnd.mozilla.apng",
|
||||||
|
"audio/mp4",
|
||||||
|
"video/mp4",
|
||||||
|
"text/html",
|
||||||
|
"image/avif",
|
||||||
|
"video/x-msvideo",
|
||||||
|
"image/gif"
|
||||||
|
],
|
||||||
|
"thumbs": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "qqbokwdk",
|
||||||
|
"name": "group",
|
||||||
|
"type": "text",
|
||||||
|
"system": false,
|
||||||
|
"required": false,
|
||||||
|
"unique": false,
|
||||||
|
"options": {
|
||||||
|
"min": 3,
|
||||||
|
"max": 64,
|
||||||
|
"pattern": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "sm5nbveu",
|
||||||
|
"name": "duration",
|
||||||
|
"type": "number",
|
||||||
|
"system": false,
|
||||||
|
"required": false,
|
||||||
|
"unique": false,
|
||||||
|
"options": {
|
||||||
|
"min": 1,
|
||||||
|
"max": 100000000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "g75s2yuu",
|
||||||
|
"name": "enabled",
|
||||||
|
"type": "bool",
|
||||||
|
"system": false,
|
||||||
|
"required": false,
|
||||||
|
"unique": false,
|
||||||
|
"options": {}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"listRule": "",
|
||||||
|
"viewRule": "",
|
||||||
|
"createRule": "",
|
||||||
|
"updateRule": "",
|
||||||
|
"deleteRule": "",
|
||||||
|
"options": {}
|
||||||
|
}
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user