配置nginx + php7 + mongodb的centos服务器环境

重构、重构、重构 大三下学期了,面试某公司,结果连技术面都没过,╮(╯▽╰)╭,还是有一点打击的。不过也有打算重构一下两个小项目的,希望以此叩开实习的大门。记录一下全过程!

重构前

这部分主要是服务器的搭建。 之前Github学生认证,送了DigitalOcean 100刀,买了一台位于新加坡节点的512 MB Memory / 20 GB Disk / SGP1 - CentOS 6.7 x64

编译nginx mongodb … 前的准备

yum updateyum install wget gcc gcc-c++ perl vim

编译 nginx

先把所需要的库下载安装好 zlib pcre openssl

zlib http://zlib.net/zlib-1.2.8.tar.gz pcre http://ftp.cs.stanford.edu/pub/exim/pcre/pcre-8.38.tar.gz openssl http://www.openssl.org/source/openssl-1.0.1s.tar.gz

cd /usr/local/src/wget http://nginx.org/download/nginx-1.9.12.tar.gztar xzf nginx-1.9.12.tar.gzcd nginx-1.9.12./configure --with-http_v2_module --with-http_ssl_module --with-pcre --with-openssl=/usr/local/src/openssl-1.0.1smakemake install

编译参数很多,但这里我用的很少,主要原因还是自己不太熟悉,至于怎么优化,留给以后深入学习nginx再继续。

当启动nginx出现了这个错误error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory,搜了一下可以这样解决ln -s /usr/local/lib/libpcre.so.1 /lib64

配置虚拟主机

为方便管理配置虚拟主机,在nginx.conf 最后一个}之前添加一行include vhost/*.conf;并建立vhost目录,并增加一个配置文件apix.xu42.cn.conf,内容暂时简单如下:

server { listen 80; server_name apix.xu42.cn; root /data/wwwroot/apix.xu42.cn; index index.html; }

/usr/local/nginx/sbin/nginx -t测试配置是否有错,无误则 -s reload

选用了这位同学的一个快速签发证书的脚本,我的letsencrypt.conf文件内容如下:

ACCOUNT_KEY=”letsencrypt-account.key” DOMAIN_KEY=”apix.xu42.cn.key” DOMAIN_DIR=”/data/wwwroot/apix.xu42.cn” DOMAINS=”DNS:apix.xu42.cn” ECC=TRUE

我在执行时报了一个ImportError: No module named argparse的错误,安装即可yum install python argparse

修改apix.xu42.cn文件如下(部分)(参考了这位同学的配置文件):

server { listen 443 ssl http2; server_name apix.xu42.cn; client_max_body_size 10M; ssl_certificate /usr/local/nginx/certs/apix.chained.crt; ssl_certificate_key /usr/local/nginx/certs/apix.xu42.cn.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 10s; }

至此,nginx的配置算是告一段落,接下来是php的配置

编译PHP

编译安装了两个大版本的PHP,5.6.19和7.0.4,下载并解压。

PHP 7.0.4

同样的,先行安装依赖(参考了这篇文章):

yum install -y make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers php-mysqlnd libmcrypt-devel libtidy libtidy-devel recode recode-devel libxpm-devel

编译安装:

./configure \ –prefix=/usr/local/php7 \ –with-config-file-path=/usr/local/php7/etc \ –enable-mbstring \ –enable-zip \ –enable-bcmath \ –enable-pcntl \ –enable-ftp \ –enable-exif \ –enable-calendar \ –enable-sysvmsg \ –enable-sysvsem \ –enable-sysvshm \ –enable-opcache \ –enable-fpm \ –enable-session \ –enable-sockets \ –enable-mbregex \ –with-fpm-user=vagrant \ –with-fpm-group=nogroup \ –enable-wddx \ –with-curl \ –with-mcrypt \ –with-iconv \ –with-gd \ –with-jpeg-dir=/usr \ –with-png-dir=/usr \ –with-zlib-dir=/usr \ –with-freetype-dir=/usr \ –enable-gd-native-ttf \ –enable-gd-jis-conv \ –with-openssl \ –with-pdo-mysql=mysqlnd \ –with-gettext=/usr \ –with-zlib=/usr \ –with-bz2=/usr \ –with-recode=/usr \ –with-xmlrpc \ –with-mysqli=mysqlnd

这里遇到了configure: error: mcrypt.h not found. Please reinstall libmcrypt的错误,然而yum install libmcrypt libmcrypt-devel并不能安装,搜了一下这篇文章找到了解决办法,但在我主机上不能解析那个地址,再搜一个即可。然后编译安装libmcrypt

再次编译安装php-7.0.4,再次遇到错误virtual memory exhausted: Cannot allocate memory,512M内存的机器,内存不够。搜了一下,问题还挺普遍,是swap交换空间没设置,参考这篇文章解决了问题。

dd if=/dev/zero of=/swap bs=1024 count=1M mkswap /swap swapon /swap echo “/swap swap swap sw 0 0” >> /etc/fstab

php配置文件

cp php.ini-production /usr/local/php7/etc/php.ini cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf

此时启动php-fpm会报cannot get uid for user 'vagrant'的错误,这是因为运行php-fpm的用户未设定造成的,我们新建一个www用户(useradd -U www)专门来运行nginx和php,分别修改/usr/local/php7/etc/php-fpm.d/www.conf配置中的user和group、/usr/local/nginx/conf/nginx.conf配置中的user为user www www。重新启动nginx和php-fpm。

更改apix.xu42.cn.conf添加以下内容以支持php

location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }

随便编写一个php测试页面测试一下是否配置成功。

为方便管理,添加系统变量在/etc/profile文件末行添加一行

export PATH=/usr/local/nginx/sbin:/usr/local/php7/bin:/usr/local/php7/sbin:$PATH

安装mongodb

参照官方安装手册即可

这样启动会有WARNING: soft rlimits too low,配置一下,参考这篇文章 修改/etc/security/limits.conf,添加下面内容

mongod soft nofile 64000 mongod hard nofile 64000 mongod soft nproc 32000 mongod hard nproc 32000

在php里启用扩展,参照这里安装


至此,开发环境算是配置完成。(考虑到512M的内存,并没有安装mysql服务,php7暂时没发现什么兼容性问题,就先不安装php5了)

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木头编程 - moTzxx

TP5 验证码功能实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

5722
来自专栏美丽应用

Volumio升级失败的解决方案

1311
来自专栏云计算教程系列

如何在Ubuntu 16.04上安装和配置ownCloud

ownCloud是一个文件共享服务器,允许您将个人内容(如文档和图片)存储在集中位置,就像Dropbox一样。ownCloud的不同之处在于它是免费的开源软件,...

1050
来自专栏FreeBuf

Linux爆新漏洞,长按回车键70秒即可获得root权限

按住回车70秒,黑客就能在linux系统绕过认证,进而获取root权限,并能远程控制经过加密的linux系统。 漏洞来源 这个安全问题来源于Cryptsetu...

2865
来自专栏好好学java的技术栈

java实现支付宝支付完整过程(沙箱测试环境,下篇整合ssm)

2713
来自专栏云计算教程系列

如何在Ubuntu 16.04上安装和配置ownCloud

ownCloud是一个文件共享服务器,允许您将个人内容(如文档和图片)存储在集中位置,就像Dropbox一样。ownCloud的不同之处在于它是免费的开源软件,...

3170
来自专栏玄魂工作室

实战-Fluxion与wifi热点伪造、钓鱼、中间人攻击、wifi破解

Fluxion是一个无线破解工具,这款软件可以帮你挤掉WiFi主人的网络让你自己登陆进去,而且WiFi主人怎么挤也挤不过你。这个工具有点像是Lin...

6106
来自专栏网站漏洞修补

网站快照被劫持 该怎么解决

最近很多公司的网站被劫持跳转到了bo彩、cai票网站上去,客户从百度点击进去会跳转,直接输入网站的域名不会跳转,网站快照也被劫持成bo彩的内容,site查看网站...

1751
来自专栏CSDN技术头条

Apache NiFi 1.0.0测试版:邮件路由应用新型ListenSMTP

本文为用户使用Apache NiFi最新版本来监听SMTP邮件,并以编程方式做出反应以及捕捉数据提供了指导。 ? 首先就可以注意到Apache NiFi 1.0...

22410
来自专栏北京马哥教育

运维需要懂的那些安全技能

运维行业正在变革,推荐阅读:30万年薪Linux运维工程师成长魔法 以前的认知 以前刚接触IT行业,而我身为运维,我以为我所需要做的安全就是修改服务器密码为复...

5555

扫码关注云+社区