使用 Docker 部署 Vue.js + Go 项目

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/muumian123/article/details/90137749

最近公司要求搞一个 dashboard ,前端用 Vue.js 框架,后端用 Go 语言写的。在决定用 Docker 进行部署的时候,遇到了很多问题,特此记录。

由于这个项目需要使用 AWS 中的 DynamoDB,因此需要先在 Docker 的 image 中安装 aws-cli,然而 aws-cli 只能依赖 Python 进行安装。因为我考虑先从运行一个 Ubuntu 基础镜像(如果是 Centos7,会有很多命令不一样,但是思路都是一样的),再在这个容器中安装好所需要的 nodejs、Python 环境,之后安装好 aws-cli,并对其进行 aws 账号的配置。这样之后,我们就有了一个拥有 aws 账号的镜像。具体步骤如下:

# 启动并进入 Ubuntu 基础镜像
docker run -it ubuntu /bin/bash

#更新 apt-get,防止出现包安装不上的情况
apt-get update
apt-get upgrade

# 安装 python
apt-get install python3.6
ln -s /usr/bin/python3.6 /usr/bin/python
apt-get install python3-pip 
ln -s /usr/bin/pip3 /usr/bin/pip

# 安装 aws-cli
pip install awscli --upgrade --user

# 安装 vim
apt-get install vim

# 设置 aws-cli 路径
vim /root/.bashrc
export PATH=/root/.local/bin:$PATH
source /root/.bashrc
# 配置 aws 账号
aws configure

# 安装 nodejs
apt-get install nodejs

# 退出容器
exit

# 将安装好环境的容器重新打包成新的镜像
docker commit -m"install package" <container-id> aws-node:0.0.1

至此我们就有了一个拥有 aws 账号的镜像 “aws-node:0.0.1”。接下来,我们将以这个镜像为基础镜像,重新构建下一个用于启动 nodejs 和 GO 程序的镜像。编写 Dockerfile 文件如下:

FROM aws-node:0.0.1

RUN mkdir -p /app

WORKDIR /app

COPY . /app

ENV AWS_table=XXX

RUN chmod +x /app/service.sh
  
EXPOSE 8080     # 前端页面端口    

EXPOSE 3000     # 后端端口

CMD /app/service.sh

由于要在 container 里先后启动前后端进程,然而每个 Dockerfile 中只允许出现一个 CMD 命令,因此我将需要运行的全部命令放在了一个脚本文件 “service.sh” 里,如下所示:

#!/bin/sh

curl -o- -L https://yarnpkg.com/install.sh | bash   # 安装 yarn

$HOME/.yarn/bin/yarn install                        # 安装 vue 项目依赖包

env GIN_MODE=release ./service > service.log &      # 在后台启动后端(已将go写的后端编译成二进制文件)

$HOME/.yarn/bin/yarn serve --host 0.0.0.0           # 启动前端(注意必须指定 --host 0.0.0.0)

之后是常规流程,先 build image(切换至项目所在目录):

docker build -t dashboard:0.0.1 .

再启动 container:

docker run -d -p 8000:8080 -p 3000:3000 dashboard:0.0.1

之后浏览器输入“http://<your-ip>:8000” 就可以看到页面啦!

猜你喜欢

转载自blog.csdn.net/muumian123/article/details/90137749