diff --git a/.readme.md b/.readme.md index 52c6bd6..befb6cb 100644 --- a/.readme.md +++ b/.readme.md @@ -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`(关闭容器) +- 去腾讯云,开放端口80,443,20000端口 + + +#### 3.1.1ACTerminal配置登录Docker中的acs(ssh:Docker下acs) +- >1.`vim config` + >>Host 别名 + HostName ip + User 用户名 + Port 20000 + +- 2.配置免密登录:`ssh-copy-id 别名` +- 3.`ssh 别名` + +#### 3.1.2GitBash(本地)配置登录Docker中的acs(ssh: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 + + + ... + + backend + jar + + ... + + + + + org.springframework.boot + spring-boot-maven-plugin + + + com.kob.backend.BackendApplication + + + + + repackage + + + + + + + +``` + + +```java +botrunningsystem/pom.xml + + + + ... + + botrunningsystem + jar + + ... + + + + + org.springframework.boot + spring-boot-maven-plugin + + + com.kob.botrunningsystem.BotRunningSystemApplication + + + + + repackage + + + + + + + +``` + +```java +matchingsystem/pom.xml + + + + ... + + matchingsystem + jar + + ... + + + + + org.springframework.boot + spring-boot-maven-plugin + + + com.kob.matchingsystem.MatchSystemApplication + + + + + repackage + + + + + + + +``` +**打包** +提示:打包前记得删除匹配玩家时输出的语句 +打开右侧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测试(403,405) +在浏览器中输入域名测试,若提示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) + +