基于ECS搭建的应用示例(博客、密码管理、同学地图、APP服务端等)详解之一

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 作为互联网行业从业者,头脑里总是会冒出各种各样的想法,当然可以用网络笔记、云盘甚至本地的方式等记录下自己的想法,然而如果想要落地尝试,则拥有一台自己的服务器就再好不过了。全栈开发已经讲了很久了,如果是前端,通过nodejs也可以搭建后端服务;如果是后端,通过flutter、uniapp等也可以搭建出各种端上的APP;如果非研发人员,通过低代码开发平台拖拽也可以。有了自己的产品之后,如果不满足于本地跑跑,那么就得面临选择应用的载体了,性价比最高的方式是选择云上ECS,下面拿我的几年使用经验来展开讲一下。

起源

ECS可供选择的云厂商比较多,我个人使用过linode、腾讯云、阿里云等几家的ECS产品,其中linode是接触最早的,大概用了两三年时间,每个月10个美元,当时出于接入点距离考虑选择了位于东京机房的服务器,但即便这样,打开博客经常性明显感觉到慢,有时甚至通过终端连接到服务器都超时。后来实在是忍受不了了,就切到了国内的云厂商,选择一个和自己同城的机房,毕竟做出的产品要先取悦自己嘛,结果证明是真香。国内的对比下来,阿里云整体是功能最完善丰富、技术最强大的了。选用一个标准的2C4G配置,使用到至今近三年时间。

image.png


我都拿ECS做了什么

我个人的刚需是博客记录、密码管理,再有就是日常脑海里浮现的想法的落地。当前实现了个人博客以及写作能力的搭建,密码管理的搭建,同学信息地图web应用的搭建,砍一刀、投票、抢票等助力APP的搭建等。


个人博客

image.png


密码管理

image.png

同学信息地图

蓝男橙女,点开可以展示对应同学资料信息,发到微信同学群里还挺受大家喜欢,短时间内就有几十名同学录入进来。

image.png

image.png

助力APP

这个比较复杂,从规划设计到开发落地,走了多处死胡同,作为个人开发者发布小程序或者应用太难了。

也提前了解过flutter,并基于flutter开了个简单的小样,但这里我最终还是选择使用了uniapp进行开发,主要是看到了社区里有较为丰富的插件,也支持我想要部署的小程序和端。

这块涉及端上的开发和后端开发,耗时3个月终于开发完毕,不过当前只支持Android系统。里面的细节这里先卖个关子,后面有机会再做展开。


举个栗子

服务器概览

image.png

根据控制台指引,安装CPU和内存使用率对应的插件,可以直接查看当前的系统负载情况。

image.png


有了服务器后,这里找一个大家都会用到的博客作为示例来展开讲一下吧。


博客技术组成拆解

这里我不使用saas化的博客产品,因为saas化的产品留给自己施展的空间有限,而是自己来搭建。那这里就涉及以下几个方面:

  • 编辑器                 ——markdown
  • 存储设计              ——MySQL
  • 定时任务渲染页面    ——crontab
  • web服务器            ——Nginx
  • 评论                    ——fastcgi


第一步 确定编辑器

选择博客的编辑器,自己实现成本会比较高,因为涉及到富文本编辑器的功能,这里我主要对比了两款,editor和markdown


https://github.com/kindsoft/kindeditor

image.png


https://github.com/pandao/editor.md

image.png


这里我两个都根据官方指引搭建了下,各有利弊,markdown整体体验下来好一些,用的多一些。


这里也需要借助web服务器才可以完整使用,到第四步一起说。


第二步 搭建MySQL

由于个人博客,大多数场景是自己记录查看使用,很少有爆火产生非常大流量的情况。因此这里也没必要单独采购MySQL做分离,完全可以都集成到同一台ECS上。


sudo yum install -y mysql mysql-server mysql-devel
# 修改端口啥的配置sudovim /etc/my.cnf
# 启动MySQLsudoservice mysqld startmysql -hlocalhost-uroot-p


这里注意下,最好设置成仅本机localhost可以登录,避免不必要的安全麻烦。


mysql> show tables;
+--------------------------+| Tables_in_Blog           |
+--------------------------+| t_blog                   |
| t_comments               |
| t_type_def               |
+--------------------------+3 rows inset (0.00 sec)

库表比较简单,共分为博客内容表、评论表、以及博客内容分类表。比较复杂的博客表建表语句如下:

| t_blog | CREATE TABLE `t_blog` (
`c_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`c_title` varchar(255) NOT NULL,
`c_tag` varchar(45) DEFAULT NULL,
`c_date` date NOT NULL,
`c_content` text NOT NULL,
`c_url` varchar(255) NOT NULL,
`c_type` tinyint(4) NOT NULL DEFAULT '1',
`c_keys` varchar(255) NOT NULL,
`c_bid` char(6) NOT NULL,
`c_mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`c_state` tinyint(4) NOT NULL DEFAULT '0',
`c_nums` bigint(20) DEFAULT '1',
  PRIMARY KEY (`c_id`) USING BTREE,
  UNIQUE KEY `Index_uniq` (`c_bid`),
  KEY `Index_date` (`c_date`),
  KEY `Index_type` (`c_type`),
  KEY `Index_title` (`c_title`)
) ENGINE=InnoDB AUTO_INCREMENT=3682 DEFAULT CHARSET=utf8 |


第三步 定时任务渲染页面

由于是单机,这里利用Linux自带的crontab服务即可。

*/1 * * * * cd /**/**/**/blog;./markdownToHtml.sh >> /**/**/blog_markdownToHtml.log 2>&1

这里是每隔1分钟将编辑器里新增构建保存到数据库里初始状态的内容,转换为自己喜欢的博客html格式,并加上页头和页尾。


第四步 搭建web服务器

这里我选择使用比较常用的Nginx服务器,并使用fastcgi的能力,集成CGI接口提供评论的能力。另外,第二步当中使用到的编辑器里关于图片上传等相关的能力使用了PHP,这里要使得Nginx支持PHP。


  • 安装运行Nginx
sudo yum install nginx
# 切换到root 启动Nginxsystemctl start nginx
# 查看Nginx的运行状态systemctl status nginx
● nginx.service - SYSV: Nginx is a high-performance web and proxy server.
   Loaded: loaded (/etc/rc.d/init.d/nginx; bad; vendor preset: disabled)
   Active: active (running) since 五 2021-04-1622:10:39 CST; 1 years 0 months ago
     Docs: man:systemd-sysv-generator(8)
 Main PID: 21312 (nginx)
   CGroup: /system.slice/nginx.service
           ├─25914 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
           └─25915 nginx: worker process
  • 配置Nginx 支持fastcgi
location ~ /blog.cgi
  {
    root    /**/**/**/cgi-bin/;
    fastcgi_pass 127.0.0.1:9911;
    fastcgi_index index.cgi;
    fastcgi_param SCRIPT_FILENAME fcgi$fastcgi_script_name;
    include        fastcgi_params;
  }
  • 配置Nginx 支持PHP

1. php包下载

https://secure.php.net/downloads.php

https://secure.php.net/get/php-7.1.7.tar.gz/from/a/mirror

2. 解压安装包后执行

./configure
--prefix=/data/php  --enable-fpm--enable-mbstring--disable-pdo--with-curl--disable-debug--disable-rpath--enable-inline-optimization--with-bz2--with-zlib--enable-sockets--enable-sysvsem--enable-sysvshm--enable-pcntl--enable-mbregex--with-mhash--enable-zip--with-pcre-regex--with-jpeg-dir# 若碰到如下报错:configure: error: xml2-config
not found. Please check your libxml2 installation.
# 意味着缺少xml2相关库,执行下述命令解决sudo yum install libxml2-devel -ychecking for cURL in default path... not found
configure: error: Please reinstall the libcurl
distribution
# 缺少curl相关库sudo yum -y install curl-devel


  1. 安装和启动
make & make test & sudomake install
# 启动php-fpm/data/php/sbin/php-fpm
提示
PHP error:ERROR: No pool
defined. at least one pool section must be specified in config file
配置文件目录中没有.conf结尾的文件
cd /data/php/etc/php-fpm.d/; cp www.conf.default www.conf


  1. 调整Nginx配置并重启


第五步 写fastcgi接口

这里选择c语言的clearsilver包来写fastcgi,纯属是带有个人纪念意义色彩的举动。

不过不管怎样,提供的http接口能力是一致的,即:

  1. 接收评论相关的入参:文章id、评论内容、提交者信息;
  2. 进行入参合法性校验;
  3. 维护到DB里
  4. 在文章加载时提供根据文章ID分页查询评论的能力。


逻辑相对简单,这里就不展开了。


总结

以上只是列举了使用ECS落地个人想法的一个案例,还有像其他的跑一下Python脚本处理个文件数据、写个爬虫程序获取自己感兴趣的内容、验证个技术想法等等还是很方便的,作为技术人员尤其是后端,非常建议入手一台,搭建自己的练兵场。

相关实践学习
基于ECS搭建FTP服务
本教程介绍如何在Linux实例上安装并配置vsftpd,在被动模式下,使用本地用户访问FTP服务器的配置方法。。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
移动开发 小程序 Android开发
基于 uni-app 开发的废品回收类多端应用功能与界面说明
本文将对一款基于 uni-app 开发的废品回收类多端应用,从多端支持范围、核心功能模块及部分界面展示进行客观说明,相关资源信息也将一并呈现。
230 0
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
893 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
机器学习/深度学习 存储 人工智能
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
11807 81
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
|
8月前
|
Java Shell Maven
【Azure Container App】构建Java应用镜像时候遇无法编译错误:ERROR [build 10/10] RUN ./mvnw.cmd dependency:go-offline -B -Dproduction package
在部署Java应用到Azure Container App时,构建镜像过程中出现错误:“./mvnw.cmd: No such file or directory”。尽管项目根目录包含mvnw和mvnw.cmd文件,但依然报错。问题出现在Dockerfile构建阶段执行`./mvnw dependency:go-offline`命令时,系统提示找不到可执行文件。经过排查,确认是mvnw文件内容异常所致。最终通过重新生成mvnw文件解决该问题,镜像成功构建。
440 1
|
9月前
|
定位技术
《仿盒马》app开发技术分享-- 地图选点(27)
上一节我们实现了地图的简单展示,这一节我们要实现的内容是,根据展示的地图,实现当前定位功能,当前位置的poi地址功能,以及列表的展示,给地图添加标记,展示自己的当前定位
177 4
|
9月前
|
定位技术 API
《仿盒马》app开发技术分享-- 原生地图展示(26)
上一节我们实现了获取当前用户的位置,并且成功的拿到了经纬度,这一节我们就要根据拿到的经纬度,结合我们其他的知识点来实现地图的展示。
212 4
|
8月前
|
存储 移动开发 监控
App Trace功能实战:一键拉起、快速安装与免提写邀请码的应用实践
App Trace系统通过一键拉起、快速安装和免提写邀请码三大功能,显著提升用户转化率、安装成功率和邀请注册率。结合深度技术实现与优化,助力公司用户增长,成为移动端核心基础设施。
|
10月前
|
搜索推荐 API UED
淘宝/天猫获得淘宝app商品详情原数据 API 返回值的应用
该API专注于商品信息整合与展示,提供基础信息抓取、多媒体内容整合等功能,助力实时同步商品数据,构建丰富的详情页。同时支持数据分析与市场洞察,包括销售趋势分析和竞品对比,优化库存与定价策略。此外,动态促销管理和个性化推荐系统可提升营销效果,而实时库存预警和评价数据可视化则显著增强用户体验,为用户决策提供透明依据,全面提升平台竞争力与用户满意度。
|
11月前
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
320 22
|
小程序
【04】微信支付商户申请下户到配置完整流程-微信开放平台移动APP应用通过-微信商户继续申请-微信开户函-视频声明-以及对公打款验证-申请+配置完整流程-优雅草卓伊凡
【04】微信支付商户申请下户到配置完整流程-微信开放平台移动APP应用通过-微信商户继续申请-微信开户函-视频声明-以及对公打款验证-申请+配置完整流程-优雅草卓伊凡
877 1
【04】微信支付商户申请下户到配置完整流程-微信开放平台移动APP应用通过-微信商户继续申请-微信开户函-视频声明-以及对公打款验证-申请+配置完整流程-优雅草卓伊凡