3.1. Linux源码包编译安装
3.1.1. 编译
从http://git.oschina.net/calvinwilliams/hetao或https://github.com/calvinwilliams/hetao上git clone或直接下载zip包到本地解开,进入src目录,执行编译命令,Linux环境构造文件为makefile.Linux
- $ make -f makefile.Linux
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c ListenSession.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c LOGC.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c rbtree.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c list.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c fasterjson.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c fasterhttp.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c IDL_hetao_conf.dsc.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c Util.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c Config.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c Envirment.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c main.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c MonitorProcess.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c WorkerProcess.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c WorkerThread.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c TimerThread.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c OnAcceptingSocket.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c OnReceivingSocket.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c OnSendingSocket.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c VirtualHostHash.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c ProcessHttpRequest.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c OnConnectingForward.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c OnSendingForward.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c OnReceivingForward.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c HttpSession.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c HtmlCacheSession.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c HtmlCacheEventHander.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c HtmlCacheWdTree.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c HtmlCachePathfilenameTree.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c HttpSessionTimeoutTree.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c LeastConnectionCountTree.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c MimeTypeHash.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c RewriteUrl.c
- gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -o hetao ListenSession.o LOGC.o rbtree.o list.o fasterjson.o fasterhttp.o IDL_hetao_conf.dsc.o Util.o Config.o Envirment.o main.o MonitorProcess.o WorkerProcess.o WorkerThread.o TimerThread.o OnAcceptingSocket.o OnReceivingSocket.o OnSendingSocket.o VirtualHostHash.o ProcessHttpRequest.o OnConnectingForward.o OnSendingForward.o OnReceivingForward.o HttpSession.o HtmlCacheSession.o HtmlCacheEventHander.o HtmlCacheWdTree.o HtmlCachePathfilenameTree.o HttpSessionTimeoutTree.o LeastConnectionCountTree.o MimeTypeHash.o RewriteUrl.o -lpcre -lpthread -lssl -lz
- INSTALL CONFIG :
- mkdir -p /var/hetao
- mkdir -p /var/hetao/log
- hetao -> /usr/local/bin
- ../bin/hetao.sh -> /usr/local/bin
- ../conf/hetao.conf -> /etc/hetao
- ../certs/* -> /etc/hetao/certs
- ../www/* -> /var/hetao/www
- Execute the command to install : sudo make -f makefile.Linux install
没有报错的话就能编译出可执行文件hetao。也可以加上参数-j 10以加快编译速度。
编译输出最后一段提示本次配置预安装目标,确认后执行后面的安装命令。
3.1.2. 安装
以下为安装到系统用户中,如果要安装到其它目录,请修改makefile.Linux中的
- ...
- ###### 目标文件、安装目录配置区
- NOCLEAN_DIRINST_NOCOVER= /var/hetao
- NOCLEAN_DIRINST2_NOCOVER= /var/hetao/log
- BIN = hetao
- BININST = /usr/local/bin
- NOCLEAN_OBJ = ../bin/hetao.sh
- NOCLEAN_OBJINST = /usr/local/bin
- NOCLEAN_OBJ_NOCOVER = ../conf/hetao.conf
- NOCLEAN_OBJINST_NOCOVER = /etc/hetao
- NOCLEAN_OBJ2_NOCOVER = ../certs/*
- NOCLEAN_OBJINST2_NOCOVER= /etc/hetao/certs
- NOCLEAN_OBJ3_NOCOVER = ../www/*
- NOCLEAN_OBJINST3_NOCOVER= /var/hetao/www
- ...
执行安装命令:
- $ sudo make -f makefile.Linux install
- mkdir -p /var/hetao
- mkdir -p /var/hetao/log
- cp -rf hetao /usr/local/bin/
- cp -rf ../bin/hetao.sh /usr/local/bin/
- mkdir -p /etc/hetao
- cp -rf ../conf/hetao.conf /etc/hetao/
- mkdir -p /etc/hetao/certs
- cp -rf ../certs/gencert.sh /etc/hetao/certs/
- cp -rf ../certs/server.crt /etc/hetao/certs/
- cp -rf ../certs/server.csr /etc/hetao/certs/
- cp -rf ../certs/server.key /etc/hetao/certs/
- cp -rf ../certs/server.pem /etc/hetao/certs/
- mkdir -p /var/hetao/www
- cp -rf ../www/error_pages /var/hetao/www/
- cp -rf ../www/index.html /var/hetao/www/
安装过程做了如下事情:
- 自动创建日志目录/var/hetao/log
- 自动复制主执行程序hetao到/usr/local/bin/
- 自动复制管理脚本hetao.sh到/usr/local/bin/
- 自动复制缺省配置文件hetao.conf到/etc/hetao/
- 自动复制示例证书文件到/etc/hetao/certs/
- 自动复制示例首页文件到/var/hetao/www/
- 自动复制自定义出错页面文件到/var/hetao/www/error_pages/
这样就安装好了!
3.1.3. 用缺省配置第一次启动并测试
执行以下命令以缺省配置启动
- $ su - root
- # cd /etc/hetao
- # hetao.sh start
如果没有产生输出、没有产生/var/hetao/log/error.log以及该日志中没有出现ERROR行的话表示启动成功。注意:缺省配置文件中的侦听端口为80。
可以看到进程,hetao进程结构由一个管理进程+n个工作进程组成
- $ ps -ef | grep hetao | grep -v grep
- root 14122 1 0 23:17 ? 00:00:00 hetao /home/calvin/etc/hetao.conf
- root 14123 14122 0 23:17 ? 00:00:00 hetao /home/calvin/etc/hetao.conf
以及侦听端口
- $ netstat -an | grep -w 80
- tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
自测一下
- $ curl http://127.0.0.1:80/index.html
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb18030" />
- <title>Welcome</title>
- </head>
- <body>
- Hello HETAO
- </body>
- </html>
恭喜您,启动成功!
直接发送TERM信号到父进程可停止hetao
- $ kill 14122
3.1.4. 扩大系统限制
默认系统中单个进程最大可打开描述字只有1024个,肯定不能满足一个正式的Web服务器的需要,那么作为生产环境,一定要扩大系统限制。
一些推荐的系统限制设置放在conf/*,把文件内容追加到系统配置中,需要root权限。
conf/limits.conf.add -> /etc/security/limits.conf
- * soft nofile 65536
- * hard nofile 65536
- * soft nproc unlimited
- * hard nproc unlimited
conf/sysctl.conf.add -> /etc/sysctl.conf
- fs.file-max=65536
- net.ipv4.tcp_tw_reuse=1
- net.ipv4.tcp_tw_recycle=1
- net.ipv4.tcp_fin_timeout = 30
- net.ipv4.tcp_keepalive_time = 1200
- net.ipv4.ip_local_port_range = 1024 65000
- net.ipv4.tcp_max_tw_buckets = 5000
执行以下命令生效
- sysctl -p