Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,30 @@ CLIENT_SITE_URL=http://localhost:3001
SERVER_SITE_URL=http://localhost:3002
```

## 🚀 Development Workflow

### Docker Development Environment

```bash
# Start the development environment
pnpm docker:dev

# Or use the enhanced commands
pnpm docker:dev:start # Start services
pnpm docker:dev:stop # Stop services
pnpm docker:dev:restart # Restart services
pnpm docker:dev:status # Check service status
pnpm docker:dev:logs # View service logs
```

The development environment includes:
- MySQL database (port 3306)
- Nginx reverse proxy (port 8080)
- Client development server (port 3001)
- Server development server (port 3002)

Access your application at: http://localhost:8080

## 🚀 Deployment Options

### Deploy with Vercel (Recommended for Startups)
Expand Down
3 changes: 2 additions & 1 deletion client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"copy-to-clipboard": "^3.3.1",
"date-fns": "^2.17.0",
"deep-equal": "^2.0.5",
"dotenv": "^17.2.3",
"highlight.js": "^9.18.5",
"less": "^4.1.2",
"less-vars-to-js": "^1.3.0",
Expand Down Expand Up @@ -86,4 +87,4 @@
"tsconfig-paths-webpack-plugin": "^3.5.2",
"typescript": "4.6.2"
}
}
}
11 changes: 10 additions & 1 deletion client/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@ const { config } = require('@fecommunity/reactpress-toolkit');
const cliProd = require('next/dist/cli/next-start');
const cliDev = require('next/dist/cli/next-dev');
const open = require('open');
const path = require('path');
const dotenv = require('dotenv');

// 最小化修复:确保环境变量正确加载
const projectRoot = process.env.REACTPRESS_ORIGINAL_CWD || process.cwd();
const envPath = path.join(projectRoot, '.env');
if (require('fs').existsSync(envPath)) {
dotenv.config({ path: envPath });
}

const port = config.CLIENT_PORT || 3001;

Expand All @@ -17,4 +26,4 @@ try {
open(`http://localhost:${port}`);
} catch (err) {
console.log(`[reactpress] 客户端启动失败!${err.message || err}`);
}
}
20 changes: 18 additions & 2 deletions client/src/providers/http.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,24 @@
import { message } from 'antd';
import axios, { AxiosResponse } from 'axios';

// 最小化修复:确保正确的baseURL
const getBaseURL = () => {
// 首先检查环境变量
if (process.env.SERVER_API_URL) {
return process.env.SERVER_API_URL;
}

// 检查SERVER_SITE_URL环境变量并构造API URL
if (process.env.SERVER_SITE_URL) {
return `${process.env.SERVER_SITE_URL}/api`;
}

// 最后回退到默认值
return 'http://localhost:3002/api';
};

export const httpProvider = axios.create({
baseURL: process.env.SERVER_API_URL || `${process.env.SERVER_SITE_URL}/api`,
baseURL: getBaseURL(),
timeout: 60000,
});

Expand Down Expand Up @@ -70,4 +86,4 @@ httpProvider.interceptors.response.use(

return Promise.reject(err);
}
);
);
65 changes: 65 additions & 0 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
services:
db:
image: mysql:5.7
container_name: reactpress_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root}
MYSQL_DATABASE: ${DB_DATABASE:-reactpress}
MYSQL_USER: ${DB_USER:-reactpress}
MYSQL_PASSWORD: ${DB_PASSWD:-reactpress}
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --default-authentication-plugin=mysql_native_password
volumes:
- db_data:/var/lib/mysql
networks:
- reactpress-network
healthcheck:
test: ["CMD", "mysql", "-u", "root", "-proot", "-e", "SELECT 1"]
timeout: 20s
retries: 10
start_period: 30s
interval: 30s
ports:
- "3306:3306"
# Resource limits
deploy:
resources:
limits:
memory: 512M
reservations:
memory: 256M

nginx:
image: nginx:alpine
container_name: reactpress_nginx
ports:
- "8080:80"
volumes:
- ./nginx.dev.conf:/etc/nginx/conf.d/default.conf
networks:
- reactpress-network
depends_on:
- db
# Resource limits
deploy:
resources:
limits:
memory: 128M
reservations:
memory: 64M
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"]
timeout: 10s
retries: 3
start_period: 10s
interval: 30s

volumes:
db_data:

networks:
reactpress-network:
driver: bridge
9 changes: 8 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@
"dev:server": "pnpm run --dir ./server dev",
"dev:client": "pnpm run --dir ./client dev",
"dev:docs": "pnpm run --dir ./docs dev",
"docker:dev": "node ./scripts/docker-dev.js",
"docker:dev:start": "node ./scripts/docker-dev.js start",
"docker:dev:stop": "node ./scripts/docker-dev.js stop",
"docker:dev:restart": "node ./scripts/docker-dev.js restart",
"docker:dev:status": "node ./scripts/docker-dev.js status",
"docker:dev:logs": "node ./scripts/docker-dev.js logs",
"build": "pnpm build:toolkit && pnpm build:server && pnpm build:client",
"build:packages": "node scripts/reactpress-cli.js --build",
"build:toolkit": "pnpm run --dir ./toolkit build",
Expand Down Expand Up @@ -62,6 +68,7 @@
"concurrently": "^7.0.0",
"conventional-changelog-cli": "^3.0.0",
"cross-env": "^7.0.3",
"dotenv": "^17.2.3",
"express": "^5.1.0",
"fs-extra": "^10.0.0",
"inquirer": "^8.2.4",
Expand Down Expand Up @@ -91,4 +98,4 @@
]
},
"packageManager": "pnpm@10.12.1+sha512.f0dda8580f0ee9481c5c79a1d927b9164f2c478e90992ad268bbb2465a736984391d6333d2c327913578b2804af33474ca554ba29c04a8b13060a717675ae3ac"
}
}
12 changes: 12 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading