CentOS7下安裝H2o的經歷(How did I install the h2o in centos7?)

關注Server領域很久了,各種工具層出不窮,C的h2o,java的vert.x,php的swoole,go的fasthttp-postgresql,都是各自領域性能極強的http server,也符合行業新規範和特性。

此前,Swoole已經用在實際項目中了,效果的確驚人。當我還沒有從驚歎中回過神,又來了一個H2o,根據TechEmpower的Web Framework Benchmarks測試結果,特別想一探究竟,這個H2o爲何如此之快!

於是就有了下列教程,廢話不多說,Let's do it.

 

root賬戶下的安裝,中間如果出現了沒有安裝某種工具的提示,請自行安裝。

第一步:先更新系統

yum install epel-release -y
yum clean all && sudo yum update -y

第二步:配置所需要的源,並安裝H2O

vim /etc/yum.repos.d/bintray-h2o-rpm.repo

將此段代碼加入文件中
[bintray-h2o-rpm]
name=bintray-h2o-rpm
baseurl=https://dl.bintray.com/tatsushid/h2o-rpm/centos/$releasever/$basearch/
gpgcheck=0
repo_gpgcheck=0
enabled=1

保存文件後執行安裝命令
yum install h2o -y

第三步:給H2O創建用戶組和賬戶

groupadd -g 101 h2o
useradd -d /etc/h2o -g 101 -M -s /sbin/nologin -u 101 h2o

接下來,就要配置H2O的conf文件了(橋黑板,劃重點)

第四步:

cd /etc/h2o/
mv h2o.conf h2o.conf.original
vim h2o.conf

把下面的配置文件寫入h2o.conf

listen:
  port: 80
access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.html','index.php' ]
hosts:
  "www.test.cn":
    paths:
      /:
        file.dir: /www/web/tests/basic/web  # 網站的運行目錄
        redirect:
          url: /index.php/ # 我的Yii2用到的重寫規則
          internal: YES  # 內部執行
          status: 307
file.custom-handler:
  extension: .php
  fastcgi.connect:
    port: /run/php-fpm-7.2.sock
    type: unix
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o # 剛纔分配的用戶,改成你自定義的

然後,執行以下命令:

systemctl enable h2o
systemctl start h2o

記得將你的程序放入配置的目錄中。

如果遇到了不能連接或者網站無法訪問的情況,記得修改防火牆配置;

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload

第五步:安裝PHP7.2

安裝教程不再寫了,網上很多,只寫安裝完成後的操作。

安裝完成後,找到php-fpm安裝目錄,修改php-fpm.conf和www.conf,記得備份一份!!

php-fpm文件內容

include=/etc/opt/remi/php72/php-fpm.d/*.conf
[global]
daemonize = yes
emergency_restart_threshold = 2
emergency_restart_interval = 1m
error_log = /var/log/php-fpm/php-fpm-7.2-error.log
pid = /var/run/php-fpm-7.2.pid
process_control_timeout = 10s
www.conf文件

[www]
group = h2o
listen = /var/run/php-fpm-7.2.sock
listen.backlog = 65536
listen.owner = h2o
listen.group = h2o
pm = static
pm.max_children = 2
pm.max_requests = 10240
user = h2o

然後修改php.ini文件

[PHP]
allow_url_fopen = On
always_populate_raw_post_data = -1
display_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
expose_php = Off
log_errors = On
memory_limit = 256M
output_buffering = 4096
post_max_size = 64M
register_argc_argv = Off
request_order = "GP"
upload_max_filesize = 64M
variables_order = "GPCS"
[Date]
date.timezone = America/New_York
[Session]
session.cache_limiter =
session.gc_divisor = 1000
session.hash_bits_per_character = 5
session.save_handler = files
session.save_path = "/var/opt/remi/php72/lib/php/session/"
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

保存後,需要將session目錄授權給h2o用戶

chown root.h2o /var/opt/remi/php71/lib/php/session/

啓動php-fpm

systemctl enable php72-php-fpm 
systemctl start php72-php-fpm

最後:

以daemon模式啓動h2o,並且加載/etc/h2o/h2o.conf配置文件

啓動命令

h2o -m daemon -c /etc/h2o/h2o.conf

停掉服務的命令是:

kill -TERM `cat /var/run/h2o/h2o.pid`

PS: 如果有朋友遇到Yii2各種報錯,但是擴展命名已經裝了,記得讓php-fpm重新加載配置,方法:

ps aux|grep php-fpm  找到mater進程的pid,

然後kill -USR2 pid,通過進程信號告知php-fpm重新加載

命令參考:

“TERM 立刻終止
QUIT 平滑終止
USR1 重新打開日誌文件
USR2 平滑重載所有worker進程並重新載入配置和二進制模塊”

運行成功,路由成功解析,報錯請無視,因爲Oauth2認證需要帶Authorization頭標籤。

速度的確很快,對比結果沒有貼出,因爲是用實際項目測試的,沒保存。。。持續研究中,對於Go的fasthttp-postgresql,我也有較高期待,等待進一步探索。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章