在阿里云服务器运行Dart Server的踩坑实录
前言
笔者从2019年9月开始接触Flutter,用Flutter来做Capstone的项目,彼时使用了内置数据存储markdown格式文档,再通过markdown插件展示的纯前台应用,现在将其作为毕业设计的一部分进行改造,首先要解决的是后端使用什么语言的问题,我的备选方案有Python、Golang和Dart。本次就来尝试Dart Server吧。
先说结论,目前不推荐把使用大量插件的WebApp部署在阿里云上,除非你的服务器位于境外且性能不错,使用自带库的简单服务端应用还是可以的。
准备
阿里云轻量应用服务器,推荐使用Ubuntu和Debian,因为官方的下载只提供了这两种,但是我用的是Wordpress应用镜像,是CentOS系统,不过官方提供教程的两个一样也需要从谷歌的服务器下载sdk,还是推荐通过本地下载好再传输到服务器。
Dart SDK下载与配置环境变量
首先下载DartSDK,下载地址

使用命令scp -r dartsdk-linux-x64-release.zip user@yourhost:/tmp
将你下载到本地的SDK上传到服务器的tmp路径,如果你和我一样在操作前重置过服务器,报错Host key verification failed.
,删除know_host文件即可。

shh到服务器,解压SDK到lib目录。
cd /tmp
mv dartsdk-linux-x64-release.zip /usr/lib
cd /usr/lib
unzip dartsdk-linux-x64-release.zip

复制路径,配置环境变量,测试一下没有问题。

添加到.bashrc方便以后使用。

创建第一个项目
创建我们的第一个http服务端项目。官方代码如下,需要注意的是阿里云服务端用户需要将InternetAddress.loopbackIPv4更改为你的服务器的内网地址,否则你将无法从外网访问你的http应用。在服务器控制台的ip地址可以看到它。
import 'dart:io';
Future main() async {
// #docregion bind
var server = await HttpServer.bind(
InternetAddress.loopbackIPv4,//=>172.000.000.000 内网地址
4040,
);
// #enddocregion bind
print('Listening on localhost:${server.port}');
// #docregion listen
await for (HttpRequest request in server) {
request.response.write('Hello, world!');
await request.response.close();
}
// #enddocregion listen
}
直接运行即可,在客户端输入外网地址:端口号即可访问。


创建一个web app
通过下面代码安装webdev和stagehand
pub global activate webdev
pub global activate stagehand
这里会要求你为.pub-cache配置环境变量,用给出的临时更改环境变量的命令即可。
export PATH="$PATH":"$HOME/.pub-cache/bin"
通过以下代码创建官方示例。
mkdir quickstart
cd quickstart
stagehand web-simple
pub get
运行,指定hostname到内网地址,将0.0.0.0更改为你的服务器内网地址。
webdev serve --hostname 0.0.0.0
以上代码运行均需要一定时间,完成,去浏览器看看效果吧。


后记
前言中说到的不推荐在阿里云上部署Dart WebApp的原因如下图。创建和pub get实在是太消耗性能了。S
