Manjaro 安装 LNMP环境

@李彪  March 24, 2018

安装PHP、PHP-FPM ; 编译安装 Nginx、MYSQL; 详细配置信息。

1. 编译Nginx

1.1 创建用户 及 用户组

sudo groupadd -r www
sudo useradd -s /sbin/nologin -g www -r www

1.2 下载Nginx源码包 并 解压

wget http://nginx.org/download/nginx-1.14.0.tar.gz

1.3 配置编译参数

./configure --user=www --group=www --prefix=/usr/local/nginx \ 
                  --with-http_stub_status_module --with-http_ssl_module \
                   --with-http_v2_module --with-http_gzip_static_module \
                  --with-http_sub_module --with-openssl=/home/corerman/temp/nginx-1.13.12/src/openssl-1.0.2o/

1.4 编译及安装(root权限)

sudo make && make install

1.5 配置Nginx 配置文件

1.5.1 配置enable-php.conf

        location ~ [^/]\.php(/|$)
        {
            try_files $uri =404;
            fastcgi_pass  unix:/tmp/php-cgi.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
        }

1.5.2 配置nginx.conf

user  www www;

worker_processes auto;
error_log  /home/wwwlogs/nginx_error.log  crit;
pid        /usr/local/nginx/logs/nginx.pid;

worker_rlimit_nofile 51200;

events
     {
          use epoll;
          worker_connections 51200;
          multi_accept on;
      }
http
     {
         include       mime.types;
         default_type  application/octet-stream;
         server_names_hash_bucket_size 128;
         client_header_buffer_size 32k;
         large_client_header_buffers 4 32k;
         client_max_body_size 50m;

         sendfile   on;
         tcp_nopush on;

         keepalive_timeout 60;

         tcp_nodelay on;

         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 256k;

         gzip on;
         gzip_min_length  1k;
         gzip_buffers     4 16k;
         gzip_http_version 1.1;
         gzip_comp_level 2;
         gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml
         application/xml+rss;
         gzip_vary on;
         gzip_proxied   expired no-cache no-store private auth;
         gzip_disable   "MSIE [1-6]\.";
         server_tokens off;
         access_log off;

       server
           {
              listen 80 default_server;
               #listen [::]:80 default_server ipv6only=on;
               server_name _;
               index index.html index.htm index.php;
               root  /home/wwwroot/default;
               #error_page   404   /404.html;
               include enable-php.conf;
               location /nginx_status
               {
                    stub_status on;
                   access_log   off;
               }

                location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
                {
                    expires      30d;
                }

                location ~ .*\.(js|css)?$
                {
                    expires      12h;
                }

                location ~ /.well-known {
                    allow all;
               }

                location ~ /\.
                {
                   deny all;
               }

               access_log  /home/wwwlogs/access.log;
           }
            include vhost/*.conf;
        }

1.5 .3 配置Vhost 虚拟主机文件 例如list.conf

server {
            listen       81;
            server_name  debug.njapld.com;
            index index.php index.html;
            root  /home/corerman/ICODE/PHP/default;
            rewrite_log on;
             #   include thinkphp.conf;
            include enable-php.conf;
            location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
            {
                expires      30d;
            }

           location ~ .*\.(js|css)?$
            {
                expires      12h;
            }
           location ~ /.well-known {
               allow all;
            }
           location ~ /\.
           {
               deny all;
           }
            #access_log  /home/wwwlogs/access.log; 
 }

2. 安装 MYSQL 系列数据库

2.1 创建用户 及 用户组

groupadd mysql
useradd -s /sbin/nologin -M -g mysql mysql

2.2 下载boost库 并 解压到 /usr/local/lib

https://astuteinternet.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz

2.3 安装 rpcgen 附属库

sudo pacman-S rpcsvc-proto

2.4 CMAKE生成编译文件系统

sudo  cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql  \
            -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 \
            -DWITH_INNOBASE_STORAGE_ENGINE=1 \
            -DWITH_PARTITION_STORAGE_ENGINE=1 \
            -DWITH_FEDERATED_STORAGE_ENGINE=1 \
            -DEXTRA_CHARSETS=all \
            -DDEFAULT_CHARSET=utf8mb4 \
            -DDEFAULT_COLLATION=utf8mb4_general_ci \
            -DWITH_EMBEDDED_SERVER=1 \
            -DENABLED_LOCAL_INFILE=1

sudo make && make install

2.5 创建MYSQL DATA目录

mkdir ${MySQL_Data_Dir}
chown -R mysql:mysql ${MySQL_Data_Dir}

2.6 配置my.cnf (/etc/my.cnf)

[client]
#password   = your_password
port        = 3306
socket      = /tmp/mysql.sock

[mysqld]
port        = 3306
socket      = /tmp/mysql.sock
datadir = ${MySQL_Data_Dir}
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 8
query_cache_size = 8M
tmp_table_size = 16M
performance_schema_max_table_instances = 500

explicit_defaults_for_timestamp = true
#skip-networking
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

log-bin=mysql-bin
binlog_format=mixed
server-id   = 1
expire_logs_days = 10
early-plugin-load = ""

#loose-innodb-trx=0
#loose-innodb-locks=0
#loose-innodb-lock-waits=0
#loose-innodb-cmp=0
#loose-innodb-cmp-per-index=0
#loose-innodb-cmp-per-index-reset=0
#loose-innodb-cmp-reset=0
#loose-innodb-cmpmem=0
#loose-innodb-cmpmem-reset=0
#loose-innodb-buffer-page=0
#loose-innodb-buffer-page-lru=0
#loose-innodb-buffer-pool-stats=0
#loose-innodb-metrics=0
#loose-innodb-ft-default-stopword=0
#loose-innodb-ft-inserted=0
#loose-innodb-ft-deleted=0
#loose-innodb-ft-being-deleted=0
#loose-innodb-ft-config=0
#loose-innodb-ft-index-cache=0
#loose-innodb-ft-index-table=0
#loose-innodb-sys-tables=0
#loose-innodb-sys-tablestats=0
#loose-innodb-sys-indexes=0
#loose-innodb-sys-columns=0
#loose-innodb-sys-fields=0
#loose-innodb-sys-foreign=0
#loose-innodb-sys-foreign-cols=0

default_storage_engine = InnoDB
#innodb_file_per_table = 1
#innodb_data_home_dir = ${MySQL_Data_Dir}
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = ${MySQL_Data_Dir}
#innodb_buffer_pool_size = 16M
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

2.7 配置my.cnf 2 (/etc/my.cnf)

sed -i 's:^#innodb:innodb:g' /etc/my.cnf
或
sed -i '/^default_storage_engine/d' /etc/my.cnf
sed -i 's#default_storage_engine.*#default_storage_engine = MyISAM#' /etc/my.cnf

2.8 初始化数据库存储

chown -R mysql:mysql ${MySQL_Data_Dir}
/usr/local/mysql/bin/mysqld --initialize  --basedir=/usr/local/mysql --datadir=${MySQL_Data_Dir} --user=mysql

2.9 链接mysql开发库

cat > /etc/ld.so.conf.d/mysql.conf<<EOF
 /usr/local/mysql/lib/mysql
 /usr/local/lib
EOF

ldconfig

ln -sf /usr/local/mysql/lib/mysql /usr/lib/mysql
ln -sf /usr/local/mysql/include/mysql /usr/include/mysql

3.0 链接Shell命令系统

ln -sf /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -sf /usr/local/mysql/bin/mysqldump /usr/bin/mysqldump
ln -sf /usr/local/mysql/bin/myisamchk /usr/bin/myisamchk
ln -sf /usr/local/mysql/bin/mysqld_safe /usr/bin/mysqld_safe
ln -sf /usr/local/mysql/bin/mysqlcheck /usr/bin/mysqlcheck

3.1 修改mysql密码

 /usr/local/mysql/bin/mysqladmin -u root password "${DB_Root_Password}"
 ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

3.3 启动服务

/usr/local/mysql/support-files/mysql.server start

3.2 MYSQL高级配置

        MySQL_Opt()
        {
        if [[ ${MemTotal} -gt 1024 && ${MemTotal} -lt 2048 ]]; then
            sed -i "s#^key_buffer_size.*#key_buffer_size = 32M#" /etc/my.cnf
            sed -i "s#^table_open_cache.*#table_open_cache = 128#" /etc/my.cnf
            sed -i "s#^sort_buffer_size.*#sort_buffer_size = 768K#" /etc/my.cnf
            sed -i "s#^read_buffer_size.*#read_buffer_size = 768K#" /etc/my.cnf
            sed -i "s#^myisam_sort_buffer_size.*#myisam_sort_buffer_size = 8M#" /etc/my.cnf
            sed -i "s#^thread_cache_size.*#thread_cache_size = 16#" /etc/my.cnf
            sed -i "s#^query_cache_size.*#query_cache_size = 16M#" /etc/my.cnf
            sed -i "s#^tmp_table_size.*#tmp_table_size = 32M#" /etc/my.cnf
            sed -i "s#^innodb_buffer_pool_size.*#innodb_buffer_pool_size = 128M#" /etc/my.cnf
            sed -i "s#^innodb_log_file_size.*#innodb_log_file_size = 32M#" /etc/my.cnf
            sed -i "s#^performance_schema_max_table_instances.*#performance_schema_max_table_instances = 1000" /etc/my.cnf
        elif [[ ${MemTotal} -ge 2048 && ${MemTotal} -lt 4096 ]]; then
            sed -i "s#^key_buffer_size.*#key_buffer_size = 64M#" /etc/my.cnf
            sed -i "s#^table_open_cache.*#table_open_cache = 256#" /etc/my.cnf
            sed -i "s#^sort_buffer_size.*#sort_buffer_size = 1M#" /etc/my.cnf
            sed -i "s#^read_buffer_size.*#read_buffer_size = 1M#" /etc/my.cnf
            sed -i "s#^myisam_sort_buffer_size.*#myisam_sort_buffer_size = 16M#" /etc/my.cnf
            sed -i "s#^thread_cache_size.*#thread_cache_size = 32#" /etc/my.cnf
            sed -i "s#^query_cache_size.*#query_cache_size = 32M#" /etc/my.cnf
            sed -i "s#^tmp_table_size.*#tmp_table_size = 64M#" /etc/my.cnf
            sed -i "s#^innodb_buffer_pool_size.*#innodb_buffer_pool_size = 256M#" /etc/my.cnf
            sed -i "s#^innodb_log_file_size.*#innodb_log_file_size = 64M#" /etc/my.cnf
            sed -i "s#^performance_schema_max_table_instances.*#performance_schema_max_table_instances = 2000" /etc/my.cnf
        elif [[ ${MemTotal} -ge 4096 && ${MemTotal} -lt 8192 ]]; then
            sed -i "s#^key_buffer_size.*#key_buffer_size = 128M#" /etc/my.cnf
            sed -i "s#^table_open_cache.*#table_open_cache = 512#" /etc/my.cnf
            sed -i "s#^sort_buffer_size.*#sort_buffer_size = 2M#" /etc/my.cnf
            sed -i "s#^read_buffer_size.*#read_buffer_size = 2M#" /etc/my.cnf
            sed -i "s#^myisam_sort_buffer_size.*#myisam_sort_buffer_size = 32M#" /etc/my.cnf
            sed -i "s#^thread_cache_size.*#thread_cache_size = 64#" /etc/my.cnf
            sed -i "s#^query_cache_size.*#query_cache_size = 64M#" /etc/my.cnf
            sed -i "s#^tmp_table_size.*#tmp_table_size = 64M#" /etc/my.cnf
            sed -i "s#^innodb_buffer_pool_size.*#innodb_buffer_pool_size = 512M#" /etc/my.cnf
            sed -i "s#^innodb_log_file_size.*#innodb_log_file_size = 128M#" /etc/my.cnf
            sed -i "s#^performance_schema_max_table_instances.*#performance_schema_max_table_instances = 4000" /etc/my.cnf
        elif [[ ${MemTotal} -ge 8192 && ${MemTotal} -lt 16384 ]]; then
            sed -i "s#^key_buffer_size.*#key_buffer_size = 256M#" /etc/my.cnf
            sed -i "s#^table_open_cache.*#table_open_cache = 1024#" /etc/my.cnf
            sed -i "s#^sort_buffer_size.*#sort_buffer_size = 4M#" /etc/my.cnf
            sed -i "s#^read_buffer_size.*#read_buffer_size = 4M#" /etc/my.cnf
            sed -i "s#^myisam_sort_buffer_size.*#myisam_sort_buffer_size = 64M#" /etc/my.cnf
            sed -i "s#^thread_cache_size.*#thread_cache_size = 128#" /etc/my.cnf
            sed -i "s#^query_cache_size.*#query_cache_size = 128M#" /etc/my.cnf
            sed -i "s#^tmp_table_size.*#tmp_table_size = 128M#" /etc/my.cnf
            sed -i "s#^innodb_buffer_pool_size.*#innodb_buffer_pool_size = 1024M#" /etc/my.cnf
            sed -i "s#^innodb_log_file_size.*#innodb_log_file_size = 256M#" /etc/my.cnf
            sed -i "s#^performance_schema_max_table_instances.*#performance_schema_max_table_instances = 6000" /etc/my.cnf
        elif [[ ${MemTotal} -ge 16384 && ${MemTotal} -lt 32768 ]]; then
            sed -i "s#^key_buffer_size.*#key_buffer_size = 512M#" /etc/my.cnf
            sed -i "s#^table_open_cache.*#table_open_cache = 2048#" /etc/my.cnf
            sed -i "s#^sort_buffer_size.*#sort_buffer_size = 8M#" /etc/my.cnf
            sed -i "s#^read_buffer_size.*#read_buffer_size = 8M#" /etc/my.cnf
            sed -i "s#^myisam_sort_buffer_size.*#myisam_sort_buffer_size = 128M#" /etc/my.cnf
            sed -i "s#^thread_cache_size.*#thread_cache_size = 256#" /etc/my.cnf
            sed -i "s#^query_cache_size.*#query_cache_size = 256M#" /etc/my.cnf
            sed -i "s#^tmp_table_size.*#tmp_table_size = 256M#" /etc/my.cnf
            sed -i "s#^innodb_buffer_pool_size.*#innodb_buffer_pool_size = 2048M#" /etc/my.cnf
            sed -i "s#^innodb_log_file_size.*#innodb_log_file_size = 512M#" /etc/my.cnf
            sed -i "s#^performance_schema_max_table_instances.*#performance_schema_max_table_instances = 8000" /etc/my.cnf
        elif [[ ${MemTotal} -ge 32768 ]]; then
            sed -i "s#^key_buffer_size.*#key_buffer_size = 1024M#" /etc/my.cnf
            sed -i "s#^table_open_cache.*#table_open_cache = 4096#" /etc/my.cnf
            sed -i "s#^sort_buffer_size.*#sort_buffer_size = 16M#" /etc/my.cnf
            sed -i "s#^read_buffer_size.*#read_buffer_size = 16M#" /etc/my.cnf
            sed -i "s#^myisam_sort_buffer_size.*#myisam_sort_buffer_size = 256M#" /etc/my.cnf
            sed -i "s#^thread_cache_size.*#thread_cache_size = 512#" /etc/my.cnf
            sed -i "s#^query_cache_size.*#query_cache_size = 512M#" /etc/my.cnf
            sed -i "s#^tmp_table_size.*#tmp_table_size = 512M#" /etc/my.cnf
            sed -i "s#^innodb_buffer_pool_size.*#innodb_buffer_pool_size = 4096M#" /etc/my.cnf
            sed -i "s#^innodb_log_file_size.*#innodb_log_file_size = 1024M#" /etc/my.cnf
            sed -i "s#^performance_schema_max_table_instances.*#performance_schema_max_table_instances = 10000" /etc/my.cnf
        fi
    }

3. 安装PHP模块

3.1 安装PHP 7

sudo pacman -S php

3.2 配置php.ini文件

        sed -i 's/post_max_size =.*/post_max_size = 50M/g' /etc/php/php.ini
        sed -i 's/upload_max_filesize =.*/upload_max_filesize = 50M/g' /etc/php/php.ini
        sed -i 's/;date.timezone =.*/date.timezone = PRC/g' /etc/php/php.ini
        sed -i 's/short_open_tag =.*/short_open_tag = On/g' /etc/php/php.ini
        sed -i 's/;cgi.fix_pathinfo=.*/cgi.fix_pathinfo=0/g' /etc/php/php.ini
        sed -i 's/max_execution_time =.*/max_execution_time = 300/g' /etc/php/php.ini
        sed -i 's/disable_functions =.*/disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server/g' /etc/php/php.ini

3.3 安装PHP-FPM

sudo pacman -S php-fpm

3.4 配置PHP-FPM 配置文件

[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log

3.5 以root权限执行PHP-FPM命令


评论已关闭