Hi,大家好,我是森哥,今天森哥給大家帶來的是一篇《基於CentOS環境下,LNMP+REDIS+YAF+Java環境搭建》,這些內容都是經過森哥自己本身親自整理、測試後,撰寫而成的原創內容。希望對大家有所幫助。
一個完整的服務器環境應用服務內容,不能缺少的就是相關的web、數據庫、應用等環境。下面,在基於CentOS的系統環境下,為大家提供一個完整的應用服務教程,大家在使用的過程中,可以根據自己的需求進行取捨,若是不清楚的,可以與森哥取得聯繫,互相探討,互相進步。
一、CentOS 7.0安裝
選擇最小安裝,將相關的"調試工具"、“兼容性程序庫”、“開發工具”選中。
此操作是為了減少後期安裝或編譯相關服務時出現依賴、或環境的問題。
硬盤分區,可根據個人的習慣而定,不清楚的可以直接選擇系統自動分區,
安裝過程這裡就省略點。
由於個人的習慣,本人的分區如下,僅供參考:
<code>/boot 500M 用於啟動Linux的核心文件
swap 5120M(5G) Linux下的交換分區,又稱為虛擬內存,一般是物理內存的2倍,但不建議超過8G
/ 51200M(50G) 所有系統的文件等,都在該分區下
/home 剩下的空間 用戶主目錄,新建的用戶的目錄將會出現在這裡,本人習慣也把數據存在於此/<code>
二、基本環境配置
2.1、關閉SeLinux
<code>sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
setenforce 0/<code>
2.2、關閉系統自帶的防火牆
<code>systemctl stop firewalld //停止系統默認的防火牆
systemctl mask firewalld //屏蔽服務(讓它不能啟動)/<code>
2.3、系統管理工具
此舉是為了今後方便運維管理使用。可根據情況而定。
<code>yum install -y chkconfig net-tools ntsysv mlocate lrzsz wget lsof setuptool system-config-securitylevel-tui system-config-network-gui system-config-network-tui system-config-date tcpdump
yum install -y vim nano //安裝編輯器
yum install -y git/<code>
2.4、更新yum源
<code>yum install -y epel-release
rpm -Uvh http://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh http://mirror.webtatic.com/yum/el7/webtatic-release.rpm/<code>
2.5、安裝nginx yum安裝的第三方repo源文件(使用編譯安裝則不需要)
<code>cd /root/software
wget https://mirrors.ustc.edu.cn/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
rpm -ivh epel-release-7-11.noarch.rpm/<code>
2.6、安裝mysql yum安裝的第三方repo源文件(使用編譯安裝則不需要)
<code>cd /root/software //進入源文件集中文件夾
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm //下載
(wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm Mysql8.0)
yum localinstall -y mysql57-community-release-el7-8.noarch.rpm //通過rpm安裝得到repo源
yum repolist enabled | grep "mysql.*-community.*" //檢查mysql源是否安裝成功/<code>
2.7、PHP yum的第三方repo源文件(使用編譯安裝則不需要)
<code>rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm/<code>
2.8、清理並更新yum源
<code>yum clean all
yum makecache/<code>
加快yum工具下載安裝速度以及解決yum安裝過程中斷
<code>mkdir /root/software
cd /root/software
yum install -y yum-fastestmirror
wget https://wilmer.gaa.st/downloads/axel-1.0b.tar.gz
tar zxvf axel-1.0b.tar.gz
cd axel-1.0b
./configure --i18n=1
make
make install
yum -y install yum-utils
yum clean all
yum-complete-transaction --cleanup-only/<code>
三、應用環境安裝
編譯等環境預裝
<code>yum install -y make cmake gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers gd gd-devel perl expat expat-devel nss_ldap unixODBC-devel libxslt-devel libevent-devel libtool-ltdl bison libtool zip unzip gmp-devel python-devel perl-devel perl-ExtUtils-Embed //安裝各種環境所需要的插件
yum install -y pcre pcre-devel //安裝PCRE(可與預裝環境同步進行)
yum update -y //升級補丁/<code>
3.1、iptables應用(可不安裝)
3.1.1、安裝iptables
<code>yum install -y iptables-services //安裝iptables
systemctl enable iptables //開機自啟動
service iptables start //啟動服務
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT //允許遠程訪問mysql
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT //允許遠程訪問http
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT //允許遠程訪問https
service iptables save //保存相關操作配置
systemctl stop iptables.service //關閉iptables服務/<code>
3.1.2、iptables規則
3.1.2.1、清除所有規則,所有設置從頭開始
<code>iptables -F //清除預設表filter中的所有規則鏈的規則
iptables -X //清除預設表filter中使用者自定鏈中的規則
service iptables save //保存結果,否則重啟後又恢復原來的狀態
iptables -L -n/<code>
結果如下:
<code>Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination /<code>
3.1.2.2、設定預設規則
<code>iptables -A INPUT -p tcp --dport 22 -j ACCEPT //允許所有IP,訪問22端口(流入)
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT //允許所有IP,訪問22端口(流出)
iptables -I INPUT -s 10.17.162.137 -p tcp --dport 22 -j ACCEPT //指定IP訪問指定端口
iptables -I OUTPUT -s 10.17.162.137 -p tcp --sport 22 -j ACCEPT //若流出被禁止,則需要追加該條規則
注:優先允許SSH端口,否則,在執行下面的規則時,將會直接失去連接,無法管理遠程機器。
iptables -P INPUT DROP //禁止所有流入規則
iptables -P OUTPUT ACCEPT //允許所有流出規則
iptables -P FORWARD DROP //禁止所有轉發規則
service iptables save //保存結果,否則重啟後又恢復原來的狀態/<code>
php-fpm訪問的時候,需要用到以下規則,否則將無法訪問php文件。
<code>iptables -A INPUT -i lo -j ACCEPT //允許來自於lo接口接收數據包
iptables -A OUTPUT -o lo -j ACCEPT //允許向lo接口發送數據包/<code>
上述規則可根據實際情況而定,而iptables -A的意思是添加到當前規則的最後一條;而iptables -I的意思是添加到當前規則的某一個位置,默認為第一條,若是iptables -I 3 則意思是在第三條插入。
<code>iptables -A INPUT -p tcp --dport 53 -j ACCEPT //開放53端口,DNS端口,否則無法使用yum安裝
iptables -A INPUT -p udp --dport 53 -j ACCEPT //開放53端口,DNS端口,否則無法使用yum安裝
iptables -A INPUT -p tcp --dport 80 -j ACCEPT //開放80端口
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT //tomcat服務需用到的端口
iptables -I INPUT 2 -m state --state RELATED,ESTABLISHED -j ACCEPT //tomcat服務需要
iptables -A INPUT -p tcp --dport 443 -j ACCEPT //開放443端口/<code>
允許icmp包通過,也就是允許ping,
<code>iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT設置成DROP的話)
iptables -A INPUT -p icmp -j ACCEPT (INPUT設置成DROP的話)
iptables -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
iptables -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)/<code>
丟棄壞的TCP包
<code>iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP/<code>
處理IP碎片數量,防止攻擊,允許每秒100個
<code>iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT/<code>
設置ICMP包過濾,允許每秒1個包,限制觸發條件是10個包.
<code>iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT/<code>
防止外網用內網IP欺騙
<code>iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP/<code>
禁止與某個具體IP的所有連接
<code>iptables -t nat -A PREROUTING -d ip地址(0.0.0.0) -j DROP/<code>
禁用FTP(21)端口
<code>iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP/<code>
禁止某個IP連接FTP(21)端口.
<code>iptables -t nat -A PREROUTING -p tcp --dport 21 -d ip地址 -j DROP/<code>
drop非法連接
<code>iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP/<code>
允許所有已經建立的和相關的連接
<code>iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
service iptables save
service iptables restart/<code>
3.2、安裝mysql及初始設置mysql
3.2.1、安裝mysql
<code>yum install -y bison-devel libaio-devel perl-Data-Dumper //預裝mysql環境
yum install -y mysql-server //安裝mysqld
service mysqld start //啟動mysql
systemctl enable mysqld.service //開機自啟動/<code>
3.2.2、初始化設置
<code>grep 'temporary password' /var/log/mysqld.log //mysql5.7版本後,初始密碼不再為空,默認隨機生成,可通過該命令查詢
mysql -u root -p //進入mysql
alter user root@localhost identified by '三種或以上的八位字符'; 默認需要先修改密碼,才能其他操作
use mysql; //加載mysql表
UPDATE user SET Password=PASSWORD('三種或以上的八位字符') where USER='root'; //設置初始密碼
FLUSH PRIVILEGES;
exit; //退出mysql管理/<code>
3.2.3、設置mysql 不分大小寫
<code>vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
lower_case_table_names=1
character-set-server=utf8
max_connections=500
innodb_log_file_size=60M
innodb_buffer_pool_size=128M
symbolic-links=0
[client]
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld_safe]
open-files-limit = 8192
log-error=/var/log/mysqld.log
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid/<code>
<code>service mysqld restart/<code>
3.3、安裝PHP環境(任選一個版本)
3.3.1、安裝PHP5.6版本
<code>yum install -y php56w php56w-cli php56w-common php56w-gd php56w-ldap php56w-mbstring php56w-mcrypt php56w-mysql php56w-pdo php56w-devel php56w-bcmath
yum install -y traceroute net-snmp-devel vim sysstat tree mysql-devel ntpdate libjpeg* bind-utils
yum install -y php56w-imap php56w-odbc php56w-pear php56w-xml php56w-xmlrpc php56w-mhash libmcrypt php56w-bcmath
yum install -y php56w-fpm/<code>
配置運行的用戶名:
<code>vi /etc/php-fpm.d/www.conf
user = nginx //默認為apache,修改與nginx一致的用戶 可以先修改,安裝nginx後再重啟
group = nginx //默認為apache,修改與nginx一致的組 可以先修改,安裝nginx後再重啟
chkconfig php-fpm on
service php-fpm start/<code>
3.3.2、安裝PHP7.0版本
<code>rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm //php7 yum源
yum install -y php70w php70w-cli php70w-common php70w-gd php70w-ldap php70w-mbstring php70w-mcrypt php70w-mysql php70w-pdo php70w-devel php70w-bcmath
yum install -y traceroute net-snmp-devel vim sysstat tree mysql-devel ntpdate libjpeg* bind-utils
yum install -y php70w-imap php70w-odbc php70w-pear php70w-xml php70w-xmlrpc php70w-mhash libmcrypt php70w-bcmath
yum install -y php70w-fpm/<code>
配置運行的用戶名:
<code>vi /etc/php-fpm.d/www.conf
user = nginx //默認為apache,修改與nginx一致的用戶 可以先修改,安裝nginx後再重啟
group = nginx //默認為apache,修改與nginx一致的組 可以先修改,安裝nginx後再重啟
chkconfig php-fpm on
service php-fpm start/<code>
3.3.3、安裝PHP7.3版本
<code>rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum --enablerepo=remi install -y php73-php php73-php-pear php73-php-bcmath php73-php-pecl php73-php-jsond php73-php-mysqlnd php73-php-mysql php73-php-gd php73-php-common php73-php-fpm php73-php-intl php73-php-cli php73-php php73-php-xml php73-php-opcache php73-php-pecl-apcu php73-php-pdo php73-php-odbc php73-php-xmlrpc php73-php-mhash php73-php-gmp php73-php-process php73-php-pecl-imagick php73-php-devel php73-php-mbstring php73-php-zip php73-php-ldap php73-php-imap php73-php-pecl-mcrypt php73-php-soap traceroute net-snmp-devel vim sysstat tree mysql-devel ntpdate libjpeg* bind-utils
php73 -v
systemctl restart php73-php-fpm
systemctl enable php73-php-fpm
ln -s /opt/remi/php73/root/usr/bin/php /usr/bin/php
ln -s /opt/remi/php73/root/usr/bin/phpize /usr/bin/phpize
ln -s /opt/remi/php73/root/usr/bin/php-config /usr/bin/php-config
vi /etc/opt/remi/php73/php.ini
memory_limit = 512M/<code>
配置運行的用戶名:
<code>vi /etc/opt/remi/php73/php-fpm.d/www.conf
user = nginx //默認為apache,修改與nginx一致的用戶 可以先修改,安裝nginx後再重啟
group = nginx //默認為apache,修改與nginx一致的組 可以先修改,安裝nginx後再重啟
systemctl restart php73-php-fpm
systemctl enable php73-php-fpm/<code>
3.3.4、修改時區
<code>vi /etc/php.ini
date.timezone = Asia/Shanghai/<code>
3.4、安裝 REDIS 及 REDIS-php 服務
3.4.1、安裝 REDIS
<code>yum install -y tcl //若不安裝tcl,在make test時會出現錯誤
cd /home/software
wget http://download.redis.io/releases/redis-4.0.10.tar.gz //下載redis安裝包
tar zxvf redis-4.0.10.tar.gz //解壓
mkdir /data/deploy -p
mv redis-4.0.10 /data/deploy/redis
cd /data/deploy/redis //進入redis安裝文件夾中,該文件為二進制文件,可直接make操作。
make distclean //清理舊的一些編譯過的文件
make MALLOC=libc
make test && make install
mkdir -p /data/deploy/redis/etc
mkdir -p /data/deploy/redis/run
mkdir -p /data/deploy/redis/bin
mkdir -p /data/deploy/redis/data/6379
mkdir -p /data/deploy/redis/log
cp redis.conf /data/deploy/redis/etc/redis.conf
cp -r src/redis-* /data/deploy/redis/bin
cd /data/deploy/redis/
./bin/redis-server etc/redis.conf //即可啟動redis服務/<code>
測試安裝是否成功
<code>cd /data/deploy/redis/bin
./redis-server --version/<code>
顯示下面內容,說明安裝成功
<code>Redis server v=3.2.9 sha=00000000:0 malloc=libc bits=64 build=35b33d1f1bb9d2fc/<code>
配置redis
<code>vi /data/deploy/redis/etc/redis.conf
requirepass Credit2016Admin //配置密碼
bind 0.0.0.0 //允許其他服務器訪問
daemonize yes //改成後臺啟動/<code>
啟動服務文件
<code>touch /etc/init.d/redis
vi /etc/init.d/redis
#!/bin/sh
#chkconfig: 2345 80 90
# Simple Redis init.d/># as it does use of the /proc filesystem.
PATH="/data/deploy/redis/bin:$PATH"
EXEC="/data/deploy/redis/bin/redis-server"
CLIEXEC="/data/deploy/redis/bin/redis-cli"
PIDFILE="/data/deploy/redis/run/redis.pid"
CONF="/data/deploy/redis/etc/redis.conf"
PORT="6379"
case "$1" in
start)
if [ -f $$PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed."
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running."
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $PORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped."
fi
;;
restart)
$0 stop && $0 start
;;
*)
echo "Usage: $0 {start|stop|restart}" >&2
exit 1
;;
esac
chmod +x /etc/init.d/redis
chkconfig --add redis
chkconfig redis on
service redis start //啟動redis/<code>
Redis環境變量設置
<code>vi /etc/profile
export REDIS_HOME=/data/deploy/redis
export PATH=$PATH:$REDIS_HOME/bin
source /etc/profile //立即生效
chmod +x /etc/init.d/redis/<code>
3.4.2、安裝REDIS-php
<code>cd /usr/local/src/
git clone https://github.com/phpredis/phpredis.git
cd phpredis
phpize
./configure --with-php-config=php-config
make
make test
make install
vi /etc/php.ini //最底部添加下面的內容
[redis]
extension = /usr/lib64/php/modules/redis.so
chkconfig --add redis //開機自啟動/<code>
3.5、YAF編譯安裝
<code>cd /usr/local/src/
wget http://pecl.php.net/get/yaf-2.3.5.tgz //需與PHP(5.6)版本匹配
wget http://pecl.php.net/get/yaf-3.0.8.tgz //與php70版本匹配
tar zxvf yaf-2.3.5.tgz
cd yaf-2.3.5
phpize
./configure --with-php-config=/usr/bin/php-config
make
make test
make install
vi /etc/php.ini //最底部
[Yaf]
extension=/usr/lib64/php/modules/yaf.so
yaf.use_namespace = 1
yaf.environ = "develop"
php -i | grep yaf/<code>
出現下面這些內容,說明安裝成功
<code>yaf
yaf support => enabled
Supports => http://pecl.php.net/package/yaf
yaf.action_prefer => Off => Off
yaf.cache_config => Off => Off
yaf.environ => develop => develop
yaf.forward_limit => 5 => 5
yaf.library => no value => no value
yaf.lowcase_path => Off => Off
yaf.name_separator => no value => no value
yaf.name_suffix => On => On
yaf.st_compatible => Off => Off
yaf.use_namespace => On => On
yaf.use_spl_autoload => Off => Off/<code>
3.6、Nginx安裝
<code>yum install automake autoconf libtool make
yum install -y nginx
chkconfig nginx on
cd /etc/nginx
vi nginx.conf/<code>
在server{}中添加如下內容
默認首頁文件名
<code>index index.php default.php index.html index.htm/<code>
在server中添加支持PHP的語句
<code> 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;
}/<code>
禁止IP直接訪問
<code> server {
server_name _;
return 404;
}
service nginx restart //重啟nginx服務/<code>
配置虛擬主機
<code>cd /etc/nginx/conf.d
vi domain.conf
server {
listen 80;
server_name youself domain; //實際訪問的域名,多域名之間加個空格
root /home/webdata/yourwebsite/wwwroot; //存放網頁的根目錄
location / {
index index.php index.html index.shtml; //默認首頁文件名
}
location ~ \\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/webdata/yourwebsite/wwwroot$fastcgi_script_name;
include fastcgi_params;
}
#log...
}
service nginx restart //重啟nginx服務/<code>
3.7、JAVA開發環境安裝
<code>yum search java-1.8 //搜索java-1.8的版本
yum install -y java-1.8.0-openjdk-devel.x86_64 //安裝java-1.8.0版本開發環境
cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-5.b12.el7_4.x86_64 //進入安裝目錄
vi /etc/profile //環境配置
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-5.b12.el7_4.x86_64 //版本不同,路徑不一樣,需要注意這個問題/<code>
在文件最後面,添加上
<code>export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile //立即生效/<code>
運行測試
<code>javac/<code>
顯示以下內容說明配置成功
<code>Usage: javac <options> <source>
where possible options include:
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
-nowarn Generate no warnings
-verbose Output messages about what the compiler is doing
-deprecation Output source locations where deprecated APIs are used
-classpath <path> Specify where to find user class files and annotation processors
-cp <path> Specify where to find user class files and annotation processors
-sourcepath <path> Specify where to find input source files
-bootclasspath <path> Override location of bootstrap class files
-extdirs <dirs> Override location of installed extensions
-endorseddirs <dirs> Override location of endorsed standards path
-proc:{none,only} Control whether annotation processing and/or compilation is done.
-processor <class1>[,<class2>,<class3>...] Names of the annotation processors to run; bypasses default discovery process
-processorpath <path> Specify where to find annotation processors
-parameters Generate metadata for reflection on method parameters
-d <directory> Specify where to place generated class files
-s <directory> Specify where to place generated source files
-h <directory> Specify where to place generated native header files
-implicit:{none,class} Specify whether or not to generate class files for implicitly referenced files
-encoding <encoding> Specify character encoding used by source files
-source <release> Provide source compatibility with specified release
-target <release> Generate class files for specific VM version
-profile <profile> Check that API used is available in the specified profile
-version Version information
-help Print a synopsis of standard options
-Akey[=value] Options to pass to annotation processors
-X Print a synopsis of nonstandard options
-J<flag> Pass <flag> directly to the runtime system
-Werror Terminate compilation if warnings occur
@<filename> Read options and filenames from file/<filename>/<flag>/<flag>/<profile>/<release>/<release>/<encoding>/<directory>/<directory>/<directory>/<path>/<class3>/<class2>/<class1>/<dirs>/<dirs>/<path>/<path>/<path>/<path>/<source>/<options>/<code>
若輸入javac顯示:bash: javac: 未找到命令… 則說明配置失敗,檢查環境變量路徑是否正確。
結束語
至此,基於CentOS系統下的LNMP+REDIS+YAF+Java環境配置完成 。
閱讀更多 森哥瞧世界 的文章