| 1 | + | --- |
| 2 | + | title: PaaS 平台部署 |
| 3 | + | date: 2024-04-02 18:40:46 |
| 4 | + | permalink: /guide/paas |
| 5 | + | article: false |
| 6 | + | --- |
| 7 | + | |
| 8 | + | # PaaS 平台部署 |
| 9 | + | |
| 10 | + | SeaMoon 的服务端其实支持部署到多种 PaaS 类型的平台 |
| 11 | + | |
| 12 | + | ## 部署到Sealos: 拥抱更便宜、更舒适、更优美可控的云服务平台 |
| 13 | + | |
| 14 | + | [Sealos公有云地址](https://cloud.sealos.io/) |
| 15 | + | |
| 16 | + | |
| 17 | + | 先说下我喜欢Sealos的原因: |
| 18 | + | |
| 19 | + | <font color="pink"><b>简单的页面,适合新手小白,无需了解过多的云服务相关知识</b></font> |
| 20 | + | |
| 21 | + | <font style="fontSize:small">操作起来和操作一个os一样,点击、配置、部署,一气呵成。 对比各大厂的balabala一堆限制,sealos的门槛更低,更适合小白上手。 </font> |
| 22 | + | |
| 23 | + | ![sealos-dashboard](https://seamoon.oss-cn-hangzhou.aliyuncs.com/b792343632554e7fab560b74d3fb57b7.png) |
| 24 | + | |
| 25 | + | <font color="pink"><b>简单易懂的计费方式:花费更低,效果不变</b></font> |
| 26 | + | |
| 27 | + | <font style="fontSize:small">对比各大厂花里胡哨的各项计费指标(尤其是流量也要收费),sealos的计费方式真正的做到按照计算量计费,费用透明,整体使用下来价格更低。</font> |
| 28 | + | |
| 29 | + | ![sealos-app](https://seamoon.oss-cn-hangzhou.aliyuncs.com/31c6d9dae9534812b909e1a5f9cf3df8.png) |
| 30 | + | |
| 31 | + | <font color="pink"><b>配置更加灵活:不用了pause、用的时候start、想要多少的IP自行可控</b></font> |
| 32 | + | |
| 33 | + | |
| 34 | + | <font style="fontSize:small">sealos支持快速弹性扩容,当需求高时,可以调低扩容触发点,获取到更多IP 当不需要使用时,可以快速的pause停止;下次使用时又能快速的恢复。</font> |
| 35 | + | |
| 36 | + | ![sealos-container](https://seamoon.oss-cn-hangzhou.aliyuncs.com/500897ae5b5f48d9b20f18d3f3eaa7ea.png) |
| 37 | + | |
| 38 | + | ### 如何部署 |
| 39 | + | |
| 40 | + | sealos上部署seamoon服务将更加简单,只需要鼠标点击操作: |
| 41 | + | |
| 42 | + | #### Step.1 注册账户 |
| 43 | + | |
| 44 | + | 注册并登陆[cloud.sealos.io](https://cloud.sealos.io/), 点击`App Launchpad` |
| 45 | + | |
| 46 | + | ![sealos-applanch](https://seamoon.oss-cn-hangzhou.aliyuncs.com/4bfbdf9f9ad5440b91ec85831c062b07.png) |
| 47 | + | |
| 48 | + | |
| 49 | + | #### Step.2 部署 |
| 50 | + | |
| 51 | + | ::: warning 注意 |
| 52 | + | sealos 并不是部署一个服务 就带着两种类型的隧道。因此,如果你希望使用 websocket 隧道, 需要部署 websocket 类型的服务。 |
| 53 | + | |
| 54 | + | 同样的,如果你需要 grpc 隧道,选择部署 grpc 服务。 |
| 55 | + | ::: |
| 56 | + | |
| 57 | + | 点击右上角`create application`, 如下填写参数: |
| 58 | + | |
| 59 | + | ![sealos-config](https://seamoon.oss-cn-hangzhou.aliyuncs.com/f331255e64724bba8d84add292cae6e0.png) |
| 60 | + | |
| 61 | + | ::: tip 提示 |
| 62 | + | 此处,如果你部署的是 grpc 隧道的话,请将端口改为 8089,协议选择 grpc, 如下图: |
| 63 | + | ![sealos-config-grpc](https://seamoon.oss-cn-hangzhou.aliyuncs.com/68f55dbfb40d4310b9aae6674d335817.png) |
| 64 | + | ::: |
| 65 | + | |
| 66 | + | 往下拉,还有高级配置里面的启动命令: |
| 67 | + | |
| 68 | + | ![sealos-config-2](https://seamoon.oss-cn-hangzhou.aliyuncs.com/7c92e240241845869b6b796d42ff1e31.png) |
| 69 | + | |
| 70 | + | ::: tip 提示 |
| 71 | + | 此处,如果你部署的是 grpc 隧道的话,请修改此处的启动命令为: |
| 72 | + | `/app/seamoon server -p 8089 -t grpc` , 如下图: |
| 73 | + | ![sealos-config-grpc-2](https://seamoon.oss-cn-hangzhou.aliyuncs.com/608d9fcde8684d5cb19940bb33e90a4a.png) |
| 74 | + | ::: |
| 75 | + | |
| 76 | + | 你也可以直接选择yaml文件,参考如下: |
| 77 | + | |
| 78 | + | > 注意,下面的 yaml 仅供参考,我隐去了一些身份相关的字段,没有展示出来,只列出了一些关键的项目。 |
| 79 | + | > 可以用于参考和对比。没出现的参数代表意义不大,不用管。 |
| 80 | + | |
| 81 | + | <code-group> |
| 82 | + | <code-block title="service.yaml" active> |
| 83 | + | |
| 84 | + | ```yaml |
| 85 | + | apiVersion: v1 |
| 86 | + | kind: Service |
| 87 | + | metadata: |
| 88 | + | name: seamoon-ws |
| 89 | + | labels: |
| 90 | + | cloud.sealos.io/app-deploy-manager: seamoon-ws |
| 91 | + | spec: |
| 92 | + | ports: |
| 93 | + | - port: 9000 |
| 94 | + | targetPort: 9000 |
| 95 | + | selector: |
| 96 | + | app: seamoon-ws |
| 97 | + | ``` |
| 98 | + | |
| 99 | + | </code-block> |
| 100 | + | |
| 101 | + | <code-block title="deployment.yaml"> |
| 102 | + | |
| 103 | + | ```yaml |
| 104 | + | apiVersion: apps/v1 |
| 105 | + | kind: Deployment |
| 106 | + | metadata: |
| 107 | + | name: seamoon-server |
| 108 | + | annotations: |
| 109 | + | originImageName: dvkunion/seamoon-server:latest |
| 110 | + | deploy.cloud.sealos.io/minReplicas: '1' |
| 111 | + | deploy.cloud.sealos.io/maxReplicas: '1' |
| 112 | + | deploy.cloud.sealos.io/resize: 0Gi |
| 113 | + | labels: |
| 114 | + | cloud.sealos.io/app-deploy-manager: seamoon-server |
| 115 | + | app: seamoon-server |
| 116 | + | spec: |
| 117 | + | replicas: 1 |
| 118 | + | revisionHistoryLimit: 1 |
| 119 | + | selector: |
| 120 | + | matchLabels: |
| 121 | + | app: seamoon-server |
| 122 | + | strategy: |
| 123 | + | type: RollingUpdate |
| 124 | + | rollingUpdate: |
| 125 | + | maxUnavailable: 0 |
| 126 | + | maxSurge: 1 |
| 127 | + | template: |
| 128 | + | metadata: |
| 129 | + | labels: |
| 130 | + | app: seamoon-server |
| 131 | + | spec: |
| 132 | + | containers: |
| 133 | + | - name: seamoon-server |
| 134 | + | image: dvkunion/seamoon-server:latest |
| 135 | + | env: |
| 136 | + | - name: serverMod |
| 137 | + | value: socks5 |
| 138 | + | resources: |
| 139 | + | requests: |
| 140 | + | cpu: 10m |
| 141 | + | memory: 6Mi |
| 142 | + | limits: |
| 143 | + | cpu: 100m |
| 144 | + | memory: 64Mi |
| 145 | + | ports: |
| 146 | + | - containerPort: 9000 |
| 147 | + | name: '' |
| 148 | + | imagePullPolicy: Always |
| 149 | + | volumeMounts: [] |
| 150 | + | volumes: [] |
| 151 | + | ``` |
| 152 | + | |
| 153 | + | </code-block> |
| 154 | + | |
| 155 | + | <code-block title="ingress.yaml"> |
| 156 | + | |
| 157 | + | ```yaml |
| 158 | + | apiVersion: networking.k8s.io/v1 |
| 159 | + | kind: Ingress |
| 160 | + | metadata: |
| 161 | + | name: network-xxxxxxxx |
| 162 | + | labels: |
| 163 | + | cloud.sealos.io/app-deploy-manager: seamoon-ws |
| 164 | + | annotations: |
| 165 | + | kubernetes.io/ingress.class: nginx |
| 166 | + | nginx.ingress.kubernetes.io/proxy-body-size: 32m |
| 167 | + | nginx.ingress.kubernetes.io/proxy-read-timeout: '3600' |
| 168 | + | nginx.ingress.kubernetes.io/proxy-send-timeout: '3600' |
| 169 | + | nginx.ingress.kubernetes.io/backend-protocol: WS |
| 170 | + | spec: |
| 171 | + | rules: |
| 172 | + | - host: "*****" # 系统自动生成 |
| 173 | + | http: |
| 174 | + | paths: |
| 175 | + | - pathType: Prefix |
| 176 | + | path: / |
| 177 | + | backend: |
| 178 | + | service: |
| 179 | + | name: seamoon-ws |
| 180 | + | port: |
| 181 | + | number: 9000 |
| 182 | + | tls: |
| 183 | + | - hosts: |
| 184 | + | - "*****" # 系统自动生成 |
| 185 | + | secretName: wildcard-cloud-sealos-io-cert |
| 186 | + | ``` |
| 187 | + | |
| 188 | + | </code-block> |
| 189 | + | </code-group> |
| 190 | + | |
| 191 | + | |
| 192 | + | #### Step.3 本地客户端 |
| 193 | + | |
| 194 | + | 填写完成后,点击右上角 `Deploy`, 等待部署完成,状态success后,获取到服务地址。 |
| 195 | + | |
| 196 | + | 然后在本地启动客户端,推荐 docker 一键拉起: |
| 197 | + | |
| 198 | + | ```shell |
| 199 | + | $ docker run -it -d --net=host dvkunion/seamoon proxy |
| 200 | + | ``` |
| 201 | + | |
| 202 | + | 默认使用`--net=host`模式, 如需要高级设置,如下: |
| 203 | + | |
| 204 | + | ```shell |
| 205 | + | $ docker run -it -d -p 7777:7777 -p 1080:1080 dvkunion/seamoon proxy |
| 206 | + | ``` |
| 207 | + | |
| 208 | + | 访问本地控制台 localhost:7777 , 将此地址填入客户端即可。 |
| 209 | + | |
| 210 | + | ::: tip 如何填写地址 |
| 211 | + | 填写的代理 sealos 已经明确给出,如: wss:// 或是 grcps://, 如下图: |
| 212 | + | |
| 213 | + | ![sealos-config-grpc-addr](https://seamoon.oss-cn-hangzhou.aliyuncs.com/3ff1604871c547d2af492c5fd37428f7.png) |
| 214 | + | |
| 215 | + | wss 隧道直接复制即可,注意 grpc 服务还需要指定一下端口号,一般都是 443,最终配置如: grpcs://xxxxxxxx.cloud.sealos.io:443。 |
| 216 | + | ::: |
| 217 | + | |
| 218 | + | ![sealos-config](https://seamoon.oss-cn-hangzhou.aliyuncs.com/a931e0b42c8748649d5156b2b0884fcb.png) |
| 219 | + | |
| 220 | + | ### 效果展示 |
| 221 | + | |
| 222 | + | [旺柴] 谷歌云的IP访问谷歌简直不能再丝滑 |
| 223 | + | |
| 224 | + | ![sealos](https://seamoon.oss-cn-hangzhou.aliyuncs.com/ff9eb3ec14fa417daca7a661f9b4ecff.png) |
| 225 | + | |
| 226 | + | 整体带宽在10-30左右,可能和我客户端出口带宽也有关系,应该是普通的带宽。(不过价格也在这里了要啥自行车,反正够用) |
| 227 | + | |
| 228 | + | ![speed](https://seamoon.oss-cn-hangzhou.aliyuncs.com/7bfff588795a4e41b488694ad4eb5153.png) |
| 229 | + | |
| 230 | + | 如果不需要多IP,实例副本数目固定为1即可;如果需要多IP,副本越多,获取到的IP就越多。(理性使用) |
| 231 | + | |
| 232 | + | |
| 233 | + | ## 部署到Render: ~~免费的永远是最好的~~去**的免费的,号没了 |
| 234 | + | |
| 235 | + | ::: danger |
| 236 | + | 2024.04.02 更新 |
| 237 | + | 由于封号的问题,在 2.0 的初代版本没有集成自动化部署 render 服务。 |
| 238 | + | 但是你仍可以通过手动部署的方式来 |
| 239 | + | |
| 240 | + | |
| 241 | + | 2024.02.02 更新 |
| 242 | + | render 不但 ban 了 `seamoon` 镜像,还把号封了,*** 玩不起就别玩。 |
| 243 | + | 虽然还有各种各样的绕过方式,其账户注册起来也不困难,但是可以看出该运营商的顺准了,云计算这么多家,你不声明禁止直接ban号ban镜像有点东西的 |
| 244 | + | 也可能是我没仔细看声明,如果有找到的师傅麻烦让我看一下在哪。先喷为敬了。 |
| 245 | + | ![render-ban](https://seamoon.oss-cn-hangzhou.aliyuncs.com/4170f495a85d4cc6a6ff64ddedee9c3e.png) |
| 246 | + | ::: |
| 247 | + | |
| 248 | + | |
| 249 | + | [Render公有云地址](https://www.render.com/) |
| 250 | + | |
| 251 | + | > Render是一个新的PaaS( Platform as a service)云端服务,也就是说你的代码部署到Render之后,你不用(也不能)去管Linux/firewall/nginx的设定。把你的Github网址给Render,设定一下用鼠标点点点,等个几分钟,你的程序就上线了,全世界都能看到你的网站或是存取你提供的API。[(选自知乎)](https://zhuanlan.zhihu.com/p/377558120) |
| 252 | + | |
| 253 | + | 我们来看一下官方是如何介绍自己的: |
| 254 | + | |
| 255 | + | > Build, deploy, and scale your apps with unparalleled ease – from your first user to your billionth. |
| 256 | + | > |
| 257 | + | |
| 258 | + | 其实这些都不重要,重要的是你只需要知道,~~<font color="pink"><b>render提供的free套餐完全支持我们部署 seamoon,不需要花费一分钱!</b></font>这就够了,足够我们给他树一个👍。~~ 第二天就封号了的臭SB。 |
| 259 | + | |
| 260 | + | |
| 261 | + | ### 如何部署 |
| 262 | + | |
| 263 | + | render 部署与 sealos 部署一样简单,在新版本中,我会逐步减少部署步骤,降低这部分交互。 |
| 264 | + | |
| 265 | + | #### Step.1 注册账户 |
| 266 | + | |
| 267 | + | render 账户支持 github / gitlab / google 等一键登陆,建议直接 github 账户登陆即可。 |
| 268 | + | |
| 269 | + | 实在不行,他也支持邮箱注册,自己注册一个,此处不再废话。 |
| 270 | + | |
| 271 | + | ![render-register](https://seamoon.oss-cn-hangzhou.aliyuncs.com/7d00a615cd45480bad1b7ade33b7e543.png) |
| 272 | + | |
| 273 | + | #### Step.2 部署 |
| 274 | + | |
| 275 | + | 注册账户登陆后,进入控制台,选择创建一个 web service 应用: |
| 276 | + | |
| 277 | + | ![render-web-service](https://seamoon.oss-cn-hangzhou.aliyuncs.com/ffcd48fa203b4959bdde631bdf77610e.png) |
| 278 | + | |
| 279 | + | 然后选第二个,从存在的镜像中部署服务: |
| 280 | + | |
| 281 | + | ![render-web-deploy](https://seamoon.oss-cn-hangzhou.aliyuncs.com/faa0f096dcfa40998b518b5e4de96534.png) |
| 282 | + | |
| 283 | + | 点击下一步,要求我们填写部署的镜像名称,我们填写:`dvkunion/seamoon` |
| 284 | + | |
| 285 | + | ![render-image](https://seamoon.oss-cn-hangzhou.aliyuncs.com/3bc5a0437ea94a348f9841864f5c2df3.png) |
| 286 | + | |
| 287 | + | 开始填写详细的应用字段了,我们依次填写: |
| 288 | + | |
| 289 | + | + Name: 应用名称,这个最终会对应生成你的服务域名,因此这里我建议越复杂越好,因为 seamoon 当前版本没有做认证,导致如果服务名称过于简单,很容易被其他人连上。 |
| 290 | + | + Region: 地域,选择服务部署的地区,现在支持四个区域:oregon-俄勒冈州(美国西部)、Frankfurt-法兰克福(欧盟)、ohio-俄亥俄州(美国东部)、singapore-新加坡(东亚) |
| 291 | + | + 实例类型: 选免费的。 |
| 292 | + | |
| 293 | + | ![render-config](https://seamoon.oss-cn-hangzhou.aliyuncs.com/160ff4f44e5a4e9d9128269dbc1a3e26.png) |
| 294 | + | |
| 295 | + | 往下滑,看到 Docker Command 填写如下: |
| 296 | + | |
| 297 | + | ![render-docker](https://seamoon.oss-cn-hangzhou.aliyuncs.com/51fa80f6e4c84ae985bdb23ac8acf673.png) |
| 298 | + | |
| 299 | + | 完成,点击创建即可。 |
| 300 | + | |
| 301 | + | ![render-url](https://seamoon.oss-cn-hangzhou.aliyuncs.com/158478ce77a84130b43f786670a40c65.png) |
| 302 | + | |
| 303 | + | #### Step.3 本地客户端 |
| 304 | + | |
| 305 | + | 在本地启动客户端,推荐 docker 一键拉起: |
| 306 | + | |
| 307 | + | ```shell |
| 308 | + | $ docker run -it -d --net=host dvkunion/seamoon proxy |
| 309 | + | ``` |
| 310 | + | |
| 311 | + | 默认使用`--net=host`模式, 如需要高级设置,如下: |
| 312 | + | |
| 313 | + | ```shell |
| 314 | + | $ docker run -it -d -p 7777:7777 -p 1080:1080 dvkunion/seamoon proxy |
| 315 | + | ``` |
| 316 | + | |
| 317 | + | 访问本地控制台 localhost:7777 , 将此地址填入客户端即可。 |
| 318 | + | |
| 319 | + | ::: tip 如何填写地址 |
| 320 | + | 填写的代理在步骤2已经明确给出,给出的地址是 https:// 开头的,需要改为如: wss://。 |
| 321 | + | |
| 322 | + | grpc目前没有测试是否支持,测试支持后后续会更新文档并补充。 |
| 323 | + | ::: |
| 324 | + | |
| 325 | + | ### 测试效果 |
| 326 | + | |
| 327 | + | 整体机房是 amazon 的,所属地基本正确。 |
| 328 | + | |
| 329 | + | ![render-cip](https://seamoon.oss-cn-hangzhou.aliyuncs.com/db670fef7f4f47cd95108a656c28c9a5.png) |
| 330 | + | |
| 331 | + | 速度的话,也就是正常水平,基本满足日常浏览和视频播放的样子。 |
| 332 | + | |
| 333 | + | ![render-speed](https://seamoon.oss-cn-hangzhou.aliyuncs.com/80aee46729ca4ecdbda4c244ac26835b.png) |
| 334 | + | |
| 335 | + | 免费的来说已经是很不错的了。 |
| 336 | + | |
| 337 | + | ### 一些小细节问题 |
| 338 | + | |
| 339 | + | <font color="red"><b>访问不到render/dashboard/github......</b></font> |
| 340 | + | |
| 341 | + | 我的建议是,先用阿里云等国内方案临时解决访问一下,然后在方案 render 等作为长期持久使用的方案。 |
| 342 | + | |
| 343 | + | <font color="red"><b>支持 grpc 吗?</b></font> |
| 344 | + | |
| 345 | + | 没做测试,个人测试使用的是 websocket 隧道,然后也没有发现官方文档中提到 grpc 相关的,有兴趣的各位可以试一下然后反馈给我。 |
| 346 | + | |
| 347 | + | <font color="red"><b>关于动态IP 问题</b></font> |
| 348 | + | |
| 349 | + | 免费版本的 render 是不支持动态 scaling (动态伸缩扩容) 的,因此,这个方案部署的 seamoon 将会是一个固定 IP。 |
| 350 | + | 只有当 pod 销毁了,或者是你升级了套餐内容 (每月7刀) 才支持 scaling,才可以获取到动态 IP 的方案。 |
| 351 | + | |
| 352 | + | 当然,事无绝对,你非要使用 "动态" + "免费" 的方式,也有,通过 api 调用每小时自动删除再创建应用,即可实现这个效果,还可以实现动态的地区变动。。。。 |
| 353 | + | |
| 354 | + | 不过人家已经免费了,我不是非常建议这样做了。想要动态的 7刀一个月也不是一个过分的价格了,能支持的还是支持一下。 |
| 355 | + | |