Debian 11 服务器宝塔面板搭建(二):安装宝塔及Tomcat配置技巧

2023-05-10 16:36 阅读

使用宝塔面板,一开始我是鄙视的、拒绝的。作为一个运维人员,更喜欢自己控制所有的事情,一方面更有掌控感,出了问题更容易解决;另一方面显得自己更有实力。

但是多年的运维经历磨灭了往日的激情,能够让运维变得更轻松、简单,比掌控感和技术实力更重要。毕竟谁不想把省下的时间用来陪家人(da you xi)呢。

不得不承认,图形化的界面确实容易操作的多,很多东西一目了然,免去了很多记忆负担和敲键盘敲到手抽筋的窘境。

安装宝塔面板

# 切换到root用户
sudo -i
# 或
su - root

# 这段代码还是到宝塔官网复制比较好,可能会有所变动
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh ed8484bec

安装好后,记得把宝塔面板地址、用户名、密码记录下来。

去掉宝塔面板广告

进入宝塔后台看到一堆广告,总有一种在用盗版软件的感觉。去掉感觉好多了。

首页广告

打开/www/server/panel/BTPanel/static/js/index.js文件

recommend_paid_version函数内容删除。

并将以下代码注释掉:

/*
product_recommend.init(function(){
  index.get_product_status(function(){
    index.recommend_paid_version()
  });
  index.get_index_list();
})
*/

取消以下代码注释:

setTimeout(function () { _this.get_index_list() }, 400)

软件商店广告

打开/www/server/panel/BTPanel/static/js/soft.js文件

修改

if (bt.get_cookie('productPurchase') != null) return false

改为

if (bt.get_cookie('productPurchase') == null) return false

关于极速安装和编译安装

按照宝塔官方的建议,测试环境使用极速安装,生产环境使用编译安装。官方解释说编译安装更稳定、性能更好,但耗时长(编译需1-3小时)、占用硬盘空间大(需下载源码)。话虽这么说,但极速安装就是类似平时yum install xxx的安装方式,如果这就不稳定、性能差了,那没用宝塔面板时,运维是怎么活过来的?

后来有宝塔官方的运维解释到,编译安装主要是为了兼容更多的Linux系统(在某些Linux系统上不支持极速安装),且在某些老旧的机器上,编译安装可以更好的适应CPU的指令集,性能确实有可能更好一些。但在绝大部分的机器上,性能是没有区别的。

宝塔官方论坛:宝塔编译安装和极速安装,在性能上差距多少啊

安装推荐软件

根据需要安装nginx、mysql、php、phpmyadmin、ftp软件。

Tomcat

宝塔面板开始是设计给php用户使用的,java和tomcat方面是后来补上去的。可以看出相关功能明显比较薄弱且设计不合理。这些都需要我们手动改进。

如果简单使用,按照宝塔官方的java教程部署,也没有问题。只是nginx会把所有请求发送给Tocmat处理,包括静态文件(如图片、js、css),而Tomcat处理静态文件肯定没有Nginx性能好。

另外SpringBoot启动方式设计的还是没问题的。可能是因为直接使用Tomcat的用户越来越少,宝塔官方也懒得改进了。

安装Tomcat

网站 - Java项目 - Tomcat管理中安装Tomcat,一般只安装Tomcat9即可。

安装后需要停止Tomcat,这种默认方式运行的Tomcat极不合理,每个项目会相互影响。

宝塔面板的Tomcat位置

  • 默认Tomcat: /usr/local/bttomcat
  • 用户Tomcat:/www/server/bt_tomcat_web

修改默认Tomcat

默认Tomcat虽然强烈不建议使用,但会作为原始文件,复制到用户Tomcat目录上。因此在默认Tomcat上做的修改也会自动带到用户Tomcat上,免得每次都到用户Tomcat上修改。当然每个项目如果有不同配置,就可以到用户Tomcat里修改。

默认Tomcat有两个,tomcat9tomcat_bak9,不知道这两个有什么区别,真正用的是哪个,反正都改就对了。

  • 删除logs目录下所有文件及文件夹
  • 删除webapps目录下所有文件及文件夹,ROOT文件夹也不保留
  • 删除work目录下所有文件及文件夹

修改conf/logging.properties,只保留一个handlers。

##handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
handlers = java.util.logging.ConsoleHandler

修改conf/server.xml,把Host下的日志配置也删了。

<Host appBase="webapps" autoDeploy="false" name="localhost" unpackWARs="true">
</Host>

修改bin/daemon.sh,这是Tomcat的启动文件。

# 修改JAVA_HOME。默认使用的是OpenJDK 8,可以换成自己的喜欢的JDK
##JAVA_HOME=/usr/local/btjdk/jdk8
JAVA_HOME=/opt/java/jdk8/default
# 修改内存配置。按自己的需要修改
JAVA_OPTS='-Xms256m -Xmx384m'

添加Java独立项目

点击网站 - Java项目 - 添加Java项目,选择独立项目。

项目域名不要直接填写域名,而要在域名后面加上.tomcat。比如域名是www.ujcms.com,则填写www.ujcms.com.tomcat。因为这里只是配置一个tomcat,真正的域名要留给添加静态网站时使用。静态网站使用反向代理访问tomcat服务,所以java项目里的tomcat并不需要直接对外服务。

用户Tomcat配置可以修改/www/server/bt_tomcat_web目录下对于的Tomcat。

其中conf/server.xml一般在宝塔Tomcat项目里修改。

这里的配置特别重要,删除其它Host配置。并使用这里的配置:

<Host appBase="webapps" autoDeploy="false" name="www.ujcms.com.tomcat" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
  <Context docBase="/www/wwwroot/www.ujcms.com.tomcat/ROOT" path="" />
</Host>

对比原有配置:

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt" />
</Host>
<Host autoDeploy="true" name="www.ujcms.com.tomcat" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
  <Context crossContext="true" docBase="/www/wwwroot/www.ujcms.com.tomcat" path="" reloadable="true" />
</Host>
  • 原配置使用了两个Host,首先时浪费资源,其次如果域名不匹配,将会访问到第一个Host
  • 原配置的autoDeploy="true" reloadable="true"很多时候不合适。crossContext="true"一般也不能这样配。
  • 新配置支持上传ROOT.war并自动解压。

注意:程序必须上传到/www/wwwroot/www.ujcms.com.tomcat/ROOT目录下,或者将ROOT.war上传/www/wwwroot/www.ujcms.com.tomcat目录,重启Tomcat后,会自动解压并运行。

SpringBoot项目

可以将jar解压后再运行。这样性能会更好一些。

应该设置项目位置为下一级目录,如:/www/wwwroot/demo.ujcms.com.springboot/ROOT/,这样工作目录就是/www/wwwroot/demo.ujcms.com.springboot/ROOT,jar解压版才能正常运行。但是解压版无法修改配置,要修改只能删掉重建。

/opt/java/jdk11/default/bin/java -Xmx512M -Xms256M org.springframework.boot.loader.JarLauncher --server.port=5408

添加静态站点

上面的Java项目的作用是启动一个Tomcat服务,并不直接对外服务,所以用了一个无法访问的域名www.ujcms.com.tomcat

按照宝塔面板的设计,Java项目里也带了nginx配置。但是Java项目里的Nginx的配置功能太弱了,虽然可以直接修改nginx配置,但只要稍微修改一下相关内容(如增加域名),自行修改的nginx配置就会被覆盖,风险太大。所以这里另外增加静态站点,使用反向代理来访问Tomcat服务。

点击网站 - PHP项目 - 添加站点

可是我不需要运行php程序?我开始也被这个名字误导了,宝塔面板把静态站点也放到PHP项目里了。

这里使用真正用来访问的域名,并且在PHP版本里选择纯静态

然后添加反向代理

修改反向代理配置文件

注意其中的端口号http://127.0.0.1:10001,填写上一步中的Tomcat端口号。

#PROXY-START/
location /WEB-INF/ {
    deny all;
}
# 如果以文件名方式访问目录,则在URL结尾加/,进行重定向。如 https://www.ujcms.com/cp 重定向至 https://www.ujcms.com/cp/
if (-d $request_filename) {
    rewrite ^(.*)([^/])$ https://$host$1$2/ permanent;
}
location / {
    try_files $uri $uri/index.html $uri/index.htm @proxypass;
}
location @proxypass {
    proxy_pass http://127.0.0.1:10001;
    proxy_set_header Host www.ujcms.com.tomcat:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    add_header X-Cache $upstream_cache_status;
    proxy_set_header X-Host $host:$server_port;
    proxy_set_header X-Scheme $scheme;
    proxy_connect_timeout 30s;
    proxy_read_timeout 86400s;
    proxy_send_timeout 30s;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
#PROXY-END/

修改网站目录,改到Tomcat的ROOT目录下。修改网站目录后,记得点保存按钮。

这里网站目录改为/www/wwwroot/www.ujcms.com.tomcat/ROOT

删除不必要的默认文档

点击SSL申请SSL证书,可以选择Let's Encrypt免费证书。并且建议使用DNS验证,这样在网站开启重定向等功能后,还可以正常续签,否则开启重定向功能可以导致续签失败。使用DNS验证还支持泛域名解析,非常好用。

配置默认网站

默认情况下,如果服务器接收到未配置SSL证书的https请求,会使用一个已配置SSL证书的网站作为响应,这就是所谓的HTTPS窜站。这会导致IP地址泄露,以及影响搜索引擎收录的权重。

可以配置一个默认站点

并给一个自证SSL证书

密钥(KEY)

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDXyF6m81zOeoOPvfk6nGKtyfczRG6/yeSkcc+66vGvq0s8oB7V
cCzLl1YcNsru3ixelPR2z1zvjKqa9/Aqh8+TvP1kGGbLD/mynjnj8l+0vVzZ+vnz
AH0RN9fpqzlpHmFBHQzQ25AtIAH8pXOL1541YN0TNPRA3kHUCL0FH8CkwwIDAQAB
AoGAQ4ejh6AV5VCWJ8AOZXdXsofIYzUBa+glNAmiNx8b8BwteZWq0KVAf56nBkFn
lQXW4OrA7wXKUfW11rXNZaIHJePJXv1swkN9+Em18Hon6BrtcqnKAwzAbhok3SzY
IVjI/zrgOABH6+ii77xCRBzI1itVPNN88DAUHC7PYLYiaaECQQD7PSoij37+kMc/
wPeEkl9r3vzU0OrsCsjU8Ev714OaoL/SIuAh6nsiRh9rcbUrrpGSSzIcmsk9HMDa
hXBNkNl5AkEA298yQvssaUc4tbEWxAVfd9DsHJdCdbXfgf9Dy5/tpCzYncY7T0du
VVHqKu3jXWoMc5XlesiCOerU/DIlMM8dGwJBANQn7GLO5iC1xWvS2bF7oVSIMtzL
pvW4jaszWBbNAPccc59RkA9T4LMqn/GtTZ4bhhYRpbl+BB21IC3nrNPzU5ECQG8T
Ln0QDruQs2F2eR3F6RjKfr1i3LxCiQtPPZycypzp2vS5tDS0zVRk8XuGehoy/N9X
lnqU2NURgU92tbsWpokCQQDdc9tU3B/OM/YfzUNwvOLmUVwrJX6PFSFsOn+XHrCC
q9LcGEAHyzaf5GEWje84ee4rkv5oaZcwll3dg4IioBnC
-----END RSA PRIVATE KEY-----

证书(PEM格式)

-----BEGIN CERTIFICATE-----
MIIBkjCB/AIJAI3bCYqa39hiMA0GCSqGSIb3DQEBBQUAMA0xCzAJBgNVBAYTAiAg
MCAXDTE4MTEyNDA5MDMzOFoYDzIwOTkxMjMxMDkwMzM4WjANMQswCQYDVQQGEwIg
IDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA18hepvNcznqDj735Opxircn3
M0Ruv8nkpHHPuurxr6tLPKAe1XAsy5dWHDbK7t4sXpT0ds9c74yqmvfwKofPk7z9
ZBhmyw/5sp454/JftL1c2fr58wB9ETfX6as5aR5hQR0M0NuQLSAB/KVzi9eeNWDd
EzT0QN5B1Ai9BR/ApMMCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBiqHZsuVP09ubT
GzBSlAFEoqbM63sU51nwQpzkVObgGm9v9nnxS8Atid4be0THsz8nVjWcDym3Tydp
lznrhoSrHyqAAlK3/WSMwyuPnDCNM5g1RdsV40TjZXk9/md8xWxGJ6n1MoBdlK8T
H6h2ROkf59bb096TttB8lxXiT0uiDQ==
-----END CERTIFICATE-----

并点击默认站点,选择该站点为默认站点。

修改MySQL配置

# innodb内存,对性能影响巨大,一般不应少于1024M。如果是专用数据库服务器,可以设置为物理内存的50%-75%
innodb_buffer_pool_size=1024M
# innodb日志文件大小。最小应为128M,建议设置为1024M(亚马逊云建议为600M,腾讯云建议为1000M),甚至2G-15G,默认为48M。该配置在MySQL8.0.30以后使用innodb_redo_log_capacity代替,值应该设置为innodb_log_file_size*2=2048M。
innodb_log_file_size=1024M
# 取消这项配置,感觉太大了,默认64M应该够了。
##max_allowed_packet=100G
# 统一设置成大小写敏感(这项配置无法更改,修改后MySQL启动失败)
# 需要先清空MySQL数据文件夹`/www/server/data`里所有的文件和文件夹,再初始化`/www/server/mysql/bin/mysqld --initialize`。要注意文件夹的所属用户`chown mysql:mysql /www/server/data -R`。
#lower_case_table_names = 0

宝塔面板其它配置

  • 配置宝塔端口、文件夹、用户名和密码
  • 配置phpmyadmin。关闭原生访问地址,开启ssl
  • 修改ftp端口

参考资料

宝塔Linux面板安装教程
腾讯云端口放行教程
宝塔面板手册
宝塔面板SSL设置浏览器信任自签证书
腾讯云端口放行教程

咨询
交流群
电话