3.1. Linux源码包编译安装

3.1.1. 编译

http://git.oschina.net/calvinwilliams/hetao或https://github.com/calvinwilliams/hetao上git clone或直接下载zip包到本地解开,进入src目录,执行编译命令,Linux环境构造文件为makefile.Linux

  1. $ make -f makefile.Linux
  2. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c ListenSession.c
  3. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c LOGC.c
  4. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c rbtree.c
  5. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c list.c
  6. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c fasterjson.c
  7. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c fasterhttp.c
  8. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c IDL_hetao_conf.dsc.c
  9. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c Util.c
  10. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c Config.c
  11. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c Envirment.c
  12. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c main.c
  13. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c MonitorProcess.c
  14. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c WorkerProcess.c
  15. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c WorkerThread.c
  16. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c TimerThread.c
  17. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c OnAcceptingSocket.c
  18. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c OnReceivingSocket.c
  19. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c OnSendingSocket.c
  20. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c VirtualHostHash.c
  21. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c ProcessHttpRequest.c
  22. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c OnConnectingForward.c
  23. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c OnSendingForward.c
  24. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c OnReceivingForward.c
  25. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c HttpSession.c
  26. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c HtmlCacheSession.c
  27. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c HtmlCacheEventHander.c
  28. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c HtmlCacheWdTree.c
  29. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c HtmlCachePathfilenameTree.c
  30. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c HttpSessionTimeoutTree.c
  31. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c LeastConnectionCountTree.c
  32. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c MimeTypeHash.c
  33. gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -c RewriteUrl.c
  34. 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
  35. INSTALL CONFIG :
  36. mkdir -p /var/hetao
  37. mkdir -p /var/hetao/log
  38. hetao -> /usr/local/bin
  39. ../bin/hetao.sh -> /usr/local/bin
  40. ../conf/hetao.conf -> /etc/hetao
  41. ../certs/* -> /etc/hetao/certs
  42. ../www/* -> /var/hetao/www
  43. Execute the command to install : sudo make -f makefile.Linux install

没有报错的话就能编译出可执行文件hetao。也可以加上参数-j 10以加快编译速度。

编译输出最后一段提示本次配置预安装目标,确认后执行后面的安装命令。

3.1.2. 安装

以下为安装到系统用户中,如果要安装到其它目录,请修改makefile.Linux中的

  1. ...
  2. ###### 目标文件、安装目录配置区
  3. NOCLEAN_DIRINST_NOCOVER= /var/hetao
  4. NOCLEAN_DIRINST2_NOCOVER= /var/hetao/log
  5. BIN = hetao
  6. BININST = /usr/local/bin
  7. NOCLEAN_OBJ = ../bin/hetao.sh
  8. NOCLEAN_OBJINST = /usr/local/bin
  9. NOCLEAN_OBJ_NOCOVER = ../conf/hetao.conf
  10. NOCLEAN_OBJINST_NOCOVER = /etc/hetao
  11. NOCLEAN_OBJ2_NOCOVER = ../certs/*
  12. NOCLEAN_OBJINST2_NOCOVER= /etc/hetao/certs
  13. NOCLEAN_OBJ3_NOCOVER = ../www/*
  14. NOCLEAN_OBJINST3_NOCOVER= /var/hetao/www
  15. ...

执行安装命令:

  1. $ sudo make -f makefile.Linux install
  2. mkdir -p /var/hetao
  3. mkdir -p /var/hetao/log
  4. cp -rf hetao /usr/local/bin/
  5. cp -rf ../bin/hetao.sh /usr/local/bin/
  6. mkdir -p /etc/hetao
  7. cp -rf ../conf/hetao.conf /etc/hetao/
  8. mkdir -p /etc/hetao/certs
  9. cp -rf ../certs/gencert.sh /etc/hetao/certs/
  10. cp -rf ../certs/server.crt /etc/hetao/certs/
  11. cp -rf ../certs/server.csr /etc/hetao/certs/
  12. cp -rf ../certs/server.key /etc/hetao/certs/
  13. cp -rf ../certs/server.pem /etc/hetao/certs/
  14. mkdir -p /var/hetao/www
  15. cp -rf ../www/error_pages /var/hetao/www/
  16. 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. 用缺省配置第一次启动并测试

执行以下命令以缺省配置启动

  1. $ su - root
  2. # cd /etc/hetao
  3. # hetao.sh start

如果没有产生输出、没有产生/var/hetao/log/error.log以及该日志中没有出现ERROR行的话表示启动成功。注意:缺省配置文件中的侦听端口为80。

可以看到进程,hetao进程结构由一个管理进程+n个工作进程组成

  1. $ ps -ef | grep hetao | grep -v grep
  2. root 14122 1 0 23:17 ? 00:00:00 hetao /home/calvin/etc/hetao.conf
  3. root 14123 14122 0 23:17 ? 00:00:00 hetao /home/calvin/etc/hetao.conf

以及侦听端口

  1. $ netstat -an | grep -w 80
  2. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN

自测一下

  1. $ curl http://127.0.0.1:80/index.html
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb18030" />
  6. <title>Welcome</title>
  7. </head>
  8. <body>
  9. Hello HETAO
  10. </body>
  11. </html>

恭喜您,启动成功!

直接发送TERM信号到父进程可停止hetao

  1. $ kill 14122

3.1.4. 扩大系统限制

默认系统中单个进程最大可打开描述字只有1024个,肯定不能满足一个正式的Web服务器的需要,那么作为生产环境,一定要扩大系统限制。

一些推荐的系统限制设置放在conf/*,把文件内容追加到系统配置中,需要root权限。

conf/limits.conf.add -> /etc/security/limits.conf

  1. * soft nofile 65536
  2. * hard nofile 65536
  3. * soft nproc unlimited
  4. * hard nproc unlimited

conf/sysctl.conf.add -> /etc/sysctl.conf

  1. fs.file-max=65536
  2. net.ipv4.tcp_tw_reuse=1
  3. net.ipv4.tcp_tw_recycle=1
  4. net.ipv4.tcp_fin_timeout = 30
  5. net.ipv4.tcp_keepalive_time = 1200
  6. net.ipv4.ip_local_port_range = 1024 65000
  7. net.ipv4.tcp_max_tw_buckets = 5000

执行以下命令生效

  1. sysctl -p