给服务器装个监控运行小工具吧
目录
教程推荐下面三篇:
附项目源码:
https://github.com/AntonyLeons/Ward.git
Ward是一款用java写的服务器监控工具,支持单台服务器运行。用Dockers安装步骤会简洁很多。我这里没装docker,需要从安装java、配置环境起步。
折腾完java环境后,我由衷推荐大家使用docker……
服务器说明
- 系统:Ubuntu 20.04
- 主运行pleroma服务
安装java
- 装Openjdk和Maven
apt install default-jdk maven
- 验证安装
java –version
maven –version
我这里在maven –version
出问题了。
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
- 去配置环境
sudo nano /etc/profile.d/maven.sh
粘贴一下
export JAVA_HOME=/usr/lib/jvm/default-java
export M2_HOME=/opt/maven
export MAVEN_HOME=/opt/maven
export PATH=${M2_HOME}/bin:${PATH}
给执行权限
sudo chmod +x /etc/profile.d/maven.sh
重新加载环境变量
source /etc/profile.d/maven.sh
再次验证
mvn -version
安装ward
进入安装目录
cd /opt
拉取源码并构建
git clone https://github.com/AntonyLeons/Ward.git
cd Ward
mvn clean package
查询版本号,注意Ward文件夹首字母大写
cd /opt/Ward/target
ls
查看到ward-2.3.1.jar
开放4000端口
sudo ufw allow 4000
运行
java -jar ward-2.3.1.jar
提示4000端口被占用。
Description: Web server failed to start. Port 4000 was already in use.
Action: Identify and stop the process that's listening on port 4000 or configure this application to listen on another port
解决默认4000端口被占用
我问chatgpt该怎么办
答曰
- 找到占用端口4000的进程
- 停止占用端口4000的进程
kill -9 <PID>
- 修改应用程序监听的端口
很好,我照搬。lsof -i :4000
查询到:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
beam.smp 30707 pleroma 43u IPv4 693766 0t0 TCP localhost:4000 (LISTEN)
我问chatgpt beam.smp
是什么
答曰:
beam.smp
是与 Erlang 虚拟机(Erlang Virtual Machine,简称 BEAM)相关的一个进程。BEAM 是用于运行 Erlang 和 Elixir 等编程语言的虚拟机。beam.smp
进程是 BEAM 虚拟机的一个核心组成部分,负责执行 Erlang 和 Elixir 代码。巴拉芭拉
总之,
beam.smp
进程是 Erlang 和 Elixir 编程环境的核心组成部分,它使这些语言能够实现高度并发、容错性和分布式计算等特性。它在构建可靠、高效的应用程序方面发挥了关键作用。
kill -9 30707
试图杀掉
果真杀不死……
will, i go die.
最终,我,灵光一闪,想到了一个方法。
Ward首次运行时,默认使用端口4000,在浏览器打开 ip:4000
网址后,会让重新修改端口。
那我把它源码里的默认端口改掉不就好了吗。
于是,我去github项目里查询4000
,找到文件路径,对照着把所有的4000端口改掉了,再重新构建一次。
【更好的处理方法是:
Ward有个配置文件setup.ini
,若端口不一致,会优先使用配置文件中的端口。
所以只要去配置中修改端口就行,这是读完README.md就能知道的。
我没读,我可真是愚蠢的小机灵鬼呢。
解决了端口问题,重新运行ward,提示成功,浏览器内打开 ip:端口
,就可以看到了~~
ok,先暂停服务,进入后续配置
systemctl stop ward
配置文件
刚刚说到setup.ini
,就顺嘴再一提,路径/opt/Ward/target/setup.ini
,进入文件后如下内容:
[setup]
serverName = my-server
theme = dark
port = 4000
可修改名称,主题支持light和dark,端口自定义。
配置子域名及反代
为了方便自己查看,再来给它配上域名吧~
翻出之前建站的文档,照猫画猫。
- cloudflare 添加域名解析
登录 cloudflare,在DNS下新增一条A记录,指向服务器ip地址。
- 申请证书
*将【< mysubdomain >】 对应替换,后不赘述。
certbot certonly --standalone --preferred-challenges http -d <mysubdomain>
提示申请成功
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/<mysubdomain>/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/<mysubdomain>/privkey.pem
Your cert will expire on 2023-12-16. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
暂停nginx
systemctl stop nginx
新建nginx配置
【备注】我的处理方式:每一个子域名网站用独立的配置文件分别储存在/etc/nginx/sites-available/
文件夹下;再创建对应软链。
cd /etc/nginx/sites-available
nano ward.conf
添加以下内容
server {
listen 443 ssl;
server_name <mysubdomain>; #域名
ssl_certificate /etc/letsencrypt/live/<mysubdomain>/fullchain.pem; #获取到的证书 ssl_certificate_key /etc/letsencrypt/live/<mysubdomain>/privkey.pem; #证书私钥
location / {
proxy_pass http://localhost:5000; #对应ward端口
}
}
#http自动跳转https
server {
listen 80;
server_name <mysubdomain>; #域名
return 301 https://$host$request_uri;
}
检查nginx配置
nginx -t
添加软链
ln -s /etc/nginx/sites-available/pleroma.conf /etc/nginx/sites-enabled/pleroma.conf
启动 nginx
systemctl start nginx
启动ward
systemctl start ward
浏览器打开
另外在在 Nginx 中配置二级域名 这篇文章下,看到了另一种配置方式。
后续有机会尝试以下这种,看起来更方便一些。
在添加好域名解析、配好新项目的nginx后,使用Certbot 会自动检测已部署在 Nginx 的域名,并确认哪个域名需要激活 HTTPS
sudo certbot --nginx
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: subdomain1
2: subdomain2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
输入数字选择后,Certbot 会向 Let’s Encrypt 申请新的证书。
其他参考:https://yonglun.me/certbot/
ok , 结束。