今天偶然得知了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的安装脚本,略有修改。这里只解压出来必要的文件,其他不需要的不解压。执行至此我们的工作目录下应该有v2ray
、v2ctl
、geoip.dat
、geosite.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 处获得。
羊毛无处不在的,哈哈