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

2017-9-22 小编 教程

docker.png这两天翻了翻之前的技术文档,发现有一篇值得拿出来和大家分享:如何给一台全新的阿里云服务器,搭建环境 —— 来部署 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

参考: https://github.com/docker-library/docs/tree/master/centos

运行容器:

当我们运行 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 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。

参考:http://docs.phpcomposer.com/00-intro.html

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

更多查看:https://getcomposer.org/download/

2.使用 Packagist / Composer 中国全量镜像加速

修改 composer 的全局配置文件(推荐方式)

composer config -g repo.packagist composer https://packagist.phpcomposer.com

更多查看:https://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之间是个什么样的关系?

可以详细参考这篇帖子:https://segmentfault.com/q/1010000000256516

文章来源:https://segmentfault.com/a/1190000011302348

标签: Centos

发表评论:

豫ICP备13002593号-2
Copyright © 2017 ruanfei.com. All rights reserved. Powered by emlog.