一步一步搭建 PHP 服务器环境

2,503 阅读5分钟

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