使用宝塔面板,一开始我是鄙视的、拒绝的。作为一个运维人员,更喜欢自己控制所有的事情,一方面更有掌控感,出了问题更容易解决;另一方面显得自己更有实力。
但是多年的运维经历磨灭了往日的激情,能够让运维变得更轻松、简单,比掌控感和技术实力更重要。毕竟谁不想把省下的时间用来陪家人(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软件。
宝塔面板开始是设计给php用户使用的,java和tomcat方面是后来补上去的。可以看出相关功能明显比较薄弱且设计不合理。这些都需要我们手动改进。
如果简单使用,按照宝塔官方的java教程部署,也没有问题。只是nginx会把所有请求发送给Tocmat处理,包括静态文件(如图片、js、css),而Tomcat处理静态文件肯定没有Nginx性能好。
另外SpringBoot启动方式设计的还是没问题的。可能是因为直接使用Tomcat的用户越来越少,宝塔官方也懒得改进了。
在网站 - Java项目 - Tomcat管理
中安装Tomcat,一般只安装Tomcat9即可。
安装后需要停止Tomcat,这种默认方式运行的Tomcat极不合理,每个项目会相互影响。
默认Tomcat虽然强烈不建议使用,但会作为原始文件,复制到用户Tomcat目录上。因此在默认Tomcat
上做的修改也会自动带到用户Tomcat
上,免得每次都到用户Tomcat
上修改。当然每个项目如果有不同配置,就可以到用户Tomcat
里修改。
默认Tomcat有两个,tomcat9
和tomcat_bak9
,不知道这两个有什么区别,真正用的是哪个,反正都改就对了。
ROOT
文件夹也不保留修改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项目
,选择独立项目。
项目域名不要直接填写域名,而要在域名后面加上.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 "%r" %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后,会自动解压并运行。
可以将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/
如果使用 vue 作为网站前端,并使用 history 模式,则使用如下配置:
#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 @router;
}
location @router {
rewrite ^.*$ /index.html last;
}
location /api/ {
proxy_pass http://127.0.0.1:10021;
proxy_set_header Host test10.cmsys.cn.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-----
并点击默认站点
,选择该站点为默认站点。
# 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