一,前言

项目为《Go Web编程(新加坡)郑兆雄著 , 黄健宏译》中的一个发帖网站,
通过学习了和实践,在本地完成了该项目,想在服务器上面进行部署。

二,云服务器申请和配置

2.1 申请服务器

首先,申请云服务器。google,AWS,阿里云,腾讯云等申请都比较麻烦,最后在华为云上面申请到了免费7天的服务。
想尝试的同学可以自己百度,如果有过经验,可以直接跳过,我申请的系统是debian,个人觉得比centos在安装docker时方便一些。修改安全组,设置入方向规则,主要是添加外网访问端口。
在这里插入图片描述

2.2 安装docker

通过ssh进入服务器,安装docker。我这里是通过docker的deb文件进行安装的。docker-compose是通过pip安装。

三,docker-compose打包

准备好源代码文件。文件和文件夹的目录结构如下:

.
├── chitchatclient
│   ├── chitchat
│   └── Dockerfile
├── createdbsql
│   ├── Dockerfile
│   └── setup.sql
└── docker-compose.yml

包括了一个web server 和 postgres文件夹。

3.1 构建server

通过Dockerfile构建chitchatclient,代码如下。

FROM golang 
ADD chitchat/. /go/src/chitchat
WORKDIR /go/src/chitchat
RUN go get github.com/lib/pq
RUN go build 
ENTRYPOINT ./chitchat
EXPOSE 8080

golang源镜像开始,将代码文件拷贝到容器的相关路径中去,然后编译,最后设置容器启动入口,即启动编译好的server程序,容器端口为8080。

3.2 构建数据库
FROM postgres
MAINTAINER mxq(yzwmxq@gmail.com)

COPY setup.sql /docker-entrypoint-initdb.d
EXPOSE 5432

这里从postgres源镜像构建,将文件夹下面用于创建初始表的setup.sql拷贝到容器的初始化目录中,这样在启动容器时会自动创建表。
最后使用默认端口5432。

3.3 docker-compose

在docker-compose.yml中配置两个容器的相关服务。

version: '2'
networks:
  chitchat:
services:
  chitchatclient: 
    build: chitchatclient 
    networks:
      - chitchat
    depends_on:
      - psqlservice
    ports:
      - 8080:8080
  psqlservice:
    restart: always
    build: createdbsql
    networks:
      - chitchat
    environment:
      POSTGRES_DB: chitchat
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: mxq123
    volumes:
      - $PWD/data:/var/lib/postgresql/data
    ports: 
      - 5432:5432

两个容器都是通过build的方式进行创建,数据库的配置需要设置和server程序中相对应的数据库名,用户名,密码等,且将根目录下data文件夹(如果没有,则自动创建该文件夹)挂载到数据库容器中存放数据的地方。最后两者都需要进行端口映射,否则无法通过本地进行访问。
这里有一个疑问,postgres进行端口映射之后,本地可以通过localhost访问数据库,但是chitchat启动容器无法访问,这里只能通过postgres的ip进行链接。本案例中用的是172.17.0.2,在不同的环境中这个地址也会改变。希望有大神能告诉我,该怎么设置让一个容器通过localhost访问另一个容器中的数据库。
完成以上工作后,通过docker-compose进行编译运行。

docker-compose up -d

以上操作会进行yml文件中的所有操作,包括下载镜像,编译,数据拷贝,端口映射等操作。-d 表示以守护进程的方式运行,不会看到运行后的相关细节,如果想看具体的运行过程,可以去掉-d。
如果最后显示以下信息,表示镜像构建完成,但是不表示容器可以正确运行。

Starting docker-chitchat_psqlservice_1 ... done
Starting docker-chitchat_chitchatclient_1 ... done

具体还需要打开网站通过云服务器的公网ip:8080进行访问。

访问结果如下(下图是已经创建了几个帖子之后):
在这里插入图片描述
通过docker-compose,如果操作失败,则需要一下操作:

docker-compose stop 表示停止相关容器的运行
docker-compose rm 删除容器
docker-compose build 重新构建镜像
docker-compose up 运行

最后提供本文中代码地址,欢迎大家留言和讨论。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐