一步一步搭建 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:7 MAINTAINER "yemeishu" <[email protected]> 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" <[email protected]> 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
2.使用 Packagist / Composer 中国全量镜像加速
修改 composer 的全局配置文件(推荐方式)
composer config -g repo.packagist composer https://packagist.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之间是个什么样的关系?
「完」
coding01 期待您关注
感谢您能看到这了