升级 Ubuntu Server 16.04

Ubuntu Server 16.04 更新了,自带了 PHP 7.0, Mysql 5.7, 而且终于可以脱离尴尬的 nodejs 命令用上 node 了, 所以果断升级。


1. 准备工作

最近使用 “apt-get update” 命令一直出现 “Hashsum mismatch” 错误,可能是阿里云的 Ubuntu 更新源缓存问题,于是尝试切换到 163 mirros。

sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak

sudo wget http://mirrors.163.com/.help/sources.list.trusty

sudo mv sources.list.trusty /etc/apt/sources.list

再次运行 “apt-get update”,果然一切正常。(为什么在我的潜意思里面总是会觉得网易要比阿里靠谱一点呢?)

但是我的阿里云服务器在美国,访问 163 的镜像有点慢,所以最后还是切换打算到官方源。

网上没有找到现成的sources.list 文件可以下载,直接在 vim 里面做了一次批量替换。

:%s/mirrors.163.com/archive.ubuntu.com/g

2. 开始升级

Ubuntu 版本升级其实蛮简单的,首先获取 dist-upgrade。

apt-get dist-upgrade

然后运行 do-release-upgrade,重新启动,就大功告成了。

do-release-upgrade -d

3. 升级之后遇到的问题

升级之后需要重新安装 php 和重新配置 nginx,所以建议还是不要直接在生产环境直接升级。

如果一定要使用 Ubuntu 16.04 Server 的话,还是重新安装一台,然后迁移过去比较靠谱。


参考:

Ubuntu镜像使用帮助

http://mirrors.163.com/.help/ubuntu.html

Ubuntu Server 14.04升级Ubuntu Server 16.04

http://blog.csdn.net/chszs/article/details/51236698

 767 total views,  2 views today

三月读书笔记

曾经很长的一段时间,我的梦想是成为一个文字工作者。然而最终,我却成了一个代码搬运工。

这个月都在忙 CCBN 展会的事情,没有时间写技术文章,只好拿出几篇豆腐干的读后感。


一、虚无的十字架

东野圭吾的书,我看的不多。白夜行,解忧杂货店,这是第三本。在上海去北京的火车上,花了一个上午看完了。

和解忧杂货店一样的叙事手法,几个看似毫无关联的故事把几个看似毫无关联的人物命运串联在一起。不过这一次,是一个悲伤的故事。关于废除死刑制度的思考。

单从故事上来讲,是不如白夜行和解忧杂货店的,因为阐述一个观点远比讲好一个故事艰难。但是东野圭吾让我们看到了一个作家的责任。


二、无声告白

说实话,这是一个读起来并不那么轻松的小说。第一章完全不知道作者想要讲什么,差点弃书。不过终于还是花了几天的时间看完了,读完了还久久的沉浸在故事里面。

作者通过细腻的心理描写,把每个人物都刻画得淋漓尽致。不由得越看越心惊,这个故事竟是如此的真实。读完之后想了很多,关于人际关系,关于家庭教育,甚至是关于人性的思考。

毋庸置疑,这是一本好书。那么,为什么看这样一本书会觉得枯燥无味?甚至一度想弃书呢?难道是在这个快餐文化大行其道的时代,我们的阅读能力退化了?或者从某种意义上来说,这是书挑读者?


三、城记

“北京的悲剧在于,由于共产党人的远见,它在战火中奇迹般地保存下来;然后在和平建设时期却被逐渐毁掉。”

北京之行,只去逛了三里屯优衣库,到底是有些遗憾的,于是把这本书又翻出来看了一遍。作者王军是一名新华社的记者,花了十年的时间写作,试图为我们还原一段真实而又有些过于沉重的历史,让我们了解建国以来北京城的变迁。

再次看完之后依然感慨万千,却又不知道说什么好:嗯,我大概就是一个愤青吧。

 719 total views

我的外公

很多年前,一次饭后闲聊,我听过这样一件小事:

一次外公出远门,一不小心走错了路,在山上过了一夜,半夜偶尔一声狼叫,一夜都没敢睡觉。

当时我听到这个故事,并没有觉得心惊胆颤,只是突然冒出一句话:可怜之人必有可恨之处。

他并不是一个可爱的外公,甚至有一点可恨。

他脾气不好,喜欢在家里跳来跳去。

他贪钱,常常为了一点钱和外婆吵架。

他年轻时还赌博,一点钱都被拿去了。

可以说,他就是一个脾气暴躁的小老头,几乎是没有优点的。

所以当我在大街上看到那个佝偻的背影是,一时竟有些不知所措。

岁月终于还是没能他打磨成一个温和的老人。

不过这样也好。

 435 total views

杭州

“还有什么比一个人不知道自己该做什么更艰难呢?”
— 李志

今天逛了一天的西湖,夜里睡不着,不妨来聊一点往事。


2012年刚毕业的时候,偶然的机会来到杭州。一开始对于杭州的印象并不好,或者也不能说不好,只是当时我更想去苏州(或者上海),根本没有考虑过这样一种可能性。

那个时候处于一个非常不稳定的时期,刚从学校毕业,对未来满怀期待,却又处处受挫。脑子里充满着一些不切实际的理想,却又没有能力去实现,又不肯接受现实。

所以我很少愿意和别人讲起杭州的经历。但是总有人愿意问,为什么从杭州到上海?


对于杭州的印象,大抵就是晚上火车经过钱塘江大桥时,哐当哐当的响。一开始吵得睡不着,后来习惯了,晚上一定要听到火车的声音才能睡得着。不得不说,人类对于环境有着惊人的适应能力。

在杭州的一年半,体会最深的两个字大概是“孤独”。一个人在陌生的城市工作,没有朋友,上班的时候倒还好,时间总是过得很快。一旦到了晚上或者周末,有大把的时间,却又不知道该做什么。

孤独有时候是一个褒义词。然而大部分的孤独,是把自己困在一个叫做“孤独”的世界里。

伴随孤独而来的,是更加难以忍受的是欲望。欲望摧毁一个人的方式有两种,一种是在你放松警惕的时候突然来袭,让你猝不及防。另外一种是在你放弃抵抗的时候又突然消失殆尽,让你后悔莫及。

大学上说,“君子慎其独也”。菜根谭上说,“饱后思味,则浓淡之境都消;色后思淫,则男女之见尽绝。故人常以事后之悔悟,破临事之痴迷,则性定而动无不正。”可以真正能够做到的人又有几个呢?

我们都不是圣人,只是一个平凡的普通人。所以我觉得最好的办法还是去洗个热水澡,不行就洗个冷水澡。

说了这么多,我现在还是一个孤独的人,仍然要随时面对欲望。但是我已经开始认识到孤独并不是那么的让人难以忍受,战胜欲望或者被欲望打败,都是再正常不过的事情。那么为什么不活得更真实一些呢?

 797 total views

基于 fluentd 搭建日志收集系统

测试系统版本为 ubuntu 14.04,fluentd 版本为 td-agent 2.2.1。使用 HTTP 方式接收日志数据,并存储到 mysql 仓库。

安装 fluentd

1. 去官网下载deb安装包
2. dpkg -i td-agent_2.2.1-0_amd64.deb
3. 安装好之后td-agent会自启动
4. 测试一下,curl -XPOST 192.168.1.107:8888
400 Bad Request
'json' or 'msgpack' parameter is required
说明工作正常。

/etc/init.d/td-agent status
* td-agent is running

安装 fluentd-ui

1. sudo /usr/sbin/td-agent-ui start
2. 默认端口9292,用户名admin,密码changeme

安装 fluent-plugin-mysql

1. sudo apt-get install libmysqlclient-dev
2. /usr/sbin/td-agent-gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
3. /usr/sbin/td-agent-gem install fluent-plugin-mysql


参考:

http://www.fluentd.org

http://stackoverflow.com/questions/3608287/error-installing-mysql2-failed-to-build-gem-native-extension

 979 total views,  4 views today

如何搭建LNMP环境(二)

上一篇我们介绍了如何在 ubuntu 14.04 上面搭建 lnmp 环境,今天我们来介绍如何在 centos 7.0 上面搭建 lnmp 环境。

和 ubuntu 的更新策略不同,centos 更看重可靠性和稳定性,所以官方源更新的非常慢,里面自带的 php 版本很低,不符合生产部署的要求,所以我们选择源码编译的方式来安装 php。


如何在 centos 7.0 上面搭建 lnmp 环境

1. 创建 nginx 用户 和 nginx 用户组

$ sudo adduser -U nginx
$ sudo passwd nginx

2. 编译安装 nginx

下载 nginx 源码并解压

$ wget http://nginx.org/download/nginx-1.10.0.tar.gz
$ tar xzvf nginx-1.10.0.tar.gz
$ cd nginx-1.10.0

参考 nginx 官方打包使用的配置(所有参数应该全在一行)

$ ./configure
--prefix=/etc/nginx
--sbin-path=/usr/sbin/nginx
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--pid-path=/var/run/nginx.pid
--lock-path=/var/run/nginx.lock
--http-client-body-temp-path=/var/cache/nginx/client_temp
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp
--user=nginx
--group=nginx
--with-http_ssl_module
--with-http_realip_module
--with-http_addition_module
--with-http_sub_module
--with-http_dav_module
--with-http_flv_module
--with-http_mp4_module
--with-http_gunzip_module
--with-http_gzip_static_module
--with-http_random_index_module
--with-http_secure_link_module
--with-http_stub_status_module
--with-http_auth_request_module
--with-threads
--with-stream
--with-stream_ssl_module
--with-http_slice_module
--with-mail
--with-mail_ssl_module
--with-file-aio
--with-http_v2_module
--with-ipv6

make & make install

$ make
$ sudo make install

3. 编译安装 php

下载 php 源码并解压

$ wget http://cn2.php.net/distributions/php-7.0.6.tar.gz

$ tar xzvf php-7.0.6.tar.gz

$ cd php-7.0.6

配置参数

$ ./configure --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-openssl --with-curl --enable-mbstring --with-mcrypt --with-mysqli --with-pdo-mysql --enable-zip

make & make install

$ make
$ sudo make install

参考:

http://nginx.org/en/docs/configure.html

http://nginx.org/en/linux_packages.html

http://php.net/manual/zh/install.unix.nginx.php

 648 total views

如何搭建LNMP环境(一)

当你想学习一门语言的时候,第一步应该做什么,写 Hello World?

No, 首先你要学会如何搭建开发环境。这个系列一共有两篇,第一篇介绍如何在 ubuntu 14.04 上面搭建 lnmp 环境,第二篇介绍如何在 centos 7.0 上面搭建 lnmp 环境。


如何在 ubuntu 14.04 上面搭建 lnmp 环境

1. 使用 apt-get 安装nginx, php, mysql

# sudo apt-get install nginx php5-cli php5-fpm php5-mysql mysql-server

2. 修改 nginx 配置

安装好 nginx 之后,你可以在 /etc/nginx 目录下面找到 nginx 的配置文件。

# cat /etc/nginx/nginx.conf

查看 nginx.conf 文件,我们发现如下一行配置,加载 sites-enabled 目录下面的所有配置文件。

include /etc/nginx/sites-enabled/*;

然后我们查看 sites-enabled 目录,发现有一个指向 /etc/nginx/sites-available/blog 配置文件的软链接。

# ls -l /etc/nginx/sites-enabled/

blog -> /etc/nginx/sites-available/default

如法炮制,我们首先在 sites-available 目录下面创建一个新的配置文件 blog,然后把它放到 sites-enabled 目录下面。

# cp /etc/nginx/sites-available/default /etc/nginx/sites-available/blog

# ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/blog

然后修改 sites-available 目录下面的 blog 配置文件,注意不要直接修改 sites-enabled 目录下面的软链接。

# sudo vi /etc/nginx/sites-available/blog

最后移除 default 配置文件软链接。

# rm /etc/nginx/sites-enabled/default

重新加载 nginx 配置文件,nginx 的配置就到此为止了。

# service nginx reload

参考:

https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/

 590 total views

PHP 技术栈

写代码三年了,庆幸自己还没有厌倦。然而日复一日的写一些业务逻辑代码,程序员该怎么提高自己呢?这是一个不得不面对的问题。看书,写博客是一个很好的方法。可是该看什么书呢?每天都会涌现出一大批新技术,该学什么好呢?


PHP

入门

当我是一个新人的时候,总是渴望别人能给我意见。可是现在当别人要我给点建议的时候,我才发现写代码其实就是每天坚持不断地写,写多了自然就会了。

如果一定要说点什么的话:自学就好,没有必要参加培训班。这个阶段不要想太多,网上搜索 w3school,按照教程搭建一个开发环境,直接开始写代码。

初级

初级是怎样的一个阶段呢?不管你是几天、几个月、还是几年的时间入门,当你找到工作,把写代码当做职业而不是兴趣的时候,你就是一位初级工程师了。

开始的一两年是成长的最快的一个阶段,作为一个 PHP 程序员,你可能已经可以独立完成一个小项目的开发。

需要警惕的是,千万不要停止学习,有些人一辈子就停留在了初级程序员这个阶段。

中级

我想处在这个阶段,大多数人已经可以轻松的完成开发任务。那么如何写更少的代码,更快的完成开发任务呢?

我认为还是多看书,多总结。目前的学习的规划是:理解设计模式,阅读框架源码,或者自己实现 PHP 框架。

高级

我原本认为高级 PHP 程序员的标准是,能够阅读 PHP 源码,能够编写 PHP 扩展。但是现在觉得太肤浅了,等我达到那个阶段再来回答这个问题吧。


技术栈

什么是技术栈?我所理解的的 “技术栈” 就是为了完成特定的 “工作” 所需要的 “技术储备”。

比如作为一个 PHP 程序员,除了 LNMP,你可能还需要会 HTML、CSS、JavaScript 等等。

这里分享一张 PHP 程序员画的 “全栈工程师技能树” 思维导图:

 1,034 total views,  1 views today