搭建基于 LNMP 和 JAVA 环境的服务

2019-01-21  本文已影响0人  fangfc

1. LNMP 环境

-- 本文档将搭建基于 LNMP 环境的 discuz 论坛, dedecms 企业网站

1.1 基础环境

角色:           IP                   主机名           操作系统        软件版本
LNMP         192.168.10.13         node10013         CentOS7         

1.2 Nginx 软件

1.3 MySQL 安装

[mysqld]
user                                   = mysql
bind_address                           = 127.0.0.1
port                                   = 3306
basedir                                = /opt/app/mysql57/
datadir                                = /opt/app/mysql57/data/data
tmpdir                                 = /opt/app/mysql57/data/tmp
socket                                 = /opt/app/mysql57/data/logs/mysql.sock
pid-file                               = /opt/app/mysql57/data/logs/mysqld.pid
log_error                              = /opt/app/mysql57/data/logs/error_mysqld.log
character_set_server                   = utf8

## InnoDB
innodb_file_per_table                  = ON
innodb_file_format_check               = ON
innodb_data_file_path                  = ibdata1:100M:autoextend
innodb_temp_file_path                  = ../tmp/ibtmp1:12M:autoextend
innodb_log_group_home_dir              = /opt/app/mysql57/data/redolog/
innodb_undo_directory                  = /opt/app/mysql57/data/undolog/
log_bin                                = /opt/app/mysql57/data/binlog/mysql_bin
relay_log                              = /opt/app/mysql57/data/relaylog/relay_log

[client]
socket                                 = /opt/app/mysql57/data/logs/mysql.sock
# 创建 MySQL 用户和用户组
groupadd -r mysql
useradd -M -g mysql -r -d /dev/null -s /sbin/nologin mysql

# 创建mysql 的 data 目录, 并赋权限
mkdir -p /opt/app/mysql57/data/{binlog,data,logs,redolog,tmp,undolog}
chown -R mysql:mysql /opt/app/mysql57/data/
ln -s /opt/app/mysql57/data/logs/mysql.sock /tmp/mysql.sock

# 初始化 mysql 
./bin/mysqld --initialize 

1.4 安装 PHP

 ./configure  --prefix=/opt/app/php56  --with-config-file-path=/opt/app/php56/etc  --disable-ipv6  --enable-bcmath  --enable-dba  --enable-ftp  --enable-mbstring  --enable-sockets  --enable-exif  --enable-pcntl  --enable-soap  --enable-zip  --with-curl  --with-iconv  --with-gettext  --with-gd  --with-gmp  --with-freetype-dir  --with-jpeg-dir  --with-png-dir  --with-mcrypt  --with-mhash  --with-openssl  --with-tidy  --with-zlib  --with-mysqli=mysqlnd  --with-mysql=/opt/app/mysql57/  --with-pdo-mysql=mysqlnd  --enable-fpm 
cp sapi/fpm/init.d.php-fpm /opt/app/php56/sbin/
chmod +x /opt/app/php56/sbin/init.d.php-fpm 
...
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /opt/app/php56/var/log/php_errors.log
...
+ `php-fpm.conf`
;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;
;; the global prefix /opt/app/php56/
include=etc/php-fpm.d/*.conf

[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.error.log
log_level = notice
emergency_restart_threshold = 60
emergency_restart_interval = 60s 
process_control_timeout = 10s 
;process.max = 0 
;daemonize = yes 
rlimit_files = 65000
;rlimit_core = 0 
events.mechanism = poll

[web]
user = nginx
group = nginx
;listen = 127.0.0.1:9000
listen = var/run/php_$pool.socket
listen.backlog = 4096
listen.mode = 0666
pm = dynamic
pm.max_children = 300 
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 20
pm.max_requests = 4000
pm.status_path = /phpstatus
access.format = %t %l - "%m %r%Q%q" -  %s %f %{mili}d %{kilo}M %C%%
slowlog = var/log/php.slow.$pool.log
request_slowlog_timeout = 2
request_terminate_timeout = 60
rlimit_files = 10240
catch_workers_output = yes 

1.5 安装 Jdk 和 tomcat

tar zxf jdk-8u131-linux-x64.tar.gz
cp -r jdk1.8.0_131/ /opt/app/jdk1.8
cat <<-EOF  >> /etc/profile
export JAVA_HOME=/opt/app/jdk1.8
export CLASSPATH=${JAVA_HOME}/lib
export JRE_HOME=${JAVA_HOME}/jre
export PATH=${JAVA_HOME}/bin:$PATH
EOF

source /etc/profile
tar zxf /opt/src/apache-tomcat-9.0.14.tar.gz
cp -r /opt/src/apache-tomcat-9.0.14 /opt/app/tomcat
ln -s /opt/app/tomcat/*.sh /opt/bin
catalina.sh start 

2. 安装 安装discuz

2.1 准备discuz

unzip -d /opt/src/discuz  /opt/src/Discuz_X2.5_PHP7.0_SC_UTF8.zip
cp  /opt/src/discuz/upload  /opt/www/
mkdir -p /opt/log/nginx
MySQL [(none)] > CREATE DATABASE ultrax;
MySQL [(none)] > GRANT ALL ON `ultrax`.* TO 'ultraxUser'@'localhost' IDENTIFIED BY 'ultraxPassword';
MySQL [(none)] > FLUSH PRIVILEGES;
chown nginx:nginx /opt/www/discuz/data/ /opt/www/discuz/config/ /opt/www/discuz/uc_client/data/ /opt/www/discuz/uc_server/data/

2.2 编辑 nginx

server {
    listen          80;
    server_name     discuz.top;
    root            /opt/www/discuz;
    index           index.php;
    # 配置静态文件不记录日志, 以及过期时间
    location ~ .*\.(gif|jpeg|png|bmp|swf)$ {
        expires         3d;
        access_log      off;

        ## 配置防盗链
        valid_referers none blocked discuz.top www.discuz.top;
        if ($invalid_referer) {
            return 403;
        }
    }
    location ~ \.php$ {
        include             fastcgi_params;
        fastcgi_param       SCRIPT_FILENAME         /opt/www/discuz/$fastcgi_script_name;
        fastcgi_pass        unix:/opt/app/php56/var/run/php_discuz.socket;
        fastcgi_index       index.php;
    }   
    
    access_log      /opt/log/nginx/discuz_access.log;
    error_log       /opt/log/nginx/discuz_error.log;
}

192.168.10.13       discuz.top
192.168.10.13       dedecms.top

3. 安装 dedecms

3.1 下载并安装

tar zxf /opt/src/DedeCMS-V5.7-UTF8-SP2.tar.gz
cp -r /opt/src/DedeCMS-V5.7-UTF8-SP2/uploads/ /opt/www/dedecms
chown -R nginx:nginx /opt/www/dedecms/

3.2 配置服务

...
# dedecms 
server {
    listen          80; 
    server_name     dedecms.top;
    root            /opt/www/dedecms;
    index           index.php;

    # 配置静态文件不记录日志, 以及过期时间
    location ~ .*\.(gif|jpeg|png|bmp|swf)$ {
        expires         3d; 
        access_log      off;
        # 配置防盗链
        valid_referers none blocked dedecms.top www.dedecms.top;
        if ($invalid_referer) {
            return 403;
        }
    }

    location ~ \.php$ {
        include             fastcgi_params;
        fastcgi_param       SCRIPT_FILENAME         /opt/www/dedecms/$fastcgi_script_name;
        fastcgi_pass        unix:/opt/app/php56/var/run/php_web.socket;
        fastcgi_index       index.php;

    }
    access_log      /opt/log/nginx/dedecms_access.log;
    error_log       /opt/log/nginx/dedecms_error.log;
}

...
MySQL [(none)] > GRANT ALL ON `dedecms`.* to 'dedecmsUser'@'localhost' IDENTIFIED BY 'dedecmsPassword';
MySQL [(none)] > FLUSH PRIVILEGES;

3.3 启动与初始化

4. 安装zrlog

4.1 下载与安装

4.2 配置 zrlog

mkdir /opt/app/tomcat/myapps
cp /opt/src/ROOT.war /opt/app/tomcat/myapps/
...
<Host name="localhost" appBase="myapps" unpackWARs="true" autoDeploy="true">
...
MySQL [(none)] > CREATE DATABASE zrlog;
MySQL [(none)] > GRANT ALL ON zrlog.* to 'zrlogUser'@127.0.0.1 IDENTIFIED BY 'zrlogPassword';
MySQL [(none)] > FLUSH PRIVILEGES;

4.3 启动 初始化zrlog

5. 自动切割日志

5.1 nginx 的日志切割

/opt/log/nginx/*log {
    create 0644 nginx nginx
    daily
    rotate 30
    missingok 
    notifempty
    compress
    sharedscripts
    postrotate
        /bin/kill -USR1 `cat /var/run/nginx.pid 2>/dev/null` 2> /dev/null || true
    endscript
}

5.2 php 日志切割

/opt/app/php56/var/log/*log {
    daily
    rotate 30
    missingok 
    notifempty
    compress
    sharedscripts
    postrotate
        kill -USR1 `cat /opt/app/php56/var/run/php-fpm.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

5.3 写入crontab

cat <<-EOF >> /var/spool/cron/root
01 0 * * *      /usr/sbin/logrotate -f /etc/logrotate.d/nginx
01 0 * * *      /usr/sbin/logrotate -f /etc/logrotate.d/php
EOF

5.6 站点后台二次认证

  1. 安装 httpd-tools 工具组(需要 htpasswd 工具)
  1. 生成认证用户
[root@node10013 nginx]# htpasswd -c /etc/nginx/passwd.db fangfc
New password: 
Re-type new password: 
Adding password for user fangfc
[root@node10013 nginx]# 
  1. 配置nginx 配置文件
## discuz 
server {
    listen          80; 
    server_name     discuz.top;
    root            /opt/www/discuz;
    index           index.php;
...
    location ~ admin\.php$ {
        auth_basic  "User Authorize";
        auth_basic_user_file /etc/nginx/passwd.db;
        include             fastcgi_params;
        fastcgi_param       SCRIPT_FILENAME         /opt/www/discuz/$fastcgi_script_name;
        fastcgi_pass        unix:/opt/app/php56/var/run/php_discuz.socket;
        fastcgi_index       index.php;
    }   
    location ~ \.php$ {....}
    ....
}

# dedecms 
server {
    listen          80; 
    server_name     dedecms.top;
    root            /opt/www/dedecms;
...
    location /dede {
        auth_basic  "User Authorize";
        auth_basic_user_file /etc/nginx/passwd.db;
        include             fastcgi_params;
        fastcgi_param       SCRIPT_FILENAME         /opt/www/dedecms/$fastcgi_script_name;
        fastcgi_pass        unix:/opt/app/php56/var/run/php_web.socket;
        fastcgi_index       index.php;
    }   
    
    location ~ \.php$ { ... }
...  

}

END

上一篇 下一篇

猜你喜欢

热点阅读