前言:被linux和java虐了快1年,笔者的内心是崩溃的,这一年的经历,更加坚定了拥 护.NET之心,微软对于开发者真的是太友好了,无论从工具到文档,乃至技术应用性都是那么为用户着想,笔者认同一种说法JAVA之所以占有比例高的原因是JAVA从开发工具到部署环境都是免费的,高自由度的JAVA也意味着更多的折腾,而.NET的开发,2015年之前是没有community版之前,搞.NET开发是要钱的而且是很多钱(VS、WINDOWS、MSsql),这也是大公司倾向于JAVA的原因之一吧,可能国内盗版横行并不能感受到国外对版权对知识产权的重视,很多开发者并不觉得.NET开发很花钱,单一个VS 2017 professional版本就要3k5软妹币以上,而且是每年,服务器系统以及MSsql一整套微软的解决方案花钱可真不低。微软也意识到了这个问题,于是.NET CORE
来了,不仅开源
而且跨平台
(WINDOWS、LINUX、MAC OS),.NET CORE前不久已经发布了2.0版本,号称已经兼容了.NET Framework下nuget的70%的类库,并且开发了强大的Kestrel
服务器应用来替代IIS用以跨平台部署。全球90%的服务器使用的都是liux系统,而且docker的兴起,.NET CORE在5年后应该会有较大的需求,所以,linux系统的操作和使用也即将成为.NET CORE开发者一条必经之路,学好用好linux是必须的,笔者未来(预计半年内)可能会出个.NET CORE系列,有兴趣的可以关注下。言归正传,之前笔者学习了ubuntu没多久之后,又用上了RHEL,由于RHEL企业版是收费的,故而经常用的是与RHEL同根同源版本CentOS,当前时间2017年7月,可以下到CentOS 7.3也就是对应RHEL 7.3(两者区别知乎上讲得更清楚)。以下记录了笔者遇到的几个坑,本文仅供自用,不足之处请谅解,本文不定期更新:
1.Linux常用小技巧
a.
vi
的使用,一般linux的发行版本都会自带这个编辑器,替代品就很多啦,vim、nano
等。注意linux是严格区分大小写
的,命令是vi xxx/xxx
意为使用vi
打开某文件,shift+g
或者大写G
是直接跳转到最后一页,linux有很多用同字母大小写来实现对反操作的命令,我想你已经猜到了小写g
则就是跳转到第一页。
在vi编辑器(vim也是)下分编辑模式和非编辑模式,默认打开的是非编辑模式,即只可以查看不能修改,如果需要修改文件,按i
(小写)进入编辑模式(左下角有会---INSERT---
的状态提示)才能修改,修改时候注意你的光标所在位置哈,刚开始很不习惯容易改到其他地方,编辑完成之后先按ESC键
退出编辑模式,再输入:wq
进行保存,如果你误操作了,要放弃,则先按ESC键
退出编辑模式,再输入:q!
即可,vi的其他几个常用命令,非编辑模式下输入:q
正常退出vi,非编辑模式输入/xxx
进行模糊查找,查找下一个是小写n
,查找上一个是大写N
。记命令要这么记哈,q
是英文quit
(退出)的首字母,linux里有大量的这种英文首字母简写,明白单词分分钟就记住怎么用了,wq
=write quit
(写入、退出),n
=next
(小写下一个,取反上一个则是大写)。更多vi命令b.
WinSCP
是一款连接linux的软件,不仅提供了SFTP的功能,也提供了PuTTY
的bash终端直连linux,这个东西比你直接在linux下操作要方便很多,什么光标选择、粘帖复制易如反掌。要使linux完全使用上WinSCP的全功能你需要安装SSH
,CentOS 7.3下为yum -y install openssh-server
,装完之后记得开启SSH的root远程连接权限,不然很多写入操作你都没办法操作,编辑/etc/ssh/sshd_config
文件,注意这里是sshd_config
不是ssh_config
,多了一个d
,linux下很多这种同一个东西不同名字的坑,找到PermitRootLogin
这一行,将之修改为PermitRootLogin yes
,完了记得需要重启sshd
服务才能生效,命令service sshd restart
,完成之后就可以用WinSCP连接了。如下图,协议默认SFTP,端口默认22c.使用虚拟机时,网络部分建议使用NAT模式,该模式下可以使用主机的网卡直接出去,简单容易操作
-
d.常用指令及对应软件命:
e.不知道命令怎么用,一般都会有help帮助,例子
vi --help
,命令后加--help
就会显示f.按2次tab键会列出当前文件夹下的所有文件,如果输入了xxx,再按两次tab则会自动补全或列出以xxx开头的文件夹及文件
-
g.常用shell命令
h.linux默认路径为绝对路径,及任意路径下
cd /xxx
意味着你将转到系统根目录下的xxx文件夹,如果要到当前目录下的xxx文件夹则需要使用cd ./xxx
这样的表示方法,./
即表示当前文件夹下,上一级文件夹下的xxx文件夹则为../xxx
,可以依次类推
2.Linux 代理设置
a.
/etc/profile
为用户变量配置,/etc/environment
为系统变量配置,当同一变量出现在两个文件中时,以/etc/profile
用户变量配置为准,linux各种环境配置文件看这里-
b.使用root帐号登录之后,先修改用户变量配置,也就是
/etc/profile
文件,在最后添加以下代码:MY_PROXY_URL="http://x.x.x.x:xxx" HTTP_PROXY=$MY_PROXY_URL HTTPS_PROXY=$MY_PROXY_URL FTP_PROXY=$MY_PROXY_URL http_proxy=$MY_PROXY_URL https_proxy=$MY_PROXY_URL ftp_proxy=$MY_PROXY_URL export HTTP_PROXY HTTPS_PROXY FTP_PROXY http_proxy https_proxy ftp_proxy
c.保存之后,使用
source /etc/profile
重新加载一下配置-
d.修改yum的配置文件,
/etc/yum.conf
,在最后添加以下代码:proxy=http://x.x.x.x:xxx
传送门一篇较详细的配置
3.xxx is not in the sudoers file. This incident will be reported
,某用户不是sudoer
a.使用root帐号登录之后,为
/etc/sudoers
文件添加修改权限(为了安全性默认是只读),使用这个命令chmod u+w /etc/sudoers
b.编辑
/etc/sudoers
文件,找到root ALL=(ALL) ALL
这一行,然后另一起行,添加代码:xxx ALL=(ALL) ALL
(xxx是你的用户名),然后wq
保存退出c.记得撤销该文件的修改权限哈,命令为
chmod u-w /etc/sudoers
传送门笔者当时搜到的有效文章
4.Could not retrieve mirrorlist
,无法检索镜像列表
a.这个问题笔者在CentOS 7.3 minimal版本下遇到,原因是你网卡没开
b.编辑
/etc/sysconfig/network-script/ifcfg-ens33
这个文件,找到ONBOOT=no
这一行,将它改为ONBOOT=yes
,保存退出c.然后使用
dhclient
刷新配置即可
笔者当时搜到的有效文章
5.JAVA环境的搭建(Apache+Tomcat+JRE/JDK)
以下操作,笔者建议你直接登录root帐号进行,否则出现的root权限要求会很多
a.这是笔者在ubuntu里欠下的坑,一直没忙赢写就又跑来CentOS下挖坑了,两者大同小异,凑合看吧,建议你按JRE/JDK->Tomcat->Apache的顺序安装
-
b.JRE/JDK的安装
如果只是服务器跑JAVA应用,安装JRE就够了,JDK全称是Java Development Kit(java开发套件),JRE全程是Java Runtime Environment(java运行时环境),从字面意思就可以区分你什么环境该装啥了1.装JRE/JDK,我
建议使用rpm安装
,其他方法笔者在安装、卸载时候都遇到各种问题2.以JRE1.8.0_131为例,首先下载rpm安装包,命令
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jre-8u131-linux-x64.rpm
,安装后默认路径是/usr/java/jre1.8.0_131
,其他JDK/JRE地址3.安装rpm,命令
rpm -ivh jre-8u131-linux-x64.rpm
4.检查JRE/JDK版本,命令
java -version
5.配置
JAVA_HOME
环境变量,编辑/etc/profile
文件,在末尾追加export JAVA_HOME="/usr/java/jre1.8.0_131
,退出编辑器后重新加载该文件source /etc/profile
6.卸载用rpm方式安装的JDK/JRE,命令
rpm -e jre-8u131-linux-x64.rpm
7.rpm命令详解,
ivh
为install(安装)、verbose(输出详细信息)、hash(打印hash值)
,rpm
命令可以跟很多参数,有兴趣使用rpm --help
查看,e
的全拼为erase
(删除/抹除)此处不同于常见的remove、uninstall
这类用词,学linux也是学计算机英语的好机会,更多rpm命令看这里
-
c.Tomcat的安装
笔者建议下载tar.gz压缩包,解压安装1.以tomcat8.5.16为例,先下载
tomcat
,命令wget --no-check-certificate --no-cookies http://www-eu.apache.org/dist/tomcat/tomcat-8/v8.5.16/bin/apache-tomcat-8.5.16.tar.gz
2.解压
apache-tomcat-8.5.16.tar.gz
,命令tar -xvzf apache-tomcat-8.5.16.tar.gz
3.开启关闭命令工具在
apache-tomcat-8.5.16/bin/
目录下,一个start.sh
一个shutdown.sh
,使用sh ./apache-tomcat-8.5.16/bin/start.sh
启动tomcat4.检测tomcat是否开启,命令
ps aux|grep tomcat
,将可以看到进程信息,该命令会产生默认的一个进程信息(图中39900),只有带路径的进程信息才是正在运行的tomcat进程5.关闭tomcat的两种方式,一是用
bin/shutdown.sh
,二是直接杀掉tomcat进程kill -9 <pid>
,-9
是数字9
,pid即标注出来的进程数字id,示例:kill -9 31630
6.tomcat默认端口8080,需要开防火墙,临时开启命令
firewall-cmd --add-port=80/tcp
,然后重新加载防火墙配置firewall-cmd --reload
,最后检查8080端口是否已经生效sudo firewall-cmd --list-all
7.如果开了8080端口,那么则可以直接使用
x.x.x.x:8080
访问,x.x.x.x为你的linux所用ip,顺利看到下图则表示你的tomcat成功搭建完成8.关于
war
包的上传与部署,将编译后的war
包上传至./apache-tomcat-8.5.16/webapps/
文件夹下即可,tomcat在启动时会自动部署,另外一种方式是使用Manager App
功能(如下图),但笔者并不建议开启该功能(基于服务器安全原因考虑),有兴趣的请看这里
-
d.Apache的安装
apache官方并没有提供官方编译版文件,只提供了源码,你可以下载后自行编译,或者使用官方推荐的第三方编译版本安装,笔者最佳实践是使用yum或apt
直接安装,当前笔yum可使用的apache版本为2.4.6
1.apache在linux大部分系统里的软件名叫
httpd
,命令yum -y install httpd
,如果需要使用SSL(俗称https)的话,可以一起把mod_ssl
这个module安装了yum -y install mod_ssl
2.打开防火墙端口(永久性),
firewall-cmd --permanent --add-port=80/tcp
,这里只开了80端口,如果需要使用SSL,则还需要开启443端口firewall-cmd --permanent --add-port=443/tcp
3.重新加载防火墙配置
firewall-cmd --reload
并检查端口firewall-cmd --list-all
4.检查apache是否开启
service httpd configtest
,当看到Syntax [OK]
则表示已经正常开启,如果不正常则需要重启一下apache5.在CentOS下启动
start
、重启restart
、关闭stop
,apache需要调用systemctl
,示例:systemctl restart httpd
6.如果已经打开了80端口,则可以直接使用
x.x.x.x:80
访问(:80可省略
,默认80端口),x.x.x.x为你的linux所用ip,顺利看到下图则表示你的apache成功搭建完成7.在CentOS中,apache默认安装后的路径为
/etc/httpd
-
e.Apache与Tomcat整合
首先说一下实现Apache与Tomcat整合目前主流有2种方案,一种是使用代理及反向代理
的方式,另一种则是使用AJP的方案
,个人最佳实践是使用方案一:代理及反向代理
,这样做可以方便做负载均衡和集群,后者方案配置也麻烦,当然后者的优点是啥,笔者了解到的是AJP是二进制的协议,速度快一点,具体没有实际对比过,二者从实际操作上来说,前者更容易上手,利用Apache处理http的强大功能,可以按要求处理之后再转发给tomcat-
1.在Apache的
/etc/httpd/conf.d
文件夹,注意是conf.d
,该文件夹下的所有*.conf
文件都会被apache当作配置文件加载,创建你自己的配置文件即可,示例:<VirtualHost *:80> ProxyPreserveHost On ProxyPass / http://localhost:8080/xxx/ ProxyPassReverse / http://localhost:8080/xxx/ ErrorLog /var/log/httpd/xxx-error.log CustomLog /var/log/httpd/xxx-access.log common </VirtualHost>
2.如果完成以上操作仍未能通过apache连同tomcat,请查看
/var/log/httpd/xxx-error.log
错误日志文件,在CentOS 7.3 minimal版本中,笔者遇到[error] (13)Permission denied: proxy: AJP: attempt to connect to x.x.x:8080
的问题(该错误信息来源于配置的/var/log/httpd/xxx-error.log
),这里下需要使用/usr/sbin/setsebool -P httpd_can_network_connect 1
命令即可修复
-
f.关于Aapche配置SSL
我觉得我看到的文章里微软为.NET CORE写的apache+kestrel的文档是简洁明了而且有效的了,有兴趣的朋友可以看一下,笔者配置apache时参照这篇文章完成的,国内大部分都是AJP的方案,很繁琐