CentOS 7.0 source package build LNMP actual environment build
- 2020-05-14 05:49:18
- OfStack
Centos7+Nginx1.11.7+MySQL5.7.16+PHP7.1.0+openssl-1.1.0c
1. linux system limits configuration
1. Shut down the system firewall
systemctl stop firewalld.service Close the firewall
systemctl disable firewalld.service Disable firewall
2. Turn off SElinux
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0 selinux Effective immediately
2. System installation agreement
Software source code package location: /usr/local/src
Source package compilation location: /usr/local/ software name
3. Download packages
1. Download the latest stable version of nginx
wget -P /usr/local/src http://nginx.org/download/nginx-1.11.7.tar.gz
2. Download mysql-boost-5.7.16 with boost if it is installed without source code, there will be no error in the network environment
wget -P /usr/local/src http://cdn.mysql.com/Downloads/MySQL-5.7/mysql-boost-5.7.16.tar.gz
3. Download php-7.1.0
wget -P /usr/local/src http://cn2.php.net/distributions/php-7.1.0.tar.gz
4. Download libmemcached-1.0.18
wget -P /usr/local/src https://launchpadlibrarian.net/165454254/libmemcached-1.0.18.tar.gz
5. Download php-memcached
yum -y install git
cd /usr/local/src
git clone -b php7 https://github.com/php-memcached-dev/php-memcached.git
6. Download openssl-1.1.0 c
wget -P /usr/local/src https://www.openssl.org/source/openssl-1.1.0c.tar.gz
4. Install the compiler and dependencies
yum -y insyall epel-release
yum -y install patch gcc gcc-c++ readline-devel zlib-devel libffi-devel \
openssl openssl-devel make autoconf automake libtool bison libxml2 \
libxml2-devel libxslt-devel libyaml-devel python python-docutils \
cmake imake expat-devel libaio libaio-devel bzr ncurses-devel wget \
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel \
pcre-devel curl-devel libmcrypt libmcrypt-devel
5. Compile and install mysql-boost-5.7.16 to install and create mysql_install.sh script again
1. mysql_install. sh
#!/bin/bash
#yum update -y
#yum install -y cmake gcc-c++ ncurses-devel gcc make openssl*
#mysql The install script
DBDIR='/data/mysql' #mysql Data storage directory
MYSQLDIR='/usr/local/mysql' # mysql The installation directory
PASSWD='123456' # mysql root password Installation can be completed remotely ip landing
[ -d $DBDIR ] || mkdir $DBDIR -p
id mysql &> /dev/null
if [ $? -ne 0 ];then
useradd mysql -s /sbin/nologin -M
fi
chown -R mysql:mysql $DBDIR
cd /usr/local/src
tar -xvf mysql-boost-5.7.16.tar.gz
cd mysql-5.7.16
cmake . -DCMAKE_INSTALL_PREFIX=$MYSQLDIR \
-DMYSQL_DATADIR=$DBDIR \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_BOOST=/usr/local/src/mysql-5.7.16/boost/boost_1_59_0 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
if [ $? != 0 ];then
echo "cmake error!"
exit 1
fi
make && make install
if [ $? -ne 0 ];then
echo "install mysql is failed!" && /bin/false
fi
sleep 2
chown -R mysql:mysql $MYSQLDIR
chown -R root:root $MYSQLDIR
cp $MYSQLDIR/support-files/my-default.cnf /etc/my.cnf
echo export PATH=$PATH:$MYSQLDIR/bin:$MYSQLDIR/lib >>/etc/profile
source /etc/profile
cat >> /etc/my.cnf << EOF
character_set_server = utf8
basedir = $MYSQLDIR
datadir = $DBDIR
port = 3306
server_id = 1
socket = /tmp/mysql.sock
explicit_defaults_for_timestamp=true
EOF
sed -i 's/sql_mode=.*/sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER/g' /etc/my.cnf
source /etc/profile
sleep 5
cd $MYSQLDIR
cp support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
mysql_ssl_rsa_setup
rm -rf $DBDIR
mysqld --initialize --user=mysql
if [ $? -ne 0 ];then
echo "install mysql is failed!" && /bin/false
fi
#/etc/init.d/mysqld stop
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
sleep 5
echo "update user set authentication_string=Password('$PASSWD') where user='root'; flush privileges;" | mysql mysql
echo "set password=Password('$PASSWD'); flush privileges;" | mysql -u root -p$PASSWD --connect-expired-password
sleep 5
echo "GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '$PASSWD'; FLUSH PRIVILEGES; " | mysql -u root -p$PASSWD
/etc/init.d/mysqld restart
if [ $? -ne 0 ];then
echo "install mysql is failed!" && /bin/false
fi
IDSO=`cat /etc/ld.so.conf| grep $MYSQLDIR/lib | wc -l `
if [ $IDSO -eq 0 ];then
echo "$MYSQLDIR/lib" >> /etc/ld.so.conf
ldconfig
fi
chkconfig mysqld on
2. Give mysql_install.sh executable permission
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0 selinux Effective immediately
0
3. Run mysql_install.sh
./mysql_install.sh
6. Compile and install php7 to create php installation script php7_install.sh
1, vim php7_install sh
#!/bin/bash
if [ $( find / -name mysql | wc -l ) -gt 1 ];then
echo " mysql is install "
else
yum install -y mysql
fi
cd /usr/local/src
tar -xzvf php-7.1.0.tar.gz
cd ./php-7.1.0
./configure \
--prefix=/usr/local/php7 \
--exec-prefix=/usr/local/php7 \
--with-config-file-path=/usr/local/php7/etc \
--with-curl \
--with-freetype-dir \
--with-gd \
--with-gettext \
--with-iconv-dir \
--with-kerberos \
--with-libdir=lib64 \
--with-libxml-dir \
--with-mysqli \
--with-openssl \
--with-pcre-regex \
--with-pdo-mysql \
--with-pdo-sqlite \
--with-pear \
--with-png-dir \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--with-zlib-dir \
--with-mhash \
--with-mcrypt \
--with-openssl-dir \
--with-jpeg-dir \
--enable-fpm \
--enable-bcmath \
--enable-libxml \
--enable-inline-optimization \
--enable-gd-native-ttf \
--enable-mbregex \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-xml \
--enable-zip
make && make install
# Chinese php Draw to cancel this parameter, otherwise will appear garbled
# --enable-gd-jis-conv \
2. Give php7_install.sh executable permission
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0 selinux Effective immediately
3
3. php7_install.sh
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0 selinux Effective immediately
4
4. Compile and install libmemcached-1.0.18
vim libmemcached_install.sh
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0 selinux Effective immediately
5
5. Compile and install php-memcached
vim memcached_install.sh
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0 selinux Effective immediately
6
Note that the compiler completes the build file path
Installing shared extensions: /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/
7. Compile and install openssl-1.1.0 c
vim openssl_install.sh
#!/bin/bash
#openssl install
cd /usr/local/src
tar -xvf openssl-1.1.0c.tar.gz
cd /usr/local/src/openssl-1.1.0c
./config --openssldir=/usr/local/ssl
make && make install
./config shared --openssldir=/usr/local/ssl
make clean
make && make install
IDSO=`cat /etc/ld.so.conf| grep /usr/local/lib64 | wc -l `
if [ $IDSO -eq 0 ];then
echo "/usr/local/lib64" >> /etc/ld.so.conf
fi
ldconfig
chmod +x openssl_install.sh
./openssl_install.sh
8. Compile and install nginx-1.11.7
vim nginx_install.sh
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0 selinux Effective immediately
9
2. Give nginx_install.sh executable permission
chmod +x nginx_install.sh
./nginx_install.sh
9. The configuration PHP7
/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/memcached.so
This path is randomly variable so be careful
Note the path to the completed build file
Installing shared extensions: /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/
cd /usr/local/src/php-7.1.0
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
sed -i "s/user = .*/user = nginx/g" /usr/local/php7/etc/php-fpm.d/www.conf
sed -i "s/group = .*/group = nginx/g" /usr/local/php7/etc/php-fpm.d/www.conf
cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig php-fpm on
cat >> /usr/local/php7/etc/php.ini<< EOF
soap.wsdl_cache_enabled=1
max_input_time = 600
max_execution_time = 300
date.timezone = Asia/Shanghai
post_max_size = 32M
memory_limit = 128M
mbstring.func_overload = 1
extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/memcached.so
EOF
cat > /usr/local/nginx/html/index.php<<EOF
<?php
phpinfo();
?>
EOF
service php-fpm start
10. The configuration nginx
1, rename: / etc nginx/nginx conf
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.back
2, the newly built/etc nginx/nginx conf
cat > /etc/nginx/nginx.conf << EOF
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
EOF
3, create/etc/nginx/conf d
mkdir -p /etc/nginx/conf.d
4. Create the php-fpm web nginx configuration that supports php-fpm web nginx configuration
cat > /etc/nginx/conf.d/default.conf << EOF
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/local/nginx/html;
index index.php index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /usr/local/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* ^.+\.(jpg|jpeg|gif|png|bmp)$ {
access_log off;
root opencart;
expires 30d;
break;
}
}
EOF
5. Create the nginx startup script
vim /etc/init.d/nginx
# chkconfig: 2345 10 90
# description: Start and Stop nginx
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
EXEC=/usr/sbin/nginx
PIDFILE=/var/run/nginx.pid
CONF="/etc/nginx/nginx.conf"
AUTH="1234"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed."
else
echo "Starting nginx server..."
$EXEC -c $CONF &
fi
if [ "$?"="0" ]
then
echo "nginx is running..."
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE exists, process is not running."
else
PID=$(cat $PIDFILE)
echo "Stopping..."
kill -9 $PID
PID=$(pidof nginx)
kill -9 $PID
rm -rf /var/run/nginx.pid
sleep 2
while [ -x $PIDFILE ]
do
echo "Waiting for nginx to shutdown..."
sleep 1
done
echo "nginx stopped"
fi
;;
reload)
$EXEC -s reload
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/nginx {start|stop|restart|force-reload|reload}" >&2
exit 1
esac
6, give/etc init. d/nginx executable permissions
chmod +x /etc/init.d/nginx
7. Set to boot
chkconfig nginx on
8. Start nginx
service nginx start
101. The test
[root@QKA169 src]# openssl version
OpenSSL 1.1.0c 10 Nov 2016
mysql -u root -p123456
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
See if the login was successful. The remote zone IP Did you log in successfully?
mysql -u root -h192.168.1.69 -p123456
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
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 6
Server version: 5.7.16 Source distribution
Copyright (c) 2000, 2016, 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>
Test whether nginx can be opened
[root@QKA169 html]# ps -ef | grep php-fpm
root 337433 1 0 18:03 ? 00:00:00 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf)
nobody 337434 337433 0 18:03 ? 00:00:00 php-fpm: pool www
nobody 337435 337433 0 18:03 ? 00:00:00 php-fpm: pool www
root 337454 37888 0 18:12 pts/0 00:00:00 grep --color=auto php-fpm
[root@QKA169 html]# ps -ef | grep nginx
root 337400 1 0 18:01 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 337401 337400 0 18:01 ? 00:00:00 nginx: worker process
root 337456 37888 0 18:13 pts/0 00:00:00 grep --color=auto nginx
[root@QKA169 html]# netstat -nalp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 337400/nginx: maste
tcp 0 0 192.168.1.69:80 192.168.6.6:54714 TIME_WAIT -
tcp 0 0 192.168.1.69:80 192.168.6.6:54709 TIME_WAIT -
Open the remote
http://192.168.1.69/