杭州

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

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


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

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

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


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

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

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

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

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

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

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

575 total views, no views today

基于 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

590 total views, no 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

496 total views, no views today

如何搭建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/

429 total views, no views today

PHP 技术栈

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


PHP

入门

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

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

初级

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

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

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

中级

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

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

高级

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


技术栈

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

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

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

728 total views, no views today

如何科学上网

“The best time to plant a tree was 20 years ago. The second best time is now.”
— Chinese Proverb

一直想写点什么,却由于各种各样的原因一直没能实现。

最近红杏挂了,用阿里云的服务器搭了一个简单的 vpn,顺便用 WordPress 搭了一个个人博客。

可能会写一些技术文章,读书笔记,旅行日记,一切皆有可能。

对于一个拖延症晚期的人来说,保证按时更新基本是不可能的。

所以至少每月一篇吧。


为什么科学上网(翻墙)是每个科技工作者必备的技能?

因为一些众所周知的原因,包括 Google 在内的许多海外知名网站都被封了,而且随着 GFW 的不断升级,会有越来越多的网站无法访问。

那么问题来了,如何用正确的姿势来科学上网(翻墙)呢?

如果你去网上搜索一下,你会发现原来有这么多种科学上网的方法,不管你是没有什么经验的新手,还是已经解锁多种姿势的老手,相信都会大开眼界的。

这里主要介绍一些我用过的科学上网方法。

1.ssh 代理

首先你需要一个 ssh 账号。我当时用的是公司的账号。网上可以找到免费试用的 ssh 账号,如果需要购买可以去淘宝。

然后你需要 Bitvise SSH Client (以前叫 Bitvise Tunnelier),Firefox 浏览器 和 Foxyproxy 插件。

由于没有 Windows 系统的电脑(其实是懒),就不写详细的步骤了,教程可以自行网上搜索。

2.红杏

鉴于红杏已经挂了,不知道什么时候能恢复,这里就不介绍了。

3.vpn

不得不说,vpn 用户才是科学上网的主力军。

今天我们主要介绍怎么在 ubuntu 14.04 上搭建 PPTP 服务器。

安装和配置 pptp 服务器

首先我们用 apt-get 安装 pptp 服务器

# sudo apt-get install pptpd

然后我们需要修改 pptp 服务器配置文件

# sudo vi /etc/pptpd.conf

在文件结尾添加 server IP 和 client IP. 比如下面这样:

localip 192.168.0.1
remoteip 192.168.0.100-200

把 PPTP 服务器的 IP 配置为 192.168.0.1, 同时给连接到该 PPTP 服务器的 PPTP 客户端分配 192.168.0.100 到 192.168.0.200 的地址段。

配置当 PPTP 客户端 连接到 PPTP 服务器时使用的 DNS 服务器

# sudo vi /etc/ppp/pptpd-options

去掉 ms-dns 配置前面的 #,你可以像下面一样添加 google 的 DNS 服务器或者其他的 DNS 服务器

ms-dns 8.8.8.8
ms-dns 8.8.4.4

然后在配置文件 /etc/ppp/chap-secrets 里面添加用户数据

# sudo vi /etc/ppp/chap-secrets

每一行是是一个用户,一共四项数据,用空格隔开。

第一项是用户名。第二项是服务器名称,你可以填 “pptpd”。第三项是密码。最后一项是 IP 地址,填 * 代表允许所有 IP 访问。

# client server secret IP addresses
username * password *

最后启动 PPTP 服务器

# /etc/init.d/pptpd restart

OK,现在可以使用你的用户名密码连接到 PPTP 服务器了,是不是就大功告成了呢?

然而并没有,你会发现虽然你已经连上了 VPN,但是根本上不了网。因为你忘了一个重要的步骤。

配置 IP 转发

我们可以通过修改/etc/sysctl.conf 文件来启用 IPv4 转发。

# sudo vi /etc/sysctl.conf

把下面一行的注释去掉

net.ipv4.ip_forward=1

然后重新加载配置文件

sudo sysctl -p

把转发规则添加到 iptables

# sudo vi /etc/rc.local

在 exit 0 之前添加下面两行

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -p tcp --syn -s 192.168.0.0/24 -j TCPMSS --set-mss 1356

重启之后你就可以连接到你的 PPTP 服务器,并且愉快的 Google 一下了。

参考:

免费 ssh 代理

http://blog.onlybird.com/getfreessh

Bitvise SSH Client 下载地址

https://www.bitvise.com/ssh-client-download

在Ubuntu上搭建VPN(PPTP)

https://help.ubuntu.com/community/PPTPServer


最后说点题外话,这个世界上并没有绝对的自由。当我们讨论如何科学上网时,我们讨论的是一种技术问题,而不是是非问题。

1,459 total views, 1 views today