【!!!!重要】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
(为了安全起见删除可能暴露服务器的图片)
如果 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;
本地Navicat连接测试
登录
新建数据库 -- 字符集(utf8mb4) -- 排序规则(utf8mb4_unicode_ci)
复制表
8. 后端打包
# IDEA
# 重要!!打包前接口请求使用公网IP
mvn clean package -DskipTests
*报错: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>注释掉
本地访问接口验证
本地访问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
(为了安全起见删除可能暴露服务器的图片)
登录测试
# 后台不挂断启动
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
访问远程后端地址验证:
将打包后的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 验证
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 验证(刷新)
13. 域名解析
阿里云-工作台-域名-解析,选择www 将主机复制进去
---------------------------遭遇黑客勒索--------------------------
14. 无法连接Mysql
日志:
(为了安全起见删除可能暴露服务器的图片)
Navicat:
检查docker容器:
docker ps -a
docker logs 容器id
# 或
docker logs mysql
(为了安全起见删除可能暴露服务器的图片)
容器没起
重新启动容器
docker start 容器id
docker exec -it 容器id /bin/bash
show databases;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。