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

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

「完」


原文发布于微信公众号 - coding01(coding01)

原文发表时间:2017-09-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏周奇的专栏

tungsten replicator:数据迁移利器【mysql 数据同步到 mongodb】

tungsten-replicator 是一款开源的、高性能、跨数据库系统的复制引擎,可用作多种场景下的数据迁移组件。本文尝试利用该工具实现 mysql 数据到...

1.6K00
来自专栏码字搬砖

centos6.5安装Docker

Docker requires a 64-bit installation regardless of your CentOS version. Also, y...

1.7K60
来自专栏运维小白

6.3 bzip2压缩工具

bzip2目录概要 bzip2 1.txt 或 bzip2 -z 1.txt 压缩文件 bzip2 -d 1.txt.bz2 或 ...

19360
来自专栏Pythonista

Python深度学习之安装theano(windows)

安装theano,提前清空自己的python环境吧,坑太多了,anaconda会自动安装path

17160
来自专栏三木的博客

为虚拟机vCPU绑定物理CPU

为了提高缓存命中率,提高虚拟机性能,可以将vCPU绑定到指定的物理CPU去执行。具体设置步骤如下: 在宿主机操作系统启动时将用于虚拟机的CPU独立出来,使其上只...

42880
来自专栏Python

tar压缩解压缩命令详解

26940
来自专栏电光石火

Docker Settings

23630
来自专栏Laoqi's Linux运维专列

安装配置kibana+logstash

18620
来自专栏木子昭的博客

解决linux端口被占用

解决端口占用问题的最快捷方式就是杀死相关进程,以杀死占用22端口的ssh为例 查看进程 如图所示,对应的进程名为sshd 进程号为 55312 输入kill ...

42760

Docker-如何清理磁盘占用

最近开始打包我们的一些应用,不得不说,我已经爱上了Docker这个工具。在AWS EC2上,它的存在使我们的工作方便了许多。然而,我们遇到的唯一问题是Docke...

38370

扫码关注云+社区

领取腾讯云代金券