1
0
Fork 0
main
Ambrose Chua 2021-11-17 18:37:38 +08:00
parent aeddf1c9d6
commit 32d5b985b4
19 changed files with 251 additions and 1260 deletions

11
.dockerignore Normal file
View File

@ -0,0 +1,11 @@
cmd/admin/admin
cmd/control/control
cmd/web/web
cmd/preview/preview
cmd/proxy/proxy
# dist is required for Dockerfile.local
env
tilt_modules
build
deployments

3
.gitignore vendored
View File

@ -3,5 +3,6 @@ cmd/control/control
cmd/web/web
cmd/preview/preview
cmd/proxy/proxy
dist
env
tilt_modules

104
Tiltfile Normal file
View File

@ -0,0 +1,104 @@
load('ext://restart_process', 'docker_build_with_restart')
local_resource(
'control-go-compile',
'CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o dist/control ./cmd/control',
deps=['cmd/control', 'pkg', 'internal'],
allow_parallel=True,
)
docker_build_with_restart(
'registry.makerforce.io/photos/control',
'.',
entrypoint=['/control'],
dockerfile='build/control/Dockerfile.local',
only=['dist/control'],
live_update=[
sync('dist/control', '/control'),
],
)
docker_build_with_restart(
'registry.makerforce.io/photos/preview',
'.',
entrypoint=['/preview'],
dockerfile='build/preview/Dockerfile',
target='build',
only=['cmd/preview', 'pkg', 'internal', 'go.mod', 'go.sum'],
live_update=[
sync('cmd/preview', '/src/cmd/preview'),
sync('pkg', '/src/pkg'),
sync('internal', '/src/internal'),
run('go build -o /preview'),
],
)
local_resource(
'proxy-go-compile',
'CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o dist/proxy ./cmd/proxy',
deps=['cmd/proxy'],
allow_parallel=True,
)
docker_build_with_restart(
'registry.makerforce.io/photos/proxy',
'.',
entrypoint=['/proxy'],
dockerfile='build/proxy/Dockerfile.local',
only=['dist/proxy'],
live_update=[
sync('dist/proxy', '/proxy'),
],
)
local_resource(
'web-go-compile',
'CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o dist/web ./cmd/web',
deps=['cmd/web', 'pkg', 'internal', 'web'],
allow_parallel=True,
)
docker_build_with_restart(
'registry.makerforce.io/photos/web',
'.',
entrypoint=['/web'],
dockerfile='build/web/Dockerfile.local',
only=['dist/web'],
live_update=[
sync('dist/web', '/web'),
],
)
k8s_yaml('deployments/secrets.yml')
k8s_yaml('deployments/minio-basic.yml')
k8s_resource(
'minio',
port_forwards=[
'9000:9000',
'9001:9001',
],
objects=['minio:secret', 'minio:service'],
)
k8s_yaml('deployments/services.yml')
k8s_resource(
'proxy',
port_forwards=[
'8101',
],
)
k8s_resource(
'control',
port_forwards=[
'8100',
],
)
k8s_resource(
'preview',
port_forwards=[
'8103',
],
)
k8s_resource(
'web',
port_forwards=[
'8104',
],
)

View File

@ -1,17 +1,15 @@
FROM golang:alpine AS build
RUN mkdir /src /dist
FROM golang:1.16-alpine AS build
WORKDIR /src
COPY . ./
WORKDIR /src/cmd/control/
ENV CGO_ENABLED=0
RUN go build -o /dist/control
RUN go build -o /control
FROM scratch
COPY --from=build /dist/control /control
COPY --from=build /control /control
ENTRYPOINT ["/control"]

View File

@ -0,0 +1,3 @@
FROM alpine:latest
COPY ./dist/control /control
ENTRYPOINT ["/control"]

View File

@ -1,23 +1,21 @@
FROM golang:buster AS build
FROM golang:1.16-bullseye AS build
RUN apt-get update
RUN apt-get install -y libvips-dev
RUN mkdir /src /dist
RUN apt-get update \
&& apt-get install -y libvips-dev
WORKDIR /src
COPY . ./
WORKDIR /src/cmd/preview/
RUN go build -o /dist/preview
RUN go build -o /preview
FROM debian:buster
FROM debian:bullseye
RUN apt-get update \
&& apt-get install -y libvips42 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=build /dist/preview /preview
COPY --from=build /preview /preview
ENTRYPOINT ["/preview"]

View File

@ -1,17 +1,15 @@
FROM golang:alpine AS build
RUN mkdir /src /dist
FROM golang:1.16-alpine AS build
WORKDIR /src
COPY . ./
WORKDIR /src/cmd/proxy/
ENV CGO_ENABLED=0
RUN go build -o /dist/proxy
RUN go build -o /proxy
FROM scratch
COPY --from=build /dist/proxy /proxy
COPY --from=build /proxy /proxy
ENTRYPOINT ["/proxy"]

View File

@ -0,0 +1,3 @@
FROM alpine:latest
COPY ./dist/proxy /proxy
ENTRYPOINT ["/proxy"]

View File

@ -1,17 +1,15 @@
FROM golang:buster AS build
RUN mkdir /src /dist
FROM golang:1.16-alpine AS build
WORKDIR /src
COPY . ./
WORKDIR /src/cmd/web/
ENV CGO_ENABLED=0
RUN go build -o /dist/web
RUN go build -o /web
FROM debian:buster
FROM scratch
COPY --from=build /dist/web /web
COPY --from=build /web /web
ENTRYPOINT ["/web"]

View File

@ -0,0 +1,3 @@
FROM alpine:latest
COPY ./dist/web /web
ENTRYPOINT ["/web"]

View File

@ -1,9 +0,0 @@
# Creating embedded data
```bash
go get -u github.com/go-bindata/go-bindata/v3/...
go generate
```
<!-- vim: set conceallevel=2 et ts=2 sw=2: -->

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,7 @@ import (
"strings"
lib "git.makerforce.io/photos/photos/pkg/bucket"
"git.makerforce.io/photos/photos/web"
)
var funcs = template.FuncMap{
@ -38,7 +39,7 @@ var viewTemplate = mustTemplateAsset("view/index.tmpl")
var manageTemplate = mustTemplateAsset("manage/index.tmpl")
func mustTemplateAsset(name string) *template.Template {
buf, err := Asset(name)
buf, err := web.FS.ReadFile(name)
if err != nil {
panic(err)
}

View File

@ -1,7 +1,5 @@
package main
//go:generate go-bindata -fs -prefix "../../web/" "../../web/..."
import (
"bytes"
"fmt"
@ -13,6 +11,7 @@ import (
lib "git.makerforce.io/photos/photos/pkg/bucket"
"git.makerforce.io/photos/photos/pkg/credentials"
"git.makerforce.io/photos/photos/pkg/signer"
"git.makerforce.io/photos/photos/web"
)
var creds *credentials.Client
@ -51,7 +50,7 @@ func main() {
endpoint = os.Getenv("WEB_ENDPOINT")
controlEndpoint = os.Getenv("CONTROL_ENDPOINT")
sharedFileServer = http.FileServer(AssetFile())
sharedFileServer = http.FileServer(http.FS(web.FS))
server := &http.Server{
Addr: ":8004",
@ -101,14 +100,17 @@ func update(w http.ResponseWriter, req *http.Request) {
title, err := getBucketMetadataTitle(bucket, cred)
if err != nil {
err := fmt.Errorf("bucket title: %w", err.Error())
httphelpers.ErrorResponse(w, err)
return
/*
err := fmt.Errorf("bucket title: %w", err)
httphelpers.ErrorResponse(w, err)
return
*/
title = ""
}
photos, err := getPhotos(bucket, cred)
if err != nil {
err := fmt.Errorf("cannot list bucket: %w", err.Error())
err := fmt.Errorf("cannot list bucket: %w", err)
httphelpers.ErrorResponse(w, err)
return
}

View File

@ -0,0 +1,40 @@
apiVersion: v1
kind: Pod
metadata:
name: minio
labels:
app: minio
spec:
containers:
- name: minio
image: minio/minio:RELEASE.2021-11-09T03-21-45Z
command: ["minio", "server", "/data", "--console-address", ":9001"]
env:
- name: MINIO_ROOT_USER
valueFrom:
secretKeyRef:
key: accesskey
name: minio
- name: MINIO_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: secretkey
name: minio
ports:
- containerPort: 9000
- containerPort: 9001
---
apiVersion: v1
kind: Service
metadata:
name: minio
spec:
selector:
app: minio
ports:
- name: api
protocol: TCP
port: 9000
- name: console
protocol: TCP
port: 9001

9
deployments/secrets.yml Normal file
View File

@ -0,0 +1,9 @@
apiVersion: v1
kind: Secret
metadata:
name: minio
labels:
app: minio
data:
accesskey: bWluaW9hZG1pbg==
secretkey: bWluaW9hZG1pbg==

View File

@ -1,18 +1,18 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: photos-proxy
name: proxy
labels:
app: photos-proxy
app: proxy
spec:
replicas: 1
selector:
matchLabels:
app: photos-proxy
app: proxy
template:
metadata:
labels:
app: photos-proxy
app: proxy
spec:
containers:
- name: proxy
@ -20,7 +20,7 @@ spec:
imagePullPolicy: Always
env:
- name: MINIO_ENDPOINT
value: api.ambrose.photos:9000
value: minio:9000
- name: MINIO_DOMAIN
value: ""
- name: MINIO_ENDPOINT_SECURE
@ -29,35 +29,33 @@ spec:
value: "false"
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: photos-proxy
name: proxy
spec:
selector:
app: photos-proxy
app: proxy
ports:
- protocol: TCP
port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: photos-control
name: control
labels:
app: photos-control
app: control
spec:
replicas: 1
replicas: 2
selector:
matchLabels:
app: photos-control
app: control
template:
metadata:
labels:
app: photos-control
app: control
spec:
containers:
- name: control
@ -65,7 +63,7 @@ spec:
imagePullPolicy: Always
env:
- name: MINIO_ENDPOINT
value: api.ambrose.photos:9000
value: minio:9000
- name: MINIO_ACCESS_KEY
valueFrom:
secretKeyRef:
@ -82,38 +80,40 @@ spec:
value: "false"
- name: MINIO_CREDENTIALS_BUCKET
value: "credentials"
- name: EXPIRATION_READ
value: "5m"
- name: EXPIRATION_WRITE
value: "1m"
ports:
- containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
name: photos-control
name: control
spec:
selector:
app: photos-control
app: control
ports:
- protocol: TCP
port: 80
targetPort: 8000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: photos-preview
name: preview
labels:
app: photos-preview
app: preview
spec:
replicas: 1
selector:
matchLabels:
app: photos-preview
app: preview
template:
metadata:
labels:
app: photos-preview
app: preview
spec:
containers:
- name: preview
@ -121,7 +121,7 @@ spec:
imagePullPolicy: Always
env:
- name: MINIO_ENDPOINT
value: api.ambrose.photos:9000
value: minio:9000
- name: MINIO_ACCESS_KEY
valueFrom:
secretKeyRef:
@ -138,38 +138,40 @@ spec:
value: "false"
- name: MINIO_CREDENTIALS_BUCKET
value: "credentials"
- name: EXPIRATION_READ
value: "5m"
- name: EXPIRATION_WRITE
value: "1m"
ports:
- containerPort: 8003
---
apiVersion: v1
kind: Service
metadata:
name: photos-preview
name: preview
spec:
selector:
app: photos-preview
app: preview
ports:
- protocol: TCP
port: 80
targetPort: 8003
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: photos-web
name: web
labels:
app: photos-web
app: web
spec:
replicas: 1
selector:
matchLabels:
app: photos-web
app: web
template:
metadata:
labels:
app: photos-web
app: web
spec:
containers:
- name: web
@ -177,7 +179,7 @@ spec:
imagePullPolicy: Always
env:
- name: MINIO_ENDPOINT
value: api.ambrose.photos:9000
value: minio:9000
- name: MINIO_ACCESS_KEY
valueFrom:
secretKeyRef:
@ -195,18 +197,21 @@ spec:
- name: MINIO_CREDENTIALS_BUCKET
value: "credentials"
- name: WEB_ENDPOINT
value: "http://web.ambrose.photos"
value: "http://localhost:8104"
- name: EXPIRATION_READ
value: "5m"
- name: EXPIRATION_WRITE
value: "1m"
ports:
- containerPort: 8004
---
apiVersion: v1
kind: Service
metadata:
name: photos-web
name: web
spec:
selector:
app: photos-web
app: web
ports:
- protocol: TCP
port: 80

2
go.mod
View File

@ -1,6 +1,6 @@
module git.makerforce.io/photos/photos
go 1.14
go 1.16
require (
github.com/davidbyttow/govips v0.0.0-20200412130214-cbefdd8c639a

6
web/assets.go Normal file
View File

@ -0,0 +1,6 @@
package web
import "embed"
//go:embed manage shared view
var FS embed.FS