如何在CentOS上搭建 Struts2+Spring+Hibernate的运行环境
Struts2+Spring+Hibernate是J2EE的最新流行框架。本篇是我搭建这个框架的经验总结,有很多人搭建这个框架总会遇到
大大小小的问题,网上也没有什么行之有效的方案或成体系的介绍,所以我就决定总结一下我的搭建过程。给一些搭
建尚存问题的朋友提供帮助。
我用这个框架,实现的是基本的CRUD功能的一个雇员管理系统,本来打算丰富一下功能,但是一直没能抽出空去搞。
目前版本暂定为10,除了CRUD外还配置了表单验证框架JSValidation。功能都能很顺利的实现。
现在分享部分源码,来说明一些注意事项。
以下是部分搭建过程及源码:
1先组合实现Hibernate32+Spring25支持,删除hibernatecfgxml文件,修改applicationContextxml文件的内容,增加SessionFactory和dataSource的设置。
2通过MyEclipse的向导方式,生成POJO类和对应的映射文件。
3修改applicationContextxml文件中<property name="mappingResources">元素的内容。
4编写DAO接口和实现类。
5修改applicationContextxml文件,增加对Dao实现类的配置。
6组合Struts2和Spring25,修改webxml文件,增加struts2的所需要的过滤器配置。
7增加struts2相应类库,增加struts2与spring的配置jar包。
8拷贝strutsxml文件到src根目录下,再修改strutsxml文件,进行常量配置。
9修改webxml文件,配置Spring监听器,和上下文变量。并增加OpenSessionInViewFilter的设置。
10写入action类。
11配置strutsxml文件。
12修改applicationContextxml
13编写Jsp文件。
14加载运行项目。
下面是关键文件的源码:
strutsxml源码:
1、在软件版本方面
CentOS中的Web服务器应用程序所需的主要软件版本是:Apache -> 2215;PHP-> 533;MySQL-> 5166;PostgreSQL-> 8413。Debian Stable Wheezy已拥有这些软件版本:Apache-> 2222;PHP-> 544;MySQL-> 5530;PostgreSQL-> 919。
2、在软件升级方面
选择软件时,将在生产环境中使用任何类型的软件,应该始终考虑升级它的难易程度。CentOS不是容易升级的GNU / Linux发行版,与升级相比,通常强烈建议全新安装。将Debian从一个稳定版本升级到下一稳定版本很容易,操作也比较简单
3、在稳定性方面
CentOS是最受测试和稳定的GNU / Linux发行版之一,这就是为什么它也是最常用的发行版之一。CentOS两次发行之间的间隔确保了充足的时间进行彻底的测试,并且将任何安全修复程序都移植到CentOS的较早版本中,以解决在构建新版本时发现的任何漏洞。Debian被认为是比许多其他发行版更稳定的Linux发行版。对于企业而言,这是一个不错的选择,因为该版本中的错误导致的开销更少。它还为修补安全漏洞提供了时间,因此这些发行版通常比其他Linux发行版的发行版更安全。
新手自学linux,需要制定详细的学习路线和学习内容,可以按照以下思路学习:
第一阶段:linux基础入门Linux基础入门主要包括:Linux硬件基础、Linux发展历史、Linux系统安装、xshell连接、xshell优化、SSH远程连接故障问题排查、Linux基础优化、Linux目录结构知识、Linux文件属性、Linux通配符、正则表达式、Linux系统权限等。
第二阶段:linux系统管理进阶linux系统管理进阶包括:Linux定时任务、Linux用户管理、Linux磁盘与文件系统、Linux三剑客之sed命令等。
第三阶段:LinuxShell基础LinuxShell基础包括:Shell编程基础、Linux三剑客之awk命令等。
第四阶段:Linux网络基础。
第五阶段:Linux网络服务Linux网络服务包括:集群实战架构开始及环境准备、rsync数据同步服务、Linux全网备份项目、nfs网络存储服务精讲、inotify/sersync实时数据同步/nfs存储实时备份项目等。
第六阶段:Linux重要网络服务Linux重要网络服务包括:http协议/www服务基础、nginxweb介绍及基础实践、nginxweb、lnmp环境部署/数据库异机迁移/共享数据异机迁移到NFS系统、nginx负载均衡、keepalived高可用等。
第七阶段:Ansible自动化运维与Zabbix监控,Ansible自动化运维与Zabbix监控包括:SSH服务秘钥认证、ansible批量自动化管理集群、zabbix监控等。
第九阶段:大规模集群高可用服务(Lvs、Keepalived)
第十阶段:JavaTomcat服务及防火墙Iptables
第十一阶段:MySQLDBA高级应用实践MySQLDBA高级应用实践包括:MySQL数据库入门基础命令、MySQL数据库进阶备份恢复、MySQL数据库深入事务引擎、MySQL数据库优化SQL语句优化、MySQL数据库集群主从复制/读写分离、MySQL数据库高可用/mha/keepalved等。
第十二阶段:高性能数据库Redis和Memcached课程。
第十三阶段:Linux大规模集群架构构建(200台)。
第十四阶段:LinuxShell编程企业案例实战。
第十五阶段:企业级代码发布上线方案(SVN和Git)。
第十六阶段企业级Kvm虚拟化与OpenStack云计算。
第十七阶段公有云阿里云8大组件构建集群实战。
第十八阶段:Docker技术企业应用实践。
第十九阶段:Python自动化入门及进阶。
第二十阶段:职业规划与高薪就业指导。
Linux学习周期因人而异,如果您有比较好的学习规划,每天坚持学习4至5个小时,坚持3至6个月,应该可以熟练掌握Linux基本操作,但是,如果只有计划,没有实施,那就另当别论了,如果想更深入、更节省时间的学习Linux操作系统,建议报班学习,效果会更加明显!
自学方法很多,看你有没有C语言和操作系统的基础了。现在网上的资料非常多,各种培训视频教程应有尽有。
1、linux入门难度也不容易,关键看你的基础了,如果你C语言很厉害,把单片机要的很溜,有操作系统的概念和基础,比如你以前玩过ucosii或者ucosiii,那你自学linux就容易的多,自己买个开发板,找一些linux视频教程,自己动手做,就容易入门,几个月就能很好掌握linux。
2、如果你单片机嵌入式方面的小白,那你一来就学linux,难度非常大,就算你看视频教程,也很难学会,linux属于操作系统,属于软件,需要把它下载硬件系统中,比如ARM芯片。其实ARM难度肯定比单片机难多了,不容易掌握。
3、自学linux,得看你的基础吧,基础好,自学起来就容易。如果你是小白,就不要开始学linux了,太难了,会打击的自信。学学单片机这类入门低的。
以我过来人的经验,没有任何所谓的捷径可以走,也没有什么7天速成之类的,那些基本上就是吸引眼球,实质上就是教你怎么样快速搭建一些软件等等。
学习linux其实说简单也不简单,说难也不难,主要可以从以下几个方面入手。
一、选定一本书或是一个视频教程,这方面的电子书和教程非常好找,网上一搜一大堆,视频可以在头条或是B站都有。
二、制定相应的学习计划,计划的每一天都要有实际的东西,不能是大而空的目标,比如计划应该是学会使用ls,mkdir指令,而不是学习指令,大而空的目标往往会让人觉得没有正向反馈,最后也就不了了之。
三、严格按照你设定的计划执行,每天学习后要有一定的回顾和实操,这样不但能加深你的印象,也更容易学的进去。
四、学完之后记得使用,不能是为了学而学,一定要应用于日常工作中去,才能得到更好的提升。
总之,学习linux没有任何捷径可以走,只有一个途径,用,一直用,自然而然就水到渠成。
LIiux自学入门其实并不是很难,我之前学习的时候大概整理了几类的资源,正好分享给大家:
第一:业内公认的Linux优质教程
Linux教程|菜鸟教程菜鸟教程提供了大量的在线实例,通过实例可以更好的入门以及学习LuⅨ,所有的资源是安全免费的
Linux教程w3cschool在这个教程站上你可以找到你所需要的所有的网站建设教程。从基础的HTML到CSS,乃至进阶的XML,SQL,JS,PHP和ASPNET;
Linux命令大全(手册)真正好用的Linux命令在线查询网站第二:专业的linux技术书籍
鸟哥的Linux私房菜:基础学习篇·Linux多线程服务端编程:使用muduoC++网铬库·深入Liux内核架构:全球开源社区集体智慧结晶,领略Linux内核的绝美风光第三:Linux技术工具
·DockerDocker在一定程度上是LXC的增强版,早期的Dockerf使用LXC作为容器引擎9,目前dockert使用的容器引擎为runC,其是容器运行时标准的实现之一;
KubernetesKubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术;
Zabbix监控利器,监控所有你要监控的指标。
NginxNginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务
Istio连接、安全加固、控制和观察服务的开放平台。开放平台就是指它本身是开源的,服务对应的
是微服务,也可以粗略地理解为单个应用;
Jenkins
Jenkins是开源CICD软件领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何
项目的需要;
ApcheApache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的web服务器软件之一。
Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用;
第四:Linux进阶必备的技术点
掌握Iptables防火墙体系,实现防火墙实现数据包过滤和转发;掌握用户权限安全控制Sudo体系与配置;掌握DNS服务的原理、部署、安装和企业级应用;实现文件共享服务NFS、Vsftpd、Samba配置和应用;实现Jumpserver堡垒机安装、配置、使用和运维体系融合;brctl命令创建管理虚拟网桥;IpNetns创建管理虚拟路由;常见的网络客户端°工具Ping/Lftp/Ftp/Lftpget/Wget;利用Rsync和Inotify实现多台机器数据分发和配置同步;Jumpserver跳板机基本功能应用,认证、授权、审计;https概念及对应的模块mod_ssl应用配置;运维必备Web服务开源解决方案Nginx,全面讲解Nginx程序架构;Nginx内部框架、模块功能、事务处理机制、安装方法、CPU亲缘优化、配置文件;SQL语句增删改查、常用命令使用、用户授权、字符集修改、表、索引、库管理等;对比介绍图形化管理软件,如PhpMyAdmin、SQLyog、Navicat等Keepalived工作方式,Keepalived核心组件、报警机制、切换机制、心跳信息传输等;Centos7上实现LVS集群配置、服务管理、调度算法修改;全面熟悉Ansible用法、以及安装方法、配置文件详解、模块说明、基于私钥认证、批量操作等;Redis扩展方式对比介绍,RedisCluster的基础应用;VmwareEsxi创建Linux及Windows虚拟机,并实现虚拟机跨宿主机迁移;Docker镜像、仓库管理、启动方法、数据卷使用、备份恢复,网络模型、容器间依赖关系、容器资源限制、Docker的监控;待续
环境准备:
1)设置本地国际化语言为en_USUTF-8
[root@c58~]#sed-i's/^\(LANG=\)$/\1en_USUTF-8/'/etc/sysconfig/i18n
[root@c58~]#cat/etc/sysconfig/i18n
LANG=en_USUTF-8
[root@c58~]#LANG=en_USUTF-8
2)更新系统软件包
备份默认yum源:
find/etc/yumreposd-name'repo'-execmv{}{}bak\;
添加163yum源:
redhat5或centos5:
wgethttp://mirrors163com/help/CentOS5-Base-163repo-P/etc/yumreposd
redhat6或centos6
wgethttp://mirrors163com/help/CentOS6-Base-163repo-P/etc/yumreposd
添加epel yum源:
redhat5x 32bit:
rpm-ivhhttp://dlfedoraprojectorg/pub/epel/5/i386/epel-release-5-4noarchrpm
redhat5x 64bit:
rpm-ivhhttp://dlfedoraprojectorg/pub/epel/5/x86_64/epel-release-5-4noarchrpm
redhat6x 32bit:
rpm-ivhhttp://dlfedoraprojectorg/pub/epel/6/i386/epel-release-6-8noarchrpm
redhat6x 64bit:
rpm-ivhhttp://dlfedoraprojectorg/pub/epel/6/x86_64/epel-release-6-8noarchrpm
更新证书:
yum-yupgradeca-certificates--disablerepo=epel
更新系统所有软件包:
yumcleanallyummakecacheyum-yupgrade
下文以redhat5/centos5为例
一、服务最小化原则
关闭所有开机自启动服务,仅开启sshd、crond、network、iptables、syslog(redhat5)、rsyslog(redhat6),然后在此基础上按需添加需要开机启动的服务。
1)关闭所有开机自启动服务
[root@c58~]#foriin`chkconfig--list|awk'{if($1~/^$/){exit0;}else{print$1}}'`;dochkconfig$ioff;done
2)开启基础服务
[root@c58~]#foriinsshdnetworksyslogcrondiptables;dochkconfig$ion;done
3)查看开启的服务
[root@c58~]#chkconfig--list|grep'3:on'
crond0:off1:off2:on3:on4:on5:on6:off
iptables0:off1:off2:on3:on4:on5:on6:off
network0:off1:off2:on3:on4:on5:on6:off
sshd0:off1:off2:on3:on4:on5:on6:off
syslog0:off1:off2:on3:on4:on5:on6:off
二、用户登录限制
1)禁止使用root用户使用远程ssh
[root@c58~]#cd/etc/ssh
[root@c58ssh]#cpsshd_configsshd_config~
[root@c58ssh]#sed-i's/#\(PermitRootLogin\)yes/\1no/'sshd_config
[root@c58ssh]#grep'PermitRoot'/etc/ssh/sshd_config
PermitRootLoginno
2)禁用登录提示信息
[root@c58ssh]#/etc/motd
3)修改ssh的默认监听端口(tcp:22)
#这里修改为tcp的11983端口
[root@c58ssh]#sed-i's/#\(Port\)22/\11983/'sshd_config
[root@c58ssh]#grep'Port'sshd_config
Port11983
4)只允许指定的ip可以ssh (可选)
方法1(使用tcpwrapper):
#只允许1921681240网段的ip使用ssh
echosshd:1921681240/2552552550/etc/hostsallow
echosshd:ALL/etc/hostsdeny
方法2(使用iptables):
#注意,远程操作时需留心,以免把自己也拒绝而导致无法远程连接。如只允许19216810网段的所有ip进行ssh,其他所有ip都拒绝#先允许自己的ip,以防被后面的操作误伤
iptables-IINPUT-s10001-ptcp--dport22-jACCEPT
#允许19216810网段
iptables-I2INPUT-s19216810/24-ptcp--dport22-jACCEPT
#拒绝所有
iptables-I3INPUT-ptcp--dport22-jDROP
#保存iptables的设置:
cp/etc/sysconfig/iptables/etc/sysconfig/iptables~
iptables-save/etc/sysconfig/iptables
最后,重启sshd服务使上面配置生效(不用担心重启时已打开的远程终端连接会断开,重启只会对新开的终端生效)
[root@c58ssh]#/etc/initd/sshdrestart
Stoppingsshd:[OK]
Startingsshd:[OK]
三、用户及命令权限最小化创建一个普通用户tom,将其加入sudo组,该用户作为系统管理员
groupaddsudo#创建sudo组
useradd-Gsudotom#创建tom用户,加入sudo组
passwdtom#设置tom用户的登陆密码
修改sudo配置文件,授权sudo组的用户可以以root身份执行所有命令(可以针对不同用户授予不同的命令执行权限,这里允许执行所有命令,生产环境中系统管理员应该按需为用户分配尽可能少的可执行命令,以实现权限最少化),用户执行的所有sudo操作都将记录在/var/log/sudolog中,以便日后的安全事件排查。执行命令如下:
[root@cloud~]#cat/etc/sudoersEOF
%sudoALL=(root)ALL
Defaultslogfile=/var/log/sudolog
EOF
[root@cloud~]#visudo-c
[root@cloud~]#echolocal2debug/var/log/sudolog/etc/syslogconf
[root@cloud~]#/etc/initd/syslogrestart
注:visudo -c命令用于检查 /etc/sudoers 文件的语法正确性
四、内核安全参数设置vim/etc/sysctlconf#添加如下内容:
#关闭对ping包的响应(可选,一般不建议,因为不方便网络故障时的排查)
netipv4icmp_echo_ignore_all=1
#关闭对广播ping的响应
netipv4icmp_echo_ignore_broadcasts=1
#开启syncookie用于防范synflood攻击,当出现syn等待队列溢出时(syn数量超过tcp_max_syn_backlog的设置值),启用cookie来处理,server在回复syn_ack前会先请求client回复一个序列号,该序列号中要求包含原先syn包中的信息,如果序列号不正确,则server端会忽略此syn连接。
netipv4tcp_syncookies=1
#设置sync_ack的最大重传次数,默认值为5,范围0-255,重传5次的时间大约为180s
netipv4tcp_synack_retries=3
#设置当keepalive打开的情况下,keepalive消息的发送间隔,默认为2小时(由于目前网络攻击等因素,造成了利用这个进行的攻击很频繁,如果两边建立了连接,然后不发送任何数据或者rst/fin消息,那么持续的时间就是2小时,成就了空连接攻击,tcp_keepalive_time就是预防此情形的)
netipv4tcp_keepalive_time=1200
保存退出后,执行sysctl -p命令将以上设置加载到内核使其立刻生效
五、 内核性能相关参数设置(可选)
vim/etc/sysctlconf#添加如下内容:
#设置syn等待队列的长度,对于内存大于128M的机器,默认值是1024,在并发请求较大时,可以调大该值
netipv4tcp_max_syn_backlog
#开启timewait重用。允许将time_waitsocket重新用于新的tcp连接
netipv4tcp_tw_reuse=1
#开启tcp连接中time_waitsocket的快速回收
netipv4tcp_tw_recycle=1
#TCP发送keepalive探测以确定该连接已经断开的次数,默认值为9
netipv4tcp_keepalive_probes=5
#指定探测消息发送的频率,该值乘以tcp_keepalive_probes就可以得到从开始探测到连接被删除所需的时间。默认值为75,也就是没有活动的连接将在大约11分钟以后将被丢弃。(对于普通应用来说,这个值有一些偏大,可以根据需要改小特别是web类服务器需要改小该值,15是个比较合适的值)
netipv4tcp_keepalive_intvl=15
#表示系统同时保持TIME_WAITsocket的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并输出警告信息。默认为180000,改为5000对于squid服务器来说,此参数可以控制TIME_WAIT套接字的最大数量,避免squid服务器被大量的TIME_WAITsocket拖死。
netipv4tcp_max_tw_buckets=5000
#表示向外连接的端口范围。默认值很小:32768~61000,改为1024~65000
netipv4ip_local_port_range=102465000
保存退出后,执行sysctl -p命令将以上设置加载到内核使其立刻生效
查看文件安装路径。
在终端输入:
whereis mysql
回车,如果你安装好了mysql,就会显示文件安装的地址,例如我的显示(安装地址可能会不同)
[root@localhost ~]# whereis mysql
mysql: /usr/bin/mysql /usr/lib/mysql /usr/share/mysql/usr/share/man/man1/mysql1gz
说明:usr/lib/mysql 是指:mysql的安装路径。
centos相关技巧
搭建LNMP
版本截图Nginx是一个小巧而高效的Linux下的Web服务器软件,是由 Igor Sysoev 为俄罗斯访问量第二的Rambler 站点开发的,已经在一些俄罗斯的大型网站上运行多年,相当的稳定。 用Nginx搭建web服务器,比Apache相比,占用更少的资源,支持更多的并发连接,体现更高的效率。
yum -y install gcc openssl-devel zlib-devel pcre-devel
yum -y install 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 bzip2bzip2-devel ncurses ncurses-devel curl curl-devel ssse2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
nginx的安装
添加用户、用户组
groupadd www
useradd -g www -s /bin/falsh -M /www
#安装Nginx tar -zxvf nginx-120targz && cd nginx-120 && /configure --user=www --group=www \ --prefix=/usr/local/webserver/nginx \ --sbin-path=/usr/local/webserver/nginx/sbin/nginx \ --conf-path=/usr/local/webserver/nginx/conf/nginxconf \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-pcre \ --lock-path=/var/run/nginxlock\ --pid-path=/var/run/nginxpid 第三步:更改配置
#更改配置 vi /usr/local/webserver/nginx/conf/nginxconf #修改一些参数,别直接替换文件,这只是一部分 user www events { use epoll; worker_connections 1024; } listen 80;
server_name localhost;
index indexphpindexhtml indexhtm ;root /www/html;
location ~ \(php|php5)${ fastcgi_pass 127001:9000; fastcgi_index indexphp; fastcgi_param SCRIPT_FILENAME /www/html/$fastcgi_script_name; include fastcgi_params; include fastcgiconf;} #检测配置文件 /usr/local/webserver/nginx/sbin/nginx -t #提示表示成功 #nginx: the configuration file /usr/local/webserver/nginx/conf/nginxconf syntax isok #nginx: configuration file /usr/local/webserver/nginx/conf/nginxconf test issuccessful
编译结束后如果没出错的话,make && make install 安装。 安装结束后启动nginx,/usr/local/webserver/nginx/sbin/nginx,然后用netstat -tunpl | grep:80查看端口是否启动。 关闭防火墙,在浏览器里输入1921681276(当前实验主机),看到welcome to nginx!则表示nginx安装成功。 接下来安装mysql,这跟搭建lamp环境时完全一样,下面就不加以说明。 安装PHP:
安装libiconv和libevent
tar -zxvf libevent-1412-stable,tar zxf libiconv-114targz
分别解压,配置安装
/configure && make && make install
0条评论