一步一步搭建 PHP 伺服器環境

coding01發表於2017-09-21

group_5622_0
group_5622_0

這兩天翻了翻之前的技術文件,發現有一篇值得拿出來和大家分享:如何給一臺全新的阿里雲伺服器,搭建環境 —— 來部署 PHP 專案,Node.js 專案等。

讓我們開始吧:

1. 利用 Docker 製作 Centos 伺服器
2. 安裝 Nginx
3. 安裝 PHP 7
4. 安裝 composer
5. 安裝Node.js
6. 安裝 git 和 svn

利用 Docker 製作 Centos 伺服器

因為我自己沒有阿里雲伺服器,所以沒法在真實的伺服器上搭建環境;但我們可以利用 Docker 來模擬。

首先需要一個 systemd 整合的 Centos 映象。

Dockerfile 內容如下所示:

FROM daocloud.io/centos:7

MAINTAINER "yemeishu" <yemeishu@126.com>
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]複製程式碼

然後就可以啟動容器了,但這裡要避免「執行Docker 使用systemctl報錯」的問題,解決方案是:掛載 /sys/fs/cgroup 目錄到容器的 /sys/fs/cgroup 目錄並配置只讀許可權,但是docker run 命令只能使用-d引數,不能使用-it引數,使用-it引數仍然會卡死。

docker run -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro local/centos7-systemd複製程式碼

參考: github.com/docker-libr…

執行容器:

當我們執行 vim 想開啟編輯某個檔案時,發現 vim 並沒有安裝,這時候我們可以直接在容器中安裝,但為了模擬的更徹底,我們再修改修改 Dockerfile 檔案,讓映象帶上 vim:

FROM daocloud.io/centos:7

MAINTAINER "yemeishu" <yemeishu@126.com>
ENV container docker
RUN yum -y install vim-enhanced

RUN yum -y install vim*

RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]複製程式碼

製作映象,生成容器,執行容器,驗證 vim 是否安裝成功,直接看圖:

安裝工具

有了 「centos 伺服器」了,我們開始配置 PHP (Laravel / Lumen) 環境了。

安裝 Nginx

安裝 Nginx 之前,我們需要修改 yum 源映象,我們使用阿里雲的,

首先安裝 wget:

yum install wget -y複製程式碼
# CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo

# CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

# CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo複製程式碼

yum clean all
yum -y install epel-release
yum install nginx -y
systemctl start nginx
systemctl enable nginx // 開機自啟動複製程式碼

安裝 PHP 7

新增源:

rpm  -Uvh  https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm  -Uvh  https://mirror.webtatic.com/yum/el7/webtatic-release.rpm複製程式碼

安裝:

yum  install  php70w -y複製程式碼

安裝常規需要使用的 php 外掛:

yum install php70w-json php70w-xml php70w-mbstring php70w-mysqlnd php70w-fpm -y複製程式碼

安裝 composer

Composer 是 PHP 的一個依賴管理工具。它允許你申明專案所依賴的程式碼庫,它會在你的專案中為你安裝他們。
Composer 不是一個包管理器。是的,它涉及 "packages" 和 "libraries",但它在每個專案的基礎上進行管理,在你專案的某個目錄中(例如 vendor)進行安裝。預設情況下它不會在全域性安裝任何東西。因此,這僅僅是一個依賴管理。

這種想法並不新鮮,Composer 受到了 node's npm 和 ruby's bundler 的強烈啟發。而當時 PHP 下並沒有類似的工具。

Composer 將這樣為你解決問題:

a) 你有一個專案依賴於若干個庫。

b) 其中一些庫依賴於其他庫。

c) 你宣告你所依賴的東西。

d) Composer 會找出哪個版本的包需要安裝,並安裝它們(將它們下載到你的專案中)。
參考:docs.phpcomposer.com/00-intro.ht…

1.使用 php 命令安裝

# 下載安裝指令碼 - composer-setup.php - 到當前目錄。
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"

# 執行安裝過程。
php composer-setup.php

# 刪除安裝指令碼。
php -r "unlink('composer-setup.php');"

# 開啟命令列視窗並執行如下命令將前面下載的 composer.phar 檔案移動到 /usr/local/bin/ 目錄下面
mv composer.phar /usr/local/bin/composer複製程式碼

更多檢視:getcomposer.org/download/

2.使用 Packagist / Composer 中國全量映象加速

修改 composer 的全域性配置檔案(推薦方式)

composer config -g repo.packagist composer https://packagist.phpcomposer.com複製程式碼

更多檢視:pkg.phpcomposer.com/

3.並行 composer install,讓下載如有神助

composer global require hirak/prestissimo複製程式碼

4.實時更新

提示:不要忘了經常執行 composer selfupdate 以保持 Composer 一直是最新版本哦!

安裝 Node.js

yum -y install nodejs npm --enablerepo=epel複製程式碼

安裝國內映象:

npm install -g cnpm --registry=https://registry.npm.taobao.org複製程式碼

安裝 n 來管理和選擇nodejs版本 // 保持和現有伺服器版本一致

cnpm install -g n複製程式碼

安裝最新的stable版:

n stable複製程式碼

或者安裝指定版本:如 n 0.8.20

安裝 git 和 svn

yum -y install git
yum -y install subversion複製程式碼

測試

現在基礎的工具和環境已經有了,那我們開始試試效果,安裝一個 Lumen 專案試試:


配置 nginx。在/etc/nginx/conf.d/ 路徑下建立 blog.conf

server {
    listen       80;
    server_name  blog.xxx.com;
    #index index.php index.html;

    location / {
        root /www/html/blog/public;
        try_files $uri $uri/ /index.php?$query_string;
        index index.php index.html index.htm;
    }

    location ~ \.php$ {
        #try_files $uri = 404;
        fastcgi_index  index.php;
        fastcgi_param SCRIPT_FILENAME /www/html/blog/public$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
    }
}複製程式碼

啟動php-fpm,然後利用 curl 命令訪問試試:

可以正常列印出:Lumen (5.5.0) (Laravel Components 5.5.*),表示我們的 nginx 和 php-fpm 啟動並配置成功了。

總結

溫故而知新,本文繼續通過簡單的學習 docker 模擬 Centos 伺服器來配置環境。

如果你有阿里雲伺服器或者騰訊雲伺服器,並且是 Centos 7 系統的,正常通過以上的步驟,安裝必要的工具,部署常規的 PHP 或者 Node.js 專案應該問題不大了。接下來就可以部署常規的運營工具和防護工具了。

下面羅列一些問題和知識點:

1. centos7 docker容器報 docker Failed to get D-Bus connection 錯誤

報這個錯的原因是 dbus-daemon 沒能啟動。systemctl 並不是不能使用。將 CMD 或者 entrypoint 設定為 /usr/sbin/init 即可。docker 容器會自動將 dbus 等服務啟動起來。如下:

docker run --privileged -ti --name test  docker.io/centos:7  /usr/sbin/init複製程式碼

2. 報Error: xz compression not available 的解決方法

yum remove epel-release
# Sometimes that is not enough, you need to remove the cache as well by:

rm -rf /var/cache/yum/x86_64/6/epel
# Then you can install the epel-release again

yum -y install epel-release

# yum clean all is doing great for cleaning the cache複製程式碼

3. FastCgi 與 php-fpm之間是個什麼樣的關係?

可以詳細參考這篇帖子:segmentfault.com/q/101000000…

「完」


coding01 期待您關注

qrcode
qrcode


感謝您能看到這了

qrcode
qrcode

相關文章