修改安装脚本

This commit is contained in:
flowshadow
2025-10-17 01:13:24 +08:00
parent 8dfa6029ac
commit e71b7dee69
2 changed files with 36 additions and 53 deletions

View File

@@ -36,35 +36,36 @@ create-shokku-app() {
echo "=> pulling image (version: $SHOKKU_VERSION)"
HOST_SSH_PORT=$(grep "Port " /etc/ssh/sshd_config | awk '{ print $2 }')
docker pull "$SHOKKU_IMAGE" &>/dev/null
docker pull "$SHOKKU_IMAGE"
SHOKKU_IMAGE_DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' "$SHOKKU_IMAGE")
echo "=> creating & configuring dokku app"
dokku apps:create shokku &>/dev/null
dokku apps:create shokku
dokku docker-options:add shokku deploy \
"--add-host=host.docker.internal:host-gateway" &>/dev/null
"--add-host=host.docker.internal:host-gateway"
dokku config:set shokku \
DOKKU_SSH_HOST='host.docker.internal' \
DOKKU_SSH_PORT="$HOST_SSH_PORT" &>/dev/null
DOKKU_SSH_PORT="$HOST_SSH_PORT"
echo "==> creating storage"
dokku storage:ensure-directory shokku --chown false &>/dev/null
dokku storage:mount shokku "$SHOKKU_APP_DATA_MOUNT_PATH" &>/dev/null
chown -R "$DISTROLESS_NONROOT_UID":"$DISTROLESS_NONROOT_UID" "$SHOKKU_DATA_DIR" &>/dev/null
dokku storage:ensure-directory shokku --chown false
dokku storage:mount shokku "$SHOKKU_APP_DATA_MOUNT_PATH"
chown -R "$DISTROLESS_NONROOT_UID":"$DISTROLESS_NONROOT_UID" "$SHOKKU_DATA_DIR"
echo "==> bootstrapping"
dokku config:set shokku DOKKU_SKIP_DEPLOY=true &>/dev/null
dokku git:from-image shokku "$SHOKKU_IMAGE_DIGEST" &>/dev/null
dokku config:set shokku DOKKU_SKIP_DEPLOY=true
dokku git:from-image shokku "$SHOKKU_IMAGE_DIGEST"
shokku_ssh_key=$(dokku run shokku bootstrap) &>/dev/null
echo "$shokku_ssh_key" | dokku ssh-keys:add "$SHOKKU_DOKKU_USER" &>/dev/null
shokku_ssh_key=$(dokku run shokku bootstrap)
echo "$shokku_ssh_key" | dokku ssh-keys:add "$SHOKKU_DOKKU_USER"
echo "==> deploying"
dokku config:unset shokku DOKKU_SKIP_DEPLOY &>/dev/null
dokku config:unset shokku DOKKU_SKIP_DEPLOY
if [ -z "$SHOKKU_CERT" ]; then
echo "==> enabling letsencrypt"
dokku letsencrypt:enable shokku &>/dev/null
dokku letsencrypt:set shokku email ssl@ssl.com
dokku letsencrypt:enable shokku
else
echo "==> adding certificate from SHOKKU_CERT"
dokku certs:add shokku < "$SHOKKU_CERT"
@@ -92,7 +93,7 @@ main() {
for plugin in redis postgres mongo mysql; do
if ! dokku plugin:installed $plugin; then
echo "=> Installing plugin $plugin"
dokku plugin:install https://git.shusou.com/dokku/dokku-$plugin.git $plugin &>/dev/null
dokku plugin:install https://git.shusou.com/dokku/dokku-$plugin.git $plugin
fi
done

View File

@@ -1,14 +1,16 @@
#!/bin/bash
# Docker 镜像构建和推送脚本
# 使用方法: ./build_and_push.sh [推送标志] [镜像标签]
# Docker amd64 镜像构建脚本
# 使用方法:
# ./build_amd64.sh # 仅构建
# ./build_amd64.sh push # 构建并推送
set -e # 遇到错误立即退出
set -e
# 配置变量
IMAGE_NAME="shokku"
REGISTRY="ccr.ccs.tencentyun.com" # 替换为您的仓库地址
NAMESPACE="miaogai" # 替换为您的命名空间
REGISTRY="ccr.ccs.tencentyun.com"
NAMESPACE="miaogai"
DOCKERFILE="Dockerfile"
BUILD_CONTEXT="."
@@ -19,58 +21,38 @@ TAG=${2:-"latest"}
# 完整的镜像地址
FULL_IMAGE_NAME="${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:${TAG}"
echo "=== Docker 镜像构建和推送 ==="
echo "=== Docker amd64 镜像构建 ==="
echo "镜像名称: ${FULL_IMAGE_NAME}"
echo "Dockerfile: ${DOCKERFILE}"
echo "构建上下文: ${BUILD_CONTEXT}"
# 检查 Docker 是否安装
# 检查 Docker
if ! command -v docker &> /dev/null; then
echo "错误: 未找到 Docker请先安装 Docker"
echo "错误: 未找到 Docker"
exit 1
fi
# 构建镜像
echo "开始构建镜像..."
docker build -t ${IMAGE_NAME}:${TAG} -f ${DOCKERFILE} ${BUILD_CONTEXT}
echo "开始构建 amd64 镜像..."
docker build --platform linux/amd64 -t ${IMAGE_NAME}:${TAG} -f ${DOCKERFILE} ${BUILD_CONTEXT}
# 标记镜像
echo "标记镜像..."
docker tag ${IMAGE_NAME}:${TAG} ${FULL_IMAGE_NAME}
# 如果需要推送
if [ "$PUSH" = "true" ]; then
# 推送逻辑
if [ "$PUSH" = "push" ]; then
echo "登录到镜像仓库..."
# 检查是否已经登录到目标仓库
if ! docker info 2>/dev/null | grep -q "${REGISTRY}"; then
echo "需要登录到镜像仓库: ${REGISTRY}"
# 从环境变量获取凭据,如果存在的话
if [ -n "$DOCKER_REGISTRY_USER" ] && [ -n "$DOCKER_REGISTRY_PASSWORD" ]; then
echo "使用环境变量中的凭据进行登录..."
echo "$DOCKER_REGISTRY_PASSWORD" | docker login ${REGISTRY} --username "$DOCKER_REGISTRY_USER" --password-stdin
else
# 交互式登录
echo "请输入镜像仓库凭据:"
docker login ${REGISTRY}
fi
# 检查登录是否成功
if [ $? -ne 0 ]; then
echo "错误: 镜像仓库登录失败"
exit 1
fi
else
echo "已登录到镜像仓库 ${REGISTRY}"
fi
echo "推送镜像到仓库..."
echo "推送镜像..."
docker push ${FULL_IMAGE_NAME}
echo "✅ 镜像推送完成: ${FULL_IMAGE_NAME}"
echo "✅ amd64 镜像推送完成: ${FULL_IMAGE_NAME}"
else
echo " 镜像构建完成,未推送 (使用 'true' 作为第1个参数来推送)"
echo "✅ amd64 镜像构建完成"
echo " 使用 '$0 push' 来推送镜像"
fi
echo "=== 完成 ==="