【!!!!重要】4月9日更新。你如果是B友,你按照这个教程做的话,一定要注意安全问题。我就遭到了黑客劫持数据库、勒索BTC。安全起见,我要全删了重新部署。目前需要修改的点:下载官方jdk,SSH用证书登录,权限最小化,数据库的账号密码复杂度提上去,安全组关掉,设置访问白名单,备份数据库。

ps: 如何发现被劫持的,在文末。(本文将删除所有跟服务器相关的图片)

----------------------↑ 更新注意 ↑-------------------------------

经验册太长了,部署相关的命令又可能经常查看。故单独拎出来。

部署服务器相关

1. 查看服务器:内存/硬盘/运行的软件

Xshell:
    free -h 
    df -h 
    top 

(为了安全起见删除可能暴露服务器的图片)

2. 阿里云工作台-添加端口

安全组-快速添加/手动添加(后台端口+前端端口)加上自带的3306

3. Xftp 添加 JDK8 (tar.gz)到 /home/lib

4. 安装JDK

cd /home/lib

ls

# 解压
tar -zxvf jdk-8u291-linux-x64.tar.gz

ls

# 修改文件夹名字
mv jdk1.8.0_291 jdk1.8

ls

# 移动位置
mv jdk1.8 /usr/local/

cd /usr/local/

ls

ll

vim /etc/profile

# 按键盘A/I 进入 INSERT

export JAVA_HOME=/usr/local/jdk1.8
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin

# 按ESC 退出 INSERT

# 没修改退出
:q
# 保存并退出
:wq
# 修改了,但不保存,可以强制退出Vim:
:q!

# 查看
cat /etc/profile

# 刷新
source /etc/profile

# 验证
java -version

image.png
(为了安全起见删除可能暴露服务器的图片)

如果 java -version报错:
error while loading shared libraries: libjli.so
网上的大部分帖子的解决办法都没有效,需要更换jdk安装包

5. 安装Docker

sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

# 阿里云稳定仓库
sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo yum install docker-ce docker-ce-cli containerd.io

systemctl start docker

docker version

(为了安全起见删除可能暴露服务器的图片)

# 配置用户权限
sudo usermod -aG docker $USER

# 阿里云镜像加速
sudo mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://3n4m4jry.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload

systemctl restart docker

# 常用命令
# 查看进程
docker ps
# 查看镜像
docker images
# 查看当前路径
pwd
# 编辑
vim xx

6. 安装MySql

docker pull mysql:8.3

docker images

(为了安全起见删除可能暴露服务器的图片)

7. 设置MySql

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=xxxxx -d mysql:8.3

docker ps
# 得到 CONTAINER ID (假设xx)

docker exec -it xx /bin/bash

# 重要!!这里的密码和application.properties和数据库里面,三方都要一致
mysql -uroot -pxxxxx

ALTER USER 'root'@'%' IDENTIFIED BY 'xxxxx';

flush privileges;

show databases;

image.png

本地Navicat连接测试
image.png

登录

新建数据库 -- 字符集(utf8mb4) -- 排序规则(utf8mb4_unicode_ci)

复制表

8. 后端打包

# IDEA
# 重要!!打包前接口请求使用公网IP

mvn clean package -DskipTests

image.png

*报错:No compiler is provided... 检查JAVA_HOME是否配置正确

本地启动测试

# cmd
java -jar .\xx-0.0.1-SNAPSHOT.jar

*报错:xx-0.0.1-SNAPSHOT.jar 中没有主清单属性,将 pom.xml 文件 <mainClass>标签后面的<skip>true</skip>注释掉

本地访问接口验证
image.png
本地访问swagger验证
(为了安全起见删除可能暴露服务器的图片)

9. 部署后台

将打包后的文件用 Xftp 添加到 /home/server/springboot

退出容器

# Xshell

exit

exit

cd /home/server/springboot

# 红色
ls 

#授权
chmod 777 xx-0.0.1-SNAPSHOT.jar

# 绿色
ls 

ll

java -jar xx-0.0.1-SNAPSHOT.jar

(为了安全起见删除可能暴露服务器的图片)

浏览器使用ip访问swagger
(为了安全起见删除可能暴露服务器的图片)

登录测试
image.png

# 后台不挂断启动

nohup java -jar xx.jar &

# 如果有报错:
nohup: ignoring input and appending output to 'nohup.out'
#则使用这行命令
nohup java -jar xx-0.0.1-SNAPSHOT.jar > /dev/null 2> /dev/null &

# 查看日志
tail -500f nohup.out

# 查看进程(号)
ps -ef | grep java

# 关闭
kill 15 进程(号)
# 强制关闭
kill -9 进程(号)

10. 部署前端

# 重要!!修改前端请求的后台接口(最好全局替换)
# 文件上传、下载和导出都需要使用到服务器的公网 IP
<el-upload :action="'http://' + serverIp + ':9090/user/import'">

# 前端项目里
yarn build

# 全局安装anywhere
npm install anywhere -g
or
yarn add anywhere -g

anywhere -p 8080

访问远程后端地址验证:
image.png

将打包后的dist文件夹用 Xftp 添加到 /home/server

再用Nginx代理dist

11. 安装Nginx

# 安装相关依赖

cd /home/lib

# 为了避免后面的报错加上 pcre pcre-devel
yum -y install gcc-c++ zlib-devel openssl-devel libtool 

cd /usr/local

wget http://nginx.org/download/nginx-1.14.0.tar.gz

ll

tar -zxvf nginx-1.14.0.tar.gz

rm -rf nginx-1.14.0.tar.gz

ll

cd nginx-1.14.0

./configure --prefix=/usr/local/nginx

报错 ./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

# 再回去添加依赖
cd /home/lib
yum install pcre pcre-devel
 
cd /usr/local/nginx-1.14.0/

./configure --prefix=/usr/local/nginx

# 安装
make && make install

报错:src/os/unix/ngx_user.c: In function ‘ngx_libc_crypt’:
src/os/unix/ngx_user.c:26:7: error: ‘struct crypt_data’ has no member named ‘current_salt’

cd  src/os/unix/

ll

vim ngx_user.c

# 按键盘A/I 进入 INSERT

# 注释掉下面这行
/* cd.current_salt[0] = ~salt[0]; */

# 按ESC 退出 INSERT

# 保存
:wq

cd /usr/local/nginx-1.14.0/objs

ll

vim Makefile

# 按键盘A/I 进入 INSERT

删除第二行的 -Werror

# 按ESC 退出 INSERT

# 保存
:wq

cd /usr/local/nginx-1.14.0/

make && make install

cd ../

ll

rm -rf nginx-1.14.0

cd nginx/

ll

cd sbin/

# 启动
./nginx

# 查看进程
ps -ef | grep nginx

# 浏览器输入远程的ip访问Nginx 验证

image.png

12. 配置Nginx

cd /usr/local/nginx/conf/

ll

vim nginx.conf

# 按键盘A/I 进入 INSERT

# 替换location
location / {
            root /home/server/dist;
            index index.html index.htm;
            try_files $uri $uri/ /index.html;
        }

# 按ESC 退出 INSERT

# 保存
:wq

cd /home/server/dist

# 蓝色
ll

#授权
chmod 777 *

# 绿色
ll

cd /usr/local/nginx/sbin

./nginx -s reload

# 查看进程
ps -ef | grep nginx

# 浏览器输入远程的ip访问Nginx 验证(刷新)

image.png

13. 域名解析

阿里云-工作台-域名-解析,选择www 将主机复制进去

---------------------------遭遇黑客勒索--------------------------

14. 无法连接Mysql

日志:
(为了安全起见删除可能暴露服务器的图片)

Navicat:
image.png

检查docker容器:

docker ps -a

image.png

docker logs 容器id

# 或

docker logs mysql

(为了安全起见删除可能暴露服务器的图片)

容器没起
image.png

重新启动容器

docker start 容器id

docker exec -it 容器id /bin/bash

show databases;

image.png

image.png


Adele0
44 声望3 粉丝