# 构建案例集合

在将项目迁移到微信云托管的过程中，因为缺少 dockerfile 等必要的构建文件，同时自己又没有相关的经验，导致迁移出现卡点。

此项目整理了一些常见的项目案例场景，可以根据自己的需要下载对应文件夹的内容，按照说明替换成自己的项目文件。

此文档指向的[Github 项目](https://github.com/WeixinCloud/DockerTemplate)

## 一、项目清单

### 1. [Nginx+HTML 分发模板](HTTPS://github.com/WeixinCloud/DockerTemplate/tree/master/nginxdist)

如果你有 vue 或者其他打包的 web 的项目，需要使用 nginx 分发，可以参考此模板，将其中的 dist 文件夹内容替换成自己的项目内容。

Nginx 分发配置，可以直接修改根目录的 `my.conf`

#### 2. [Nginx+Node 分发模板](HTTPS://github.com/WeixinCloud/DockerTemplate/tree/master/nginxnode)

如果有一个 node 项目，同时需要 nginx 做反向代理，实现一些扩展需求，则可以参考此项目。

此处 Dockerfile 中最后 CMD 命令，是执行 sh 文件，可以在 app/start.sh 编写修改。

Nginx 分发配置，可以直接修改根目录的 `my.conf`

#### 3. [PHP 中 SG11 扩展安装模板](phpsg11)

发问的人比较多，在这里直接写一下，给了一个 php 单一文件，如果是框架项目，需按需自己修改 Dockerfile 的安装步骤。

SG11 的安装命令如下，可以在自己 dockerfile 的 FROM 下面一行添加下述命令，也可以整合你自己的安装步骤。

``` dockerfile
RUN PHP_VERSION=$(php -v | head -n1 | cut -d' ' -f2 | cut -d. -f1-2) \
    && mkdir -p /tmp/sourceguardian \
    && cd /tmp/sourceguardian \
    && curl -Os https://www.sourceguardian.com/loaders/download/loaders.linux-x86_64.tar.gz \
    && tar xzf loaders.linux-x86_64.tar.gz \
    && cp ixed.${PHP_VERSION}.lin "$(php -i | grep '^extension_dir =' | cut -d' ' -f3)/sourceguardian.so" \
    && echo "extension=sourceguardian.so" > /usr/local/etc/php/conf.d/15-sourceguardian.ini \
    && rm -rf /tmp/sourceguardian
```

#### 4. [jetty 应用模板](HTTPS://github.com/WeixinCloud/DockerTemplate/tree/master/jetty)

如果你需要使用 jetty 来部署 web 应用，可以参考此案例。有些同学在 podman 上可以正常运行，迁移到云托管就一直启动不起来。

在这里需要注意，**微信云托管的 k8s 底层，使用的是 docker，需要在我们提供的镜像在启动时运行一个守护进程(docker daemon)，而 podman 不需要；** 所以这里就产生了差异。

在这里我们提供了一个可以适用于云托管的 docker 模板，可以自行取用。

#### 5. [Nginx+java-openjdk 分发模板](HTTPS://github.com/WeixinCloud/DockerTemplate/tree/master/nginxjava/)

如果有一个 java 项目，一般是 springboot 或者其他框架项目，构建产物为 jar 包，同时需要 nginx 做反向代理，实现一些扩展需求，则可以参考此项目。

此处 Dockerfile 中最后 CMD 命令，是执行 sh 文件，可以在 dist/start.sh 编写修改。

Nginx 分发配置，可以直接修改 `dist/my.conf`

很多情况下，你需要将自己的域名根路径自动跳转成 www 开头，这种就可以使用 nginx 域名规则配置

比如，你想使用户在访问 `cloudbase.net` 时，自动路由为 `www.cloudbase.net`

nginx 配置如下：

``` conf
# 前面的配置省略，请参考nginx规则
server {
    listen       80;
    server_name  cloudbase.net www.cloudbase.net;
    if ($host != 'www.cloudbase.net') {
        rewrite ^/(.*)$ http://www.cloudbase.net/$1 permanent;
    }
    location / {
        # 你的其他路由规则，按照你的需要配置
        # proxy_pass http://127.0.0.1:8080/;
    }
}
```

同时需要在云托管服务自定义域名，配置 `cloudbase.net` 和 `www.cloudbase.net` 指向此服务

#### 6. [Nginx+Node 简易 WebSocket](HTTPS://github.com/WeixinCloud/DockerTemplate/tree/master/websocket/)

使用 Node.js 构建了一个简单的 WebSocket 服务，直接链接最终域名根目录即可使用，用于测试微信云托管与客户端的连通性。

nginx 转发配置，可以直接修改 my.conf 内容，启动命令在 app/start.sh 中修改

由于历史原因，部分服务提供的默认域名仍然不支持 websocket，可以按照以下程式转换一下。

``` js
function getwsurl(envid,url){
    return url.replace(/[-][0-9]*[-]/,`-${envid}-`).replace('tcloudbase.com','wxcloudrun.com').replace('https://','wss://')
}

getwsurl('你的环境ID','服务默认域名')

// getwsurl('wxrun-demo','https://wss-923625-1300000000.ap-shanghai.run.tcloudbase.com')
// wss://wss-wxrun-demo-1300000000.ap-shanghai.run.wxcloudrun.com
```

## 二、贡献者征集

欢迎有经验的开发者来贡献自己认为比较常用的项目包，直接提交 PR，我们会在 review 后合并到项目里。

- [zirali 李冠宇](https://github.com/Tcloudbase)
