MENU

【歪门邪道】IBM Cloud之Cloud Foundry初体验

September 9, 2020 • 瞎折腾

今天偶然得知了IBM Cloud,看了一下他们的免费计划,相比其他厂子,阿里云之类的都不能与之相提并论,谷歌甚至都要差他一些——IBM的免费计划真的太香了。

今天先尝试一下他们的Paas服务:Cloud Foundry。关于免费计划的更多内容可以移步此处

简介

关于Cloud Foundry我没有太多的了解,从刚刚上手的体验来说有点像是Docker的模式。因为实例本身并不像VPS那样需要用户来维护服务器,整个部署有点类似Google云的方式:你需要将你的程序打包,然后利用他们的命令行部署到云端的容器上。

关于Cloud Foundry的更多信息可以移步他们的官网

上手

由于确实是不太了解这个东西,因此参照着网上的教程搭建了一个WebSocket模式的V2Ray服务器。因为手头也没啥可供演示的web服务,因此就决定用它了。话先说在前:免费计划提供的服务推测应该是为了开发而提供的,因此免费容器10天没有操作就会被回收,而且机房的位置也很有限,从实际来说搭建完成的服务连通性也不是很好,只能说是勉强能打开网页的那种。

关于Cloud Foundry的使用方式,其实有很多种,这里用的一种是利用IBM Cloud Shell执行后面编写的脚本,下载V2Ray的二进制文件,然后产生配置,最后部署。

自动化部署脚本

准备工作目录

rm -rf v2ray-cloudfoundry
mkdir v2ray-cloudfoundry
cd v2ray-cloudfoundry

我觉得这三行代码没啥好说的。

下载最新版V2Ray

TMP_FILE="$(mktemp)"
if ! curl -s -o "$TMP_FILE" 'https://api.github.com/repos/v2fly/v2ray-core/releases/latest'; then
    rm "$TMP_FILE"
    echo 'error when fetching v2ray version, exit.'
    exit 1
fi
RELEASE_LATEST="$(sed 'y/,/\n/' "$TMP_FILE" | grep 'tag_name' | awk -F '"' '{print $4}')"
rm "$TMP_FILE"
echo "V2Ray version: $RELEASE_LATEST"
# Download latest release
DOWNLOAD_LINK="https://github.com/v2fly/v2ray-core/releases/download/$RELEASE_LATEST/v2ray-linux-64.zip"
if ! curl -L -H 'Cache-Control: no-cache' -o "latest-v2ray.zip" "$DOWNLOAD_LINK"; then
    echo 'error when downloading v2ray, exit.'
    return 1
fi
unzip latest-v2ray.zip v2ray v2ctl geoip.dat geosite.dat
rm latest-v2ray.zip

chmod 0755 ./*

这段代码的来源为V2Ray的安装脚本,略有修改。这里只解压出来必要的文件,其他不需要的不解压。执行至此我们的工作目录下应该有v2rayv2ctlgeoip.datgeosite.dat这四个文件。

创建配置文件

这一步需要创建Cloud Foundry和V2Ray的配置文件。

cat > manifest.yml << EOF
applications:
- path: .
  name: YOUR INSTANCE NAME
  buildpack: binary_buildpack
  random-route: true
  command: ./v2ray -c config.json
  memory: 256M
EOF

cat > config.json << EOF
{
    "dns":{
        "hosts":{},
        "servers":[
            "8.8.8.8",
            "8.8.4.4",
            "localhost"
        ]
    },
    "inbounds": [{
        "port":8080,
        "protocol":"vmess",
        "settings":{
            "clients":[
                {
                    "id":"YOUR UUID HERE",
                    "level":1,
                    "alterId":64,
                    "email":"YOUR EMAIL"
                }
            ]
        },
        "streamSettings": {
            "network":"ws",
            "wsSettings": {
                "path": ""
            }
        },
        "tag":"MainIn"
    }],
    "outbounds": [{
        "protocol": "freedom",
        "settings": {}
    }]
}
EOF

这里要注意的是Cloud Foundry默认的Web端口是8080,然后IBM Cloud会将容器的8080端口映射到实例的地址上,而且还是自带SSH的,我觉得还挺好。

自己使用的话需要将YOUR ... NAME的地方改成你自己需要的值,关于Cloud Foundry的配置文件说明,可以参考这个文档

部署

这一步将实际部署V2Ray到示例上。目前的操作其实还是在IBM提供的Shell里面。

ibmcloud target --cf
ibmcloud cf push

这里需要注意的一点是如果没有在IBM Cloud Shell中执行这个脚本,那么在执行这两段之前先要执行一个ibmcloud login登录才行。

完整脚本

#!/bin/bash
rm -rf v2ray-cloudfoundry
mkdir v2ray-cloudfoundry
cd v2ray-cloudfoundry

echo "Downloading V2ray..."

# Script from https://github.com/v2fly/fhs-install-v2ray/blob/master/install-release.sh
# Get V2Ray release version number
TMP_FILE="$(mktemp)"
if ! curl -s -o "$TMP_FILE" 'https://api.github.com/repos/v2fly/v2ray-core/releases/latest'; then
    rm "$TMP_FILE"
    echo 'error when fetching v2ray version, exit.'
    exit 1
fi
RELEASE_LATEST="$(sed 'y/,/\n/' "$TMP_FILE" | grep 'tag_name' | awk -F '"' '{print $4}')"
rm "$TMP_FILE"
echo "V2Ray version: $RELEASE_LATEST"
# Download latest release
DOWNLOAD_LINK="https://github.com/v2fly/v2ray-core/releases/download/$RELEASE_LATEST/v2ray-linux-64.zip"
if ! curl -L -H 'Cache-Control: no-cache' -o "latest-v2ray.zip" "$DOWNLOAD_LINK"; then
    echo 'error when downloading v2ray, exit.'
    return 1
fi
unzip latest-v2ray.zip v2ray v2ctl geoip.dat geosite.dat
rm latest-v2ray.zip

chmod 0755 ./*

echo "Staring configuration..."

cat > manifest.yml << EOF
applications:
- path: .
  name: skyblond-v2ray
  buildpack: binary_buildpack
  random-route: true
  command: ./v2ray -c config.json
  memory: 256M
EOF

cat > config.json << EOF
{
    "dns":{
        "hosts":{},
        "servers":[
            "8.8.8.8",
            "8.8.4.4",
            "localhost"
        ]
    },
    "inbounds": [{
        "port":8080,
        "protocol":"vmess",
        "settings":{
            "clients":[
                {
                    "id":"1db62b04-e59e-40a3-b9db-4590c02f515d",
                    "level":1,
                    "alterId":64,
                    "email":"hurui200320@126.com"
                }
            ]
        },
        "streamSettings": {
            "network":"ws",
            "wsSettings": {
                "path": ""
            }
        },
        "tag":"MainIn"
    }],
    "outbounds": [{
        "protocol": "freedom",
        "settings": {}
    }]
}
EOF

echo "Start deploying..."

ibmcloud target --cf
ibmcloud cf push

结尾

效果诚如开头所说,用于科学上网的话其实还是很勉强的,速度也只是将将能打开网页的那种程度。所以我想这个东西还是用作更加实际的应用比较好。比如一个简单的HTTP服务什么的,这个免费版的内存配额只有256MB,我看JRE要求的最低内存是128MB,所以我想悬一悬应该能放一个Java的API上去,而且这个Cloud Foundry也支持Java,日后可以一试。

-全文完-

P.S:在滴滴没白混,会写Shell了(逃


知识共享许可协议
【歪门邪道】IBM Cloud之Cloud Foundry初体验天空 Blond 采用 知识共享 署名 - 非商业性使用 - 相同方式共享 4.0 国际 许可协议进行许可。
本许可协议授权之外的使用权限可以从 https://skyblond.info/about.html 处获得。

Archives QR Code
QR Code for this page
Tipping QR Code