文章目录
前言
近期把项目部署在服务器上差点把我给整崩,现在重新整理一下部署流程。这也算是做一次记录,防止以后忘记了。
一、打包前的准备
1.修改前端代理访问后端的IP和端口
代码如下(示例):
devServer: {
port: 端口号,
proxy: {
'/URL': {
target: 'http://“后端IP:后端的端口号', // 后端
}
}
}
2.修改后端配置文件
代码如下(示例):
* 下面是docker-compose.yml
version: '3'
services:
web-name: # 服务名称,用户自定义
image: nginx:latest # 镜像版本
container_name: '容器名'
ports:
……
……
- /……
- /……
……
redis: # 服务名
image: ……
……
web-server: # 服务名
container_name: '容器名'
build: .
ports:
……
mysql: # 服务名
image: ……
ports:
……
environment:
……
主要是将下面springboot配置文件里的IP地址修改成上面服务名
#数据库连接
# MySQL
spring.datasource.url=jdbc:mysql://服务名(上面docker-compose.yml):3306/……
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.username=#
spring.datasource.password=#
# Redis
spring.redis.host= 服务名(同上)
spring.redis.port=6379
spring.redis.password=cl20030525
二、前后端打包
1.前端打包
在IDEA的控制台里直接输入:npm run build
2.后端打包
在maven里点clean----compile—package
三、上传和整理所需文件
* 注:这里的dist和web-server.jar是前后端项目的包
这里的Dockerfile之后直接通过docker-compose直接构建,不需要 docker build
FROM java:8 # 基础镜像
ADD web-server.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java", "-jar", "/app.jar", "--spring.profiles.active=pro"]
nginx内容
server {
listen 80; #这里监听的容器是端口
server_name ***.**.** localhost; #这里主要写IP或域名(服务器或虚拟机的)注:多个可以用空格隔开
location / { #URL
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html last;
index index.html index.htm;
}
location /URL { #URL地址的内容 如 http://**:**/URL/
proxy_pass http://101.43.45.79:9999; #代理转发
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
四、使用docker-compose启动容器
使用 “ docker-compose up -d ” 后台运行容器 (注:需要在docker-compose.yml文件下执行命令)
代码如下(示例):
version: '3'
services:
web-name: # 服务名称,用户自定义
image: nginx:latest # 镜像版本
container_name: '容器名'
ports:
- 3000:80 # 暴露端口
volumes: # 挂载
- /home/ly/docker-boot/dockerweb/dist/:/usr/share/nginx/html #前端项目的包挂载到nginx上
- /home/ly/docker-boot/dockerweb/nginx.conf:/etc/nginx/conf.d/nginx.conf #挂载nginx配置文件
privileged: true
redis: # 服务名
image: redis:latest
command: redis-server --requirepass ***** # 设置Redis的密码
web-server: # 服务名
container_name: '容器名'
build: . # 这里是直接构建Dockerfiler
ports:
- 9999:8080
mysql: # 服务名
image: mysql:5.7.36
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=root #设置MySQL用户的密码
五、后续处理
1.检查容器
使用 docker ps 可以查看所有运行中容器(注:有些容器没出现可以用 “ docker ps -a ” 找到,出现这种情况可能是容器内部出错,使用 “docker logs -f 容器ID或容器名 ” 可查看错误)
2.导入数据库文件
使用 “docker cp 文件名 容器ID:路径” 复制进容器里(注:将文件复制出来只需交换文件名与容器ID和路径即可)
例:docker cp project.sql 35bf7e18ce27:/
进入容器使用:docker exec -it 容器ID /bin/bash
导入文件:
root@35bf7e18ce27:/# mysql -u root -p < projectdb.sql #一般默认为root
Enter password: #这里填docker-compose里的密码
3.最后注意点
一定一定一定要重启前后端容器,我就是在这里未重启,导致好几天前端请求不到后端。
重启命令:
docker-compose 为:docker-compose restart 前端服务名 后端服务名(就是上面的docker-comopse.yml里的服务名)
docker 为:docker restart 容器ID (不确定多个容器能否使用空格隔开)