Vue项目部署到服务器(Docker)


利用docker镜像将vue项目部署到服务器上,并通过域名访问

首先在Vue项目根目录下进行构建,生成用于生产环境的静态文件(常在dist目录下)

npm run build

在Vue项目根目录下创建Dockerfile,这个文件包含了构建Docker镜像的命令

FROM nginx:alpine
# 删除 Nginx 默认的配置文件
RUN rm /etc/nginx/conf.d/default.conf
# 将本地的 Nginx 配置文件复制到镜像中 (下一步会创建这个文件)
COPY nginx.conf /etc/nginx/conf.d/
# 将构建好的 Vue 项目静态文件 (dist 目录下的所有内容) 复制到 Nginx 的 web 根目录
COPY dist/ /usr/share/nginx/html/
# 暴露 80 端口 (Nginx 默认监听的端口)
EXPOSE 80
# 容器启动时运行 Nginx
CMD ["nginx", "-g", "daemon off;"]

创建 Nginx 配置文件 (nginx.conf): 在Vue 项目根目录下,创建一个名为 nginx.conf 的文件。这个文件告诉 Nginx 如何处理请求,特别是对于单页应用(SPA)如何处理路由。

server {
    listen 80;
    server_name localhost; # 你可以根据需要修改为你的域名

    # 设置 web 根目录为我们复制静态文件的位置
    root /usr/share/nginx/html;
    index index.html index.htm;

    # 关键配置:处理 Vue Router 的 history 模式
    # 尝试查找请求的文件 ($uri),如果找不到,尝试查找目录 ($uri/),
    # 如果都找不到,则回退到 /index.html,让 Vue Router 处理路由。
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 可选:配置 gzip 压缩以提高性能
    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/gif image/png image/svg+xml;
    gzip_vary on;
    gzip_disable "msie6";
}

进行构建Docker镜像

docker build -t my-app

下面我选择阿里云作为我的私人镜像存储仓库,这样服务器只需要拉取这个仓库并运行镜像即可。

首先是进行登录,然后推送镜像。(详细步骤查询阿里云文档)

推送成功后,在服务器终端上拉取镜像,并运行docker容器。

# 格式: docker run -d -p <宿主机端口>:<容器端口> --name <容器名称> <完整镜像名称>
docker run -d -p 9091:80 --name my-vue-container crpi-owt1h58robs00am3.cn-hangzhou.personal.cr.aliyuncs.com/yuuc/docker:latest

现在就可以输入117.72.15.198:9091来访问了(记得更新防火墙规则)

但是可能有人会说,我不想输入端口号来访问,有没有更现代化的方法。

有的兄弟,有的。

我们可以使用1Panel的反向代理来实现。

首先,在域名解析设置处,添加一条A记录,at.yuuc.xyz指向117.72.15.198

然后在1Panel进行反向代理(将at.yuuc.xyz代理到9091端口),目标URL:117.72.15.198:9091

然后申请证书,保证不会弹出不安全连接。

这时候,就可以访问at.yuuc.xyz拉!


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注