每天10分钟,解决一个研发问题。

如果你想了解我在做什么,请看《做一个有产品思维的研发:课程大纲》传送门:https://www.cnblogs.com/hunttown/p/10490965.html

今天我们说一下项目发布问题:

网上查的大多比较复杂,配置起来比较麻烦,这里我写一个比较简单的教程。

现在的服务器基本上都是Docker,一个容器发布一个项目,这样项目之间相互影响比较小,也可以独立分配资源。

这里我讲的部署可以在一个容器中部署一个或多个。

一、先来说一下目录结构

export
|-- apps
| |-- www.maoluxia.local
| | |-- maoluxia-cms-www.war
|-- domains
| |-- www.maoluxia.local
| | |-- server
| | |-- bin
| | | |-- start.sh
| | | |-- stop.sh
| | |-- conf
| | | |-- Catalina
| | | | |-- localhost
| | | | |-- ROOT.xml
| | | |-- catalina.policy
| | | |-- catalina.properties
| | | |-- context.xml
| | | |-- logging.properties
| | | |-- server.xml
| | | |-- tomcat-users.xml.default
| | | |-- web.xml
| | |-- logs
| | | |-- catalina.out
| | |-- temp
| | |-- webapps
| | |-- work
| | |-- Catalina
| | |-- localhost
| | |-- ROOT
|-- servers
| |-- apache-tomcat-8.0.32
| | |-- 把tomcat文件拷贝过来即可
| |-- nginx-1.15.6
| | |-- conf
| | | |-- domains
| | | | |-- www.maoluxia.local
| | | |-- nginx.conf
| | |-- 将nginx安装到此目录,其它目录也可以。
| |-- jdk1.8.0_191
| | |-- 将jdk安装到此目录,其它目录也可以。

目录结构非常简单,需要配置的文件也很少,只有红色的部分。

二、上传war包

将打包好的war包上传到 /export/apps 目录下。

直接发布war包有一个缺点,就是你发现你的一些上传资源没有办法保存。有两个办法,一个是保存到Linux的某个目录下,但是这样非常不安全;另一个办法是专门写一个上传程序,通过rpc来实现上传。(推荐第二种,后面的课程我会讲)

三、下载软件

下载tomcat、nginx、jdk并解压到 /export/servers 目录下。

四、配置Tomcat

配置文件我就挨着写,不按顺序了。

1、启动文件

目录:/export/domains/www.maoluxia.local/server/bin/start.sh

#!/bin/bash
export LANG=zh_CN.utf-8
export LOCAL_TOMCAT_HOME=/root/export/servers/apache-tomcat-8.0.32
export CATALINA_BASE=/root/export/domains/www.maoluxia.local/server export JAVA_HOME=/root/export/servers/jdk1.8.0_191
export JAVA_BIN=/root/export/servers/jdk1.8.0_191/bin
export PATH=$JAVA_BIN::/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/bin
export CLASSPATH=.:/lib/dt.jar:/lib/tools.jar
export JAVA_OPTS="-Djava.library.path=/usr/local/lib -server -Xms512m -Xmx1024m -XX:MaxPermSize=256m -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000 -Djmagick.systemclassloader=no -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_BASE/logs -XX:ErrorFile=$CATALINA_BASE/logs/java_error_%p.log"
export JAVA_HOME JAVA_BIN PATH CLASSPATH JAVA_OPTS
$LOCAL_TOMCAT_HOME/bin/startup.sh -config $CATALINA_BASE/conf/server.xml

2、停止文件

目录:/export/domains/www.maoluxia.local/server/bin/stop.sh

#!/bin/bash
export LANG=zh_CN.utf-8
export LOCAL_TOMCAT_HOME=/root/export/servers/apache-tomcat-8.0.32
export CATALINA_BASE=/root/export/domains/www.maoluxia.local/server $LOCAL_TOMCAT_HOME/bin/shutdown.sh -config $CATALINA_BASE/conf/server.xml
sleep 3s
ps -aef | grep java|grep "/www.maoluxia.local/server" | grep -v grep | sed 's/ [ ]*/:/g' |cut -d: -f2|kill -9 `cat`

 3、ROOT文件

目录:/export/domains/www.maoluxia.local/server/conf/Catalina/localhost/ROOT.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/" docBase="/root/export/apps/www.maoluxia.local/maoluxia-cms-www.war" reloadable="true">
</Context>

目的是为了指定war包的路径。

4、server.xml文件

目录:/export/domains/www.maoluxia.local/server/conf/server.xml

<?xml version='1.0' encoding='utf-8'?>
<Server port="9001" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <Service name="Catalina">
<Connector port="8001" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"/>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="s1">
<Host name="localhost" appBase="webapps"
unpackWARs="false" autoDeploy="false"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
</Server>

目的配置监听端口,注意多个项目时:8001、9001端口不能重复。

5、其它文件

其它文件不需要配置,直接下载下来解压使用。下载地址

6、其它目录

其它目录虽然没文件,但是必须有,因为在启动的时候会去读这些目录,找不到会报错。

五、Nginx配置

1、首先在conf目录下建立domains文件夹,里面存放nginx配置文件片断。

如:www.maoluxia.local

upstream www_maoluxia {
server 127.0.0.1:8001 weight=10 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name www.maoluxia.com;
access_log /root/export/servers/nginx-1.15.6/logs/www.maoluxia.local/www.maoluxia.local_access.log main;
error_log /root/export/servers/nginx-1.15.6/logs/www.maoluxia.local/www.maoluxia.local_error.log warn; location / {
proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;
proxy_set_header Host $host;
proxy_pass http://www_maoluxia;
}
location /logs/ {
autoindex off;
deny all;
}
}

注意:这里的8001端口要和tomcat中配置的一致。

如果不配置代码片断,在nginx.conf中直接配置也可以,只是会显得不太整洁。

2、nginx.conf文件

user                                nobody;
worker_processes 2;
error_log /root/export/servers/nginx-1.15.6/logs/nginx_error.log warn;
pid /root/export/servers/nginx-1.15.6/run/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
server_tokens on;
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"'; server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 300m;
sendfile on;
tcp_nopush on;
keepalive_timeout 0;
tcp_nodelay on;
client_body_buffer_size 512k;
fastcgi_intercept_errors on;
proxy_connect_timeout 90;
proxy_read_timeout 180;
proxy_send_timeout 180;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_intercept_errors on;
server_name_in_redirect off;
proxy_hide_header X-Powered-By;
gzip on;
gzip_min_length 100;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 9;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 506 = http://www.maoluxia.com/nopage; include domains/*; server {
listen 80 default_server;
server_name localhost;
location / {
rewrite ^/(.*) http://www.maoluxia.com permanent;
}
}
}

主要看文件中两行红色的部分:

第一行红色的代码是 权限,根据自己的需要配置;

第二行红色的代码是 读取上面配置的代码片断;

六、启动顺序

到此,文件都已经配置完成。

首先启动:/bin/start.sh

然后启动:/sbin/nginx

今日总结:

如果没有足够的资源,那么这种配置方法比较合适,在一台机器上部署多套Java工程,通过nginx代理进行访问。

做一个有产品思维的研发:部署(Tomcat配置,Nginx配置,JDK配置)的更多相关文章

  1. 做一个有产品思维的研发:Scrapy安装

    每天10分钟,解决一个研发问题. 如果你想了解我在做什么,请看<做一个有产品思维的研发:课程大纲>传送门:https://www.cnblogs.com/hunttown/p/104909 ...

  2. linux服务器部署tomcat和Nginx

    项目需要,申请了三台测试机器,好在测试机里面光秃秃的什么都没有,我就可以好好的学习一把玩一把了!接下来以图文的形式讲一下我所碰到的坑以及小小的收获吧! 一.准备工作 首先你得有一台可以玩的linux服 ...

  3. 部署Tomcat及nginx负载均衡

    Web应用服务器的选择   (1)IBM的WebSphere及Oracle的WebLogic 性能高,但价格也高   (2)Tomcat 性价比高 Tomcat服务器是一个免费的开放源代码的Web应用 ...

  4. 做一个新产品需求,体验的分析文档?(例:喜马拉雅FM)

    2.1 战略层 2.11 产品定位: 一款产品覆盖面广,收听节目种类齐全,资源丰富的电台APP. 以PGC为主流,通过合作方式吸纳专业的电台人,节目人,行业名人分享内容. 融合UGC,满足人们在空闲时 ...

  5. 基于thinkphp5框架做一个可以区别开发、测试、生产三种环境的配置加载

    在日常的开发测试中我们经常会遇到本地开发和测试或者线上配置参数不同的场景,必要你要是使用一个三方的支付,它的本地测试和线上的key值或者账号存在不同.最基本的做法是本地用测试参数,提交到测试的时候再改 ...

  6. linux下部署tomcat服务器之安装jdk

    如果一开始安装过jdk的可以卸载 rpm -qa | grep java rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x8 ...

  7. 阿里云部署 Flask + WSGI + Nginx 详解

    抵不住朋友的诱惑,今天终于入手了一台阿里云服务器,是Ubuntu 1.4 32位版本,最初考虑是用来尝尝鲜只是买了个最低配的,价格算起来与在国外买个空间的价格相当吧(可能一年才贵100多),但用起来感 ...

  8. [亲测]ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

  9. [亲测]七步学会ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

随机推荐

  1. python之re正则简单够用

    0. 1.参考 Python正则表达式指南 https://docs.python.org/2/library/re.html https://docs.python.org/2/howto/rege ...

  2. WPF中的逻辑树和可视化树

    WPF中的逻辑树是指XAML元素级别的嵌套关系,逻辑树中的节点对应着XAML中的元素. 为了方便地自定义控件模板,WPF在逻辑树的基础上进一步细化,形成了一个“可视化树(Visual Tree)”,树 ...

  3. 多线程处理list

    package com.zhx.web.invoice.service; import java.util.*; import java.util.concurrent.Callable; impor ...

  4. Mapreduce概述和WordCount程序

    一.Mapreduce概述 Mapreduce是分布式程序编程框架,也是分布式计算框架,它简化了开发! Mapreduce将用户编写的业务逻辑代码和自带默认组合整合成一个完整的分布式运算程序,并发的运 ...

  5. 2018-2019-1 20189201 《LInux内核原理与分析》第五周作业

    甜死人的图片 一.书本第四章知识总结[系统调用的三层机制(上)] 无参数系统调用 依次通过c语言和内嵌汇编的c语言实现time()函数中封装的系统调用. 用户态.内核态和中断 用户态:在低的执行级别下 ...

  6. Java 实现视频下载功能

    public static boolean httpDownload(String httpUrl, String saveFile) { // 1.下载网络文件 int byteRead; URL ...

  7. 【整理】Java 8新特性总结

    闲语: 相比于今年三月份才发布的Java 10 ,发布已久的Java 8 已经算是老版本了(传闻Java 11将于9月25日发布....).然而很多报道表明:Java 9 和JJava10不是 LTS ...

  8. Havel-Hakimi定理的方法来构图

    给定一组非负数字,(数字为节点的度),判断该组数字能不能构成图. Havel-Hakimi定理: 将序列按照从大到小排序之后,从第二个数开始到第一个数的长度+1为止,依次减1.每操作一次,删掉第一个数 ...

  9. 个人作业4——alpha阶段个人总结

    一.个人总结 类型 具体技能和面试问题 现在的回答(大三) 语言 拿手的计算机语言(偏web前端,PC/Mobile App) java 语言 拿手的计算机语言(偏后端,数据处理,网站后台,机器学习等 ...

  10. 线段树合并+并查集 || BZOJ 2733: [HNOI2012]永无乡 || Luogu P3224 [HNOI2012]永无乡

    题面:P3224 [HNOI2012]永无乡 题解: 随便写写 代码: #include<cstdio> #include<cstring> #include<iostr ...