Docker部署项目+环境安装
# 1.docker的安装
以下命令基于CentOS环境。
1、 下载工具
yum install -y yum-utils
2、 设置镜像的仓库
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #配置阿里云的镜像
2
3
3、 更新yum软件包索引
yum makecache fast
4、 安装docker相关配置
yum install docker-ce docker-ce-cli containerd.io
5、 启动docker
systemctl start docker
# 查看当前版本号,是否启动成功
docker version
# 设置开机自启动
systemctl enable docker
2
3
4
5
# 2.安装mysql
# 方式1: 无挂载模式
这种方式直接运行mysql之后,所有关于mysql的内容都在容器中,后续如果需要修改mysql的内容,需要手动进入容器内进行操作。且在宿主机上无备份,一旦容器被删除,数据也会被删除。
docker pull mysql #下载MySQL镜像
docker run --name mysql --restart=always -p 3306:3306
-e MYSQL_ROOT_PASSWORD=密码 -d mysql # 启动MySQL
2
3
# 方式2: 数据卷挂载模式
在使用 Docker 运行 MySQL 时,数据卷挂载模式可以将容器内的关键目录映射到宿主机的指定目录。这种方式的优点是,你可以直接在宿主机上操作对应的文件,方便管理数据、日志和配置文件,同时也能确保容器的数据在宿主机上有备份。
1. 目录准备 首先,确保宿主机上有相关目录来存储 MySQL 的日志、数据和配置文件。例如,可以执行以下命令来创建所需的目录:
mkdir -p /usr/local/mysql/{data,logs,config}
sudo chmod -R 777 /usr/local/mysql # 赋予文件权限
2
这个命令会在宿主机上创建以下三个目录:
/usr/local/mysql/data
:用于存储 MySQL 数据文件/usr/local/mysql/logs
:用于存储 MySQL 日志文件/usr/local/mysql/config
:用于存储 MySQL 配置文件
2.运行 MySQL 容器
接下来,使用以下 docker run
命令启动 MySQL 容器,并通过 -v
参数将容器内的 MySQL 文件夹映射到宿主机的对应目录:
docker run --name mysql \
--restart=always \
-p 3306:3306 \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=密码 \
-d mysql
2
3
4
5
6
7
8
# 3.安装redis
docker pull redis # 下载Redis镜像
docker run --name redis --restart=always -p 6379:6379 -d redis --requirepass "密码" # 启动Redis
2
# 4.安装rabbitmq
docker pull rabbitmq:management # 下载RabbitMQ镜像
docker run --name rabbit --restart=always -p 15672:15672
-p 5672:5672 -d rabbitmq:management # 启动RabbitMQ,默认guest用户,密码也是guest。
2
3
# 5.安装elasticsearch
docker pull elasticsearch:7.9.2
mkdir -p /home/elasticsearch/data/
mkdir -p /home/elasticsearch/config/
2
1、 编写配置文件
echo 'http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*" '>>/home/elasticsearch/config/elasticsearch.yml
2
3
2、 修改文件夹权限
chmod -R 777 /home/elasticsearch/
ls -l # 查看文件权限
2
3、 启动elasticseach镜像
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
2
3
4
5
6
7
8
接下来我们就是拿浏览器访问啦。
在浏览器上输入:服务器IP地址:9200
可能出现的问题:
1、 启动成功,但是访问失败的话,查看一下安全组中映射端口是否已经打开。如果是本地虚拟机,可能与防火墙相关(我用的云服务器,没有测试,如果有问题,还是需要大家自行去百度||谷歌一下)。
2、 -e ES_JAVA_OPTS="-Xms64m -Xmx128m":配置内存大小出现了问题。
3、 最后就还有可能是配置文件中出现了问题。
echo 'http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*" '>>/home/elasticsearch/config/elasticsearch.yml
2
3
http.host: 0.0.0.0
在冒号后面有一个空格的,这里的配置文件是yml
格式,所以一定要严格按照yml
格式来书写。
安装ik分词器
进入已经启动成功的elasticsearch容器。
docker exec -it elasticsearch /bin/bash
./bin/elasticsearch-plugin install
https://github.com/medcl/elasticsearch-analysis-
ik/releases/download/v7.9.2/elasticsearch-analysis-ik-7.9.2.zip
2
3
ps: 安装的ik分词器的版本一定要与elasticsearch的版本保持一致
下载过程中如果遇到选择,直接输入 y回车就可以了。
下载完成之后,退出去,重新启动elasticsearch容器。
docker restart elasticsearch
测试ik分词器是否安装成功
安装完成后,我们再来进行测试遍,看看有什么样的变化。
postman post请求分词测试:http://服务器IP地址:9200/_analyze
{
"tokenizer":"ik_smart",
"text":"我爱技术"
}
2
3
4
结果
{
"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
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 6.安装MaxWell
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
2
3
4
5
6
7
8
注意:上述命令中aurora为数据库名称。
# 7.填写yml文件
此处省略,操作比较简单,就是配置一些简单的ip+端口+用户名+密码,前提是服务器上对应的端口已经打开
阿里云oss具体情况详见百度
QQ互联具体情况详见百度
这里就不赘述了
# 8.打包运行后端项目
1、 使用idea右侧Maven的package命令
2、 在服务器的/usr/local/下面创建名为docker的文件夹
3、 将打包好的jar包传到服务器上面的/usr/local/docker下面
4、 编写Dockerfile,同时将编写好的Dockerfile传输到服务器的/usr/local/docker下面
FROM openjdk:8
# 设置容器的临时目录
VOLUME /tmp
# 将本地的 JAR 包添加到 Docker 镜像中,命名为 app.jar
ADD springboot-0.0.1.jar app.jar
# 配置容器启动时的命令,指定 JAR 包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
2
3
4
5
6
7
8
9
10
注意:Dockerfile文件只需要上传到指定目录下即可,不需要手动执行其他操作。
5、编写script-start.sh,同时将编写好的script-start.sh上传到服务器的/usr/local/docker下面
#!/bin/bash
# 配置路径和变量
SOURCE_PATH=/usr/local/docker # 指定 Dockerfile 所在的目录路径
SERVER_NAME=springboot-0.0.1.jar # 填写Docker 镜像的名称
TAG=latest # 镜像的标签,通常使用 "latest" 作为默认标签
SERVER_PORT=8080 # 指定应用在容器内运行时的端口,也就是 Spring Boot 应用使用的端口
# 获取运行中的容器ID
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
# 获取 Docker 镜像的ID
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
# 停止并删除已经存在的容器(如果有)
if [ -n "$CID" ]; then
echo "存在容器$SERVER_NAME,CID-$CID"
docker stop $CID
echo "成功停止容器$SERVER_NAME,CID-$CID"
docker rm $CID
echo "成功删除容器$SERVER_NAME,CID-$CID"
fi
# 删除已经存在的镜像(如果有)
if [ -n "$IID" ]; then
echo "存在镜像$SERVER_NAME:$TAG,IID=$IID"
docker rmi $IID
echo "成功删除镜像$SERVER_NAME:$TAG,IID=$IID"
fi
# 构建新的 Docker 镜像
echo "开始构建镜像$SERVER_NAME:$TAG"
cd $SOURCE_PATH
docker build -t $SERVER_NAME:$TAG .
echo "成功构建镜像$SERVER_NAME:$TAG"
# 启动 Docker 容器
docker run --restart=always --name springboot-0.0.1.jar -d -p 8080:8080 springboot-0.0.1.jar:latest
echo "成功创建并运行容器$SERVER_NAME"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
注意事项:
- 使用 Notepad++ 或其他编辑器将
aurora-start.sh
文件转换为 Unix 格式。打开 Notepad++ 后,选择 编辑 -> 文档格式转换 -> 转为 Unix 格式。
上传该脚本文件到 /usr/local/docker/
目录下。
6、构建 Docker 镜像
在服务器上,进入 /usr/local/docker
目录并执行启动脚本:
# 进入脚本所在目录
cd /usr/local/docker
# 执行启动脚本,构建 Docker 镜像并启动容器 (注意脚本名称随便命名)
sh script-start.sh
2
3
4
5
该脚本会:
- 停止并删除之前运行的容器(如果存在)。
- 删除已存在的 Docker 镜像(如果存在)。
- 构建新的 Docker 镜像。
- 使用新镜像启动一个新的 Docker 容器,并将容器的端口
8080
映射到主机的端口8080
。
7、启动 Docker 容器(可选)
如果你没有使用脚本自动启动容器,也可以手动启动 Docker 容器:
docker run --name springboot-0.0.1.jar -d -p 8080:8080 springboot-0.0.1.jar:latest
该命令会启动一个新的容器,将容器的 8080 端口映射到宿主机的 8080 端口。
8、访问应用
容器成功启动后,Spring Boot 应用应该会在服务器的 8080
端口上运行。你可以通过浏览器访问:
http://<服务器IP>:8080
确保防火墙和其他网络设置允许从外部访问该端口。
# 9.打包运行前端项目
1、打包前端项目
以 Vue.js 为例,首先需要将前端项目打包成静态文件。不同的前端框架(如 React、Vue、Angular 等)的构建方式有所不同,但一般都是通过 npm/yarn 来执行构建命令。
进入项目目录,确保你已经安装了项目依赖(使用
npm install
或yarn install
)。运行打包命令:
npm run build
1或者如果你使用的是 Yarn:
yarn build
1打包完成后,构建的静态文件会生成在项目的
dist
目录下。该目录下的文件是可以直接托管到 Web 服务器(如 Nginx)上的静态文件。
2、上传构建后的文件到服务器
将打包生成的 dist
目录下的文件上传到服务器上。
如果你的目标服务器是 Linux 服务器,可以使用 scp
命令上传构建文件:
scp -r ./dist user@server:/usr/local/your_project_name/
这样,所有的静态文件(如 HTML、CSS、JavaScript 文件)就会上传到 /usr/local/your_project_name/
目录下。
3、配置 Nginx 来托管静态文件
后面安装完成ngin对照配置文件托管静态文件即可。
# 10.安装并启动nginx
# 方式1: http
# 1. 拉取nginx镜像
docker pull nginx
# 2. 修改配置文件
在/usr/local/nginx下创建nginx.conf文件,格式如下
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/aurora-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;
}
# WebSocket代理配置
# proxy_http_version 1.1 指定使用HTTP/1.1,这是WebSocket所必需的。
# proxy_set_header Upgrade $http_upgrade; 和 proxy_set_header Connection "upgrade";
# 这两行确保了升级HTTP连接到WebSocket的请求头被正确设置
location ^~ /websocket {
proxy_pass http://服务器ip:8080/websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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/aurora-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;
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 3. 启动nginx
```sh
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
2
3
4
# 方式2: https
# 1. 拉取nginx镜像
docker pull nginx
# 2. 修改配置文件
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 443 ssl;
server_name 前台域名;
ssl on;
ssl_certificate ssl证书文件位置;
ssl_certificate_key ssl证书文件位置;
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;
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;
}
# WebSocket代理配置
# proxy_http_version 1.1 指定使用HTTP/1.1,这是WebSocket所必需的。
# proxy_set_header Upgrade $http_upgrade; 和 proxy_set_header Connection "upgrade";
# 这两行确保了升级HTTP连接到WebSocket的请求头被正确设置
location ^~ /websocket {
proxy_pass http://服务器ip:8080/websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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 443 ssl;
server_name 后台域名;
ssl on;
ssl_certificate ssl证书文件位置;
ssl_certificate_key ssl文件位置;
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;
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;
}
}
server {
listen 80;
server_name 前台域名;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 80;
server_name 后台域名;
rewrite ^(.*)$ https://$host$1 permanent;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# 3. 启动nginx
docker run --name nginx --restart=always -p 443:443 -p 80:80 -d
-v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf
-v /usr/local/nginx/cert:/etc/nginx/cert
-v /usr/local/aurora-vue:/usr/local/aurora-vue --privileged=true nginx
2
3
4