阿里云多应用部署记录
来源:互联网 发布:南传上座部 知乎 编辑:程序博客网 时间:2024/06/05 08:32
将应用部署到服务器上是发布中的最后一环。理论上应该有专业团队和部署平台来处理。但对于个人开发者,起初只能寒酸一点了。最近需要将多个java应用部署到一台服务器上,将自己的思路和操作记录下来。
安装系统环境请参考上一篇文章:阿里云服务器部署环境搭建
系统环境:OS: centos 6.8/2.6.32-696.3.2.el6.x86_64jdk: 1.8.0_144mysql: 5.1.7tomcat: 8.0.36maven: 3.5.0git: 1.7.1nginx: 1.12.1
tomcat
每个应用单独通过一个tomcat运行,所以需要将tomcat复制一遍,并为每个应用提供单独配置,默认情况下,只需要修改tomcat目录下的conf/server.xml,主要是两个端口:
<!--8080改成了8081,URIEncoding="UTF-8"加上可以避免中文乱码--> <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
<!--8009改成了8010--> <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
因为是多应用,将每个应用的端口记录下来是一个比较好的实践。
代码
代码管理使用阿里云提供的代码仓库:https://code.aliyun.com/
在阿里云代码仓库中建立代码库,并将代码提交到该代码库
在home目录下建立code目录,在该目录下为每个应用建立一个文件夹,比如我的:
/home/lucas/code├── buquan└── ssm
进入项目目录后,将代码git clone
下来,在项目根目录下执行‘mvn clean package’,打包过后的文件在 target目录下
然后将该包拷贝到相应的tomcat的webapps目录下,前提是tomcat是关着的。
cp ./target/receptionaccount.war {tomcat-dir}/webapps/
进入tomcat目录,启动tomcat并查看启动日志
./bin/catalina.sh start & tailf logs/catalina.out
数据库
为每个项目建立单独的数据库,并创建表。
遇到一个问题就是,MySQL的编码问题。我先建表,启动应用,结果运行时报错:
SQL state [HY000]; error code [1366]ERROR: Incorrect string value: '\xE5\x95\x8A\xE5\xAE\x9E...' for column 'problem' at row 1
显然是字符编码集的问题。
处理方式:
查看JDBC连接字符串,配置有
useUnicode=true&characterEncoding=utf-8
,没问题tomcat的配置<Connector>加上
URIEncoding="UTF-8"
,没效果查看数据库字符编码集,果然有问题:
mysql>show variables like 'character_set_%';+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | latin1 || character_set_connection | latin1 || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | latin1 || character_set_server | latin1 || character_set_system | utf8 || character_sets_dir | /usr/share/mysql/charsets/ |+--------------------------+----------------------------+8 rows in set (0.00 sec)mysql>show variables like 'collation_%';+----------------------+-------------------+| Variable_name | Value |+----------------------+-------------------+| collation_connection | latin1_swedish_ci || collation_database | utf8_general_ci || collation_server | latin1_swedish_ci |+----------------------+-------------------+3 rows in set (0.00 sec)mysql> STATUS--------------mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1Connection id: 99Current database: accountingCurrent user: root@localhostSSL: Not in useCurrent pager: stdoutUsing outfile: ''Using delimiter: ;Server version: 5.1.73 Source distributionProtocol version: 10Connection: Localhost via UNIX socketServer characterset: latin1Db characterset: utf8Client characterset: latin1Conn. characterset: latin1UNIX socket: /var/lib/mysql/mysql.sockUptime: 13 days 23 hours 26 min 16 secThreads: 2 Questions: 163 Slow queries: 0 Opens: 30 Flush tables: 1 Open tables: 15 Queries per second avg: 0.0--------------
然后修改数据库的字符编码集
alter database accounting character set 'UTF8';
仍然报错
4. 于是修改MySQL的配置文件,sudo vim /etc/my.cnf
在[mysqld]下加入default-character-set=utf8
我的没有[client]的配置,手动加入[client] default-character-set=utf8
,最终配置为
[client]default-character-set=utf8[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysql# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0default-character-set=utf8[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid
重启MySQL
sudo /etc/init.d/mysqld stopsudo /etc/init.d/mysqld start
果然就生效了:
mysql> show variables like 'collation_%';+----------------------+-----------------+| Variable_name | Value |+----------------------+-----------------+| collation_connection | utf8_general_ci || collation_database | utf8_general_ci || collation_server | utf8_general_ci |+----------------------+-----------------+3 rows in set (0.00 sec)mysql> show variables like 'character_set_%';+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | utf8 || character_set_server | utf8 || character_set_system | utf8 || character_sets_dir | /usr/share/mysql/charsets/ |+--------------------------+----------------------------+8 rows in set (0.00 sec)
但是仍然报错…
5. 再看数据表的配置:
mysql> SHOW FULL COLUMNS FROM user;
Collation全是latin1_swedish_ci
于是修改表字段的数据类型
ALTER TABLE user CONVERT TO CHARACTER SET utf8
再试,成功。
几乎把涉及到编码集的所有地方都修改了。
Nginx配置
这里配置的是将一个域名来的请求转发到8081端口上。上文tomcat配置部分已经将应用端口配置为8081,所以实际上就是把某个域名的请求转发到相应的应用上。
购买和解析域名
首先是去万网购买域名,在阿里云控制台将dns解析到云服务器的A记录公网IP,也就是80端口上,ng监听80端口就能接收到请求了。dns解析会有缓存,时间较慢。
接下来配置ng 的反向代理
我的ng配置路径是/etc/nginx/nginx.conf
,sudo vim打开之。
在http 下配置upstream,即本地的一个应用服务器,再配置server节点,根据来源域名,代理转发到upstream上去。完整配置如下:
upstream hy_front { server localhost:8081; } server { listen 80; #这里配置域名 server_name xxxxxx.top; location / { # 代理转发 proxy_pass http://hy_front; #设置头信息,将头信息转发到被代理的服务器 #转发请求的host信息 proxy_set_header Host $host; # 转发最后一跳的真实ip proxy_set_header X-Real-IP $remote_addr; #转发IP proxy_set_header REMOTE-HOST $remote_addr; #转发跳转IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; index index.html index.htm; }
然后重新加载ng,没有报错就是配置生效了,可以看到效果
sudo /usr/sbin/nginx -S reload
一个坑
这里遇到个坑,就是代理过后,一些css、js等静态文件无法加载,看html是因为head里设置了一个base,这个路径变成了
<base href="http://hy_front:80/receptionaccount/">
跟ng里配的upstream的名字相同,立即想到是因为ng的配置。再看了下jsp中的代码,这base标签的生成代码是:
<% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE html><html lang="zh-cn"><head> <base href="<%=basePath%>">
问题出在request.getServerName()。搜索下,竟然有人遇到同样的问题,按照其思路,加上果然生效。参考文章
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- 阿里云多应用部署记录
- 在阿里云上部署Laravel应用
- 记录web项目部署到阿里云服务器步骤
- 阿里云部署rails应用遇到的问题与解决方案
- 阿里云服务器部署应用环境(nginx服务器)
- flask 部署阿里云
- 部署阿里云服务器
- 阿里云部署笔记
- 阿里云上部署web应用(环境搭建,项目部署)
- 阿里云听课记录
- 阿里云服务器部署otter实现数据双A同步过程记录(1)
- 阿里云服务器部署otter实现数据双A同步过程记录(2)
- 阿里云服务器部署otter实现数据双A同步过程记录(3)
- 阿里云服务器部署otter实现数据双A同步过程记录(4)
- 阿里云服务器部署otter实现数据双A同步过程记录(5)
- 阿里云服务器部署otter实现数据双A同步过程记录(6)
- 阿里云服务器部署架构
- 阿里云部署java环境
- 黄岛区科技服务平台——为企业服务
- Flexbox简介
- 540. Single Element in a Sorted Array(C++)
- GIT 服务器自己搭建问题记录
- 包含n个整数的数组,返回该数组和为最大的子数组
- 阿里云多应用部署记录
- 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法
- LeetCode--Set Matrix Zeroes
- JAVA学习笔记05——windows下搭建集群及session共享问题
- 作业
- (转) Linux下实时查看GPU状态
- 训练fater rcnn时出现path not exist问题
- 关于"XML 文档(2, 2)中有错误:不应有 <xml xmlns=''>"错误
- 欢迎使用CSDN-markdown编辑器