update .readme.md.

Signed-off-by: 杜艳贺 <2825183872@qq.com>
pull/1/head
杜艳贺 3 years ago committed by Gitee
parent d0adc326bf
commit 9f99b26a28
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F

@ -1 +1,590 @@
### Happy ,Spring !!
@[TOC](如何部署Spring Boot + Vue项目Centos为例)
> 😊😊😊欢迎来到本博客😊😊😊
📫作者简介阿斯卡码专注于研究Java框架/Vue就读于河南中医药大学刚刚入门项目开发📫
🏆 CSDN编程比赛奖章获得者/Java领域创作者🏆
🔥计划学习深入学习Spring全家桶Vue, mybatis,Mysql等领域。(目前涉及不深入)🔥
👍如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~
>先总结:
>- ssh登录步骤
> - 1.`vim config`配置别名
> - 2.`ssh-copy-id myserver`配置免密登录
> - 3.若出错,删除文件,重新`ssh-keygen`
>- 服务器和Docker创建acs&&赋予sudo
> - 方法不同,因为镜像,服务器不同Centos
> - 先登录服务器下的acs,还得登录Docker下的acs
> - 祖传文件:
> - 第一次传到服务器下的acs用户
> - 第二次传到Docker下的acs用户
>
# 一项目上线Centos版
## 1.ACterminal端:
### 1.1ssh登录服务器
```java
ssh root@IP地址
输入密码XXXX
```
如出现以下报错:则执行:`rm .ssh/known_hosts `
```java
acs@2889803f8420:~$ ssh root@IP
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:Lb/lDeBWaAhVm9Xkfpa6dCkjsVcIENwxRiFgsml7NWc.
Please contact your system administrator.
Add correct host key in /home/acs/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/acs/.ssh/known_hosts:4
remove with:
ssh-keygen -f "/home/acs/.ssh/known_hosts" -R "119.91.226.142"
ECDSA host key for 119.91.226.142 has changed and you have requested strict checking.
Host key verification failed.
```
### 1.2创建acs新用户(第一次创建)
>**Linux命令列出所有用户**:`cat /etc/passwd |cut -f 1 -d:`
- 创建用户:`adduser acs(用户名)`
- 设置用户密码:`passwd acs,然后 输入密码`
- 验证查看用户多出acs用户`cat /etc/passwd |cut -f 1 -d:`
>sudo知识sudo 命令提供了一种机制,它可以在不用分享 root 用户的密码的前提下,为信任的用户提供系统的管理权限。
### 1.3给用户acs分配sudo权限
- 先找到`/etc/sudoers`位置
- 给文件写入权限:`chmod u+w sudoers`
- 修改文件:`vim/etc/sudoers`
- 添加:在里面找到`root ALL=(ALL) ALL`
- 然后在其下面增加`username ALL=(ALL) ALL`
- 配置免密使用`sudo`命令:
```java
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
#下面的user是你的用户名 添加这一行就能免密sudo了
user ALL=(ALL:ALL) NOPASSWD: ALL
```
- 将文件的写入属性撤销:`chmod u-v sudoers`
- 通过`su xx`切换回自己的用户名,再使用`sudo`命令时,就可以使用了
>**chmod知识**
XXX代表一个数XXXXXXXXX代表三个数
**查看文件的权限:**
`ll` 不包含点开头的文件
`ll -a` 包括点开头的文件
具体一个文件:`ll 文件名`
![在这里插入图片描述](https://img-blog.csdnimg.cn/81fa3a71b1484d618069aee6c7ad26cc.jpeg#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/004fe590d0c5409b9e4a14fe04a7eb5a.jpeg#pic_center)
**如何查看acs具有sudo权限呢**
执行:`sudo cat /etc/sudoers`
![在这里插入图片描述](https://img-blog.csdnimg.cn/b20d303a99db49a193752fc740f99c2f.jpeg#pic_center)
### 1.4配置别名登录(登录acs)
`vim config `
![在这里插入图片描述](https://img-blog.csdnimg.cn/2afc86c8cb9743b89834f779d7a2d09c.jpeg#pic_center)
### 1.5配置免密登录ssh:服务器下acs
- 自动配置服务器密钥:`ssh-copy-id myserver`
- 回车命令后输入密码,为了将`.ssh/id_rsa.pub`的内容传到目标服务器的`~/.ssh/authorized_keys`中,若没有此文件,通过命令:`ssh-keygen`生成。
- 测试:登录云服务器:`ssh myserver1`
### 1.6将祖传文件传到服务器的acs下[第一次传]在Acterminal上
- 配置`tmux、vim、bash`环境:`scp .bashrc .vimrc .tmux.conf myserver1:`
![在这里插入图片描述](https://img-blog.csdnimg.cn/269beaaa01854bddb20ba55ae40675a4.jpeg#pic_center)
### 1.7 软件安装Ac端||本地)
> `sudo yum update` 作用:更新软件列表
#### 1.7.1安装`tmux`
- 安装`tmux`
- 1.登录自己的服务器,然后安装`tmux`
```java
sudo yum update
sudo yum install tmux
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/9204c359e6d34f3897fb034535f66ed8.jpeg#pic_center)
通过tmux命令测试是否安装成功
#### 1.7.2安装`docker`
- 安装`docker`
- 1.打开`tmux`。(养成好习惯,所有工作都在`tmux`里进行,防止意外关闭终端后,工作进度丢失)
- 2.刷新软件源:`sudo yum update`
- 2.在云服务器的`acs`用户下:然后在`tmux`中根据`docker`安装教程安装`docker`即可。
``tmux ``
``ctrl shift A +shift %分屏``
- 3.`Centos`安装`Docker`网址
[Centos的Docker安装](https://docs.docker.com/engine/install/centos/)
- 4.步骤如下:在下面。
- 5.测试:`docker --version`
- 6.配置docker sudo权限`sudo usermod -aG docker $USER`要不然使用docker所有命令都要sudo
- 7.`ctrl + d`返回acwing服务器再次通过ssh命令进入自己服务器此时docker可以正常使用了。执行完此操作后需要退出服务器再重新登录回来才可以省去`sudo`权限。
```java
########################设置存储库######################
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#######################安装 Docker 引擎####################
sudo yum update
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
##############################测试##########################
输入docker,有相关用法提示出现---》成功
```
>输入`docker status`,出现以下错误。原因是,当前用户没有添加到`docker用户组`![在这里插入图片描述](https://img-blog.csdnimg.cn/e9500fa3e1804a7fa5649105466c1020.jpeg#pic_center)
**解决办法:**
1.输入`sudo`+命令
2.将当前用户添加到`docker`用户组:
为了避免每次使用`docker`命令都需要加上`sudo`权限可以将当前用户加入安装中自动创建的docker用户组(可以参考官方文档)
`sudo usermod -aG docker $USER`
## 2.本地Git Bash端
### 2.1ssh别名登录ssh:服务器下acs
- >`Vim config`
>>Host 别名
HostName ip
User 用户名
- 本地创建密钥如果以前创建过密钥跳过此步ssh-keygen本地执行过一次ssh-keygen
- 自动配置服务器密钥:`ssh-copy-id myserver`
- 输入云服务上的密码即可。
- 测试:登录云服务器:`ssh myserver1`
![在这里插入图片描述](https://img-blog.csdnimg.cn/f971d7d31d0a49838803ae2ad7467c61.jpeg#pic_center)
## 3.Acterminal端:配置docker环境(传送Docker)
**配置spring boot的docker环境**
- 返回acwing服务器进入`/var/lib/acwing/docker/images`,通过命令:`scp django_lesson_1_0.tar 别名:`
- 加载tar文件为docker镜像文件`docker load -i django_lesson_1_0.tar`
通过`docker images`查看docker镜像
- 创建spring boot的docker`docker run -p 20000:22 -p 443:443 -p 80:80 -p 3000:3000 -p 3001:3001 -p 3002:3002 -itd --name kob_server django_lesson:1.0`
- 进入容器:`docker attach kob_server`
此时这个容器才是我们的开发环境,我们还需==添加用户、给用户添加sudo权限==。
### 3.1给容器创建用户acs第二次创建
- 添加用户:`adduser 用户名`输入两次密码五次回车输入Y
- 添加sudo权限`usermod -aG sudo 用户名`
- 通过命令`ctrl + p + ctrl + q`挂载容器,注意不是`ctrl d`(关闭容器)
- 去腾讯云开放端口8044320000端口
#### 3.1.1ACTerminal配置登录Docker中的acsssh:Docker下acs
- >1.`vim config`
>>Host 别名
HostName ip
User 用户名
Port 20000
- 2.配置免密登录:`ssh-copy-id 别名`
- 3.`ssh 别名`
#### 3.1.2GitBash(本地)配置登录Docker中的acsssh:Docker下acs
- >1.`vim config`
>>Host 别名
HostName ip
User 用户名
Port 20000
- 2.配置免密登录:`ssh-copy-id 别名`
- 3.`ssh 别名`
### 3.2将祖传文件传到docker中acs下【第二次传】在Acterminal上
` scp .bashrc .vimrc .tmux.conf myserver1_docker1:`
## 4.本地Git Bash操作:配置docker开发环境
在Docker下的acs中,下面的命令是apt-get,因为是ubantu镜像。
### 4.1 安装、配置mysql
- 更新软件源;`sudo apt-get update`
- 安装:`sudo apt-get install mysql-server`
- 启动:`sudo service mysql start`
- 登录mysql`sudo mysql -u root`
- 设置root用户的密码`ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';`
- 创建数据库create database kob;
- `use kob;`
- `show tables;`
- 创建表
- 在idea中打开数据库右键kob -> SQL脚本 -> 将DDL生成到剪贴板
- 在docker容器中acs下创建create_table.sql`vim create_table.sql`
- 输入命令:`:set paste`进入粘贴模式
- 按i进入编辑模式按下`shift + insert`粘贴内容,:wq保存并退出
前提要先选择好数据库,`use kob`;
- 在mysql命令行中输入命令`source /home/acs/create_table.sql`
- 创建成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/a9965b119c73482db5908c55b5284718.jpeg#pic_center)
### 4.2 安装jdk
- 命令:`sudo apt-get install openjdk-8-jdk`
- 测试:`java -version`
## 5.上线后端(重点)
### ~~5.1.将代码执行的输入修改为文件~~
### ~~5.2.将排行榜页面的展示个数修改为10~~
### ~~5.3.标记玩家游戏所在处~~
### 5.4.统一api格式
**修改api地址**
- 将GetRanklistController、GetRecordListController、InfoController、GetListController的GetMapping中的地址前加上/api
- 将LoginController、RegisterController、AddController、RemoveController、UpdateController的PostMapping中的地址前加上/api
**修改网关**
- .antMatchers("/api/user/account/token/", "/api/user/account/register/").permitAll()
### 5.5.后端上线(重点)
**配置项目打包方式eg:**
```java
backend/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
...
<artifactId>backend</artifactId>
<packaging>jar</packaging>
...
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--这里写上main方法所在类的路径-->
<configuration>
<mainClass>com.kob.backend.BackendApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
```
```java
botrunningsystem/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
...
<artifactId>botrunningsystem</artifactId>
<packaging>jar</packaging>
...
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--这里写上main方法所在类的路径-->
<configuration>
<mainClass>com.kob.botrunningsystem.BotRunningSystemApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
```
```java
matchingsystem/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
...
<artifactId>matchingsystem</artifactId>
<packaging>jar</packaging>
...
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--这里写上main方法所在类的路径-->
<configuration>
<mainClass>com.kob.matchingsystem.MatchSystemApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
```
**打包**
提示:打包前记得删除匹配玩家时输出的语句
打开右侧Maven**点开backendcloud -> 生命周期 -> 双击clean -> 双击package**
![在这里插入图片描述](https://img-blog.csdnimg.cn/9566c773b76b4a75baf6c95a20590607.jpeg#pic_center)
**用本地终端传给docker下的acs**
```java
scp backend-0.0.1-SNAPSHOT.jar myserver1_docker1:
scp botrunningsystem-0.0.1-SNAPSHOT.jar myserver1_docker1:
scp matchingsystem-0.0.1-SNAPSHOT.jar myserver1_docker1:
```
**登录Docker下的acs**
```java
cd ~
mkdir kob
cd kob
mkdir backendcloud
mkdir web
mkdir acapp
cd backendcloud
mv ~/*.jar .
```
**运行后端**
```java
java -jar backend-0.0.1-SNAPSHOT.jar
java -jar matchingsystem-0.0.1-SNAPSHOT.jar
java -jar botrunningsystem-0.0.1-SNAPSHOT.jar
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/0e7cfcf8a8d849b5bd6cb1f37314775d.jpeg#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/c9a9e08148294a919bf12d199567f53b.jpeg#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/07bdba54fc444a06b0bcc7907b8b9b68.jpeg#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/77f50d8481ea42779e6009c171215202.jpeg#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d0037d306aef4e16b865531ea86fea49.jpeg#pic_center)
## 6.获取域名及Https证书(重点)
- 获取SSL证书下载*.key和*.pem文件复制粘贴到`/etc/nginx`下(我是从腾讯申请的SSL)
如何申请SSL
![在这里插入图片描述](https://img-blog.csdnimg.cn/4e7bcf29c0f040cb88ab970362df55c7.jpeg#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/c32bac85acd34936ac0ad43f8f07665a.jpeg#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/82e9be96928e414d9c2bc910265540fe.jpeg#pic_center)
- >在docker->acs下
```java
cd /etc/nginx
sudo mkdir cert
cd cert
sudo vim acapp.key
点击i进入编辑模式shift + insert粘贴
esc退出编辑模式:wq保存并退出
sudo vim acapp.pem
点击i进入编辑模式shift + insert粘贴
esc退出编辑模式:wq保存并退出
```
`
## 7.配置nginx配置文件(重点)
### 7.1配置文件
- cd /etc/nginx
- sudo vim nginx.conf
- 在命令行模式输入命令ggdG
- 复制y总讲义nginx配置文件内容在下面
- 使用命令粘贴:
- `sudo scp .bashrc .vimrc .tmux.conf /root`将文件传给root
- 使用:set paste进入粘贴模式
- 按i进入编辑模式
- shift + insert粘贴
- esc退出编辑模式
- dd删除无关行内容
- :wq保存内容
- 将server_name的编号改成acwing创建应用界面的AppID共有两处
或者自己的域名
注意若用户名不是acs需要将nginx.conf配置文件中的acs全部改成你的用户名
```css
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
server {
listen 80;
server_name XXXXXXXXXX替换app2703.acapp.acwing.com.cn;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
listen 443 ssl;
server_name XXXXXXXXXX替换app2703.acapp.acwing.com.cn;
ssl_certificate cert/acapp.pem;
ssl_certificate_key cert/acapp.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
charset utf-8;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
client_max_body_size 10M;
location /api {
proxy_pass http://127.0.0.1:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /websocket {
proxy_pass http://127.0.0.1:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 36000s;
}
location / {
root /home/acs/kob/web;
index index.html;
try_files $uri $uri/ /index.html;
}
}
}
```
### 7.2启动并重新加载nginx
```java
sudo /etc/init.d/nginx start
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/9940b5b9a9184292b23448cef8652ef3.jpeg#pic_center)
### 7.3查看日志
```java
cd /var/log/nginx/
sudo cat error.log
```
### 7.4测试403405
在浏览器中输入域名测试若提示403 forbidden则表示成功并测试放行端口显示405
https://snake.mycomputer.top/api--->403
https://snake.mycomputer.top/api/user/account/register/--->405
## 8.上线前端(重点)
**修改前端请求api**
- 在vscode中`ctrl + shift + f`全文搜索127.0.0.1或localhost将http://127.0.0.1:3000`替换`为https://appxxxx.acapp.acwing.com.cn/api
- 将ws://127.0.0.1:3000`替换`为wss://appxxxx.acapp.acwing.com.cn
- 打开vue脚手架停止server,在任务界面选择`build`,运行
- 通过scp命令将`dist文件夹`上传到服务器scp -r dist/ springboot:kob/web/
- 将dist内容移出到web下mv dist/* .
- 在web下刪除dist文件
- 访问域名就可以访问前端网页了!
## 9.Success!!
![在这里插入图片描述](https://img-blog.csdnimg.cn/9e7d8772835f47289119e0b1b06966d7.jpeg#pic_center)

Loading…
Cancel
Save