Fullstack Next.js与Cloudflare安装脚本

Fullstack Next.js with Cloudflare 安装脚本

根据您提供的 GitHub 仓库,我创建了一个交互式安装脚本,可以帮助您设置 Fullstack Next.js 与 Cloudflare 的项目。

安装脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
#!/bin/bash

# Fullstack Next.js with Cloudflare 安装脚本
# 基于官方安装说明: https://github.com/ifindev/fullstack-next-cloudflare

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 无颜色

# 输出颜色化信息
info() {
echo -e "${BLUE}[INFO]${NC} $1"
}

success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}

warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}

error() {
echo -e "${RED}[ERROR]${NC} $1"
}

# 检查命令是否存在
check_command() {
if ! command -v $1 &> /dev/null; then
error "$1 未安装,请先安装 $1"
exit 1
fi
}

# 显示欢迎信息
echo -e "${BLUE}===============================================${NC}"
echo -e "${BLUE} Fullstack Next.js with Cloudflare 安装脚本 ${NC}"
echo -e "${BLUE}===============================================${NC}"
echo ""

# 检查必要的工具
info "检查必要的工具..."
check_command node
check_command npm
check_command git

# 获取项目名称
read -p "请输入项目名称 (默认: my-next-app): " project_name
project_name=${project_name:-my-next-app}

# 克隆仓库
info "克隆仓库..."
if [ -d "$project_name" ]; then
warning "目录 $project_name 已存在,将尝试使用现有目录"
else
git clone https://github.com/ifindev/fullstack-next-cloudflare.git $project_name
fi

cd $project_name

# 检查是否克隆成功
if [ $? -ne 0 ]; then
error "克隆仓库失败"
exit 1
fi

# 安装依赖
info "安装依赖..."
npm install

if [ $? -ne 0 ]; then
error "安装依赖失败"
exit 1
fi

# 设置环境变量
info "设置环境变量..."

# 创建环境变量文件
if [ ! -f .env.local ]; then
cp .env.example .env.local
info "已创建 .env.local 文件,请根据需要进行编辑"
else
info ".env.local 文件已存在"
fi

# 询问用户是否要设置自定义环境变量
read -p "是否要现在设置环境变量? (y/N): " setup_env
if [[ $setup_env =~ ^[Yy]$ ]]; then
# 数据库设置
read -p "数据库URL (默认: postgresql://postgres:postgres@localhost:5432/postgres): " database_url
database_url=${database_url:-postgresql://postgres:postgres@localhost:5432/postgres}

# API设置
read -p "GitHub OAuth Client ID: " github_client_id
read -p "GitHub OAuth Client Secret: " github_client_secret
read -p "Google OAuth Client ID: " google_client_id
read -p "Google OAuth Client Secret: " google_client_secret

# 其他设置
read -p "JWT Secret (默认: $(openssl rand -hex 32)): " jwt_secret
jwt_secret=${jwt_secret:-$(openssl rand -hex 32)}

read -p "加密密钥 (默认: $(openssl rand -hex 32)): " encryption_key
encryption_key=${encryption_key:-$(openssl rand -hex 32)}

# 更新环境变量文件
sed -i.bak "s|DATABASE_URL=.*|DATABASE_URL=\"$database_url\"|" .env.local
sed -i.bak "s|GITHUB_CLIENT_ID=.*|GITHUB_CLIENT_ID=\"$github_client_id\"|" .env.local
sed -i.bak "s|GITHUB_CLIENT_SECRET=.*|GITHUB_CLIENT_SECRET=\"$github_client_secret\"|" .env.local
sed -i.bak "s|GOOGLE_CLIENT_ID=.*|GOOGLE_CLIENT_ID=\"$google_client_id\"|" .env.local
sed -i.bak "s|GOOGLE_CLIENT_SECRET=.*|GOOGLE_CLIENT_SECRET=\"$google_client_secret\"|" .env.local
sed -i.bak "s|JWT_SECRET=.*|JWT_SECRET=\"$jwt_secret\"|" .env.local
sed -i.bak "s|ENCRYPTION_KEY=.*|ENCRYPTION_KEY=\"$encryption_key\"|" .env.local

# 清理备份文件
rm -f .env.local.bak

success "环境变量已更新"
else
info "跳过环境变量设置,您可以在 .env.local 文件中手动设置"
fi

# 设置数据库
info "设置数据库..."
read -p "是否要设置数据库? (y/N): " setup_db
if [[ $setup_db =~ ^[Yy]$ ]]; then
# 检查是否安装了 PostgreSQL 客户端
if ! command -v psql &> /dev/null; then
warning "未找到 psql 命令,请手动设置数据库"
else
read -p "请输入数据库名称 (默认: postgres): " db_name
db_name=${db_name:-postgres}

read -p "请输入数据库用户 (默认: postgres): " db_user
db_user=${db_user:-postgres}

read -p "请输入数据库密码 (默认: postgres): " db_password
db_password=${db_password:-postgres}

# 尝试创建数据库(如果不存在)
if PGPASSWORD=$db_password psql -U $db_user -lqt | cut -d \| -f 1 | grep -qw $db_name; then
info "数据库 $db_name 已存在"
else
info "创建数据库 $db_name..."
PGPASSWORD=$db_password createdb -U $db_user $db_name
fi

# 运行数据库迁移
info "运行数据库迁移..."
npm run db:generate
npm run db:push

success "数据库设置完成"
fi
else
info "跳过数据库设置"
fi

# Cloudflare 设置
info "Cloudflare 设置..."
read -p "是否要设置 Cloudflare? (y/N): " setup_cf
if [[ $setup_cf =~ ^[Yy]$ ]]; then
# 检查是否安装了 Wrangler
if ! command -v wrangler &> /dev/null; then
info "安装 Wrangler..."
npm install -g wrangler
fi

# 登录 Cloudflare
info "请登录您的 Cloudflare 账户..."
wrangler login

# 创建 KV 命名空间
info "创建 KV 命名空间..."
read -p "请输入 KV 命名空间名称 (默认: next_app_kv): " kv_namespace
kv_namespace=${kv_namespace:-next_app_kv}

kv_id=$(wrangler kv:namespace create "$kv_namespace" | grep -oP '(?<=id = ")[^"]+')

if [ -n "$kv_id" ]; then
# 更新 wrangler.toml
if grep -q "kv_namespaces" wrangler.toml; then
sed -i.bak "s/.*kv_namespaces.*/kv_namespaces = [{ binding = \"KV\", id = \"$kv_id\" }]/" wrangler.toml
else
echo -e "\n[kv_namespaces]" >> wrangler.toml
echo "binding = \"KV\"" >> wrangler.toml
echo "id = \"$kv_id\"" >> wrangler.toml
fi

success "KV 命名空间已创建并配置"
else
error "创建 KV 命名空间失败"
fi

# 创建 D1 数据库
info "创建 D1 数据库..."
read -p "请输入 D1 数据库名称 (默认: next_app_db): " d1_db_name
d1_db_name=${d1_db_name:-next_app_db}

d1_id=$(wrangler d1 create "$d1_db_name" | grep -oP '(?<=Database ID: )[\w-]+')

if [ -n "$d1_id" ]; then
# 更新 wrangler.toml
if grep -q "d1_databases" wrangler.toml; then
sed -i.bak "s/.*database_id.*/database_id = \"$d1_id\"/" wrangler.toml
else
echo -e "\n[[d1_databases]]" >> wrangler.toml
echo "binding = \"DB\"" >> wrangler.toml
echo "database_name = \"$d1_db_name\"" >> wrangler.toml
echo "database_id = \"$d1_id\"" >> wrangler.toml
fi

success "D1 数据库已创建并配置"
else
error "创建 D1 数据库失败"
fi
else
info "跳过 Cloudflare 设置"
fi

# 构建项目
info "构建项目..."
npm run build

if [ $? -ne 0 ]; then
error "构建项目失败"
exit 1
fi

success "项目构建成功"

# 完成信息
echo -e "${GREEN}===============================================${NC}"
echo -e "${GREEN} 安装完成! ${NC}"
echo -e "${GREEN}===============================================${NC}"
echo ""
echo "下一步操作:"
echo "1. cd $project_name"
echo "2. 根据需要编辑 .env.local 文件"
echo "3. 运行开发服务器: npm run dev"
echo "4. 部署到 Cloudflare: npm run deploy"
echo ""
echo "文档: https://github.com/ifindev/fullstack-next-cloudflare"
echo ""

使用说明

  1. 将上述脚本保存为 install.sh 文件
  2. 给脚本添加执行权限:chmod +x install.sh
  3. 运行脚本:./install.sh

脚本功能

这个安装脚本提供以下功能:

  1. 环境检查:确保已安装 Node.js、npm 和 Git
  2. 项目克隆:从 GitHub 克隆仓库
  3. 依赖安装:安装项目所需的所有依赖
  4. 环境变量配置:交互式设置各种 API 密钥和配置
  5. 数据库设置:可选设置 PostgreSQL 数据库
  6. Cloudflare 配置:设置 KV 命名空间和 D1 数据库
  7. 项目构建:构建项目以确保一切正常

自定义参数

脚本会提示您输入以下自定义参数:

  • 项目名称
  • 数据库连接字符串
  • GitHub OAuth 客户端 ID 和密钥
  • Google OAuth 客户端 ID 和密钥
  • JWT 密钥和加密密钥
  • Cloudflare KV 和 D1 数据库设置

您可以根据需要选择是否设置这些参数。

注意事项

  1. 确保您已安装 PostgreSQL(如果需要本地数据库)
  2. 确保您有 Cloudflare 账户并已登录 Wrangler
  3. 某些步骤可能需要手动操作,如 OAuth 应用的设置

这个脚本简化了官方安装说明中的步骤,使设置过程更加自动化和用户友好。

时间: 2025-09-20T11:04:43


👤 用户

https://github.com/ifindev/fullstack-next-cloudflare

帮我更具官方安装说明写一个安装脚本。需要的api设置为自定义参数。

时间: 2025-09-20T11:04:43


🤖 DeepSeek (deepseek-chat)

Fullstack Next.js with Cloudflare 安装脚本

根据您提供的 GitHub 仓库,我创建了一个交互式安装脚本,可以帮助您设置 Fullstack Next.js 与 Cloudflare 的项目。

安装脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
#!/bin/bash

# Fullstack Next.js with Cloudflare 安装脚本
# 基于官方安装说明: https://github.com/ifindev/fullstack-next-cloudflare

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 无颜色

# 输出颜色化信息
info() {
echo -e "${BLUE}[INFO]${NC} $1"
}

success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}

warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}

error() {
echo -e "${RED}[ERROR]${NC} $1"
}

# 检查命令是否存在
check_command() {
if ! command -v $1 &> /dev/null; then
error "$1 未安装,请先安装 $1"
exit 1
fi
}

# 显示欢迎信息
echo -e "${BLUE}===============================================${NC}"
echo -e "${BLUE} Fullstack Next.js with Cloudflare 安装脚本 ${NC}"
echo -e "${BLUE}===============================================${NC}"
echo ""

# 检查必要的工具
info "检查必要的工具..."
check_command node
check_command npm
check_command git

# 获取项目名称
read -p "请输入项目名称 (默认: my-next-app): " project_name
project_name=${project_name:-my-next-app}

# 克隆仓库
info "克隆仓库..."
if [ -d "$project_name" ]; then
warning "目录 $project_name 已存在,将尝试使用现有目录"
else
git clone https://github.com/ifindev/fullstack-next-cloudflare.git $project_name
fi

cd $project_name

# 检查是否克隆成功
if [ $? -ne 0 ]; then
error "克隆仓库失败"
exit 1
fi

# 安装依赖
info "安装依赖..."
npm install

if [ $? -ne 0 ]; then
error "安装依赖失败"
exit 1
fi

# 设置环境变量
info "设置环境变量..."

# 创建环境变量文件
if [ ! -f .env.local ]; then
cp .env.example .env.local
info "已创建 .env.local 文件,请根据需要进行编辑"
else
info ".env.local 文件已存在"
fi

# 询问用户是否要设置自定义环境变量
read -p "是否要现在设置环境变量? (y/N): " setup_env
if [[ $setup_env =~ ^[Yy]$ ]]; then
# 数据库设置
read -p "数据库URL (默认: postgresql://postgres:postgres@localhost:5432/postgres): " database_url
database_url=${database_url:-postgresql://postgres:postgres@localhost:5432/postgres}

# API设置
read -p "GitHub OAuth Client ID: " github_client_id
read -p "GitHub OAuth Client Secret: " github_client_secret
read -p "Google OAuth Client ID: " google_client_id
read -p "Google OAuth Client Secret: " google_client_secret

# 其他设置
read -p "JWT Secret (默认: $(openssl rand -hex 32)): " jwt_secret
jwt_secret=${jwt_secret:-$(openssl rand -hex 32)}

read -p "加密密钥 (默认: $(openssl rand -hex 32)): " encryption_key
encryption_key=${encryption_key:-$(openssl rand -hex 32)}

# 更新环境变量文件
sed -i.bak "s|DATABASE_URL=.*|DATABASE_URL=\"$database_url\"|" .env.local
sed -i.bak "s|GITHUB_CLIENT_ID=.*|GITHUB_CLIENT_ID=\"$github_client_id\"|" .env.local
sed -i.bak "s|GITHUB_CLIENT_SECRET=.*|GITHUB_CLIENT_SECRET=\"$github_client_secret\"|" .env.local
sed -i.bak "s|GOOGLE_CLIENT_ID=.*|GOOGLE_CLIENT_ID=\"$google_client_id\"|" .env.local
sed -i.bak "s|GOOGLE_CLIENT_SECRET=.*|GOOGLE_CLIENT_SECRET=\"$google_client_secret\"|" .env.local
sed -i.bak "s|JWT_SECRET=.*|JWT_SECRET=\"$jwt_secret\"|" .env.local
sed -i.bak "s|ENCRYPTION_KEY=.*|ENCRYPTION_KEY=\"$encryption_key\"|" .env.local

# 清理备份文件
rm -f .env.local.bak

success "环境变量已更新"
else
info "跳过环境变量设置,您可以在 .env.local 文件中手动设置"
fi

# 设置数据库
info "设置数据库..."
read -p "是否要设置数据库? (y/N): " setup_db
if [[ $setup_db =~ ^[Yy]$ ]]; then
# 检查是否安装了 PostgreSQL 客户端
if ! command -v psql &> /dev/null; then
warning "未找到 psql 命令,请手动设置数据库"
else
read -p "请输入数据库名称 (默认: postgres): " db_name
db_name=${db_name:-postgres}

read -p "请输入数据库用户 (默认: postgres): " db_user
db_user=${db_user:-postgres}

read -p "请输入数据库密码 (默认: postgres): " db_password
db_password=${db_password:-postgres}

# 尝试创建数据库(如果不存在)
if PGPASSWORD=$db_password psql -U $db_user -lqt | cut -d \| -f 1 | grep -qw $db_name; then
info "数据库 $db_name 已存在"
else
info "创建数据库 $db_name..."
PGPASSWORD=$db_password createdb -U $db_user $db_name
fi

# 运行数据库迁移
info "运行数据库迁移..."
npm run db:generate
npm run db:push

success "数据库设置完成"
fi
else
info "跳过数据库设置"
fi

# Cloudflare 设置
info "Cloudflare 设置..."
read -p "是否要设置 Cloudflare? (y/N): " setup_cf
if [[ $setup_cf =~ ^[Yy]$ ]]; then
# 检查是否安装了 Wrangler
if ! command -v wrangler &> /dev/null; then
info "安装 Wrangler..."
npm install -g wrangler
fi

# 登录 Cloudflare
info "请登录您的 Cloudflare 账户..."
wrangler login

# 创建 KV 命名空间
info "创建 KV 命名空间..."
read -p "请输入 KV 命名空间名称 (默认: next_app_kv): " kv_namespace
kv_namespace=${kv_namespace:-next_app_kv}

kv_id=$(wrangler kv:namespace create "$kv_namespace" | grep -oP '(?<=id = ")[^"]+')

if [ -n "$kv_id" ]; then
# 更新 wrangler.toml
if grep -q "kv_namespaces" wrangler.toml; then
sed -i.bak "s/.*kv_namespaces.*/kv_namespaces = [{ binding = \"KV\", id = \"$kv_id\" }]/" wrangler.toml
else
echo -e "\n[kv_namespaces]" >> wrangler.toml
echo "binding = \"KV\"" >> wrangler.toml
echo "id = \"$kv_id\"" >> wrangler.toml
fi

success "KV 命名空间已创建并配置"
else
error "创建 KV 命名空间失败"
fi

# 创建 D1 数据库
info "创建 D1 数据库..."
read -p "请输入 D1 数据库名称 (默认: next_app_db): " d1_db_name
d1_db_name=${d1_db_name:-next_app_db}

d1_id=$(wrangler d1 create "$d1_db_name" | grep -oP '(?<=Database ID: )[\w-]+')

if [ -n "$d1_id" ]; then
# 更新 wrangler.toml
if grep -q "d1_databases" wrangler.toml; then
sed -i.bak "s/.*database_id.*/database_id = \"$d1_id\"/" wrangler.toml
else
echo -e "\n[[d1_databases]]" >> wrangler.toml
echo "binding = \"DB\"" >> wrangler.toml
echo "database_name = \"$d1_db_name\"" >> wrangler.toml
echo "database_id = \"$d1_id\"" >> wrangler.toml
fi

success "D1 数据库已创建并配置"
else
error "创建 D1 数据库失败"
fi
else
info "跳过 Cloudflare 设置"
fi

# 构建项目
info "构建项目..."
npm run build

if [ $? -ne 0 ]; then
error "构建项目失败"
exit 1
fi

success "项目构建成功"

# 完成信息
echo -e "${GREEN}===============================================${NC}"
echo -e "${GREEN} 安装完成! ${NC}"
echo -e "${GREEN}===============================================${NC}"
echo ""
echo "下一步操作:"
echo "1. cd $project_name"
echo "2. 根据需要编辑 .env.local 文件"
echo "3. 运行开发服务器: npm run dev"
echo "4. 部署到 Cloudflare: npm run deploy"
echo ""
echo "文档: https://github.com/ifindev/fullstack-next-cloudflare"
echo ""

使用说明

  1. 将上述脚本保存为 install.sh 文件
  2. 给脚本添加执行权限:chmod +x install.sh
  3. 运行脚本:./install.sh

脚本功能

这个安装脚本提供以下功能:

  1. 环境检查:确保已安装 Node.js、npm 和 Git
  2. 项目克隆:从 GitHub 克隆仓库
  3. 依赖安装:安装项目所需的所有依赖
  4. 环境变量配置:交互式设置各种 API 密钥和配置
  5. 数据库设置:可选设置 PostgreSQL 数据库
  6. Cloudflare 配置:设置 KV 命名空间和 D1 数据库
  7. 项目构建:构建项目以确保一切正常

自定义参数

脚本会提示您输入以下自定义参数:

  • 项目名称
  • 数据库连接字符串
  • GitHub OAuth 客户端 ID 和密钥
  • Google OAuth 客户端 ID 和密钥
  • JWT 密钥和加密密钥
  • Cloudflare KV 和 D1 数据库设置

您可以根据需要选择是否设置这些参数。

注意事项

  1. 确保您已安装 PostgreSQL(如果需要本地数据库)
  2. 确保您有 Cloudflare 账户并已登录 Wrangler
  3. 某些步骤可能需要手动操作,如 OAuth 应用的设置

这个脚本简化了官方安装说明中的步骤,使设置过程更加自动化和用户友好。

时间: 2025-09-20T11:04:43



对话统计

  • 消息总数: 2 条
  • 处理状态: 成功转换