使用阿里云OSS WEB直传

  最近在忙着将snapast.com的图片迁移到阿里OSS服务器上,并采用WEB直传方案,以加快客户端上传速度。并使用CDN访问方式来提高图片加载速度。目前所有的图片都是存储在ECS云服务器上,用的是FastDFS存储,纯Java的图片缩放处理,速度比较慢。并且单线程就将CPU消耗完了,2M的带宽也经不起并发访问,于是决定将图片迁移到OSS上。

  WEB直传的架构设计还是很优秀的,客户端直接POST请求到OSS服务器,无需经过ECS服务器,ECS只是计算一个Policy,并接收OSS回调,整个图片上传流程就完成了。OSS具有阿里的海量CDN支持,各种网络下都能很好的优化。

这里主要记录下一些细节:

  1. OSS要设置Cors规则,以便跨域请求
  2. 2. Bucket区域要和ECS区域一致,方便内网拉取数据
  3. 使用uploadifive上传组件且auto设置为true时,在onAddQueueItem方法中获取Policy,已换plupload,在BeforeUpload中获取Policy。
  4. 由于OSS会忽略请求中文件域以后的字段,因此在封装参数的时候,将文件域(Content-Disposition: form-data; name=”file”; filename=”xxx.jpg”)置于最后,这货貌似完全照搬Amazon S3,否则会找不到key

  Upload差不多就这样了,先写到这。

普宁寻梅记

  大概两周前,在开会的时候,Herman一条消息过来问周末普宁拍梅花,去不去。想想也有蛮久没活动了,且之前也错过了前两次活动怪可惜的,于是没多想就先答应了。Herman在科技也是做UI设计,风光大师,最近一组缅甸的人文纪实片还选入了《咔啪》杂志推荐,他在磨坊的发活动质量都还蛮高。常常在年初就把整年的旅行计划早早订好。

摘自Herman朋友圈
摘自Herman朋友圈

  就这样,在1月15号晚上一行十人出发包车去了普宁,八点左右出发,在出深圳的方向堵了一小会,上了高速后一路畅通。恰逢下大雨,不知为何夜里的高速公路特别的迷人,布满水珠的窗户,来回晃动的雨刮,被照亮的指示牌一个一个飘向身后,即便这旧面包噪音大再大,心情依然平静。赶在十二点正好入住酒店。

  第二天早早出发去第一站盛德梅海山庄,位于普宁市大坪镇善德村,距离市区51公里,由于当地居民往外迁,整个村子几本上原生态。起初以为只有这个山庄里面种植了梅花,没想到沿路上全是梅海,密密麻麻,处处皆美景,不愧为梅花之乡。当地政府是要把这一片打造成旅游景点,只不过是刚刚起步,比如这个山庄,大门口的收费处,停车场,餐饮住宿都齐全了,但还没开始收取门票,仅仅是20块的停车费。进去后一条小路绵延三公里都是梅,大开眼界。绝佳的拍照地点。无论是置身梅海中还是登高望远,都让人流连忘返。小雨中的梅花格外精美,挂着豆大的雨点,娇艳欲滴的样子,可惜没带长焦镜头,少了一份层次感。

  逛的差不多下山找到一处农家就餐时正好下大雨,此时真想打伞冲进梅海,将雨滴也收入画面中。作罢,还是爱惜下器材。短暂休息后,下午继续赶往泥沟村,该村普宁市重点侨乡,历史悠久,12年入选广东十大最美古村落。其建筑群颇具特色,四四方方,家家户户都是小两层,中间还有个露天院子,但一楼的采光很不好。车子开到村口,便没路了,只能步行,越往里走年代越悠久,瞎逛一阵子后碰到有缘人给我我们带路,找到了现存最老的一批房屋,却只剩断壁残垣,杂草丛生,据说也有百年之久了。这些形态及其相似的建筑,在Google Earth都能清楚看到。

未标题-1

  泥沟村给我的印象是非常的干净,人也很友善,其中碰到一位老太正好锁门出来,看到我们拿着相机,主动邀请去她家里看看,刚打开门,里面漆黑黑的,老太熟练的找到开关打开了灯,这才看清了里面的布局,简单清贫,像极了我小时候住在爷爷奶奶家那种感觉。

_MG_3989

  天黑后结束了一天的拍摄,此时又开始下起了大雨,驱车到12公里外的洪阳镇休息。次日决定再去拍一次梅花,洪阳镇往西走就进入了揭西,转到一条小道继续寻找梅海,后来在当地人的指引下爬过一座还在开发的山头,又发现好大一片梅海,山间空无一人,尽情享受。。。

QQ20160127-0@2x

  上图是三天的GPS轨迹图,橙色是第一天晚上去的,黄色是第二天,青色第三天的。梅海就分布在黄色左边处,途经乡道两边全是。就这样度过两天的普宁寻梅之旅,一脚泥土回到深圳。

  更多相片,可以在这里看到:相册

Canon EOS M3 小记

  一直以来有个习惯就是在购入新的东西,一定要写个“开箱”来分享下,不然算是白买了。不过这篇文章或许已不算是开箱了,毕竟已购入快半年之久,才记起该写点什么。也许沉淀一下,才更有价值。Canon EOS M3可以说是在15年购入的最纠结的一样东西了。若要简单点来描述,只能是:“出生名门子弟,靠着巨人肩膀”。

  之所以想要个微单,无非是看中它的便携性,和大多数人一样,毫无异义。在去年先后将单反的镜头升至L级后,带来更强劲的性能的同时重量也显著增加,其次更多的考虑是什么样场合该用什么样的器材,才能最高效的完成任务。自然专业的设备应该用于更专业的场合,从去年一年的拍摄来看,绝大部分是属于随手拍,纪录走过路过的一些所见所闻,若是举着单反未免杀鸡用牛刀了,因此微单顺利进入了心愿单。

  微单的可选择性很多,最初考虑的有这三款:Fujifilm x100t, Richo GR II, EOS M3。简单聊下这三个相机的特点,首先三个相机的传感器画幅都是APS-C,可以认为同样条件下画质不会有太大差异。x100t和GR一样采用不可换镜头设计,因此保证镜头成像质量的同时大幅缩小镜头体积,尤其是GR镜头收起来后简直就是个卡片机,还不用惦记着镜头盖,自然是最便携,素有口袋王之称。之所以没有考虑其一是光圈仅2.8,对于崇拜焦外如奶油般化开的我来说,毫无诱惑力。其二是GR II居然只憋出了个限量版,捆绑一堆附件,价格居高不下,不得不让人怀疑是在卖情怀。x100t拥有复古设计,光学旁轴取景(OVF),这无疑是最为经典。个人觉得睁一只眼闭一只眼的取景,让相机位置更接近人眼有利于捕捉瞬间。采用OVF更大的好处是极为省电,700张应该是不成问题,足以应付2~3天短途旅行。至于缺点嘛,体积还是略微较大,可能为了照顾手感,fuji并没有将x100t设计的更为紧凑。剩下的就是M3了,这货最大的优点居然是便宜,全新的日版仅2k出头,与其搭配的22神饼拆机头也仅500左右,不得不被这新价比给感动了,更别说完美转接佳能EF镜头和闪光灯。这也就是为什么之前提到的出生名门了。

DSCF2816

  去年8月份在日亚下单,使用至今,也发现过许多问题,最主要的还是对焦太慢,尤其是夜景,来回两次,人早就离开最佳位置了。对焦框也是奇大无比,常常对到主体后面去。耗电也是夸张的很,满电撑死250多张。很明显对焦这一套是从单反上的实时取景扒过来的,真够懒的。以至于用了两个月就打算出掉了,挂在咸鱼上一周便有不少人咨询,后来还是放弃了,想想其实微单都有这样的通病,只是习惯了单反那种爽快,干脆利落。

  直到今天,给M3整了一个国家地理NG1153包,拍照,开心就好。

IMG_1370

香港印象

  若是不以购物去香港,香港还是一个值得细细品味的城市。

  此行的目的是看看无数次浮现在记忆中的砵甸乍街(石板街)。这条百年老街出现在了无数的港片中,这也包括去年很火的港囧,虽然只出现那么一秒不到的瞬间,或许这便也是香港标志,无需任何渲染,必不可少。

  早在两个月前便有了计划,不料两边各种事情耽误,一直推迟到了上个月的26号,正逢圣诞节,也算是个好时间。于是让Chen准备一套素白衣装搭配大红色围巾,也好有些圣诞气氛。

  在深圳口岸买了环岛香港专线的大巴票,在通关后上车直接到中环邮局总局大厦。由于不喜欢坐地铁,故而选择大巴,路上走走停停,比预计的时间晚了不少,只好让朋友多等了一会儿,顺利在IFC汇合。购买苹果产品的队伍还是排了两条长队,目测该有百来人。沿着 IFC 商场的过街天桥穿过干若道再走过几条街,便看到了砵甸乍街路牌,但眼前看到只是一条路中间摆满小摊位,还以为是走错了。

IMG_3893

  半信半疑的一路往上走,整个中环几乎都是建立在山腰上,石板街也是一条坡路,穿过密集的小摊,才找到真正的石板街。确实不大常见,尤其存在于中环这样的闹市区中。石板路虽说是大块石板砌成,表面早已磨的光滑,真当心下雨路滑,好在路中央有扶手。而这个季节,扶手上也套上了毛绒织物,给冷冰冰的铁扶手增加不少温暖。石板街早已成为香港的一道旅游景点,来拍照的游客也不少,那就尽情的拍吧。

IMG_3907

  选了几处红墙做背景,和Chen的白色系搭配起来更突出人物。所谓宾得绿,佳能红,大概就是这么回事了。Chen童鞋在这边读研,又在这边实习,自然对这里熟悉,加之也曾合作过几次,来香港拍自然是不二人选。石板街并不长,一会儿便到头了,两旁的商店也关门了,不知为何,若是在内地,景点旁的铺子怕是都热闹的不行。

IMG_3926-编辑

  一直以来对香港的夜色垂怜已久,但却没有个好机会来拍,比如太平山顶,白天倒是来过几次,有碰到大雨的,大雾的,却没机会拍上夜景。这次临时想到在BIG BUS上拍一次,有感于多年前关注的一位摄影师在上海拍的类似主题,特别唯美。巴士穿梭在主干道上,看尽繁华,自然是最美了。临时想的也没做太多计划,甚至途经那些地方都不知道,查了下上车地点在天星码头6号附近,休息一阵子后便赶过去了。途径中环游乐场,除了摩天轮还多了大摆锤,看来是要建成第二个迪斯尼乐园了。

  到了码头才发现,又是长长的队伍,仅剩夜游一条线路,至于目的到哪,也没太在意。然而所有游客都奔向二层,坐满人的时候,意识到估计出不了片了。好在中途不断有人下车,干脆等到车到终点,人都下去了再拍。只能说那个冷啊。。。辛苦Chen童鞋了。最后这张就是车停在半岛酒店附近,人都下去了,才拍到的,恰好当时还有个老外也想拍空车,识趣的蹲在过道,正好被身体挡住,而没有出现在画面中。

_MG_3045-编辑-编辑-1025-1027

  Over,更多图片可到相册1相册2看。

迁移到阿里云一些笔记

  现在看到的博客已经跑在阿里云上了,随之迁移的还有找歌词后台和花图相册(链接就在屏幕左侧)。由于之前用的linkcloud云主机业务与阿里云合并,商务那边通知到期后只能迁移到阿里云上,正好他们家的内核版本过低,无法满足docker需要,于是尽早开始了迁移计划。

  首先是转移备案,阿里的备案系统还是蛮方便的,后台填完资料,寄送幕布,都很快,最后审核了一周多点也就过了。收到邮件后立刻新开了主机,配置环境。这里还有个小插曲,备案前其实就买了一个,后来觉得配置太高了,于是又退了。事实证明,阿里的单核顶linkcloud双核。

  迁移并不复杂,无非是安装新环境,打包,传输,解压,运行,验证。这里简单做下笔记,以备不时之需。

1. 磁盘挂载
  买了新主机,自然是先挂载好数据盘,阿里的帮助中心已经写的很清楚了。我选配了100g的普通云盘,挂在点位于/dev/xvdb,将用ext4格式化。fdisk -l可以看到一个xvdb磁盘未包含任何分区信息,用fdisk /dev/xvdb对磁盘进行分区,再次使用fdisk -l可以看到/dev/xvdb1出现,用mkfs.ext4 /dev/xvdb1进行格式化。

配置到fstab以便开机自动挂载

echo '/dev/xvdb1 /mnt/vdb1 ext4 defaults 0 0' >> /etc/fstab

此时可以重启下验证是否成功df -h

/dev/xvdb1       99G   60M   94G   1% /mnt

2. nginx
  使用apt-get安装,同步旧服务器的conf.d/*配置文件,Jenkins密码文件,SSL证书。删除默认站点sites-available和sites-enabled目录下的default。nginx推荐做法是将站点配置(Virtual Host)文件放在sites-available下,在sites-enabled下建立到available的连接,可以方便的启用和禁用。我这里简单处理全放在了conf.d下。

关闭nginx版本显示和post大小限制:

vim /etc/nginx/nginx.conf
server_tokens off;
client_max_body_size 20M;

配置完重启nginx进程,检测是否有误

3. mysql
  使用apt-get安装,同步旧服务器conf,授权远程登录,修改root密码:

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "newpassword";
GRANT ALL PRIVILEGES ON *.* TO root@“127.0.0.1" IDENTIFIED BY "newpassword";
GRANT ALL PRIVILEGES ON *.* TO root@"localhost" IDENTIFIED BY "newpassword";
flush privileges;

导出旧服务器上的db,p参数表示待输入密码

mysqldump -p db_name > db_name.sql

复制到新机器上登录mysql后用以下命令导入

source /root/db_name.sql;

若数据量不大,可以用GUI工具转移,例如Navicat的数据传输功能

4. redis
  下载源代码&编译安装

wget http://download.redis.io/releases/redis-3.0.6.tar.gz
tar xf redis-3.0.6.tar.gz
cd redis-3.0.6/
make
make install

安装为服务,自启动

cd utils
./install_server.sh

为了安全起见,redis仅监听来自本机的请求,设置bind 127.0.0.1,并设置密码requirepass。再修改启动脚本,增加密码(若设置了密码,必须要如下操作,否则无法正常重启redis)

vim /etc/init.d/redis_6379
定义变量:
PASS="pass"
在stop方法中增加-a参数
$CLIEXEC -p $REDISPORT -a $PASS shutdown

迁移redis数据,在旧机器上登录redis-cli,使用save指令将内存数据保存到/var/lib/redis/dump.rdb中,再scp到新机器对应的目录上,重启即可。

5. java,maven,jenkins,tomcat
  官方JDK最新已经是8u65了,直接用最新的,不得不说Oracle也是个坑货,下载个jdk还要验证一下,导致直接wget链接会失败的。这里加一个cookie就好了:

wget --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie;" http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-linux-x64.tar.gz

下载放在/usr/java 目录中
tar xf 解压到/usr/java/jdk1.8.0_66

设置环境变量:

# set maven home
export MAVEN_HOME=/usr/local/apache-maven-3.3.3
export PATH=$MAVEN_HOME/bin:$PATH

# set java home
export JAVA_HOME=/usr/java/jdk1.8.0_66
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

# set jenkins home
export JENKINS_HOME=/mnt/vdb1/.jenkins

将旧机器的相关目录打包scp过来即可

6. fastdfs
  Fastdfs安装可以参考我之前的文章,这里简单带过。先安装libfastcommon和做好链接,同步旧服务器配置文件和照片数据目录,设置为服务自动启动:

update-rc.d fdfs_trackerd defaults 90
update-rc.d fdfs_storaged defaults 95

7. php和wordpress
  apt-get安装php5-fpm和php5-mysql,复制wordpress目录。新版本的fpm默认没有监听9000端口,而是采用unix sock来连接,因此nginx站点配置中修改下

fastcgi_pass unix:/var/run/php5-fpm.sock;

  最后再检查各个项目是否正常,接口是否能调用成功,再到dnspod中将各域名A纪录指向阿里云的新IP,保证平滑迁移,至此就算完成了。