本文记载了在阿里云 ubuntu+java 镜像环境下搭建网站服务器环境中遇到的的错误和解决方案。
作为一个年轻人,是肯定不会去用 alidata 这个现成的环境的。怎么办? 全部删除,立马创建一个 目录 /mydata
然后一个个的环境搭建。
有几点分享下:
tomcat, nginx, mysql 中
tomcat 是最干净的,只需要解压,和配置文件。纯硬盘版~给力。
mysql 是最不干净的,编译安装时要注意参数别输入错误了,一旦错误,不是改改配置就能解决的。比如我粗心的把 utf8_general_ci 写成了 uft8_general_ci。现在每次登入都出弹出 warning。。。。也没法配置。只能有空再装一次了。
nginx 两者之间,一般般,如果用源码安装,要设置 conf 等路径,还是不太习惯。
我在想,为啥不 "所有的开源项目安装的时候,所有文件都生成在 当前目录,安装的时候也安装到当前目录" 呢。纯绿色版多好。
这样所有 windows,unix 用户的体验感觉是一样的。至于一些关键数据的存放,可以自己配置。为啥要在(默认)编译的时候,把不同的文件写在不同地方呢,作为用习惯了 windows 不熟悉这个机制的站长来说,要查很多东西才知道。
希望以后的开源安装越来越绿色 + 硬盘!
所以 Tomcat 是最让我省心的,
一点点小问题:
【1】Tomcat 输出详细的 Error 日志。默认的情况下 Tomcat 的某个 Java 网站如果启动错误了,只会显示
org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart
org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/******] startup failed due to previous errors
为了得到详细的错误信息:
我们可以在网站的 web-INF/classes 目录下新建一个文件叫 logging.properties
输入以下配置:
重启 tomcat,再运行,再进入 logs 查看 error-debug.20XX-XX-XX.log。
- handlers = org.apache.juli.FileHandler,
- java.util.logging.ConsoleHandler
- #############################################################Handler specific properties.#Describes specific configuration info
- for Handlers.############################################################
- org.apache.juli.FileHandler.level = FINE org.apache.juli.FileHandler.directory = $ {
- catalina.base
- }
- /logs
- org.apache.juli.FileHandler.prefix = error-debug.
- java.util.logging.ConsoleHandler.level = FINE
- java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter /
【2】 Mysql 表名大小写区分
如果您的 Java web 项目使用了 Hibernate,Mysql 自动编译安装后,默认区分表名大小写。要设置不区分:需要
vi /etc/my.cnf
然后在 [mysqld] 下面添加:
lower_case_table_names=1
【3】Nginx 均衡负载 + 静动分离
我强烈建议,会用 Windows 的同志,先在 windows 下搭一遍,这样很多问题直接网上搜索,拷贝,就容易了很多,等确认正确后,再移植到没有 GUI 的 Ubuntu 下(of course, 如果您是土豪,完全可以买几个 G 空间,然后为 ubuntu server 装个 GUI···)。
【4】 FTP 文件上传路径配置:Ubuntu 系统的用户管理
命令,系统路径 什么的,捣鼓个一星期,想不记住都难。但是有一些机制,很容易一不小心掉进陷阱。
强烈要记住:所有安装包安装完毕后,一定要 再次 给新生成的文件夹和文件递归授予用户权限。
我开始搭建 Ftp 的时候,新建了用户 admin,登入了之后还是不能上传文件,最后发现是用户权限的问题。
用 chown -R user:group / 目录名
这里我的 user 应该是 admin。
然后还要给这个文件夹的用户赋予权限
chmod -R 777 / 目录
如果你先 给 /A 赋予了 写权限 (4) , 然后当前登入用户是 root,在 / A 下创建了一个文件夹 /B,
这个时候你用 admin 开心的登入了 Ftp,发现 / B 下你还是不能上传文件,原因很显然。 你用 root 创建 B 后,一定要再次 把它的主人 chown 成 admin。
再次执行下
chown -R admin:admin /A 即可
【5】Ubuntu shell 脚本札记
个人觉得 shell 很强大,但是 语法令人蛋疼,所以我决定不喜欢这门脚本语言。会编写简单的 shell 启动脚本就行了。
哪天 shell script 可以用 java script 来编写,那一定是一种进步。
功能是这样的,看看标题里就知道,我们有很多软件需要启动,mysql,ftp,tomcat,nginx。
每次都输入 service nginx stop,tomcat 如果没有注册服务的话,要用 startup.sh 等。很烦怎么办?而且我又是个喜欢打命令加 - 参数的人。
为了统一,只需要新建一个 目录 /mydata/myshell 然后 vi /etc/profile 把这个路径配置到环境变量里。
然后我们就能在 /mydata/myshell 里写脚本啦。 我为每个程序起了一个名字, 非常简单,就是首字母 m f t n
这样,如果我要启动 mysql 只需要:
m
关闭 mysql,只需要
m -s 或者 m -stop
reload,只需要:
m -r 或者 m -reload
其他的类似。
具体脚本:
- # ! /bin/bash echo "-----------------------------------------------------------------------"
- if ["$1" = "-s" - o "$1" = "-stop" - o "$1" = "stop"];
- then echo "[tb_shell] Stoping mysqld..."echo "------------------------------------------------------------"service mysqld stop echo "------------------------------------------------------------"echo "[tb_shell] Mysqld stopped successfully!"elif["$1" = "-r" - o "$1" = "reload" - o "$1" = "-reload"];
- then echo "[tb_shell] Reloading mysqld..."echo "------------------------------------------------------------"service mysqld reload echo "------------------------------------------------------------"echo "[tb_shell] Mysqld reloaded successfully!"
- else echo "[tb_shell] Starting mysqld..."echo "------------------------------------------------------------"service mysqld start echo "------------------------------------------------------------"echo "[tb_shell] Mysqld started successfully!"fi echo "----------------------------------------------------------------------"
if 语句的 多条件判断着实让人蛋疼,注意一下几个原则:可以减少错误:
数字之间的比较,变量不要加引号,比较符号需要用字母形式:
$1 -eq 2 -o $1 -eq 3
字符串之间的比较,变量需要加引号,且比较符号要用 符号形式:
"$1" = "123"
为什么 我的脚本里可以用 -o 呢,因为 每个 表达式都是一个 boolean 数值型的结果,所以要用 -o。不能用 ||
【6】 vsFtp 默认无法访问 叫做 WEB-INF 的文件夹里的内容。
恐怕像我这种 Linux 小白会十分蛋疼。我也是自己发现的。网上也不好找答案。这是 vsftpd 的默认配置,我也不想去研究怎么修改了。反正这正是 linux 系统安全性的体现。
【7】 常用命令
- Ubuntu常用命令:ls,
- cd,
- clear这些还是非常好用的。vi / etc / profile //编辑系统环境变量
- ps aux | grep进程名称 //查看进程
- netstat - pl //查看端口和占用程序这个选项参数很有用,只看端口和 应用程序,而且不会弹出很多,很适合阿里云虚拟机的屏幕高度
- service appname start / stop / reload //服务启动/终止/重启
- chmod - R 751目录 //递归授予目录的权限
- chown - R user: group目录 //递归改变目录的拥有者
- cp - r Adir
- /* Bdir //把Adir下的所有文件拷贝到 Bdir目录下 这个命令很常用,养成这种拷贝方式很好。不要同时掌握几个拷贝方式,给自己弄错的机会。
- mkdir dir //创建一个目录*/
- 搜索文件:find whereis的我劝大家不要用,个人觉得真没用。
- 用文件定位就可以找到某个文件在哪个目录:
- locate文件名
- touch file // 创建一个文件
- Mysql常用命令:mysql - u root - p //数据库登入
- create user 'username'@'localhost'identified by 'password'; //创建用户
- grant select,
- insert,
- update on database.tablename to 'username'@'localhost'identified by 'password'; //后面的密码等都要再写一遍,不然会出大问题,留作思考。
- use database;
- update mysql.user set password = password('password') where user = 'username';更新密码
来源: http://lib.csdn.net/article/java/39134