去年年底开始弃用 lnmp.org 的一键安装包,改用自己从 apt 安装的 nginx,每次调配置文件都不是很方便,也不能直接签 SSL 证书。恰好当时在初学 Go,于是就做了一个轻面板用于管理 Nginx 的配置文件。上半年做的相对比较简陋,因为当时比较忙 bug 也来不及修,最近大项目基本忙完了,抽空完善了一下这个项目并加入了安装引导页面。
开源地址:https://github.com/0xJacky/nginx-ui
Yet another Nginx Web UI
Version: 1.0.0
项目特色
- 可在线查看服务器 CPU、内存、load average、磁盘使用率等指标
- 可一键申请 Let’s encrypt 证书
- 在线编辑网站配置文件
项目预览
登录

仪表盘

用户列表

域名列表

域名编辑

配置列表

配置编辑

使用前注意
Nginx UI 遵循 Nginx 的标准,创建的网站配置文件位于 Nginx 配置目录(自动检测)下的 sites-available
目录, 启用后的网站的配置文件将会创建一份软连接到 sites-enabled
目录中。因此,您可能需要调整配置文件的组织方式。
安装
- 克隆项目
git clone https://github.com/0xJacky/nginx-ui
- 编译后端
cd server
go build -o nginx-ui-server main.go
- 启动后端
- 前台启动
./nginx-ui-server
- 后台启动
nohup ./nginx-ui-server &
- 前台启动
- 添加配置文件到 nginx
server {
listen 80;
listen [::]:80;
server_name <your_server_name>;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name <your_server_name>;
ssl_certificate /path/to/ssl_cert;
ssl_certificate_key /path/to/ssl_cert_key;
root /path/to/nginx-ui/frontend/dist;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
index index.html;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_pass http://127.0.0.1:9100/;
}
}
- 初始化系统
在浏览器中访问 https://<your_server_name>/install
输入用户名和密码创建初始账户。
可以试试这个,也golang封装的acme.sh https://github.com/go-acme/lego
@zhuima: 嗯 现在项目用的就是这个实现签名和自动续期
@Jacky: 我试了下前端本地跑不起来,一直在报错
/Users/zhuima/nginx-ui/frontend/node_modules/vue-cli-plugin-generate-build-id/index.js:78
return _args[0]?.dest ?? ‘dist’
^
SyntaxError: Unexpected token ‘.’
at wrapSafe (internal/modules/
@zhuima: yarn serve 就行,编译的话 yarn build –dest dist
@zhuima: 噢,要更新一下 node 版本,14+
@Jacky: 嗯嗯,我在试下,之前装的14+,由于Ant 和Vue的那个模块冲突,给回退了
GitHub看到这个 正好自己也在写个界面. 目的是放弃宝塔面板 这样的东西,只用反向代理 还有ssl 续签.
@qfdk: 嗯
@Jacky: 其实还有个叫做ssldocker的东西满足要求,但是不开源…. 手动造轮子开始. 两天也算是一个像样的界面了.
@qfdk: 其实我一开始有用 acme.sh 来做自动签名的,就是 Go 调用 acme.sh 脚本,后来发现安装配置有点割裂,就改用 go 的库来做这个了,所以自动续签就暂时没做
其实也有办法,go 开个协程定时检查有无快过期的域名做个续签就行。
@Jacky: acme.sh 这个很头疼要用脚本的,要配合 定时任务,跟宝塔面板基本又一样了。之前用openrestry也搞过,自动反代加签名,然后用node.js脚本来强制续命。 打算用go来处理ssl证书申请,不行就换canddy 那个自带ssl。 感谢回复哈。
@qfdk: 嗯,caddy 续签还不错,就是配置有点迷
@qfdk: 如果是 acme.sh 的话配上 crontab 就可以实现自动续签
@Jacky: 坚决抵制acme.sh 图形界面更友好
啥时候出个 Apache UI?🤣
@Tony: 不考虑,我没有用到Apache的地方😂
@Jacky: Nginx 的证书模块有个 bug ,容易暴露源站 IP
好东西!
妙哇