备份
This commit is contained in:
45
.github/workflows/publish-image.yml
vendored
45
.github/workflows/publish-image.yml
vendored
@@ -1,45 +0,0 @@
|
|||||||
name: Publish Image
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
|
|
||||||
env:
|
|
||||||
REGISTRY: ghcr.io
|
|
||||||
IMAGE_NAME: ${{ github.repository }}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
packages: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Log in to the Container registry
|
|
||||||
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
|
|
||||||
with:
|
|
||||||
registry: ${{ env.REGISTRY }}
|
|
||||||
username: ${{ github.actor }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Extract Docker metadata
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v4
|
|
||||||
with:
|
|
||||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
||||||
tags: |
|
|
||||||
type=ref,event=branch
|
|
||||||
type=semver,pattern={{raw}}
|
|
||||||
|
|
||||||
- name: Build and push Docker image
|
|
||||||
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
62
.github/workflows/publish-web.yml
vendored
62
.github/workflows/publish-web.yml
vendored
@@ -1,62 +0,0 @@
|
|||||||
name: Build and Deploy Web
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: ["main"]
|
|
||||||
paths:
|
|
||||||
- web/**
|
|
||||||
- ./bootstrap.sh
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pages: write
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "pages"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
working-directory: ./web
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Install Node.js
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 16
|
|
||||||
cache: 'npm'
|
|
||||||
cache-dependency-path: 'web/package-lock.json'
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: build
|
|
||||||
env:
|
|
||||||
BASE_PATH: ''
|
|
||||||
run: |
|
|
||||||
npm run build
|
|
||||||
touch build/.nojekyll
|
|
||||||
cp ../bootstrap.sh build/bootstrap.sh
|
|
||||||
echo "shokku.dev" > build/CNAME
|
|
||||||
- name: Upload artifact
|
|
||||||
uses: actions/upload-pages-artifact@v1
|
|
||||||
with:
|
|
||||||
path: ./web/build
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: build
|
|
||||||
environment:
|
|
||||||
name: github-pages
|
|
||||||
url: ${{ steps.deployment.outputs.page_url }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/deploy-pages@v1
|
|
||||||
id: deployment
|
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -9,3 +9,5 @@ cmd/shokku/dist
|
|||||||
test.db
|
test.db
|
||||||
./shokku
|
./shokku
|
||||||
.idea
|
.idea
|
||||||
|
pnpm-lock.yaml
|
||||||
|
package-lock.json
|
||||||
|
|||||||
21
Dockerfile
21
Dockerfile
@@ -1,18 +1,22 @@
|
|||||||
FROM node:alpine AS npm_builder
|
FROM ccr.ccs.tencentyun.com/miaogai/node:alpine AS npmbuilder
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||||
|
|
||||||
|
RUN npm config set registry https://registry.npmmirror.com
|
||||||
|
|
||||||
RUN apk update && apk add --no-cache pnpm
|
RUN apk update && apk add --no-cache pnpm
|
||||||
|
|
||||||
COPY ui ./ui
|
COPY ui ./ui
|
||||||
|
|
||||||
RUN pnpm --prefix /app/ui install
|
RUN cd /app/ui && pnpm install && pnpm /app/ui run build
|
||||||
|
|
||||||
RUN pnpm --prefix /app/ui run build
|
FROM ccr.ccs.tencentyun.com/miaogai/golang:alpine AS gobuilder
|
||||||
|
|
||||||
FROM golang:alpine AS go_builder
|
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||||
|
|
||||||
RUN apk update && apk add --no-cache git
|
RUN apk update && apk add --no-cache git
|
||||||
|
|
||||||
COPY cmd ./cmd
|
COPY cmd ./cmd
|
||||||
@@ -21,7 +25,10 @@ COPY go.mod ./go.mod
|
|||||||
|
|
||||||
COPY internal ./internal
|
COPY internal ./internal
|
||||||
|
|
||||||
COPY --from=npm_builder /app/ui/dist ./cmd/shokku/dist
|
COPY --from=npmbuilder /app/ui/dist ./cmd/shokku/dist
|
||||||
|
|
||||||
|
# 保留 Go 代理设置
|
||||||
|
ENV GOPROXY=https://goproxy.cn,direct
|
||||||
|
|
||||||
RUN go get -d -v ./...
|
RUN go get -d -v ./...
|
||||||
|
|
||||||
@@ -31,6 +38,6 @@ RUN GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o /go/bin/shokku ./cmd/sh
|
|||||||
|
|
||||||
FROM gcr.io/distroless/static:nonroot
|
FROM gcr.io/distroless/static:nonroot
|
||||||
|
|
||||||
COPY --from=go_builder /go/bin/shokku /go/bin/shokku
|
COPY --from=gobuilder /go/bin/shokku /go/bin/shokku
|
||||||
|
|
||||||
ENTRYPOINT ["/go/bin/shokku"]
|
ENTRYPOINT ["/go/bin/shokku"]
|
||||||
@@ -10,7 +10,7 @@ DOKKU_STORAGE_DIR="/var/lib/dokku/data/storage/"
|
|||||||
SHOKKU_DATA_DIR="$DOKKU_STORAGE_DIR/shokku"
|
SHOKKU_DATA_DIR="$DOKKU_STORAGE_DIR/shokku"
|
||||||
SHOKKU_APP_DATA_MOUNT_PATH="$SHOKKU_DATA_DIR:/data"
|
SHOKKU_APP_DATA_MOUNT_PATH="$SHOKKU_DATA_DIR:/data"
|
||||||
SHOKKU_VERSION=${SHOKKU_VERSION:-"latest"}
|
SHOKKU_VERSION=${SHOKKU_VERSION:-"latest"}
|
||||||
SHOKKU_IMAGE="ghcr.io/texm/shokku:$SHOKKU_VERSION"
|
SHOKKU_IMAGE="ccr.ccs.tencentyun.com/miaogai/shokku:$SHOKKU_VERSION"
|
||||||
|
|
||||||
SHOKKU_DOKKU_USER="shokkuadmin"
|
SHOKKU_DOKKU_USER="shokkuadmin"
|
||||||
DISTROLESS_NONROOT_UID="65532"
|
DISTROLESS_NONROOT_UID="65532"
|
||||||
|
|||||||
58
build_and_push.sh
Executable file
58
build_and_push.sh
Executable file
@@ -0,0 +1,58 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Docker 镜像构建和推送脚本
|
||||||
|
# 使用方法: ./build_and_push.sh [镜像标签] [推送标志]
|
||||||
|
|
||||||
|
set -e # 遇到错误立即退出
|
||||||
|
|
||||||
|
# 配置变量
|
||||||
|
IMAGE_NAME="shokku"
|
||||||
|
REGISTRY="ccr.ccs.tencentyun.com" # 替换为您的仓库地址
|
||||||
|
NAMESPACE="miaogai" # 替换为您的命名空间
|
||||||
|
DOCKERFILE="Dockerfile"
|
||||||
|
BUILD_CONTEXT="."
|
||||||
|
|
||||||
|
# 参数处理
|
||||||
|
TAG=${1:-"latest"}
|
||||||
|
PUSH=${2:-"false"}
|
||||||
|
|
||||||
|
# 完整的镜像地址
|
||||||
|
FULL_IMAGE_NAME="${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:${TAG}"
|
||||||
|
|
||||||
|
echo "=== Docker 镜像构建和推送 ==="
|
||||||
|
echo "镜像名称: ${FULL_IMAGE_NAME}"
|
||||||
|
echo "Dockerfile: ${DOCKERFILE}"
|
||||||
|
echo "构建上下文: ${BUILD_CONTEXT}"
|
||||||
|
|
||||||
|
# 检查 Docker 是否安装
|
||||||
|
if ! command -v docker &> /dev/null; then
|
||||||
|
echo "错误: 未找到 Docker,请先安装 Docker"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 构建镜像
|
||||||
|
echo "开始构建镜像..."
|
||||||
|
docker build -t ${IMAGE_NAME}:${TAG} -f ${DOCKERFILE} ${BUILD_CONTEXT}
|
||||||
|
|
||||||
|
# 标记镜像
|
||||||
|
echo "标记镜像..."
|
||||||
|
docker tag ${IMAGE_NAME}:${TAG} ${FULL_IMAGE_NAME}
|
||||||
|
|
||||||
|
# 如果需要推送
|
||||||
|
if [ "$PUSH" = "true" ]; then
|
||||||
|
echo "登录到镜像仓库..."
|
||||||
|
# 如果使用 Docker Hub
|
||||||
|
# docker login
|
||||||
|
|
||||||
|
# 如果使用私有仓库
|
||||||
|
# docker login ${REGISTRY}
|
||||||
|
|
||||||
|
echo "推送镜像到仓库..."
|
||||||
|
docker push ${FULL_IMAGE_NAME}
|
||||||
|
|
||||||
|
echo "✅ 镜像推送完成: ${FULL_IMAGE_NAME}"
|
||||||
|
else
|
||||||
|
echo "ℹ️ 镜像构建完成,未推送 (使用 'true' 作为第二个参数来推送)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=== 完成 ==="
|
||||||
@@ -2,11 +2,12 @@ package api
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
"github.com/labstack/echo/v4"
|
"github.com/labstack/echo/v4"
|
||||||
"gitlab.com/texm/shokku/internal/env"
|
"gitlab.com/texm/shokku/internal/env"
|
||||||
"gitlab.com/texm/shokku/internal/server/commands"
|
"gitlab.com/texm/shokku/internal/server/commands"
|
||||||
"gitlab.com/texm/shokku/internal/server/dto"
|
"gitlab.com/texm/shokku/internal/server/dto"
|
||||||
"net/http"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetCommandExecutionStatus(e *env.Env, c echo.Context) error {
|
func GetCommandExecutionStatus(e *env.Env, c echo.Context) error {
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
package dto
|
package dto
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/texm/dokku-go"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/texm/dokku-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
type GetAppOverviewRequest struct {
|
type GetAppOverviewRequest struct {
|
||||||
@@ -266,7 +267,7 @@ type GetAppConfigResponse struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type SetAppConfigRequest struct {
|
type SetAppConfigRequest struct {
|
||||||
Name string `json:"name" validate:"appName"`
|
Name string `json:"name" validate:"appName"`
|
||||||
Config map[string]string `json:"config"`
|
Config map[string]string `json:"config"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1663
ui/package-lock.json
generated
1663
ui/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -10,7 +10,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@sveltejs/adapter-auto": "next",
|
"@sveltejs/adapter-auto": "next",
|
||||||
"@sveltejs/adapter-static": "^3.0.10",
|
"@sveltejs/adapter-static": "^3.0.10",
|
||||||
"@sveltejs/kit": "^2.46.4",
|
"@sveltejs/kit": "^2.47.0",
|
||||||
"@sveltejs/vite-plugin-svelte": "^6.2.1",
|
"@sveltejs/vite-plugin-svelte": "^6.2.1",
|
||||||
"@tailwindcss/postcss": "^4.1.14",
|
"@tailwindcss/postcss": "^4.1.14",
|
||||||
"autoprefixer": "^10.4.21",
|
"autoprefixer": "^10.4.21",
|
||||||
@@ -18,15 +18,16 @@
|
|||||||
"postcss": "^8.5.6",
|
"postcss": "^8.5.6",
|
||||||
"prettier": "^3.6.2",
|
"prettier": "^3.6.2",
|
||||||
"prettier-plugin-svelte": "^3.4.0",
|
"prettier-plugin-svelte": "^3.4.0",
|
||||||
"svelte": "^5.39.11",
|
"svelte": "^5.40.1",
|
||||||
"tailwindcss": "^4.1.14"
|
"tailwindcss": "^4.1.14",
|
||||||
|
"vite": "^7.1.10"
|
||||||
},
|
},
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@rollup/rollup-darwin-arm64": "^4.52.4",
|
"@rollup/rollup-darwin-arm64": "^4.52.4",
|
||||||
"@sveltestack/svelte-query": "^1.6.0",
|
"@sveltestack/svelte-query": "^1.6.0",
|
||||||
"@tabler/icons-svelte": "^3.35.0",
|
"@tabler/icons-svelte": "^3.35.0",
|
||||||
"daisyui": "^5.1.31",
|
"daisyui": "^5.3.3",
|
||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
"jwt-decode": "^4.0.0",
|
"jwt-decode": "^4.0.0",
|
||||||
"svelte-file-dropzone": "^2.0.9",
|
"svelte-file-dropzone": "^2.0.9",
|
||||||
|
|||||||
2107
ui/pnpm-lock.yaml
generated
2107
ui/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user