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

group_5622_0
group_5622_0

這兩天翻了翻以前的技術文檔,發現有一篇值得拿出來和你們分享:如何給一臺全新的阿里雲服務器,搭建環境 —— 來部署 PHP 項目,Node.js 項目等。php

讓咱們開始吧:html

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

利用 Docker 製做 Centos 服務器

由於我本身沒有阿里雲服務器,因此無法在真實的服務器上搭建環境;但咱們能夠利用 Docker 來模擬。mysql

首先須要一個 systemd 整合的 Centos 鏡像。nginx

Dockerfile 內容以下所示:git

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參數仍然會卡死。github

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

參考: github.com/docker-libr…web

運行容器:sql

當咱們運行 vim 想打開編輯某個文件時,發現 vim 並無安裝,這時候咱們能夠直接在容器中安裝,但爲了模擬的更完全,咱們再修改修改 Dockerfile 文件,讓鏡像帶上 vim:docker

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
相關文章
相關標籤/搜索