Notepad++Good Luck To You!

CentOS7源码编译安装nginx+php7.2+mysql5.7并使用systemctl管理

1.安装nginx

安装依赖


yum -y install gcc gcc-c++ wget automake autoconf libtool libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed pcre-devel openssl  openssl-devel

创建一个不能登录的nginx运行用户


groupadd www-data

useradd -s /sbin/nologin -g www-data www-data

创建源码保存目录和运行时的临时文件夹,下载nginx源码,当前稳定版为nginx-1.14.2


mkdir -p /var/cache/nginx

mkdir -p /usr/local/src/nginx

cd /usr/local/src/nginx

wget -c http://nginx.org/download/nginx-1.14.2.tar.gz

解压


tar -zxvf nginx-1.14.2.tar.gz

cd /usr/local/src/nginx/nginx-1.14.2

编译前配置检查


./configure \

--prefix=/usr/local/nginx \

--sbin-path=/usr/local/nginx/sbin/nginx \

--conf-path=/usr/local/nginx/conf/nginx.conf \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--pid-path=/var/run/nginx.pid \

--lock-path=/var/run/nginx.lock \

--http-client-body-temp-path=/var/cache/nginx/client_temp \

--http-proxy-temp-path=/var/cache/nginx/proxy_temp \

--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \

--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \

--http-scgi-temp-path=/var/cache/nginx/scgi_temp \

--user=www-data \

--group=www-data \

--with-pcre \

--with-http_v2_module \

--with-http_ssl_module \

--with-http_realip_module \

--with-http_addition_module \

--with-http_sub_module \

--with-http_dav_module \

--with-http_flv_module \

--with-http_mp4_module \

--with-http_gunzip_module \

--with-http_gzip_static_module \

--with-http_random_index_module \

--with-http_secure_link_module \

--with-http_stub_status_module \

--with-http_auth_request_module \

--with-mail \

--with-mail_ssl_module \

--with-file-aio \

--with-http_v2_module \

--with-threads \

--with-stream \

--with-stream_ssl_module

配置检查完毕,已经创建了Makefile


creating objs/Makefile

 

Configuration summary

  + using threads

  + using system PCRE library

  + using system OpenSSL library

  + using system zlib library

 

  nginx path prefix: "/usr/local/nginx"

  nginx binary file: "/usr/local/nginx/sbin/nginx"

  nginx modules path: "/usr/local/nginx/modules"

  nginx configuration prefix: "/usr/local/nginx/conf"

  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"

  nginx pid file: "/var/run/nginx.pid"

  nginx error log file: "/var/log/nginx/error.log"

  nginx http access log file: "/var/log/nginx/access.log"

  nginx http client request body temporary files: "/var/cache/nginx/client_temp"

  nginx http proxy temporary files: "/var/cache/nginx/proxy_temp"

  nginx http fastcgi temporary files: "/var/cache/nginx/fastcgi_temp"

  nginx http uwsgi temporary files: "/var/cache/nginx/uwsgi_temp"

  nginx http scgi temporary files: "/var/cache/nginx/scgi_temp"

编译,安装


make

make install

修改配置

nginx详细配置请移步(nginx的configure参数,配置文件,虚拟主机配置,信号控制)


vim /usr/local/nginx/conf/nginx.conf

user  www-data;

pid   /var/run/nginx.pid;

启动nginx


/usr/local/nginx/sbin/nginx

查看进程


ps aux|grep nginx

杀掉进程


pkill -9 nginx

配置服务


vim /usr/lib/systemd/system/nginx.service

输入如下配置


[Unit]

Description=nginx - high performance web server

Documentation=http://nginx.org/en/docs/

After=network-online.target remote-fs.target nss-lookup.target

Wants=network-online.target

 

[Service]

Type=forking

PIDFile=/var/run/nginx.pid

ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

ExecReload=/bin/kill -s HUP $MAINPID

ExecStop=/bin/kill -s TERM $MAINPID

ExecStartPost=/bin/sleep 0.1

 

[Install]

WantedBy=multi-user.target

注意:如果你是单核服务器,需要加ExecStartPost=/bin/sleep 0.1

否则在执行systemctl start nginx之后,在执行systemctl status nginx时

会出现systemd[1]: Failed to read PID from file /var/run/nginx.pid: Invalid argument

这是因为nginx还未启动完成,systemctl就去寻找pid进程文件了,这是一个已知的bug

地址https://bugs.launchpad.net/ubuntu/+source/nginx/+bug/1581864

重新载入 systemd


systemctl daemon-reload

开启开机启动


systemctl enable nginx.service

Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

启动和查看nginx状态


systemctl start nginx

systemctl status nginx

● nginx.service - nginx - high performance web server

   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)

   Active: active (running) since 五 2019-01-04 18:24:18 CST; 9min ago

     Docs: http://nginx.org/en/docs/

  Process: 75573 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)

  Process: 75576 ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)

 Main PID: 75577 (nginx)

   CGroup: /system.slice/nginx.service

           ├─75577 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

           └─75578 nginx: worker process

 

1月 04 18:24:18 jmsiteos7 systemd[1]: Stopping nginx - high performance web server...

1月 04 18:24:18 jmsiteos7 systemd[1]: Stopped nginx - high performance web server.

1月 04 18:24:18 jmsiteos7 systemd[1]: Starting nginx - high performance web server...

1月 04 18:24:18 jmsiteos7 systemd[1]: Started nginx - high performance web server.

2.安装mysql

注:MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具。因此,我们首先要在系统中源码编译安装cmake工具。

安装依赖


yum install -y cmake gcc-c++ bison bison-devel ncurses-devel perl-Data-Dumper boost boost-doc boost-devel

创建mysql用户和用户组


groupadd mysql

useradd -g mysql mysql

创建源码存放目录,下载,解压


mkdir -p /usr/local/src/mysql

cd /usr/local/src/mysql

wget -c https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.20.tar.gz

tar -zxvf mysql-boost-5.7.20.tar.gz

cd mysql-5.7.20

创建相应目录并授权


mkdir -p /usr/local/mysql/data

chown -R mysql:mysql /usr/local/mysql/

touch /var/log/mysql.log

chown -R mysql:mysql /var/log/mysql.log

mkdir -p /var/lib/mysql

chown -R mysql:mysql /var/lib/mysql

mkdir -p /var/run/mysqld

chown -R mysql:mysql /var/run/mysqld

配置检查


cmake \

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DMYSQL_DATADIR=/usr/local/mysql/data  \

-DSYSCONFDIR=/etc \

-DMYSQL_USER=mysql \

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \

-DMYSQL_TCP_PORT=3306 \

-DENABLED_LOCAL_INFILE=1 \

-DEXTRA_CHARSETS=all \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_unicode_ci \

-DWITH_DEBUG=0 \

-DMYSQL_MAINTAINER_MODE=0 \

-DWITH_SYSTEMD=1 \

-DWITH_BOOST=boost \

-DWITH_SSL:STRING=bundled \

-DWITH_ZLIB:STRING=bundled

编译,安装


make

make install

修改mysql配置


vim /etc/my.cnf

如下设置


[mysql]

default-character-set=utf8

socket=/var/lib/mysql/mysql.sock

 

[mysqld]

init-connect = 'SET NAMES utf8'

character-set-server = utf8

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

socket=/var/lib/mysql/mysql.sock

user = mysql

explicit_defaults_for_timestamp=true

bind-address = 0.0.0.0

server-id = 1

log_error=/var/log/mysql.log

 

 

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mariadb according to the

# instructions in http://fedoraproject.org/wiki/Systemd

 

[mysqld_safe]

log-error=/var/log/mariadb/mariadb.log

pid-file=/var/run/mariadb/mariadb.pid

加入环境变量


vim /etc/profile

尾部加入下面两行


PATH=$PATH:/usr/local/mysql/bin/

export PATH

执行source使环境变量立即生效


source /etc/profile

初始化数据库,安装密钥


mysqld --defaults-file=/etc/my.cnf --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

mysql_ssl_rsa_setup

--initialize-insecure不生成随机密码

--initialize生成随机密码

设置开机启动


cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system

重新载入 systemd


systemctl daemon-reload

开机启动


systemctl enable mysqld.service

systemctl start mysqld.service

[root@jmsiteos7 mysql-5.7.20]# systemctl status mysqld.service

● mysqld.service - MySQL Server

   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)

   Active: active (running) since 五 2019-01-04 15:36:52 CST; 3s ago

     Docs: man:mysqld(8)

           http://dev.mysql.com/doc/refman/en/using-systemd.html

  Process: 30737 ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)

  Process: 30719 ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)

 Main PID: 30740 (mysqld)

   CGroup: /system.slice/mysqld.service

           └─30740 /usr/local/mysql/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

 

1月 04 15:36:51 jmsiteos7 systemd[1]: Starting MySQL Server...

1月 04 15:36:52 jmsiteos7 systemd[1]: Started MySQL Server.

设置密码(如果初始化参数是--initialize,这步跳过)


mysql_secure_installation

登录mysql


[root@jmsiteos7 ~]# mysql -uroot -p

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 4

Server version: 5.7.20 Source distribution

 

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

4 rows in set (0.00 sec)

 

mysql> set password for root@localhost = password('yourpassword');

mysql> flush privileges;

mysql> quit;

Bye

3.安装php

安装依赖


yum install libxml2 libxml2-devel curl-devel openjpeg openjpeg-devel openjpeg-libs libjpeg libjpeg-devel libpng freetype libpng-devel freetype-devel openssl openssl-devel

创建源码保存目录,下载,解压


mkdir -p /usr/local/src/php72

cd /usr/local/src/php72

wget -c http://cn2.php.net/get/php-7.2.13.tar.gz

tar -xzvf php-7.2.13.tar.gz

cd php-7.2.13

配置检查


./configure --prefix=/usr/local/php72 \

--with-config-file-path=/usr/local/php72/etc \

--with-config-file-scan-dir=/usr/local/php72/etc/php.d \

--with-mhash \

--disable-debug \

--disable-rpath \

--enable-mysqlnd \

--with-mysqli \

--with-pdo-mysql \

--enable-fpm \

--with-fpm-user=www-data \

--with-fpm-group=www-data \

--with-gd \

--with-iconv \

--with-zlib \

--enable-bcmath \

--enable-xml \

--enable-shmop \

--enable-sysvsem \

--enable-inline-optimization \

--enable-mbregex \

--enable-mbstring \

--enable-ftp \

--with-openssl \

--enable-pcntl \

--enable-sockets \

--with-xmlrpc \

--enable-zip \

--enable-soap \

--without-pear \

--with-gettext \

--enable-session \

--with-curl \

--with-jpeg-dir \

--with-png-dir \

--with-freetype-dir

编译,安装


make -j4

make install

设置环境变量


vim /etc/profile

文件末尾加入如下两行代码


PATH=$PATH:/usr/local/php72/bin/:/usr/local/php72/sbin/

export PATH

使之立即生效


source /etc/profile

测试一下


[root@jmsiteos7 php-7.2.13]# php -v

PHP 7.2.13 (cli) (built: Jan  4 2019 17:35:17) ( NTS )

Copyright (c) 1997-2018 The PHP Group

Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

设置php.ini和php-fpm.conf,www.conf

进入源码目录


cd /usr/local/src/php72/php-7.2.13

复制示例配置


cp php.ini-development /usr/local/php72/etc/php.ini

#或

cp php.ini-production /usr/local/php72/etc/php.ini

进入php.ini目录


cd /usr/local/php72/etc

打开配置文件


vim /usr/local/php72/etc/php.ini

更改pdo_mysql.default_socket为上面安装mysql时.sock设定的位置


pdo_mysql.default_socket = /var/lib/mysql/mysql.sock

如果不设置,php通过pdo连接mysql时会报SQLSTATE[HY000] [2002] No such file or directory

复制fpm示例配置


cp php-fpm.conf.default php-fpm.conf

进入php-fpm.d目录


cd /usr/local/php72/etc/php-fpm.d

复制www.conf


cp www.conf.default www.conf

设置php-fpm开机启动


cp /usr/local/src/php72/php-7.2.13/sapi/fpm/php-fpm.service /usr/lib/systemd/system/

重新载入 systemd


systemctl daemon-reload

启用开机启动


systemctl enable php-fpm

Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.

启动php-fpm


systemctl start php-fpm

查看状态


[root@jmsiteos7 php-fpm.d]# systemctl status php-fpm

● php-fpm.service - The PHP FastCGI Process Manager

   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)

   Active: active (running) since 五 2019-01-04 17:55:16 CST; 5s ago

 Main PID: 70669 (php-fpm)

   CGroup: /system.slice/php-fpm.service

           ├─70669 php-fpm: master process (/usr/local/php72/etc/php-fpm.conf)

           ├─70670 php-fpm: pool www

           └─70671 php-fpm: pool www

 

1月 04 17:55:16 jmsiteos7 systemd[1]: Started The PHP FastCGI Process Manager.

4.验证安装的nginx,php,mysql

编辑nginx配置文件


vim /usr/local/nginx/conf/nginx.conf

#更改运行用户

user  www-data;

#编辑server段,默认文件添加index.php

        location / {

            root   html;

            index  index.php index.html index.htm;

        }

#匹配php的配置块取消注释并更改/scripts为$document_root

        location ~ \.php$ {

            root           html;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            include        fastcgi_params;

        }

保存并退出,重启nginx


systemctl restart nginx

nginx默认的web目录下新建index.php


vim /usr/local/nginx/html/index.php

输入如下php代码


<?php

$dbms='mysql';     //数据库类型

$host='localhost'; //数据库主机名

$dbName='mysql';    //使用的数据库

$user='root';      //数据库连接用户名

$pass='';          //对应的密码

$dsn="$dbms:host=$host;dbname=$dbName";

try {

    $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象

    echo "连接成功<br/>";

    foreach ($dbh->query('SELECT db from db') as $row) {

        print_r($row);

    }

 

    $dbh = null;

} catch (PDOException $e) {

    die ("Error!: " . $e->getMessage() . "<br/>");

}

?>

浏览器访问你的站点


«   2021年1月   »
123
45678910
11121314151617
18192021222324
25262728293031
TOP 搜索
TOP 控制面板
您好,欢迎到访网站!
  查看权限
TOP 最新留言
    TOP 作者列表
    TOP 站点信息
    • 文章总数:146
    • 页面总数:0
    • 分类总数:6
    • 标签总数:20
    • 评论总数:0
    • 浏览总数:147045