hhvm (hiphop virtual machine) 是一個用于執行以 php 和 hack 語言編寫的代碼的虛拟環境。它是由 facebook 開發的,提供了目前 php 7 的大多數功能。要在你的伺服器上運作 hhvm,你需要使用 fastcgi 來将 hhvm 和 nginx 或 apache 銜接起來,或者你也可以使用 hhvm 中的内置 web 伺服器 proxygen。
在這篇教程中,我将展示給你如何在 nginx web 伺服器的 hhvm 上安裝 wordpress。這裡我使用 centos 7 作為作業系統,是以你需要懂一點 centos 操作的基礎。
先決條件
centos 7 - 64位
root 權限
<a target="_blank"></a>
在本教程中,我們将使用 selinux 的強制模式,是以我們需要在系統上安裝一個 selinux 管理工具。這裡我們使用 <code>setools</code> 和 <code>setrobleshoot</code> 來管理 selinux 的各項配置。
centos 7 已經預設啟用 selinux,我們可以通過以下指令來确認:
<code># sestatus</code>
<code># getenforce</code>
驗證 selinux 運作狀态
如圖,你能夠看到,selinux 已經開啟了強制模式。
接下來就是使用 <code>yum</code> 來安裝 <code>setools</code> 和 <code>setroubleshoot</code> 了。
<code># yum -y install setroubleshoot setools net-tools</code>
安裝好這兩個後,再安裝 epel 倉庫。
<code># yum -y install epel-release</code>
nginx (發音:engine-x) 是一個高性能、低記憶體消耗的輕量級 web 伺服器軟體。在 centos 中可以使用 <code>yum</code>指令來安裝 nginx 包。確定你以 root 使用者登入系統。
使用 <code>yum</code> 指令從 centos 倉庫中安裝 nginx。
<code># yum -y install nginx</code>
現在可以使用 <code>systemctl</code> 指令來啟動 nginx,同時将其設定為跟随系統啟動。
<code># systemctl start nginx</code>
<code># systemctl enable nginx</code>
為確定 nginx 已經正确運作于伺服器中,在浏覽器上輸入伺服器的 ip,或者如下使用 <code>curl</code> 指令檢查顯示結果。
<code># curl 192.168.1.110</code>
我這裡使用浏覽器來驗證。
nginx 正确運作
mariadb 是由原 mysql 開發者 monty widenius 開發的一款開源資料庫軟體,它由 mysql 分支而來,與 mysql 的主要功能保持一緻。在這一步中,我們要安裝 mariadb 資料庫并為之配置好 root 密碼,然後再為所要安裝的 wordpress 建立一個新的資料庫和使用者。
安裝 mariadb 和 mariadb-server:
<code># yum -y install mariadb mariadb-server</code>
啟動 mariadb 并添加為服務,以便随系統啟動。
<code># systemctl start mariadb</code>
<code># systemctl enable mariadb</code>
現在 mariadb 已經啟動了,還需要為 mariadb/mysql 資料庫配置 root 使用者密碼。輸入以下指令來設定 mariadb root 密碼。
<code># mysql_secure_installation</code>
提示設定 root 使用者密碼時,輸入新密碼進行設定:
<code>set root password? [y/n] y</code>
<code>new password:</code>
<code>re-enter new password:</code>
<code></code>
<code>remove anonymous users? [y/n] y</code>
<code>... success!</code>
<code>disallow root login remotely? [y/n] y</code>
<code>remove test database and access to it? [y/n] y</code>
<code>reload privilege tables now? [y/n] y</code>
這樣就設定好了 mariadb 的 root 密碼。現在登入到 mariadb/mysql shell 并為 wordpress 的安裝建立一個新資料庫 <code>wordpressdb</code> 和新使用者 <code>wpuser</code>,密碼設定為 <code>wpuser@</code>。為你的設定選用一個安全的密碼。
登入到 mariadb/mysql shell:
<code># mysql -u root -p</code>
接着輸入你剛剛設定的 root 使用者密碼。
建立資料庫和使用者:
<code>mariadb [(none)]> create database wordpressdb;</code>
<code>mariadb [(none)]> create user wpuser@localhost identified by 'wpuser@';</code>
<code>mariadb [(none)]> grant all privileges on wordpressdb.* to wpuser@localhost identified by 'wpuser@';</code>
<code>mariadb [(none)]> flush privileges;</code>
<code>mariadb [(none)]> \q</code>
為 wordpress 的安裝建立資料庫和使用者
現在安裝好了 mariadb,并為 wordpress 建立好了資料庫。
對于 hhvm,我們需要安裝大量的依賴項。作為選擇,你可以從 github 下載下傳 hhvm 的源碼來編譯安裝,也可以從網絡上擷取預編譯的包進行安裝。在本教程中,我使用的是預編譯的安裝包。
為 hhvm 安裝依賴項:
<code># yum -y install cpp gcc-c++ cmake git psmisc {binutils,boost,jemalloc,numactl}-devel \</code>
<code>> {imagemagick,sqlite,tbb,bzip2,openldap,readline,elfutils-libelf,gmp,lz4,pcre}-devel \</code>
<code>> lib{xslt,event,yaml,vpx,png,zip,icu,mcrypt,memcached,cap,dwarf}-devel \</code>
<code>> {unixodbc,expat,mariadb}-devel lib{edit,curl,xml2,xslt}-devel \</code>
<code>> glog-devel oniguruma-devel ocaml gperf enca libjpeg-turbo-devel openssl-devel \</code>
<code>> mariadb mariadb-server libc-client make</code>
<code># rpm -uvh http://mirrors.linuxeye.com/hhvm-repo/7/x86_64/hhvm-3.15.2-1.el7.centos.x86_64.rpm</code>
<code># ln -s /usr/local/bin/hhvm /bin/hhvm</code>
安裝好 hhvm 之後使用如下指令按了驗證:
<code># hhvm --version</code>
為了能使用 php 指令,可以把 <code>hhvm</code> 指令設定為 <code>php</code>。這樣在 shell 中輸入 <code>php</code> 指令的時候,你會看到和輸入 <code>hhvm</code> 指令一樣的結果。
<code># sudo update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60</code>
<code># php --version</code>
安裝 hhvm
這一步中,我們來配置 hhvm 以系統服務來運作。我們不通過端口這種正常的方式來運作它,而是選擇使用 unix socket 檔案的方式,這樣運作的更快速一點。
進入 systemd 配置目錄,并建立一個 <code>hhvm.service</code> 檔案。
<code># cd /etc/systemd/system/</code>
<code># vim hhvm.service</code>
複制粘貼如下配置到檔案中去。
<code>[unit]</code>
<code>description=hhvm hiphop virtual machine (fcgi)</code>
<code>after=network.target nginx.service mariadb.service</code>
<code>[service]</code>
<code>execstart=/usr/local/bin/hhvm --config /etc/hhvm/server.ini --user nginx --mode daemon -vserver.type=fastcgi -vserver.filesocket=/var/run/hhvm/hhvm.sock</code>
<code>[install]</code>
<code>wantedby=multi-user.target</code>
儲存檔案退出 vim。
接下來,進入 <code>hhvm</code> 目錄并編輯 <code>server.ini</code> 檔案。
<code># cd /etc/hhvm/</code>
<code># vim server.ini</code>
将第 7 行 <code>hhvm.server.port</code> 替換為 unix socket,如下:
<code>hhvm.server.file_socket = /var/run/hhvm/hhvm.sock</code>
儲存檔案并退出編輯器。
我們已在 hhvm 服務檔案中定義了 hhvm 以 <code>nginx</code> 使用者身份運作,是以還需要把 socket 檔案目錄的屬主變更為 <code>nginx</code>。然後我們還必須在 selinux 中修改 hhvm 目錄的權限上下文以便讓它可以通路這個 socket 檔案。
<code># chown -r nginx:nginx /var/run/hhvm/</code>
<code># semanage fcontext -a -t httpd_var_run_t "/var/run/hhvm(/.*)?"</code>
<code># restorecon -rv /var/run/hhvm</code>
伺服器重新開機之後,hhvm 将不能運作,因為沒有存儲 socket 檔案的目錄,所有還必須在啟動的時候自動建立一個。
使用 vim 編輯 <code>rc.local</code> 檔案。
<code># vim /etc/rc.local</code>
将以下配置粘貼到檔案末行。
<code># mkdir -p /var/run/hhvm/</code>
儲存檔案并退出 vim。然後給檔案賦予執行權限。
<code># chmod +x /etc/rc.local</code>
重新加載 systemd 服務,啟動 hhvm 并設定為随系統啟動。
<code># systemctl daemon-reload</code>
<code># systemctl start hhvm</code>
<code># systemctl enable hhvm</code>
要確定無誤,使用 <code>netstat</code> 指令驗證 hhvm 運作于 socket 檔案。
<code># netstat -pl | grep hhvm</code>
check the hhvm socket file
在這個步驟中,我們将配置 hhvm 已讓它運作在 nginx web 服務中,這需要在 nginx 目錄建立一個 hhvm 的配置檔案。
進入 <code>/etc/nginx</code> 目錄,建立 <code>hhvm.conf</code> 檔案。
<code># cd /etc/nginx/</code>
<code># vim hhvm.conf</code>
粘貼以下内容到檔案中。
<code>location ~ \.(hh|php)$ {</code>
<code>root /usr/share/nginx/html;</code>
<code>fastcgi_keep_conn on;</code>
<code>fastcgi_pass unix:/var/run/hhvm/hhvm.sock;</code>
<code>fastcgi_index index.php;</code>
<code>fastcgi_param script_filename $document_root$fastcgi_script_name;</code>
<code>include fastcgi_params;</code>
<code>}</code>
然後,儲存并退出。
接下來,編輯 <code>nginx.conf</code> 檔案,添加 hhvm 配置檔案到 <code>include</code> 行。
<code># vim nginx.conf</code>
添加配置到第 57 行的 <code>server</code> 指令中。
<code>include /etc/nginx/hhvm.conf;</code>
儲存并退出。
然後修改 selinux 中關于 hhvm 配置檔案的權限上下文。
<code># semanage fcontext -a -t httpd_config_t /etc/nginx/hhvm.conf</code>
<code># restorecon -v /etc/nginx/hhvm.conf</code>
測試 nginx 配置并重新開機服務。
<code># nginx -t</code>
<code># systemctl restart nginx</code>
記住確定測試配置沒有錯誤。
在這一步中,我們要為 nginx 和 hhvm 建立一個新的虛拟主機配置檔案。這裡我使用域名 <code>natsume.co</code> 來作為例子,你可以使用你主機喜歡的域名,并在配置檔案中相應位置以及 wordpress 安裝過程中進行替換。
進入 nginx 的 <code>conf.d</code> 目錄,我們将在該目錄存儲虛拟主機檔案。
<code># cd /etc/nginx/conf.d/</code>
使用 vim 建立一個名為 <code>natsume.conf</code> 的配置檔案。
<code># vim natsume.conf</code>
粘貼以下内容到虛拟主機配置檔案中。
<code>server {</code>
<code>listen 80;</code>
<code>server_name natsume.co;</code>
<code># note that these lines are originally from the "location /" block</code>
<code>root /var/www/hakase;</code>
<code>index index.php index.html index.htm;</code>
<code>location / {</code>
<code>try_files $uri $uri/ =404;</code>
<code>error_page 404 /404.html;</code>
<code>location = /50x.html {</code>
<code>root /var/www/hakase;</code>
<code>location ~ \.php$ {</code>
<code>try_files $uri =404;</code>
<code>fastcgi_index index.php;</code>
<code>fastcgi_param script_filename $document_root$fastcgi_script_name;</code>
<code>include fastcgi_params;</code>
在這個虛拟主機配置檔案中,我們定義該域名的 web 根目錄為 <code>/var/www/hakase</code>。目前該目錄還不存在,所有我們要建立它,并變更屬主為 nginx 使用者群組。
<code># mkdir -p /var/www/hakase</code>
<code># chown -r nginx:nginx /var/www/hakase</code>
接下來,為該檔案和目錄配置 selinux 上下文。
<code># semanage fcontext -a -t httpd_config_t "/etc/nginx/conf.d(/.*)?"</code>
<code># restorecon -rv /etc/nginx/conf.d</code>
最後,測試 nginx 配置檔案以確定沒有錯誤後,重新開機 nginx:
在步驟 5 的時候,我們已經為 wordpress 配置好了虛拟主機,現在隻需要下載下傳 wordpress 和使用我們在步驟 3 的時候建立的資料庫和使用者來編輯資料庫配置就好了。
進入 web 根目錄 <code>/var/www/hakase</code> 并使用 wget 指令下載下傳 wordpress:
<code># cd&nbsp;/var/www/hakase</code>
<code># wget wordpress.org/latest.tar.gz</code>
解壓 <code>latest.tar.gz</code> 并将 <code>wordpress</code> 檔案夾中所有的檔案和目錄移動到目前目錄:
<code># tar -xzvf latest.tar.gz</code>
<code># mv wordpress/* .</code>
下一步,複制一份 <code>wp-config-sample.php</code> 并更名為 <code>wp-config.php</code>,然後使用 vim 進行編輯:
<code># cp wp-config-sample.php wp-config.php</code>
<code># vim wp-config.php</code>
将 <code>db_name</code> 設定為 <code>wordpressdb</code>、<code>db_user</code> 設定為 <code>wpuser</code> 以及 <code>db_password</code> 設定為 <code>wpuser@</code>。
<code>define('db_name', 'wordpressdb');</code>
<code>define('db_user', 'wpuser');</code>
<code>define('db_password', 'wpuser@');</code>
<code>define('db_host', 'localhost');</code>
wordpress 配置
修改關于 wordpress 目錄的 selinux 上下文。
<code># semanage fcontext -a -t httpd_sys_content_t "/var/www/hakase(/.*)?"</code>
<code># restorecon -rv /var/www/hakase</code>
現在打開 web 浏覽器,在位址欄輸入你之前為 wordpress 設定的域名,我這裡是 <code>natsume.co</code>。
選擇語言并點選繼續continue。
安裝 wordpress - 語言選擇
根據自身要求填寫站點标題和描述并點選安裝 wordpressinstall wordpress"。
安裝 wordpress - 配置管理者賬号和站點标題
耐心等待安裝完成。你會見到如下頁面,點選登入log in來登入到管理面闆。
安裝 wordpress - 成功安裝
輸入你設定的管理者使用者賬号和密碼,在此點選登入log in。
登入到 wordpress 管理面闆
現在你已經登入到 wordpress 的管理面闆了。
wordpress 管理面
wordpress 的首頁:
wordpress 預設首頁
至此,我們已經在 centos 7 上通過 nginx 和 hhvm 成功安裝 wordpress。
原文釋出時間為:2017-03-30
本文來自雲栖社群合作夥伴“linux中國”