mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-02-24 15:10:48 +08:00
2
.gitignore
vendored
2
.gitignore
vendored
@@ -21,6 +21,8 @@ dist
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-lock.yaml
|
||||
pnpm-workspace.yaml
|
||||
|
||||
# env
|
||||
*.env
|
||||
|
||||
@@ -70,7 +70,9 @@ SERVER_PORT=8082
|
||||
#### 配置 IDEA 参数
|
||||
|
||||
- 设置 JDK 版本为 java 17
|
||||
|
||||
- 设置 VM Option,最好运行在其他端口,非 `8080`,这里设置 `8081`
|
||||
若上面在环境变量中设置了端口,那这里就不需要再额外设置
|
||||
|
||||
```shell
|
||||
-Dserver.port=8081
|
||||
@@ -101,14 +103,27 @@ SERVER_PORT=8082
|
||||
```
|
||||
|
||||
3. 执行 [`db/init/init_script.sql`](backend/src/main/resources/db/init/init_script.sql) 脚本,导入基本的数据
|
||||
|
||||
管理员:**admin/123456**
|
||||
普通用户1:**user1/123456**
|
||||
普通用户2:**user2/123456**
|
||||
|
||||

|
||||
|
||||
4. 处理完环境问题直接跑起来就能通了
|
||||
#### 配置 Redis
|
||||
|
||||

|
||||
填写环境变量 `.env` 中的 Redis 相关配置并启动 Redis
|
||||
|
||||
```ini
|
||||
REDIS_HOST=<Redis 地址>
|
||||
REDIS_PORT=<Redis 端口>
|
||||
```
|
||||
|
||||
处理完环境问题直接跑起来就能通了
|
||||
|
||||

|
||||
|
||||
### Docker 环境
|
||||
|
||||
#### 配置环境变量
|
||||
|
||||
```shell
|
||||
@@ -177,6 +192,8 @@ cd frontend_nuxt/
|
||||
cp .env.dev.example .env
|
||||
```
|
||||
|
||||
若依赖本机部署的后端,需要修改 `.env` 中的 `NUXT_PUBLIC_API_BASE_URL` 值与后端服务端口一致
|
||||
|
||||
### 安装依赖和运行
|
||||
|
||||
前端安装依赖并启动服务。
|
||||
@@ -193,7 +210,7 @@ npm run dev
|
||||
|
||||
## 其他配置
|
||||
|
||||
配置第三方登录,这里以 GitHub 为例:
|
||||
### 配置第三方登录,这里以 GitHub 为例:
|
||||
|
||||
- 修改 `application.properties` 配置
|
||||
|
||||
@@ -208,3 +225,24 @@ npm run dev
|
||||

|
||||
|
||||

|
||||
|
||||
### 配置 Resend 邮箱服务
|
||||
|
||||
https://resend.com/emails 创建账号并登录
|
||||
|
||||
- `Domains` -> `Add Domain`
|
||||

|
||||
|
||||
- 填写域名
|
||||

|
||||
|
||||
- 等待一段时间后解析成功,创建 key
|
||||
`API Keys` -> `Create API Key`,输入名称,设置 `Permission` 为 `Sending access`
|
||||
**Key 只能查看一次,务必保存下来**
|
||||

|
||||

|
||||

|
||||
- 修改 `.env` 配置中的 `RESEND_API_KEY` 和 `RESEND_FROM_EMAIL`
|
||||
`RESEND_FROM_EMAIL`: **noreply@域名**
|
||||
`RESEND_API_KEY`:**刚刚复制的 Key**
|
||||

|
||||
|
||||
BIN
assets/contributing/image-20250906150459400.png
Normal file
BIN
assets/contributing/image-20250906150459400.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 118 KiB |
BIN
assets/contributing/image-20250906150541817.png
Normal file
BIN
assets/contributing/image-20250906150541817.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 183 KiB |
BIN
assets/contributing/image-20250906150811572.png
Normal file
BIN
assets/contributing/image-20250906150811572.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 113 KiB |
BIN
assets/contributing/image-20250906150924975.png
Normal file
BIN
assets/contributing/image-20250906150924975.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
BIN
assets/contributing/image-20250906150944130.png
Normal file
BIN
assets/contributing/image-20250906150944130.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 45 KiB |
BIN
assets/contributing/image-20250906151218330.png
Normal file
BIN
assets/contributing/image-20250906151218330.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
@@ -13,8 +13,13 @@ JWT_RESET_SECRET=<jwt reset secret>
|
||||
JWT_INVITE_SECRET=<jwt invite secret>
|
||||
JWT_EXPIRATION=2592000000
|
||||
|
||||
# === Redis ===
|
||||
REDIS_HOST=<Redis 地址>
|
||||
REDIS_PORT=<Redis 端口>
|
||||
|
||||
# === Resend ===
|
||||
RESEND_API_KEY=<你的resend-api-key>
|
||||
RESEND_FROM_EMAIL=<你的 resend 发送邮箱>
|
||||
|
||||
# === COS ===
|
||||
# COS_BASE_URL=https://<你的cos>.cos.ap-guangzhou.myqcloud.com
|
||||
|
||||
@@ -18,6 +18,9 @@ public class ResendEmailSender extends EmailSender {
|
||||
@Value("${resend.api.key}")
|
||||
private String apiKey;
|
||||
|
||||
@Value("${resend.from.email}")
|
||||
private String fromEmail;
|
||||
|
||||
private final RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
@Override
|
||||
@@ -33,7 +36,7 @@ public class ResendEmailSender extends EmailSender {
|
||||
body.put("to", to);
|
||||
body.put("subject", subject);
|
||||
body.put("text", text);
|
||||
body.put("from", "openisle <noreply@chenjiating.com>"); // todo(tim): use config
|
||||
body.put("from", "openisle <" + fromEmail + ">");
|
||||
|
||||
HttpEntity<Map<String, String>> entity = new HttpEntity<>(body, headers);
|
||||
restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
|
||||
|
||||
@@ -56,6 +56,7 @@ app.captcha.comment-enabled=${CAPTCHA_COMMENT_ENABLED:false}
|
||||
# ========= Optional =========
|
||||
# for resend email send service, you can improve your service by yourself
|
||||
resend.api.key=${RESEND_API_KEY:}
|
||||
resend.from.email=${RESEND.FROM.EMAIL}
|
||||
# your email services: ...
|
||||
|
||||
# for tencent cloud image upload service, you can improve your service by yourself
|
||||
|
||||
@@ -35,9 +35,9 @@ DELETE FROM `users`;
|
||||
-- 插入用户,两个普通用户,一个管理员
|
||||
-- username:admin/user1/user2 password:123321
|
||||
INSERT INTO `users` (`id`, `approved`, `avatar`, `created_at`, `display_medal`, `email`, `experience`, `introduction`, `password`, `password_reset_code`, `point`, `register_reason`, `role`, `username`, `verification_code`, `verified`) VALUES
|
||||
(1, b'1', '', '2025-09-01 16:08:17.426430', 'PIONEER', 'adminmail@openisle.com', 70, NULL, '$2a$10$m.lLbT3wFtnzFMi7JqN17ecv/dzH704WzU1f/xvQ0nVz4XxTXPT0K', NULL, 110, '测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试', 'ADMIN', 'admin', NULL, b'1'),
|
||||
(2, b'1', '', '2025-09-03 16:08:17.426430', 'PIONEER', 'usermail2@openisle.com', 70, NULL, '$2a$10$m.lLbT3wFtnzFMi7JqN17ecv/dzH704WzU1f/xvQ0nVz4XxTXPT0K', NULL, 110, '测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试', 'USER', 'user1', NULL, b'1'),
|
||||
(3, b'1', '', '2025-09-02 17:21:21.617666', 'PIONEER', 'usermail1@openisle.com', 40, NULL, '$2a$10$m.lLbT3wFtnzFMi7JqN17ecv/dzH704WzU1f/xvQ0nVz4XxTXPT0K', NULL, 40, '测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试', 'USER', 'user2', NULL, b'1');
|
||||
(1, b'1', '', '2025-09-01 16:08:17.426430', 'PIONEER', 'adminmail@openisle.com', 70, NULL, '$2a$10$dux.NXwW09cCsdZ05BgcnOtxVqqjcmnbj3.8xcxGl/iiIlv06y7Oe', NULL, 110, '测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试', 'ADMIN', 'admin', NULL, b'1'),
|
||||
(2, b'1', '', '2025-09-03 16:08:17.426430', 'PIONEER', 'usermail2@openisle.com', 70, NULL, '$2a$10$dux.NXwW09cCsdZ05BgcnOtxVqqjcmnbj3.8xcxGl/iiIlv06y7Oe', NULL, 110, '测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试', 'USER', 'user1', NULL, b'1'),
|
||||
(3, b'1', '', '2025-09-02 17:21:21.617666', 'PIONEER', 'usermail1@openisle.com', 40, NULL, '$2a$10$dux.NXwW09cCsdZ05BgcnOtxVqqjcmnbj3.8xcxGl/iiIlv06y7Oe', NULL, 40, '测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试', 'USER', 'user2', NULL, b'1');
|
||||
|
||||
-- 创建 tags 表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS `tags` (
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
; 本地部署后端
|
||||
NUXT_PUBLIC_API_BASE_URL=https://127.0.0.1:8081
|
||||
NUXT_PUBLIC_API_BASE_URL=http://127.0.0.1:8080
|
||||
NUXT_PUBLIC_WEBSOCKET_URL=https://127.0.0.1:8082
|
||||
NUXT_PUBLIC_WEBSITE_BASE_URL=http://localhost:3000
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
; 本地部署后端
|
||||
; NUXT_PUBLIC_API_BASE_URL=https://127.0.0.1:8081
|
||||
; NUXT_PUBLIC_API_BASE_URL=http://127.0.0.1:8080
|
||||
|
||||
; 预发环境后端
|
||||
NUXT_PUBLIC_API_BASE_URL=https://staging.open-isle.com
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
import { defineNuxtConfig } from 'nuxt/config'
|
||||
|
||||
export default defineNuxtConfig({
|
||||
devServer: {
|
||||
host: '0.0.0.0',
|
||||
port: 3000
|
||||
},
|
||||
ssr: true,
|
||||
modules: ['@nuxt/image'],
|
||||
runtimeConfig: {
|
||||
|
||||
Reference in New Issue
Block a user