Docker-compose部署Golang&Angular项目

953 阅读2分钟

由于自己一台放demo的闲置服务器被入侵了,变成了矿机。借着这个由头,把服务器格了,准备重新部署。

但是如果还是老办法,按步骤一个一个安装 Postgres , 部署golang api ,部署nginx 跑angular,有点烦。 所以这几天,研究了一下怎么使用docker-compose来一键部署项目,发现,真香啊。

第一步:

  安装docker-compose

root@hrgdrc:~/project# curl -sSL https://get.daocloud.io/docker | sh
root@hrgdrc:/home# curl -L https://get.daocloud.io/docker/compose/releases/download/1.28.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose 
root@hrgdrc:/usr/local/bin# chmod +x docker-compose  

然后创建一个目录存放文件 

mkdir docker-project 
构建一个golang的容器
➜  docker-hr git:(main) cat Dockerfile 
FROM golang:alpine
RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk update && \
    apk add postgresql-dev bash
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' > /etc/timezone
USER appuser
RUN mkdir /home/appuser/config
RUN mkdir /home/appuser/src
WORKDIR /home/appuser/src
COPY --chown=appuser:appgroup  ./project/ ./

然后将golangr 二进制文件放到project目录之后。这里有一点要注意的是,由于我们容器使用的是alpine版本,所以在编译go的时候可以这么做:

CGO_ENABLED=0 go build main.go  

第二步:创建docker-compose.yaml

  docker-hr git:(main) cat docker-compose.yml 
version: '3'
services: 
  db:
    image: postgres:latest
    container_name: postgres01
    environment:
         POSTGRES_PASSWORD: 123456
         POSTGRES_USER: postgres
         POSTGRES_DB: db_hr
    ports:
      - "5433:5432"
    networks: ['mynetwork']
  web:
    build: .
    container_name: hr
    command: bash -c "./main"
    volumes:
      - ./project:/src
    expose:
      - "8081"
      - "8080"
    ports:
      - "8090:8080"
    stdin_open: false
    links:
      - db
    tty: false
    networks: ['mynetwork']
    restart: always
  nginx:
    image: nginx
    container_name: nginx03
    ports:
      - "8010:80"
    volumes:
      - ./project/front:/usr/share/nginx/html
      - ./config/nginx:/etc/nginx/conf.d
    links:
      - web 
    networks: ['mynetwork']
    restart: always
networks: {mynetwork: {}}

这里使用了 networks: ['mynetwork'] 将3个容器都部署在同一个网络之中。

第三步: nginx配置

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /usr/share/nginx/html;

        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                try_files $uri $uri/ /index.html =404;  # 这一行最关键
        }

}

最后一步:   

1、 登录服务器   

shell 
        root@hrgdrc:/home# apt update
     	root@hrgdrc:/home# apt install git 

2、安装docker-compose

详见上面第一步

3、进入服务器拉取github

root@hrgdrc:~/project# git pull https://github.com.cnpmjs.org/yeelone/salary-docker-compose.git

4、构建docker-compose

root@hrgdrc:~/project# docker-compose build 
root@hrgdrc:~/project# docker-compose up 

5、记得在你的云服务器上放开相应的端口

总结:使用docker-compose之后,部署变得相当简单。

项目相关 :

体验地址:http://47.104.154.41:8010/dashboard

github地址:github.com/yeelone/sal…

项目核心开源:github.com/yeelone/hr-…