🚀 项目部署文档

master
linhaojun 4 years ago
parent 2c1924d4bf
commit 224a020c28

@ -0,0 +1,392 @@
## 1.docker的安装
1. 下载工具
```shell
yum install -y yum-utils
```
2. 设置镜像的仓库
```shell
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #配置阿里云的镜像
```
3. 更新yum软件包索引
```shell
yum makecache fast
```
4. 安装docker相关配置
```shell
yum install docker-ce docker-ce-cli containerd.io
```
5. 启动docker
```shell
systemctl start docker
# 查看当前版本号,是否启动成功
docker version
# 设置开机自启动
systemctl enable docker
```
## 2.安装mysql
```shell
docker pull mysql //下载MySQL镜像
docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=密码 -d mysql //启动MySQL
```
## 3.安装redis
```shell
docker pull redis //下载Redis镜像
docker run --name redis --restart=always -p 6379:6379 -d redis --requirepass "密码" //启动Redis
```
## 4.安装rabbitmq
```shell
docker pull rabbitmq:management //下载RabbitMQ镜像
docker run --name rabbit --restart=always -p 15672:15672 -p 5672:5672 -d rabbitmq:management //启动RabbitMQ,默认guest用户密码也是guest。
```
## 5.安装elasticsearch
```shell
docker pull elasticsearch:7.9.2
```
```shell
mkdir -p /home/elasticsearch/data/
mkdir -p /home/elasticsearch/config/
```
编写配置文件
```shell
echo 'http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*" '>>/home/elasticsearch/config/elasticsearch.yml
```
修改文件夹权限
```shell
chmod -R 777 /home/elasticsearch/
ls -l # 查看文件权限
```
启动elasticseach镜像
```shell
docker run --name elasticsearch -p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v /home/elasticsearch/config/elasticsearch.yml:/usr/shellare/elasticsearch/config/elasticsearch.yml \
-v /home/elasticsearch/data:/usr/shellare/elasticsearch/data \
-v /home/elasticsearch/plugins:/usr/shellare/elasticsearch/plugins \
-d elasticsearch:7.9.2
```
接下来我们就是拿浏览器访问啦。
在浏览器上输入服务器IP地址:9200
可能出现的问题:
1. 启动成功,但是访问失败的话,查看一下安全组中映射端口是否已经打开。如果是本地虚拟机,可能与防火墙相关(我用的云服务器,没有测试,如果有问题,还是需要大家自行去百度||谷歌一下)。
2. -e ES_JAVA_OPTS="-Xms64m -Xmx128m"配置内存大小出现了问题。可试着调一下docker玩不坏的莫慌
3. 最后就还有可能是配置文件中出现了问题。
```shell
echo 'http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*" '>>/home/elasticsearch/config/elasticsearch.yml
```
`http.host: 0.0.0.0` 在冒号后面有一个空格的,这里的配置文件是`yml`格式,所以一定要严格按照`yml`格式来书写。
安装ik分词器
进入已经启动成功的elasticsearch容器。
```shell
docker exec -it elasticsearch /bin/bashell
```
```shell
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.0/elasticsearch-analysis-ik-7.9.2.zip
```
ps: `安装的ik分词器的版本一定要与elasticsearch的版本保持一致`
下载过程中如果遇到选择,直接输入 y回车就可以了。
下载完成之后退出去重新启动elasticsearch容器。
```shell
docker restart elasticsearch # <容器名o容器id> 重启容器命令
```
测试ik分词器是否安装成功
安装完成后,我们再来进行测试遍,看看有什么样的变化。
postman post请求分词测试`http://服务器IP地址:9200/_analyze`
```json
{
"tokenizer":"ik_smart",// 分词器不同,这个地方也会有变化 具体的可能还需要去学习。
"text":"我爱技术"
}
```
结果
```shell
{
"tokens": [
{
"token": "我",
"start_offset": 0,
"end_offset": 1,
"type": "CN_CHAR",
"position": 0
},
{
"token": "爱",
"start_offset": 1,
"end_offset": 2,
"type": "CN_CHAR",
"position": 1
},
{
"token": "技术",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 2
}
]
}
```
## 6.安装MaxWell ElasticSearch同步数据
```sh
docker pull zendesk/maxwell //下载MaxWell镜像
docker run --name maxwell --restart=always -d zendesk/maxwell bin/maxwell --user='数据库用户名' --password='数据库密码' --host='IP地址' --producer=rabbitmq --rabbitmq_user='MQ用户名' --rabbitmq_pass='MQ密码' --rabbitmq_host='IP地址' --rabbitmq_port='5672' --rabbitmq_exchange='maxwell_exchange' --rabbitmq_exchange_type='fanout' --rabbitmq_exchange_durable='true' --filter='exclude: *.*, include: aurora.t_article.article_title = *, include: aurora.t_article.article_content = *, include: aurora.t_article.is_delete = *, include: aurora.t_article.status = *' //运行MaxWell
```
注意上述命令中aurora为数据库名称
## 7.填写aurora-springboot中的yml文件
此处省略操作比较简单就是配置一些简单的ip+端口+用户名+密码,前提是服务器上对应的端口已经打开
阿里云oss具体情况详见百度
QQ互联具体情况详见百度
这里就不赘述了
## 8.打包运行后端项目
1. 使用idea右侧Maven的package命令
2. 在服务器的/usr/local/下面创建名为docker的文件夹
3. 将打包好的jar包传到服务器上面的/usr/local/docker下面
4. 编写Dockerfile,同时将编写好的Dockerfile传输到服务器的/usr/local/docker下面
```dockerfile
FROM java:8
VOLUME /tmp
ADD aurora-springboot-0.0.1.jar blog.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/blog.jar"]
```
5. 编写aurora-start.sh,同时将编写好的aurora-start.sh上传到服务器的/usr/local/docker下面
```shell
#源jar路径
SOURCE_PATH=/usr/local/docker
#docker 镜像/容器名字或者jar名字 这里都命名为这个
SERVER_NAME=aurora-springboot-0.0.1.jar
TAG=latest
SERVER_PORT=8080
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME:$TAG" | awk '{print $3}')
if [ -n "$CID" ]; then
echo "存在容器$SERVER_NAME, CID-$CID"
docker stop $CID
docker rm $CID
fi
# 构建docker镜像
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME:$TAG镜像IID=$IID"
docker rmi $IID
else
echo "不存在$SERVER_NAME:$TAG镜像开始构建镜像"
cd $SOURCE_PATH
docker build -t $SERVER_NAME:$TAG .
fi
echo "$SERVER_NAME容器创建完成"
```
**注意事项sh文件需要用notepad++转为Unix格式**
具体操作点开notepad++中的编辑 ---> 文档格式转换 --->转为Unix
6. cd到/usr/local/docker下面 执行如下命令打包docker镜像文件
```shell
sh aurora-start.sh
```
7. 启动容器
```sh
docker run --name aurora-springboot-0.0.1.jar -d -p 8080:8080 aurora-springboot-0.0.1.jar:latest
```
8. 这样后端项目就可以在服务器上跑起来了
9. 访问测试(浏览器上访问)
```shell
ip:8080/
```
## 9.打包运行前端项目
1. aurora-blog项目中更改src/config/config.ts
```typescript
captcha: {
TENCENT_CAPTCHA: '你自己的天御验证码'//用我的也行,但是防止我的使用量过多,导致无法验证,推荐使用自己的,毕竟我也没有充钱
},
qqLogin: {
QQ_APP_ID: '你自己的APP_ID',
QQ_REDIRECT_URI: 'https://你的前台域名/oauth/login/qq'
},
```
2. aurora-blog项目中更改public/index.html
```html
<script
src="http://connect.qq.com/qc_jssdk.js"
data-appid="你自己的APP_ID"
data-redirecturi="https://你的前台域名/oauth/login/qq"></script>
```
3. 分别到aurora-blog和aurora-admin下面执行如下命令 (推荐关闭vscode的Eslint,本项目没有遵循Eslint的规范)
```sh
npm install
npm run build
```
4. 在服务器的/usr/local/下面创建名为vue的文件夹
5. 将打包好的前台代码重命名为blog, 并传输到服务器的/usr/local/vue下面
6. 将打包好的后台代码重命名为admin, 并传输到服务器的/usr/local/vue下面
## 10.安装并启动nginx(没有开启https)
tip: 在这之前需要到域名提供商那里配置好域名个人认为没有必要开启https,http完全够并且省事儿
1. 拉取nginx镜像
```shell
docker pull nginx
```
2. 在/usr/local/nginx下创建nginx.conf文件格式如下
```shell
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
client_max_body_size 50m;
client_body_buffer_size 10m;
client_header_timeout 1m;
client_body_timeout 1m;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 4;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
server {
listen 80;
server_name 前台域名;
location / {
root /usr/local/vue/blog;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ^~ /api/ {
proxy_pass http://你的ip:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name 后台子域名;
location / {
root /usr/local/vue/admin;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ^~ /api/ {
proxy_pass http://你的ip:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
```
3. 启动nginx
```shell
docker run --name nginx --restart=always -p 80:80 -d -v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/vue:/usr/local/vue nginx
```
Loading…
Cancel
Save