「 2019.11.13 更新一些图」
这个环境的编译类似前面写的 CentOS6.5新服务器搭建lamp安装discuz f,apache2.4+mysql5.5+php7 ,不过这回把apache换成了nginx,还支持了https!用到的软件为:Nginx1.12.2、Mariadb10.1.23、PHP7.1.5、Openssl1.0.2k 。
前段时间折腾了三天才把这个环境编译好,今天做个笔记,以后还用得到~#j338:
需要下载的软件:(这里的系统是全新安装的,软件最新版请访问官网查看下载)
Nginx 1.14.0 (nginx官网 http://nginx.org/en/download.html)
- wget http://nginx.org/download/nginx-1.14.0.tar.gz
复制代码
openssl 1.0.2p (openssl 官网 https://www.openssl.org/source/)
- wget https://www.openssl.org/source/openssl-1.0.2p.tar.gz
复制代码
pcre8.43 (pcre 官网 http://www.pcre.org/)
- wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.43.tar.gz
复制代码
php7.1.5 (php 官网 http://php.net/downloads.php)
- wget http://cn.php.net/distributions/php-7.1.5.tar.gz
复制代码
libmcrypt-2.5.8 (没发现官网)
- wget https://ncu.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
复制代码
mariadb 10.1.35 (mariadb 官网 https://downloads.mariadb.org/)
- wget https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.1.35/source/mariadb-10.1.35.tar.gz
复制代码
zlib 1.2.11 (zlib 官网 http://www.zlib.net/)
- wget http://www.zlib.net/zlib-1.2.11.tar.gz
复制代码
一、编 译 升 级 openssl
centos7中已经自带了openssl,但是版本比较老,有些漏洞...因为这个软件依赖很多和系统有关的包,如果直接remove的话,系统就会运行不了了..所以不能直接删掉它。
因为是新系统,所以还要安装gcc编译器,openssl还依赖zlib-devel ,没有这个的yum装上。(各个软件的依赖包,会依次安装)
- yum -y install zlib-devel gcc-c++
复制代码
openssl编译参数:
- ./config shared zlib-dynamic \
- --prefix=/usr/local/openssl
复制代码
没看见报错并且生成了Makefile,就可以编译安装了。(编译时间和你的硬件有关)
把旧版的文件重命名(系统不同的话,这个位置也不同,名字也可能不同,可以find 查找一下):
- mv /usr/bin/openssl /usr/bin/openssl.old
复制代码
- mv /usr/lib64/libssl.so /usr/lib64/libssl.so.old
复制代码
- mv /usr/lib64/libssl.so.1.0.2k /usr/lib64/libssl.so.1.0.2k.old
复制代码
将新版本文件软连接到系统默认的地方:- ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
- ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so
复制代码
设置好之后是这样的(2019年11月13日 更新图)
在/etc/ld.so.conf文件中写入openssl库文件的搜索路径:
- echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
复制代码
执行命令 ldconfig 使修改后的/etc/ld.so.conf生效
此时运行openssl version发现版本变成最新的了。
二、编 译 Mariadb
安装依赖:(注意看是否都安装完成)
- yum -y install make cmake readline-devel openssl-devel libaio-devel
复制代码
下面的编译参数:
-DMYSQL_DATADIR=/data/mysqldb 是数据库的数据存放目录,可以修改为你自己想要的。
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock socket文件地址
其他的参数看个人需求更改吧。
编译参数:
- cmake \
- -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
- -DMYSQL_DATADIR=/data/mysqldb \
- -DWITHOUT_TOKUDB=1 \
- -DWITH_INNOBASE_STORAGE_ENGINE=1 \
- -DWITH_ARCHIVE_STPRAGE_ENGINE=1 \
- -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
- -DWIYH_READLINE=1 \
- -DWIYH_SSL=system \
- -DVITH_ZLIB=system \
- -DWITH_LOBWRAP=0 \
- -DMYSQL_TCP_PORT=3306 \
- -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \
- -DDEFAULT_CHARSET=utf8 \
- -DDEFAULT_COLLATION=utf8_general_ci
复制代码
看见Makefile之后就可以编译安装了(如果你这个有报错,一般都是少什么依赖包没装上,自己上网搜一下就行了。)
配置低的机器,可能要编译半小时...........可以去喝喝茶什么的#376:
如果你是1G内存,编译的时候可能会报这个错误:
[storage/mroonga/vendor/groonga/lib/CMakeFiles/libgroonga.dir/expr.c.o] Error 4
解决方法:
1.增加内存,如果是虚拟机或者有条件加内存,选用此方法
2.添加swap分区,如果是云主机或者暂时无法添加内存,选此方法
- dd if=/dev/zero of=/home/swap bs=1024 count=512000
复制代码
#创建一个512M的分区文件(大小自己决定)
#将创建的分区文件格式化为swap
#使这个swap分区文件立即生效
#设置开机自动挂载swap
写入:
- UUID=af69fe08-8670-4461-b8d0-8e63c2677893 /home/swap swap swap 0 0
复制代码
注意:出现错误需要删除 CMakeCache.txt 和 Makefile 才能再次cmake,而不是使用make clean命令了。
编译安装完成:
mysql有几个默认的配置文件,可以根据自己的内存选择合适的,也可以自己修改。看名字已经知道了吧。。
my-huge.cnf
my-innodb-heavy-4G.cnf
my-large.cnf
my-medium.cnf
my-small.cnf
复制mysql的配置文件到/etc下,默认/etc/下已经有一个my.cnf了,可以备份或者直接覆盖掉。
- cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
复制代码
修改my.cnf配置,把innodb相关选项前面的#去掉,大概在115-130行之间。
创建mysql组和用户
- useradd -r -g mysql -s /sbin/nologin mysql -M
复制代码
初始化数据库:
- /usr/local/mysql/scripts/mysql_install_db \
- --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldb
复制代码
修改mysql的文件权限
- chown -R mysql:mysql /data/mysqldb
复制代码
启动mysql试一试~
- /usr/local/mysql/support-files/mysql.server start
复制代码
提示OK就是启动成功了
运行安全脚本修改root密码,同时可禁止root远程连接,移除test数据库和匿名用户。
- /usr/local/mysql/bin/mysql_secure_installation
复制代码
把mysql添加到系统服务,并且让它开机自启
- cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
复制代码
- chkconfig --level 345 mysql on
复制代码
把mysql添加到系统环境变量,在 /etc/profile 文件最后面加入(php 和 nginx 添加环境变量也和这个一样,多个环境变量用":"分开)
- export PATH=$PATH:/usr/local/mysql/bin
复制代码
执行命令让他生效 source /etc/profile
最后就可以用service mysql stop/start 来关闭启动mysql了。
三、编 译 安 装 PHP 及 配 置 php-fpm
PHP需要的依赖包:(注意看是否有没有装上的包)
- yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf gd libpng libpng-devel libxml2 libxml2-devel zlib curl curl-devel freetype freetype-devel libjpeg libjpeg-devel
复制代码
因为我这个yum源没有libmcrypt这个库(这个是加密库),所以要手动编译安装它:
解压前面下载的 libmcrypt-2.5.8.tar.gz
编译参数:
- ./configure \
- --with-php-config=/usr/local/php7/bin/php-config/ \
- --with-libmcrypt=/usr/local/libmcrypt/lib
复制代码
PHP7编译参数:- ./configure \
- --prefix=/usr/local/php7/ \
- --enable-fpm \
- --enable-mbstring \
- --with-curl \
- --with-gd \
- --with-freetype-dir \
- --with-jpeg-dir=/usr/lib64 \
- --with-mcrypt=/usr/local/libmcrypt/ \
- --with-zlib \
- --enable-opcache \
- --enable-mysqlnd \
- --enable-shmop \
- --enable-sysvsem \
- --enable-sysvshm \
- --enable-mbstring \
- --with-mcrypt \
- --with-xmlrpc \
- --enable-bcmath \
- --with-mysqli=shared,mysqlnd \
- --with-pdo-mysql=shared,mysqlnd \
- --with-config-file-path=/usr/local/php7/etc/ \
- --with-mysql-sock=/tmp/mysql.sock
复制代码
可能出现的错误:Don't know how to define struct flock on this system, set --enable-opcache=no
解决办法如下:
编辑 /etc/ld.so.conf 加入 /usr/local/lib
再执行 ldconfig 即可
- make clean && make && make install
复制代码
由于需要和MySQL进行通信,所以需要特别查看PHP7安装后的lib扩展库目录(/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/)。需要确保至少存在mysqli.so、pdo_mysql.so这两个动态库文件,如下图所示:
复制配置文件:
- 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
- cp sapi/fpm/php-fpm /usr/local/php7/sbin/php-fpm
复制代码
扩展库路径:/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303
五、配 置 php.ini www.conf 和 php-fpm
新建php-fpm组和用户:
- groupadd php-fpm
- useradd -g php-fpm -s /sbin/nologin php-fpm -M
复制代码
新建 nginx 用户:- useradd nginx -s /sbin/nologin
复制代码
把nginx加入php-fpm的组(为了方便配置文件权限)-- usermod -a -G php-fpm nginx
复制代码
配置php.ini(php.ini是php运行核心配置文件):
- vim /usr/local/php7/etc/php.ini
复制代码
全屏查看- #避免PHP信息暴露在http头中
- expose_php = Off
- #避免暴露php调用mysql的错误信息
- display_errors = Off
- #在关闭display_errors后开启PHP错误日志(路径在php-fpm.conf中配置)
- log_errors = On
- #设置PHP的扩展库路径
- extension_dir = "/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303"
- #设置PHP的opcache和mysql动态库(直接在扩展路径下面加上)
- zend_extension=opcache.so
- extension=mysqli.so
- extension=pdo_mysql.so
- #开启opcache 关于opcache更多信息可以参考此贴 <a href="post/jb1252">PHP通过动态编译添加opcache模块</a>
- [opcache]
- ; Determines if Zend OPCache is enabled
- opcache.enable=1
- #设置PHP脚本允许访问的目录(需要根据实际情况配置)
- open_basedir = /www/
复制代码
配置php-fpm.conf(php-fpm.conf是php-fpm进程服务的配置文件):
- vim /usr/local/php7/etc/php-fpm.conf
复制代码
- #设置pid文件的位置:
- pid = /run/php-fpm.pid
- #设置错误日志的路径
- error_log = /var/log/php-fpm/error.log
- #引入www.conf文件中的配置
- include=/usr/local/php7/etc/php-fpm.d/*.conf
复制代码
配置www.conf(www.conf这是php-fpm进程服务的扩展配置文件):
- vim /usr/local/php7/etc/php-fpm.d/www.conf
复制代码
- #设置用户和用户组
- user = php-fpm
- group = php-fpm
- #配置PHP监听,nginx后面设置监听要和这里一样
- listen = /tmp/php-fpm.sock
- #设置监听的用户组
- listen.owner = php-fpm
- listen.group = php-fpm
- listen.mode = 0660
- #开启慢日志
- slowlog = /var/log/php-fpm/$pool-slow.log
- request_slowlog_timeout = 10s
- #设置php的session目录(所属用户和用户组都是php-fpm)
- php_value[session.save_handler] = files
- php_value[session.save_path] = /var/lib/php/session/
复制代码
添加到系统环境变量:
- echo -e '\nexport PATH=/usr/local/php7/bin:/usr/local/php7/sbin:$PATH\n' >> /etc/profile && source /etc/profile
复制代码
创建日志目录
- mkdir /var/log/php-fpm/
- chown php-fpm:php-fpm /var/log/php-fpm
复制代码
fpm启动脚本:
- /usr/local/php7/sbin/php-fpm
复制代码
用ss命令可以看到php-fpm,就说明启动成功了。
php-fpm 关闭:
- kill -INT `cat /run/php-fpm.pid`
复制代码
php-fpm 重启:
- kill -USR2 `cat /run/php-fpm.pid`
复制代码
六、编 译 安 装 Nginx
依赖包:
- yum -y install perl perl-devel perl-ExtUtils-Embed libxslt-devel
复制代码
编译参数:
全屏查看- ./configure \
- --prefix=/usr/local/nginx \
- --sbin-path=/usr/sbin/nginx \
- --conf-path=/etc/nginx/nginx.conf \
- --pid-path=/run/nginx/nginx.pid \
- --lock-path=/var/lock/nginx.lock \
- --with-http_ssl_module \
- --with-http_v2_module \
- --with-http_realip_module \
- --with-http_xslt_module \
- --with-http_stub_status_module \
- --with-http_sub_module \
- --with-http_degradation_module \
- --with-http_secure_link_module \
- --with-http_gzip_static_module \
- --with-http_perl_module \
- --with-pcre=/root/pcre-8.39 \
- --with-openssl=/root/openssl-1.0.2k \
- --with-zlib=/root/zlib-1.2.11 \
- --http-client-body-temp-path=/var/tmp/nginx/client_body \
- --http-proxy-temp-path=/var/tmp/nginx/proxy \
- --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
- --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
- --http-scgi-temp-path=/var/tmp/nginx/scgi \
- --with-stream \
- --with-debug \
- --with-ld-opt="-Wl,-E"
复制代码
这几个路径要指定到 源码包 的路径,也就是把前面下载的软件解压,路径看你自己放哪里。
--with-pcre=/root/pcre-8.39 \
--with-openssl=/root/openssl-1.0.2k \
--with-zlib=/root/zlib-1.2.11 \
新建目录:
- mkdir -p /var/tmp/nginx/{client,proxy,fastcgi,uwsgi,scgi}
复制代码
修改目录权限: - chown nginx:nginx -R /var/tmp/nginx
复制代码
启动:nginx
快速停止:nginx -s stop
优雅的停止:nginx -s quit(不接受新的连接请求,等待旧的连接请求处理完毕再关闭)
重新载入配置文件:nginx -s reload
七、配 置 nginx.conf 及 https
这里只给主要部分的配置,由于篇幅有限,写不了那么多。全屏查看- #设置用户
- user nginx;
- worker_processes 1;
- error_log /var/log/nginx/error.log; #错误日志
- #error_log logs/error.log notice;
- #error_log logs/error.log info;
- pid /var/run/nginx/nginx.pid; #pid文件
- events {
- worker_connections 1024;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for"';
- access_log /var/log/nginx/access.log main;
- sendfile on;
- #tcp_nopush on;
- #keepalive_timeout 0;
- keepalive_timeout 65;
- #隐藏Nginx版本信息,禁止网站目录浏览
- server_tokens off;
- autoindex off;
- #当FastCGI后端服务器处理请求给出http响应码为4xx和5xx时,就转发给nginx
- fastcgi_intercept_errors on;
- #关于fastcgi的配置
- fastcgi_connect_timeout 300;
- fastcgi_send_timeout 300;
- fastcgi_read_timeout 300;
- fastcgi_buffer_size 64k;
- fastcgi_buffers 4 64k;
- fastcgi_busy_buffers_size 128k;
- fastcgi_temp_file_write_size 128k;
- #支持gzip压缩
- gzip on;
- gzip_min_length 1k;
- gzip_buffers 16 64k;
- gzip_http_version 1.1;
- gzip_comp_level 6;
- gzip_types text/plain text/html text/xml text/css text/javascript application/javascript application/xhtml+xml application/xml application/x-javascript application/json;
- gzip_vary on;
- gzip_disable "MSIE [1-6].(?!.*SV1)";
- # 将所有http请求重定向到https
- server{
- listen 80;
- server_name www.guhei.net;
- return 301 https://www.guhei.net$request_uri;
- }
- # 配置HTTPS
- server {
- listen 443 ssl http2;
- server_name www.guhei.net;
- ssl_certificate /etc/nginx/ssl/1.crt; #证书文件
- ssl_certificate_key /etc/nginx/ssl/1.key; #证书文件
- ssl_session_cache shared:SSL:3m;
- ssl_session_timeout 5m;
- ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_prefer_server_ciphers on;
- location / {
- root /www; #网站根目录
- index welcome.html index.php index.html;
- error_page 404 /404.html;
- }
- # php-fpm监听
- location ~ \.php$ {
- error_page 404 /404.html;
- try_files $uri =404;
- fastcgi_pass unix:/tmp/php-fpm.sock;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- }
- }
复制代码
八、把 php-fpm 和 nginx 添加开机自启
在 /etc/rc.d/ 下的 rc.local 文件中,加入 php-fpm 和 nginx 的启动脚本,并把 rc.local 文件加上 x 权限。
- vim /etc/rc.d/rc.local
- chmod +x /etc/rc.d/rc.local
复制代码
最后附上成功安装discuz的图片:
|