Max OSX Mavericks 搭建 nginx + php-fpm + mysql

虽然 Mac 下自带了 apache + php,得总归还是 nginx 用得顺手,所以打算在 Mac 下安装 nginx + php-fpm + mysql

安装 ningx

为了方便起见我直接从 brew 中安装了 ningx,Homebrew 的安装可以参见 Mac OS 中 Homebrew 的安装与使用

  1. 安装,终端下执行

    brew search nginx
    brew install nginx
  2. 配置

    配置文件在 /usr/local/etc/nginx 目录下面,依自己的喜好配置。

  3. 运行,终端下运行 ningx 即可,若 ningx 的运行端口指定为小于 1024 那么还需要 sudo 权限

  4. 其它

    #重新加载配置|重启|停止|退出
    nginx -s reload|reopen|stop|quit
    #测试配置是否有语法错误
    nginx -t

php-fpm

Mac OSX 10.9的系统自带了PHP、php-fpm,所以也省去了安装php-fpm的麻烦。

配置

cd /private/etc/
sudo cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf

然后依照自己的喜好做完配置,还有一点需要修改的是 error_log 的设置,默认编译的时候 log 所在的路径是不存在的,将它反注释,并手动指定一个路径,比如 /usr/local/var/log/php-fpm.log,所以这行看上去应该是这样的:

error_log = /usr/local/var/log/php-fpm.log

运行

sudo php-fpm

安装 mysql

  1. 安装

    mysql 我也从 brew 中安装了:

    brew install mysql
  2. 配置

    初始化 mysql 数据库

    mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp

    这个时候 root 用户是没有密码的,这里给 mysql 的 root 用户设置密码:

    /usr/local/opt/mysql/bin/mysqladmin -u root password 'PASSWORD'

    进行一个安全设置,终端运行,它全引导我们进行一系列设置

    /usr/local/opt/mysql/bin/mysql_secure_installation

    设置 mysql 的配置文件 my.cnf (默认在 /usr/local/Cellar/mysql/版本号/my.cnf)

    设置开机启动(可选)

    ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
    Then to load mysql now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

    常用命令

    mysql.server start #启动mysql服务
    mysql.server stop #关闭mysql服务

EOF

Mac OS 中 Homebrew 的安装与使用

Homebrew (http://brew.sh/) 可以看作是 OSX 中的包管理器,它可以安装很多系统中不自带的软件,类似于 apt/pacman 等工具,在 OSX 中还有有MacPorts、Fink、Homebrew等管理工具。

1. 安装 Homebrew:

安装 Homebrew 非常简单,依据官网中的介绍,只要在命令行中执行:
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
安装过程中,可能需要输入密码以使用 root 权限。
继续阅读Mac OS 中 Homebrew 的安装与使用

systemd 执行自定义自动脚本 rc.local

Archlinux 迁移到 systemd 后,原来的 rc.local 就不能用了。但又想在启动的时候执行一些脚本,这个时候,我们可以自己写一个 rclocal.service 的启动控制。

新建一个 /usr/lib/systemd/system/rclocal.service 文件:

[Unit]
Description=/etc/rc.local Compatibility
After=network.target
ConditionPathExists=/etc/rc.local
 
[Service]
Type=forking
PermissionsStartOnly=true
ExecStart=/etc/rc.local
TimeoutSec=0
#StandardOutput=tty
RemainAfterExit=yes
Restart=on-abort
SysVStartPriority=99
 
[Install]
WantedBy=multi-user.target

好了,再去建立 /etc/rc.local,这个文件其实就是一般的 shell 脚本。

添加执行权限:chmod 755 /etc/rc.local

添加 rclocal.service 为开机启动:systemctl enable rclocal.service

完成后,重启电脑进行检验。

通过 SMTP 来检测邮箱的有效性

如何来检测一个 email 地址?一般就需要从邮件地址的 smtp 服务器来获取一些信息来判断。

假设我要检测 testmail@douban.com 这个地址是不是真存在:

首先需要取得 douban.com 这个域的 MX 记录:
dig douban.com MX

然后根据得到的 MX 地址来检测,用 telnet MX记录 端口号 来连接,然后输入命令:
verify

从结果中基本可以看到 testmail@douban.com 这个地址返回的是 250 状态,是存在的;而下面的 jfksdjglfdgld@douban.com 则返回了 550 状态,同时也可以从下面的描述语句中得到这个地址则是不存在的。
继续阅读通过 SMTP 来检测邮箱的有效性

Debian 下安装 NFS 服务器

NFS是网络文件共享系统。在网络中,这个协议的使用非常广泛,也是基于共享,网络才有了今天的发展。下面是 Debian NFS 服务器的一些安装和设置。

Debian下安装NFS服务器

安装Debian NFS服务器端:
# aptitude install nfs-common nfs-kernel-server portmap

在客户端则需要安装:
# aptitude install nfs-common portmap

启动服务: # /etc/init.d/nfs-kernel-server start
停止服务: # /etc/init.d/nfs-kernel-server stop
重启服务: # /etc/init.d/nfs-kernel-server restart

Debian NFS服务器配置:

1、创建共享目录:

# mkdir /home/share
# chown nobody.nogroup /home/share

2、创建或修改/etc/exports配置文件

当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样:

[共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]

Debian NFS服务器共享的常用参数:

ro                    只读访问 
rw                    读写访问 
sync                  所有数据在请求时写入共享 
async                 NFS在写入数据前可以相应请求 
secure                NFS通过1024以下的安全TCP/IP端口发送 
insecure              NFS通过1024以上的端口发送 
wdelay                如果多个用户要写入NFS目录,则归组写入(默认) 
no_wdelay             如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。 
hide                  在NFS共享目录中不共享其子目录 
no_hide               共享NFS目录的子目录 
subtree_check         如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) 
no_subtree_check      和上面相对,不检查父目录权限 
all_squash            共享文件的UID和GID映射匿名用户anonymous,适合公用目录。 
no_all_squash         保留共享文件的UID和GID(默认) 
root_squash           root用户的所有请求映射成如anonymous用户一样的权限(默认) 
no_root_squas         root用户具有根目录的完全管理访问权限 
anonuid=xxx           指定NFS服务器/etc/passwd文件中匿名用户的UID 
anongid=xxx           指定NFS服务器/etc/passwd文件中匿名用户的GID

Debian NFS服务器配置文件/etc/exports内容如下:

$ cat /etc/exports
/home/share 192.168.102.15(rw,sync) *(ro)

配置说明: 对192.168.102.15赋予读写权限,其他机器仅有只读权限。

重启服务器: # /etc/init.d/nfs-kernel-server restart

3、在客户机上查看NFS服务器的资源共享情况:# showmount -e 192.168.102.47

4、在客户端使用mount命令挂载共享目录:# mount 192.168.102.47:/home/share /mnt

是不是我们每次修改了配置文件都需要重启Debian NFS服务器服务呢? 这个时候我们就可以用exportfs命令重新扫描/etc/exports文件,来使改动立刻生效。

比如:

# exportfs -au #卸载所有共享目录
# exportfs -rv #重新共享所有目录并输出详细信息

exportfs 命令有软件包 nfs-kernel-server 提供,详细的 exportfs 命令说明请查看:

# man exportfs

参考:http://wiki.debian.org.hk/w/Share_files_with_NFS

RHEL/CentOS 6.x 添加 EPEL & remi 安装软件

在使用 RHEL/CentOS 的时候总是会嫌弃自身源里的软件包版本过旧,比如 php 官方最新稳定版本为 5.5.0,而 CentOS 上还是 5.3.3,而我又是一个版本控。解决这个问题就可以给系统加上 EPEL & remi 的源了。

EPEL(Extra Packages for Enterprise Linux) 是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、CloudLinux 等提供软件包的项目,地址:http://fedoraproject.org/wiki/EPEL。

一、添加并启用 EPEL 源:

1. RHEL/CentOS/CL Linux 6.x 下安装 EPEL yum 源,根据不同的系统选择:

32bit:

# rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

或 64bit:

# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

导入key:

# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

2. 安装好后会在/etc/yum.repos.d/下创建 epel.repoepel-testing.repo 两个配置文件,更改 epel.repo 的 [epel] 下的 enabled 为1:

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
...

这样 EPEL 的源就安装完成了。
继续阅读RHEL/CentOS 6.x 添加 EPEL & remi 安装软件

收集一些常用的 alias

在 *NIX 系统下的 shell 如果用管道符 “|” 去搭配一些命令的话,可以创造出很多的应用,如果要熟练运用这些的话,需要非常熟悉这些命令的使用方法,还有要很强的记忆力。
这里有两个网站把一些常用的 alias 收集起来,选择一些加到 .bashrc 里去,可以大大提高我们的效率啊~

http://alias.sh/
http://rubytune.com/cheat

Debian 下删除自动获取的ipv6

在 vps 上总是莫名其妙地获取到不需要的 ipv6 地址,而这些 ipv6 地址又不能正常地使用,所以需要禁用掉这些地址。

修改 /etc/network/interfaces

iface eth01 inet6 static
        up echo 0 > /proc/sys/net/ipv6/conf/default/autoconf
        up echo 0 > /proc/sys/net/ipv6/conf/all/autoconf
        address IPV6地址
        netmask xx
        gateway IPV6网关
  1. 换为具体的网卡接口

然后重启network:

# /etc/init.d/networking restart