linux服务器使用docker部署Vue+Egg.js项目

83 阅读3分钟

安装docker

参考此文章:developer.aliyun.com/article/145…

1、启动docker服务命令

sudo systemctl start docker
sudo systemctl enable docker

2、配置docker镜像服务

参考此文章:blog.csdn.net/2301_798493…

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker安装nginx

参考此文章blog.csdn.net/BThinker/ar…

1、下载nginx

docker pull nginx

2、创建三个文件,方便后续在创建的时候分别将docker的相对目录映射到主机

mkdir -p /usr/local/clintproject/
mkdir -p /home/nginx/conf/nginx
mkdir -p /home/nginx/log

3、创建一个nginx容器并且将配置文件复制到主机

参考此文章blog.csdn.net/BThinker/ar…

4、创建docker进程

docker run -itd --name nginx -p 80:80 -p 8081:8081 -v /usr/local/clintproject/:/var/www/html -v /home/nginx/conf/nginx:/etc/nginx -v /home/nginx/log/:/var/log/nginx nginx

指令说明

  • -p 80:80:将本机的 80 端口映射到容器的 80 端口。
  • -p 8081:8081: 将本机的 8081 端口映射到容器的 8081 端口(你可以根据实际情况调整)。
  • -v /usr/local/clintproject/:/var/www/html:将本机的 /usr/local/clintproject/ 目录挂载到容器的 /var/www/html 目录。
  • -v /home/nginx/conf/nginx:/etc/nginx:将本机的 /home/nginx/conf/nginx 目录挂载到容器的 /etc/nginx 目录。
  • -v /home/nginx/log/:/var/log/nginx:将本机的 /home/nginx/log/ 目录挂载到容器的 /var/log/nginx 目录。

nginx配置文件

/home/nginx/conf/nginx

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;


    # 添加 API 路径的处理
    location /api/ {
        # 修正后的后端地址(移除了多余的冒号和斜杠)
        proxy_pass http://117.72.54.140:8000/;
        
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        # 允许所有请求方法
        proxy_method $request_method;
    }
    # 前端静态文件
    location /01edumanage {
        alias   /var/www/html/01edumanage/;
        index  index.html index.htm;
        try_files $uri $uri/ /01edumanage/index.html;
    }


    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

4、将前端打包项目静态资源丢在nginx指向的目录,此处ng指向了/var/www/html/01edumanage/,但是这是docker的地址,实际的映射地址是创建ng服务时候的/usr/local/clintproject/

通过http://ip/01edumanage 查看是否可以访问

dccker安装mysq

1、创建文件

#创建mysql需要的几个文件
mkdir -p /home/mysql/conf/conf.d
mkdir -p /home/mysql/conf/mysql.conf.d

2、运行mysql进程

docker run -p 3306:3306 --name mysql -v /home/mysql/log:/var/log/mysql -v /home/mysql/data:/var/lib/mysql -v /home/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker进入某个容器:
docker exec -it mysql bash

docker构建应用

1、通过dockerfile文件来构建镜像

#构建镜像
docker build -t 01edumanage .

2、启动应用

docker run -d --name 01edumanage  --link mysql:mysql -p 8000:8000 01edumanage 

Dockerfile文件(egg.js项目为例)

# 使用官方 Node.js 运行时作为父镜像  
FROM node:18-alpine  
  
# 设置工作目录  
WORKDIR /usr/src/app  
  
# 复制 package.json 和 package-lock.json  
COPY package*.json ./  
  
# 安装项目依赖  
RUN npm install --production  
  
# 复制项目源代码  
COPY . .  

# Add file execution permissions
RUN chmod +x /usr/src/app
RUN chmod +x node_modules/.bin/egg-scripts

# 暴露端口  
EXPOSE 8000  
# 安装 egg-scripts 全局依赖
RUN npm install -g egg-scripts

# 添加 egg-scripts 执行权限
RUN chmod +x /usr/local/bin/egg-scripts
# 启动应用  
CMD [ "npm", "start" ]  

总结:

  1. 跨域问题由nginx来处理
  2. 数据库在连接的时候需要打开防火墙让本地电脑连接调试
  3. nginx可以同时映射多个端口,实现一个容器部署多个服务
  4. 如果需要像我一样在项目前面加一个前缀,那前端项目打包需要加一个相应的前缀