Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
shfshanyue committed Jan 4, 2020
1 parent 2ffa347 commit 585820e
Show file tree
Hide file tree
Showing 11 changed files with 158 additions and 26 deletions.
6 changes: 3 additions & 3 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,15 @@
1. [Dockerfile 最佳实践](https://shanyue.tech/op/dockerfile-practice.html)
1. [案例: 使用 docker 高效部署前端应用](https://shanyue.tech/op/deploy-fe-with-docker.html)
1. 使用 docker compose 编排容器
1. [compose 编排架构简介](https://shanyue.tech/op/docker-compose-arch.html)
1. [docker-compose 简易入门](https://shanyue.tech/op/docker-compose.html)
1. [docker compose 编排架构简介](https://shanyue.tech/op/docker-compose-arch.html)
1. [docker compose 简易入门](https://shanyue.tech/op/docker-compose.html)
1. [使用 traefik 做反向代理](https://shanyue.tech/op/traefik.html)
1. [使用 traefik 自动生成 https 的证书]() - TODO
1. [使用 dnsmasq 搭建本地 DNS 服务](https://shanyue.tech/op/dnsmasq.html)
1. [使用 openvpn 访问内部集群私有服务](https://shanyue.tech/op/openvpn.html)
1. [使用 postgres 做数据存储](https://shanyue.tech/op/deploy-postgres.html)
1. [使用 redis 做缓存服务](https://shanyue.tech/op/deploy-redis.html)
1. [使用 sentry 做异常监控](https://shanyue.tech/op/deploy-sentry.html)
1. [案例:一个 Node 应用的持续集成与部署实践]() - TODO
1. [案例:黑客增长 - 从博客向公众号引流](https://shanyue.tech/op/blog-to-wechat.html)
1. 使用 kubernetes 编排容器
1. [搭建一个 k8s 集群](https://github.com/shfshanyue/learn-k8s)
Expand Down
Binary file added assets/htop.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions compose/redis/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
version: '3'

services:
redis:
image: redis:5-alpine
restart: always
ports:
- 6379:6379
labels:
- traefik.http.routers.db.rule=Host(`redis.shanyue.local`)

# 使用已存在的 traefik 的 network
networks:
default:
external:
name: traefik_default
10 changes: 7 additions & 3 deletions deploy-postgres.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ date: 2019-01-04 20:37

## 部署

`docker-compose.yaml` 配置文件如下,可以通过 [compose/postgres](https://github.com/shfshanyue/op-note/blob/master/compose/postgres/docker-compose.yaml) 查看我的配置
使用官方镜像 `postgres:12-alpine` 进行数据库的部署

`docker-compose.yaml` 配置文件如下

> 关于配置文件,我维护在我的 github 仓库 [shfshanyue/op-note:compose](https://github.com/shfshanyue/op-note/tree/master/compose)
``` yaml
version: '3'
Expand All @@ -31,7 +35,7 @@ networks:
name: traefik_default
```
启动服务
`docker-compose up` 启动服务

``` bash
$ docker-compose up -d
Expand Down Expand Up @@ -61,4 +65,4 @@ $ brew install pgcli

``` bash
$ pgcli -h db.shanyue.local -U postgres
```
```
50 changes: 50 additions & 0 deletions deploy-redis.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
title: 使用 docker-compose 部署 postgres
date: 2019-01-04 20:37

---

# 部署 redis

## 部署

使用官方镜像 `redis:5-alpine` 进行部署

`docker-compose.yaml` 配置文件如下,由于我们仅仅把 `redis` 作为一个缓存服务,因此不做持久化的处理

> 关于配置文件,我维护在我的 github 仓库 [shfshanyue/op-note:compose](https://github.com/shfshanyue/op-note/tree/master/compose)
``` yaml
version: '3'

services:
redis:
image: redis:5-alpine
restart: always
ports:
- 6379:6379
labels:
- traefik.http.routers.db.rule=Host(`redis.shanyue.local`)

# 使用已存在的 traefik 的 network
networks:
default:
external:
name: traefik_default
```
`docker-compose up` 启动服务

``` bash
$ docker-compose up -d
```

## 连接 Redis

使用 `docker-compose exec` 测试是否能够正常连接redis

``` bash
$ docker-compose exec redis redis-cli
```

连接正常
69 changes: 68 additions & 1 deletion docker-compose-arch.md
Original file line number Diff line number Diff line change
@@ -1 +1,68 @@
# docker compose 编排容器架构简介
# docker-compose 编排架构简介

首先需要说一下服务器配置,只要你的服务器配置高于1核2G,均可使用该基础设施来管理你的个人服务器,你可以在服务中部署几个应用,并且把该服务器作为你的测试服务器来使用。但是你的应用过多,或者QPS稍大,可以相应地加强服务器配置。

现在来简述下一个低配置的个人服务器的基础设施架构图

![docker compose architecture](https://raw.githubusercontent.com/shfshanyue/graph/master/draw/docker-compose.jpg)

<!--more-->

## Traefik

架构图的最核心位置是 `traefik`,一个 `Edge Router`,它也是该基础设施的重点。

服务器内的所有应用服务,如 `postgres``redis` 以及自己所写的应用服务,都与 `traefik` 置于一个网络下,**它们共同组成了一个集群**

以下是我使用它的理由

+ 热更新配置,无需重启
+ 自动服务发现与负载均衡
+ TLS/SSL 证书的自动生成
+`docker` 的完美集成,基于 `container label` 的配置
+ 漂亮的 `dashboard` 界面

关于 `traefik` 可以参考文章 [Traefik 简易配置及入门](https://github.com/shfshanyue/op-note/blob/master/traefik.md)

## 请求路由

从图左侧可以看出,请求路由分为两大类。当然他们的路由规则都是通过 `traefik` 来控制

+ `shanyue.tech` 通过公有的域名提供公有的、可供互联网访问的服务。如博客,微信公众号开发,个人网站及后端服务等等
+ `shanyue.local` 通过私有的域名提供私有的、只供内部进群访问的服务,保证安全性。如数据库,redis等等

## 应用与服务

在图右侧,都是个人服务器里的应用,它们均是通过 `docker-compose` 部署。你可以在 [shfshanyue/op-note:compose](https://github.com/shfshanyue/op-note/tree/master/compose) 中找到所有的配置文件

只需要 `docker-compose up -d` 即可启动

+ `whoami`: 一个用以测试的服务,测试负载均衡及路由匹配等
+ `dns`: 集群内 DNS 服务,给自己的私有域名 `shanyue.local` 做解析
+ `openvpn`:与个人笔记本搭建局域网,方便访问个人服务器上服务以及调试页面
+ `postgres`
+ `redis`

本章将会讲述如何部署它们以及它们的配置文件。不过在此之前,你需要对 `docker` 以及 `docker-compose` 了解一些,参考以前文章

1. [docker 简易入门](https://github.com/shfshanyue/op-note/blob/master/docker.md)
1. [docker compose 简易入门](https://github.com/shfshanyue/op-note/blob/master/docker-compose.md)

## 私有服务

`shanyue.local` 路由所提供的服务都是私有服务,通过 `dnsmasq``openvpn` 在个人笔记本上进行访问。

+ [搭建集群内部 DNS 服务器](https://github.com/shfshanyue/op-note/blob/master/dnsmasq.md)
+ [使用 openvpn 访问集群私有服务](https://github.com/shfshanyue/op-note/blob/master/openvpn.md)

## 监控

个人服务器自然也需要监控,如负载,CPU,内存,网络,磁盘等。如果你服务器配置较高,且中有重要应用在跑时可以使用 `prometheus``grafana` 搭建一套监控系统,但是作为一个轻量的个人服务器,这样就显得小题大做,而且消耗极其资源。

关于该云服务器的 `metric` 可以直接在阿里云的监控面板上进行查看。但对于轻量的个人服务器,可以使用 `htop``ctop` 两个简单的命令行工具来搞定

+ `htop` 监控进程指标
+ `ctop` 监控容器指标

![htop](./assets/htop.jpg)
![ctop](./assets/ctop.png)
1 change: 0 additions & 1 deletion docker-network.md

This file was deleted.

1 change: 0 additions & 1 deletion docker-resource.md

This file was deleted.

Empty file removed image-and-container.md
Empty file.
26 changes: 14 additions & 12 deletions openvpn.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# 使用 openvpn 与集群内部服务通信

当我们访问集群内部服务,如数据库,缓存,`traefik Dashboard``gitlab` 时,如果直接暴露在公网中,则会造成很大安全隐患,而使用 `Basic Auth` 等也不能完全避开问题。此时在开发环境使用 `Virtual Private Network` 连接集群是一个不错的选择
当我们访问集群内部服务,如`postgres``redis``traefik Dashboard``gitlab` 时,如果直接暴露在公网中,会造成很大的安全隐患,而使用 `Basic Auth``WhiteList` 等也稍微有些繁琐

此时在开发环境使用 `VPN` 连接集群是一个不错的选择

> Q: [在集群中如何保证私有服务的安全性](https://github.com/shfshanyue/Daily-Question/issues/125)
Expand All @@ -11,8 +13,12 @@

## 部署 openvpn

我们使用 `docker-compose` 部署 `openvpn`

准备 `docker-compose.yaml` 如下,我们同样把它置于网络 `traefik-default` 下。`traefik-default``traefik` 用以服务发现的所有应用的入口网关,详情可参考上一节 [traefik 简易入门](https://github.com/shfshanyue/op-note/blob/master/traefik.md)

> 关于配置文件,我维护在我的 github 仓库 [shfshanyue/op-note:compose](https://github.com/shfshanyue/op-note/tree/master/compose)
``` yaml
version: '3'
services:
Expand All @@ -33,7 +39,7 @@ networks:
name: traefik_default
```
初始化配置文件,注意替换掉你真实的公网IP,并且需要在 `iptables` 或者阿里云安全组中把 1194 端口给暴露出来
初始化配置文件,注意替换掉你真实的公网IP,并且需要在 `iptables` 或者阿里云安全组中 1194 端口接收端口转发

``` bash
$ docker run -v $(pwd)/openvpn-data/conf:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://<IP>
Expand Down Expand Up @@ -65,14 +71,12 @@ $ docker run -v $(pwd)/openvpn-data/conf:/etc/openvpn --log-driver=none --rm kyl
rsync -avhzP dev:/path/openvpn/shanyue.ovpn .
```

使用 [tunnelblick](https://tunnelblick.net/) 打开配置文件,点击连接 vpn,连接成功
下载并使用工具 [tunnelblick](https://tunnelblick.net/) 打开生成的配置文件,点击连接 vpn,连接成功

## 访问内部集群

在 [traefik 简易入门](https://github.com/shfshanyue/op-note/blob/master/traefik.md) 中,我们在集群中配置了 `whoami.docker.localhost` 用以访问 `whoami` 服务。

**此时我们通过在本地环境连接 VPN,查看在本地是否可以访问集群服务**

查看 `traefik` 的网络 IP

``` bash
Expand All @@ -90,7 +94,7 @@ $ docker network inspect traefik-default
},
```

找到 IP 后,我们通过 `curl` 查看服务是否可以正常访问
找到 IP 后,我们通过 `curl` 查看服务是否可以正常访问,服务正常

``` bash
$ curl -H Host:whoami.docker.localhost http://172.18.0.1
Expand All @@ -111,8 +115,6 @@ X-Forwarded-Server: 11e1f03c87ef
X-Real-Ip: 172.18.0.1
```

此时在本地环境可以通过 `openvpn` 来连接内部集群

## 关于 Host

此时我们访问 `whoami.docker.localhost` 仍然是通过指定 Host 的方式
Expand All @@ -131,11 +133,11 @@ $ curl -H Host:whoami.docker.localhost http://172.18.0.1

## 本地 DNS 设置

上一章节我们已经搭建好了本地的DNS服务器,此时我们需要做的是在**连接上openVPN时自动修改/etc/resolv.conf**
[使用 dnsmasq 为内部集群搭建本地 DNS 服务器](https://github.com/shfshanyue/op-note/blob/master/dnsmasq.md),搭建好本地 DNS 服务器后,此时我们需要做的是在**连接上openVPN时自动修改/etc/resolv.conf**

这里有关于 `openvpn` 配置文件的官方文档: [Openvpn How To](https://openvpn.net/community-resources/how-to/#pushing-dhcp-options-to-clients)

修改服务器中的配置文件 `openvpn-data/conf/openvpn.conf`,添加一行。它会修改客户端的 DNS nameserver 地址为 `172.18.0.1`
修改服务器中的配置文件 `openvpn-data/conf/openvpn.conf`,添加一行,如下所示。它会修改客户端的 DNS nameserver 地址为 `172.18.0.1`

``` conf
# 在所有客户端设置 DNS 服务器为 172.18.0.1
Expand All @@ -157,7 +159,7 @@ search openvpn
nameserver 172.18.0.1
```

此时可以直接 `curl` 该地址
此时可以直接 `curl` 该地址,连接成功

``` bash
$ curl whoami.docker.localhost
Expand All @@ -176,4 +178,4 @@ X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: 9d783174aca9
X-Real-Ip: 172.18.0.1
```
```
5 changes: 0 additions & 5 deletions pg-and-redis.md

This file was deleted.

0 comments on commit 585820e

Please sign in to comment.