From ca246cc819d6a85f45dde4b10c01bfaa4a32a313 Mon Sep 17 00:00:00 2001 From: litongjava Date: Sat, 22 Oct 2022 17:19:27 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 + doc/deployment.md | 97 +++++++++++++ doc/deployment_files/1.jpg | Bin 0 -> 51476 bytes pom.xml | 128 +++++++++--------- .../example/MagicAPIExampleApplication.java | 12 +- src/main/resources/application.yml | 8 +- 6 files changed, 178 insertions(+), 73 deletions(-) create mode 100644 doc/deployment.md create mode 100644 doc/deployment_files/1.jpg diff --git a/README.md b/README.md index e6bf382..a9ca71d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ +# magic-api-example +## 简介 +基于maigc-api的示例工程 +https://gitee.com/ssssssss-team/magic-api +## 部署 +[部署文档](./doc/deployment.md) ## mysql 建表语句 ```sql CREATE TABLE `magic_api_file` ( diff --git a/doc/deployment.md b/doc/deployment.md new file mode 100644 index 0000000..bca32da --- /dev/null +++ b/doc/deployment.md @@ -0,0 +1,97 @@ +# magic-api-example部署 + +## linux部署 +### 准备环境 +- jdk 1.8 +- mysql 5.7 + +###导入数据 +- 创建用户 +```shell script +create user 'magic_api'@'%' identified by 'robot_123456#'; +``` +- 创建数据库库 +mysql 5 +``` +create database magic_api DEFAULT CHARSET utf8mb4 COLLATE 'utf8mb4_general_ci'; +grant all privileges on magic_api.* to "magic_api"@"%" identified by "robot_123456#"; +grant all privileges on magic_api.* to "magic_api"@"localhost" identified by "robot_123456#"; +grant all privileges on magic_api.* to "magic_api"@"127.0.0.01" identified by "robot_123456#"; +flush privileges; +``` +- 导入数据 +登录 +```shell script +mysql -umagic_api -probot_123456# +``` +```sql +use magic_api; +CREATE TABLE `magic_api_file` ( + `file_path` varchar(512) NOT NULL, + `file_content` mediumtext, + PRIMARY KEY (`file_path`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `magic_api_backup` ( + `id` varchar(32) NOT NULL COMMENT '原对象ID', + `create_date` bigint(13) NOT NULL COMMENT '备份时间', + `tag` varchar(32) DEFAULT NULL COMMENT '标签', + `type` varchar(32) DEFAULT NULL COMMENT '类型', + `name` varchar(64) DEFAULT NULL COMMENT '原名称', + `content` mediumtext COMMENT '备份内容', + `create_by` varchar(64) DEFAULT NULL COMMENT '操作人', + PRIMARY KEY (`id`,`create_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +``` +###下载 +https://gitee.com/ppnt/magic-api-example/releases/ +###安装 +```shell script +tar -xf magic-api-example-2.0.2.tar.gz -C /opt/ +``` +```shell script +# ls +application.properties logs magic-api-demo.jar spring-boot.pid spring-boot.sh +``` +###启动 +查看配置文件 可以根据需要进行修改 +```shell script +# cat application.properties +spring.application.name=magic-api +server.port=9999 +server.compression.enabled=true +server.compression.min-response-size=128 +spring.jackson.date-format=yyyy-MM-dd HH:mm:ss +spring.jackson.time-zone=GMT+8 +spring.datasource.url=jdbc:mysql://localhost/magic_api?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai +spring.datasource.username=magic_api +spring.datasource.password=robot_123456# +magic-api.web=/magic/web +magic-api.resource.type=database +magic-api.resource.table-name=magic_api_file +magic-api.resource.prefix=/magic-api +``` + +```shell script +#启动 +./spring-boot.sh start +#查看日志 +tail -f logs/spring-boot.log +``` +###配置nginx代理 +```shell script + location / { + proxy_pass http://127.0.0.1:9999; + proxy_http_version 1.1; + proxy_read_timeout 300; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host:$server_port; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Real-PORT $remote_port; + } +``` + +###访问 +http://192.168.0.6/magic/web/index.html +![](deployment_files/1.jpg) diff --git a/doc/deployment_files/1.jpg b/doc/deployment_files/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91900b41d1e6b6504823eef9d078345e7a7c8b6d GIT binary patch literal 51476 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index 83f55e7..daabd93 100644 --- a/pom.xml +++ b/pom.xml @@ -2,70 +2,70 @@ - 4.0.0 + 4.0.0 - + + org.springframework.boot + spring-boot-starter-parent + 2.4.5 + + + org.ssssssss + magic-api-example + 2.0.2 + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-jdbc + + + mysql + mysql-connector-java + + + org.ssssssss + magic-api-spring-boot-starter + 2.0.2 + + + org.ssssssss + magic-api-plugin-swagger + 2.0.2 + + + io.springfox + springfox-swagger2 + 2.9.2 + + + io.springfox + springfox-swagger-ui + 2.9.2 + + + com.alibaba + druid + 1.2.1 + + + + + org.springframework.boot - spring-boot-starter-parent - 2.4.5 - - - org.ssssssss - magic-api-example - 2.0.2 - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-jdbc - - - mysql - mysql-connector-java - - - org.ssssssss - magic-api-spring-boot-starter - 2.0.2 - - - org.ssssssss - magic-api-plugin-swagger - 2.0.2 - - - io.springfox - springfox-swagger2 - 2.9.2 - - - io.springfox - springfox-swagger-ui - 2.9.2 - - - com.alibaba - druid - 1.2.1 - - - - - - org.springframework.boot - spring-boot-maven-plugin - - org.ssssssss.example.MagicAPIExampleApplication - magic-api-demo - - - - + spring-boot-maven-plugin + + org.ssssssss.example.MagicAPIExampleApplication + magic-api-demo + + + + diff --git a/src/main/java/org/ssssssss/example/MagicAPIExampleApplication.java b/src/main/java/org/ssssssss/example/MagicAPIExampleApplication.java index 00dca63..cda32ff 100644 --- a/src/main/java/org/ssssssss/example/MagicAPIExampleApplication.java +++ b/src/main/java/org/ssssssss/example/MagicAPIExampleApplication.java @@ -6,11 +6,13 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; @SpringBootApplication -@EnableSwagger2 // 配置swagger 文档 +@EnableSwagger2 // 配置swagger 文档 public class MagicAPIExampleApplication { - - public static void main(String[] args) { - SpringApplication.run(MagicAPIExampleApplication.class, args); - } + public static void main(String[] args) { + long start = System.currentTimeMillis(); + SpringApplication.run(MagicAPIExampleApplication.class, args); + long end = System.currentTimeMillis(); + System.out.println((end - start) + "(ms)"); + } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7c9bb26..3bb3a37 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -10,9 +10,9 @@ spring: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 datasource: - url: jdbc:mysql://localhost/magic?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai - username: root - password: 123456789 + url: jdbc:mysql://localhost/magic_api?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai + username: magic_api + password: robot_123456# # data: # 配置mongo数据源 # mongodb: @@ -31,7 +31,7 @@ magic-api: web: /magic/web resource: type: database # 配置接口存储方式,这里选择存在数据库中 - table-name: magic_api_file_v2 # 数据库中的表名 + table-name: magic_api_file # 数据库中的表名 prefix: /magic-api # 前缀 # location: classpath:magic-api # 其它配置请参考 https://ssssssss.org/magic-api/config/ -- Gitee From 7fcb4e7ab7b3770bd8b8b6513120396e01ec46ef Mon Sep 17 00:00:00 2001 From: litongjava Date: Sat, 22 Oct 2022 17:20:53 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/deployment.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/deployment.md b/doc/deployment.md index bca32da..b339fe9 100644 --- a/doc/deployment.md +++ b/doc/deployment.md @@ -5,7 +5,7 @@ - jdk 1.8 - mysql 5.7 -###导入数据 +### 导入数据 - 创建用户 ```shell script create user 'magic_api'@'%' identified by 'robot_123456#'; @@ -43,9 +43,9 @@ CREATE TABLE `magic_api_backup` ( PRIMARY KEY (`id`,`create_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` -###下载 +### 下载 https://gitee.com/ppnt/magic-api-example/releases/ -###安装 +### 安装 ```shell script tar -xf magic-api-example-2.0.2.tar.gz -C /opt/ ``` @@ -53,7 +53,7 @@ tar -xf magic-api-example-2.0.2.tar.gz -C /opt/ # ls application.properties logs magic-api-demo.jar spring-boot.pid spring-boot.sh ``` -###启动 +### 启动 查看配置文件 可以根据需要进行修改 ```shell script # cat application.properties @@ -78,7 +78,7 @@ magic-api.resource.prefix=/magic-api #查看日志 tail -f logs/spring-boot.log ``` -###配置nginx代理 +### 配置nginx代理 ```shell script location / { proxy_pass http://127.0.0.1:9999; @@ -92,6 +92,6 @@ tail -f logs/spring-boot.log } ``` -###访问 +### 访问 http://192.168.0.6/magic/web/index.html ![](deployment_files/1.jpg) -- Gitee From 75cd3a893ec6b1d2e1fddc868622fbdaa7b01558 Mon Sep 17 00:00:00 2001 From: litongjava Date: Sat, 22 Oct 2022 17:57:05 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BC=80=E6=9C=BA?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/deployment.md | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/doc/deployment.md b/doc/deployment.md index b339fe9..fbd5859 100644 --- a/doc/deployment.md +++ b/doc/deployment.md @@ -95,3 +95,55 @@ tail -f logs/spring-boot.log ### 访问 http://192.168.0.6/magic/web/index.html ![](deployment_files/1.jpg) + +### 添加context-path +有些时候nginx之后一个端口开发出来,默认代理业务系统,这个时候可以添加一个context-path,让nginx识别context-path,代理到magic-api +添加context-path=/ppnt-portal/admin +- 修改applicaiton.properties,添加server.servlet.context-path,并重启 +```shell script +server.servlet.context-path=/ppnt-portal/admin +``` + +```shell script +./spring-boot.sh restart +``` +- 修改nginx配置 +```shell script + location /ppnt-portal/admin { + proxy_pass http://127.0.0.1:9999; + proxy_http_version 1.1; + proxy_read_timeout 300; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host:$server_port; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Real-PORT $remote_port; + } +``` +- 访问 +http://192.168.0.6//ppnt-portal/admin/magic/web/index.html + +### 添加开机启动 +```shell script +vi /lib/systemd/system/magic-api.service +``` +```shell script +[Unit] +Description=magic-api service +After=network.target + +[Service] +Type=forking +PrivateTmp=true +ExecStart=/opt/magic-api/spring-boot.sh start +ExecStop=/opt/magic-api/spring-boot.sh stop +ExecReload=/opt/magic-api/spring-boot.sh restart +[Install] +WantedBy=multi-user.target +``` + +```shell script +systemctl enable magic-api +systemctl start magic-api +systemctl status magic-api +``` \ No newline at end of file -- Gitee From 87e9f141508a6a40c4666d34377b19f577414833 Mon Sep 17 00:00:00 2001 From: litongjava Date: Sat, 22 Oct 2022 18:15:33 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=88=A0=E9=99=A4$server=5Fport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/deployment.md b/doc/deployment.md index fbd5859..d8d3aab 100644 --- a/doc/deployment.md +++ b/doc/deployment.md @@ -115,7 +115,7 @@ server.servlet.context-path=/ppnt-portal/admin proxy_read_timeout 300; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; - proxy_set_header Host $host:$server_port; + proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-PORT $remote_port; } -- Gitee