# ้ƒจ็ฝฒๆŒ‡ๅ— ## ๐ŸŽฏ ้ƒจ็ฝฒๆžถๆž„ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Nginx ็ฝ‘ๅ…ณ โ”‚ โ”‚ (่ดŸ่ฝฝๅ‡่กก/้™ๆ€่ต„ๆบ) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ–ผ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๅ‰็ซฏ้™ๆ€่ต„ๆบ โ”‚ โ”‚ rui-gateway โ”‚ โ”‚ (dist็›ฎๅฝ•) โ”‚ โ”‚ Spring Cloudโ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ Gateway โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ–ผ โ–ผ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚rui-auth โ”‚ โ”‚rui- โ”‚ โ”‚rui- โ”‚ โ”‚(่ฎค่ฏ) โ”‚ โ”‚service โ”‚ โ”‚cashier โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚(็ณป็ปŸ) โ”‚ โ”‚(ๆ”ถ้“ถ) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ” โ–ผ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚rui-paymentโ”‚ โ”‚ MySQL โ”‚ โ”‚ (ๆ”ฏไป˜) โ”‚ โ”‚ (ๆ•ฐๆฎๅบ“) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- ## ๐Ÿณ Docker ้ƒจ็ฝฒ ### 1. ๆž„ๅปบ้•œๅƒ ```bash # ่ฟ›ๅ…ฅๅŽ็ซฏ็›ฎๅฝ• cd ~/rhkj/rui-framework/backend # Maven ๆ‰“ๅŒ… mvn clean package -DskipTests # ๆž„ๅปบ Docker ้•œๅƒ๏ผˆไปฅ gateway ไธบไพ‹๏ผ‰ cd rui-gateway docker build -t rui-gateway:latest . # ๆž„ๅปบๅ…ถไป–ๆœๅŠก... cd ../rui-auth && docker build -t rui-auth:latest . cd ../rui-service/rui-service-system && docker build -t rui-service-system:latest . ``` ### 2. docker-compose.yml ```yaml version: '3.8' services: # MySQL mysql: image: mysql:8.0 container_name: rui-mysql environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: rui_cloud ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql # Redis redis: image: redis:7-alpine container_name: rui-redis ports: - "6379:6379" # Nacos (ๆณจๅ†Œไธญๅฟƒ) nacos: image: nacos/nacos-server:v2.2.3 container_name: rui-nacos environment: MODE: standalone ports: - "8848:8848" # Gateway gateway: image: rui-gateway:latest container_name: rui-gateway ports: - "8080:8080" depends_on: - nacos # Auth auth: image: rui-auth:latest container_name: rui-auth depends_on: - nacos - mysql - redis # Service service-system: image: rui-service-system:latest container_name: rui-service-system depends_on: - nacos - mysql - redis volumes: mysql-data: ``` ### 3. ๅฏๅŠจๆœๅŠก ```bash # ๅฏๅŠจๆ‰€ๆœ‰ๆœๅŠก docker-compose up -d # ๆŸฅ็œ‹ๆ—ฅๅฟ— docker-compose logs -f gateway # ๅœๆญขๆœๅŠก docker-compose down ``` --- ## ๐Ÿš€ ็”Ÿไบง็Žฏๅขƒ้ƒจ็ฝฒ ### 1. ๆœๅŠกๅ™จๅ‡†ๅค‡ | ๆœๅŠกๅ™จ | ้…็ฝฎ | ้ƒจ็ฝฒๅ†…ๅฎน | |--------|------|---------| | ๆœๅŠกๅ™จ 1 | 4C8G | Gateway + Auth + Nacos | | ๆœๅŠกๅ™จ 2 | 4C8G | Service + Cashier + Payment | | ๆœๅŠกๅ™จ 3 | 4C8G | MySQL + Redis | | ๆœๅŠกๅ™จ 4 | 2C4G | Nginx + ๅ‰็ซฏ้™ๆ€่ต„ๆบ | ### 2. ้ƒจ็ฝฒ่„šๆœฌ ```bash #!/bin/bash # deploy.sh - ็”Ÿไบง็Žฏๅขƒ้ƒจ็ฝฒ่„šๆœฌ set -e # ้…็ฝฎ SERVER_USER="root" SERVER_IP="192.168.1.100" JAR_PATH="target/*.jar" BACKUP_DIR="/opt/backup" APP_DIR="/opt/rui" # ๅค‡ไปฝๆ—ง็‰ˆๆœฌ echo "ๅค‡ไปฝๆ—ง็‰ˆๆœฌ..." ssh $SERVER_USER@$SERVER_IP "mkdir -p $BACKUP_DIR && cp $APP_DIR/*.jar $BACKUP_DIR/ 2>/dev/null || true" # ไธŠไผ ๆ–ฐ็‰ˆๆœฌ echo "ไธŠไผ ๆ–ฐ็‰ˆๆœฌ..." scp $JAR_PATH $SERVER_USER@$SERVER_IP:$APP_DIR/ # ้‡ๅฏๆœๅŠก echo "้‡ๅฏๆœๅŠก..." ssh $SERVER_USER@$SERVER_IP "cd $APP_DIR && ./restart.sh" echo "้ƒจ็ฝฒๅฎŒๆˆ๏ผ" ``` --- ## ๐Ÿ“Š ็›‘ๆŽงไธŽๆ—ฅๅฟ— ### ๆ—ฅๅฟ—ๆŸฅ็œ‹ ```bash # ๆŸฅ็œ‹ๅฎžๆ—ถๆ—ฅๅฟ— docker logs -f rui-gateway # ๆŸฅ็œ‹ๆœ€่ฟ‘ 100 ่กŒ docker logs --tail=100 rui-gateway # ๆŸฅ็œ‹ๆŒ‡ๅฎšๆ—ถ้—ด่Œƒๅ›ด docker logs --since="2024-01-01T00:00:00" rui-gateway ``` ### ๅฅๅบทๆฃ€ๆŸฅ ```bash # Gateway ๅฅๅบทๆฃ€ๆŸฅ curl http://localhost:8080/actuator/health # ๆœๅŠกๆณจๅ†Œ็Šถๆ€ curl http://localhost:8848/nacos/v1/ns/instance/list?serviceName=rui-gateway ``` --- ## ๐Ÿ”ง ๅธธ่ง้—ฎ้ข˜ ### 1. ๆœๅŠกๆ— ๆณ•ๆณจๅ†Œๅˆฐ Nacos **ๅŽŸๅ› **๏ผšNacos ๅœฐๅ€้…็ฝฎ้”™่ฏฏ **่งฃๅ†ณ**๏ผš ```yaml spring: cloud: nacos: discovery: server-addr: nacos:8848 # ไฝฟ็”จๅฎนๅ™จๅๆˆ– IP ``` ### 2. ๆ•ฐๆฎๅบ“่ฟžๆŽฅๅคฑ่ดฅ **ๅŽŸๅ› **๏ผšMySQL ๆœชๅฏๅŠจๆˆ–็ฝ‘็ปœไธ้€š **่งฃๅ†ณ**๏ผš ```bash # ๆฃ€ๆŸฅ MySQL ็Šถๆ€ docker ps | grep mysql # ๆต‹่ฏ•่ฟžๆŽฅ docker exec -it rui-mysql mysql -uroot -p -e "SELECT 1" ``` ### 3. ็ซฏๅฃๅ†ฒ็ช **ๅŽŸๅ› **๏ผš็ซฏๅฃ่ขซๅ ็”จ **่งฃๅ†ณ**๏ผš ```bash # ๆŸฅ็œ‹็ซฏๅฃๅ ็”จ netstat -tlnp | grep 8080 # ไฟฎๆ”น docker-compose.yml ็ซฏๅฃๆ˜ ๅฐ„ ports: - "8081:8080" # ๅฎฟไธปๆœบ8081ๆ˜ ๅฐ„ๅˆฐๅฎนๅ™จ8080 ``` --- ## ๐Ÿ“ˆ ๆ€ง่ƒฝไผ˜ๅŒ– ### JVM ๅ‚ๆ•ฐ ```bash java -jar \ -Xms512m \ -Xmx1024m \ -XX:+UseG1GC \ -XX:MaxGCPauseMillis=200 \ app.jar ``` ### ่ฟžๆŽฅๆฑ ้…็ฝฎ ```yaml spring: datasource: hikari: minimum-idle: 5 maximum-pool-size: 20 idle-timeout: 300000 max-lifetime: 1200000 connection-timeout: 20000 ``` --- ## ๐Ÿ”„ ๆปšๅŠจๆ›ดๆ–ฐ ```bash # 1. ๅฏๅŠจๆ–ฐ็‰ˆๆœฌ๏ผˆไธๅœๆญขๆ—ง็‰ˆๆœฌ๏ผ‰ docker-compose up -d --no-deps --scale gateway=2 gateway # 2. ็ญ‰ๅพ…ๆ–ฐ็‰ˆๆœฌๅฅๅบทๆฃ€ๆŸฅ้€š่ฟ‡ sleep 30 # 3. ๅœๆญขๆ—ง็‰ˆๆœฌ docker-compose stop gateway_1 # 4. ็งป้™คๆ—ง็‰ˆๆœฌ docker-compose rm -f gateway_1 ``` --- > **ๆœ€ๅŽๆ้†’**๏ผš็”Ÿไบง็Žฏๅขƒ้ƒจ็ฝฒๅ‰ๅŠกๅฟ…ๅœจๆต‹่ฏ•็Žฏๅขƒ้ชŒ่ฏ๏ผ