前言
最近在腾讯买了个Linux服务器,裸机低配版,刚好用来试试用docker来部署一个网站,不过最好不要用Centos 8,这个版本已经停止维护了,而且在安装环境时会遇到各种问题,如无法下载等。
注意:这篇文章讲的是手工部署,并不是自动部署,且是单机模式。
1、安装docker
安装docker看下面这篇文章,按照步骤安装即可。
centOS安装docker
2、安装MySQL
如果需要用到MySQL的,照下面这篇文章安装即可,如果没有用到跳过。
docker安装MySQL
3、安装Redis
如果需要用到Redis的,照下面这篇文章安装即可,如果没有用到跳过。
docker安装Redis
4、安装nginx
如果部署的应用是纯后端的,没有前端页面的,可以不用nginx,之前应用端口对应服务器开放的端口即可,在这里安装nginx,主要是部署前端页面,让前端和后端路径都是同一个端口访问,因为没有买域名,所以都是用IP访问。
docker 安装nginx
5、构建后端应用镜像
(1)准备
在服务器建一个文件夹,文件夹名和将要构建镜像名称一致即可,方便管理,用于保存Dockerfile和jar包。这里就建一个test文件夹为例。
#建文件夹
mkdir test
- Dockerfile
在test文件夹建Dockerfile文件。
#1、建Dockerfile文件
touch Dockerfile
#2、把下面的Dockerfile内容复制进来
# 编辑文件
vi Dockerfile
#保存退出
:wq
Dockerfile内容:
FROM java:8
VOLUME /tmp
EXPOSE 8080
COPY test.jar test.jar
ENTRYPOINT ["java","-jar","test.jar"]
- 打包spring boot项目为jar包
注意:项目里的数据库、Redis的连接IP用服务器的内网IP,必须是内网IP。除非把MySQL和Redis给放开让外网访问,可以换成公网IP,但不建议如此做,这是不安全的。
把项目打包成jar包后,上传到服务器的test目录,即Dockerfile和jar包同在一目录。
mac上传命令:
scp /本地路径/xxxx.jar root@ip地址:/服务器test路径/test
#例子:scp /Users/sakura/Downloads/test/test.jar [email protected]:/root/test
#然后输入服务器登录密码
windows上传,下载xshell,然后上传即可。
(2)构建镜像
进入test目录,然后执行构建命令,注意test后面有个点的,不要漏掉。
#test为镜像名称
docker build -t test .
查看镜像:
docker images
构建成功后启动容器:
#--name test 容器名称,/root/logs:/logs日志挂载到磁盘
#/root/logs磁盘路径,/logs为应用保存日志的相对路径
docker run --name test -d -p 8080:8080-v /root/logs:/logs test
启动完成后可以通过下面命令查看情况:
#查看日志,test为容器名
docker logs test
#查看容器启动状态,status为up则启动正常
docker ps -a
6、发布前端
这里以vue项目为例子,在本地项目中执行下面命令构建Vue项目:
npm run build
构建完成后会有一个dist文件夹,压缩。在第4步安装nginx有个html挂载文件夹,在html文件夹下再建一个前端文件夹test-page,把dist压缩包上传到test-page里,解压缩,注意解压缩后有个index.html文件,这个文件必须在test-page里,不能是在子级目录,不然nginx配置会不准确。
如图,此时目录(school-page就是test-page):
7、配置nginx
此时前后端都已经准备好了,就差配置nginx了。
进入nginx的conf目录,编辑nginx.conf文件:
cd /nginx/conf
vi nginx.conf
然后把下面配置添加到你的nginx配置,监听的是80端口,把192.168.0.1换成服务器的内网IP,/api/为后端接口的映射前缀,所以前端访问后端接口时都要加上这个前缀,当匹配到时转发到后端应用,具体如何配置可以搜索nginx的配置规则。然后配置前端,根路径即是前端首页,需要注意的是root 的路径是nginx容器的路径,并不是服务器本地挂载的路径。
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
location /api/ {
proxy_pass http://192.168.0.1:8080/;
}
location / {
root /usr/share/nginx/html/test-page;
index index.html index.htm;
}
}
include /etc/nginx/conf.d/*.conf;
}
保存后重启nginx:
#停止nginx
docker stop nginx
#启动nginx
docker start nginx
此时所有配置都已完成,在自己电脑输入地址访问:http://公网IP:80,即可访问。