修改安装脚本

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

View File

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