electerm / electerm-web-docker

docker image of electerm-web
https://electerm.html5beta.com/
MIT License
25 stars 3 forks source link

在PaaS平台部署docker镜像失败 #10

Open yutian81 opened 3 weeks ago

yutian81 commented 3 weeks ago

我在 https://app.northflank.com/ 这个PaaS平台,通过拉取镜像的方式部署失败

镜像地址:https://hub.docker.com/r/zxdong262/electerm-web

错误信息为: image

按照文档,端口设置为 8082
image

是否还有其他必须设置的环境变量?

大佬能帮我看看是什么原因吗?

补充一下,部署日志正常,全文如下:

2024-09-11T05:09:46.342909937Z stdout F [2024-09-11T05:09:46Z INFO ] Securely fetching environment variables...
2024-09-11T05:09:46.342944502Z stdout F [2024-09-11T05:09:46Z INFO ] Successfully fetched environment variables.
2024-09-11T05:09:46.342950733Z stdout F [2024-09-11T05:09:46Z INFO ] Starting container entrypoint...
2024-09-11T05:09:52.698361805Z stdout F 05:09:52 info › app start
2024-09-11T05:09:52.713855521Z stdout F 05:09:52 info › server runs on http://127.0.0.1:5577
2024-09-11T05:16:46.880966157Z stdout F [2024-09-11T05:16:46Z INFO ] Process terminated.
2024-09-11T05:16:46.222485661Z stdout F [2024-09-11T05:16:46Z INFO ] Securely fetching environment variables...
2024-09-11T05:16:46.222514716Z stdout F [2024-09-11T05:16:46Z INFO ] Successfully fetched environment variables.
2024-09-11T05:16:46.222531157Z stdout F [2024-09-11T05:16:46Z INFO ] Starting container entrypoint...
2024-09-11T05:16:52.656659031Z stdout F 05:16:52 info › app start
2024-09-11T05:16:52.745636842Z stdout F 05:16:52 info › server runs on http://127.0.0.1:5577/
2024-09-11T05:20:25.700894914Z stdout F [2024-09-11T05:20:25Z INFO ] Securely fetching environment variables...
2024-09-11T05:20:25.700928498Z stdout F [2024-09-11T05:20:25Z INFO ] Successfully fetched environment variables.
2024-09-11T05:20:25.700934439Z stdout F [2024-09-11T05:20:25Z INFO ] Starting container entrypoint...
2024-09-11T05:20:26.327391515Z stdout F [2024-09-11T05:20:26Z INFO ] Process terminated.
2024-09-11T05:20:33.949752361Z stdout F 05:20:33 info › app start
2024-09-11T05:20:33.965461738Z stdout F 05:20:33 info › server runs on http://127.0.0.1:5577
zxdong262 commented 3 weeks ago

应该是SERVER变量要设为那个对外的地址xxx.code.run,等我试试

zxdong262 commented 3 weeks ago

我试了,可以,我是先挂了一个盘,/dist-external,端口设为5577 然后设定几个环境变量(xxxx换成你的地址)

SERVER=https://xxxx.code.run
HOST=0.0.0.0
DB_PATH=/dist-external/db
zxdong262 commented 3 weeks ago

但是好像有网络限制?我试了连不上外部ssh

yutian81 commented 3 weeks ago

我试了,可以,我是先挂了一个盘,/dist-external,端口设为5577 然后设定几个环境变量(xxxx换成你的地址)

SERVER=https://xxxx.code.run
HOST=0.0.0.0
DB_PATH=/dist-external/db

我再试试看。不至于啊,我之前用这个容器搭了一个简易的webssh服务,是可以连外部ssh的

yutian81 commented 3 weeks ago

我试了,可以,我是先挂了一个盘,/dist-external,端口设为5577

这一步是怎么操作的,请指教

zxdong262 commented 3 weeks ago

我试了,可以,我是先挂了一个盘,/dist-external,端口设为5577

这一步是怎么操作的,请指教

volumes设置里

yutian81 commented 3 weeks ago

我试了,可以,我是先挂了一个盘,/dist-external,端口设为5577

这一步是怎么操作的,请指教

volumes设置里

看到了 谢谢

yutian81 commented 3 weeks ago

还有个问题请教下,挂载盘这一步我做了,5277端口在哪里设置?是在这里吗?

image

这里不应该是8082?

zxdong262 commented 3 weeks ago

还有个问题请教下,挂载盘这一步我做了,5277端口在哪里设置?是在这里吗?

image

这里不应该是8082?

设为5577

yutian81 commented 3 weeks ago

非常感谢,已部署成功,并成功连上vps

zxdong262 commented 3 weeks ago

非常感谢,已部署成功,并成功连上vps

请问怎么设置访问网络权限的?是付费用户吗?

yutian81 commented 3 weeks ago

非常感谢,已部署成功,并成功连上vps

请问怎么设置访问网络权限的?是付费用户吗?

我是免费用户啊,我没有做任何其他设置,通过nf分配的域名就可以访问web版并连接ssh。 但是依然有两个问题: 1.我使用自定义域名(在CF托管)无法访问,这应该是nf的问题。2.web版无法保存任何设置,比如我设置语言为中文,刷新浏览器后依然变成英文,服务器登录信息也保存不了,数据读取好像没有指向额外挂载的磁盘

yutian81 commented 3 weeks ago

哦,我就加了一个地方的设置,健康检查,检查路径为/,检查端口为5577。这应该跟网络没啥关系吧。

yutian81 commented 3 weeks ago

https://et-out--electerm--sykk8bwr425w.code.run

这是我部署出来的,平台分配的地址,完全正常,除了不能保存设置

https://webssh.yzong.us.kg

这是我的自定义域,就只显示一个logo,无法进入操作界面

yutian81 commented 3 weeks ago

非常感谢,已部署成功,并成功连上vps

请问怎么设置访问网络权限的?是付费用户吗?

玄学了,我今天下午部署好的时候,在电脑上用Chrome浏览器都是可以连ssh的。刚刚用手机连接试了一下,出现跟你同样的问题,没有网络权限,只能本地连接。这真是奇怪了。。。设置不能保存的问题,刚刚在手机上又可以保存了。。。太玄学了

等你进一步更新镜像版。。。期待

补充:应该是手机浏览器的问题。刚刚又测试了,电脑上chrome浏览器可以正常连接ssh,并且设置也可以保存了

zxdong262 commented 2 weeks ago

注意安全啊,如果在公开网络上使用,至少设置登录

SERVER_SECRET=some_server_secret
SERVER_PASS=password_to_login
ENABLE_AUTH=1 
yutian81 commented 2 weeks ago

注意安全啊,如果在公开网络上使用,至少设置登录

SERVER_SECRET=some_server_secret
SERVER_PASS=password_to_login
ENABLE_AUTH=1 

感谢提醒,我也发现了这个问题,没有密码,任何人都可以远程登录我部署的项目。。。 这几个变量正好解决了我的顾虑

这个secret和pass有什么区别。pass我知道是打开web版所需要的密码,secret是干什么用的,是访问容器本身所需要的密钥吗?

yutian81 commented 2 weeks ago

另外,你说的网络权限的问题,我复现了。 填入服务器的登录信息后,如果直接点"连接",就会没有网络权限,必须要点"保存并连接"才可以连接到ssh

zxdong262 commented 2 weeks ago

注意安全啊,如果在公开网络上使用,至少设置登录

SERVER_SECRET=some_server_secret
SERVER_PASS=password_to_login
ENABLE_AUTH=1 

感谢提醒,我也发现了这个问题,没有密码,任何人都可以远程登录我部署的项目。。。 这几个变量正好解决了我的顾虑

这个secret和pass有什么区别。pass我知道是打开web版所需要的密码,secret是干什么用的,是访问容器本身所需要的密钥吗?

secret是加密的密匙

yutian81 commented 2 weeks ago

大佬,又来麻烦你了。。。electerm支持命令行操作吗? 我在这里看到支持批量操作:https://github.com/electerm/electerm/wiki/batch-operation 那么理论上就是支持命令行的。如果支持,命令行参数格式是怎样的?二进制文件在哪? 我想在cf worker里搭建一个项目,用命令行连接ssh并执行指定的命令,以实现某些自动化目的。 不知是否可行?

zxdong262 commented 2 weeks ago

大佬,又来麻烦你了。。。electerm支持命令行操作吗? 我在这里看到支持批量操作:https://github.com/electerm/electerm/wiki/batch-operation 那么理论上就是支持命令行的。如果支持,命令行参数格式是怎样的?二进制文件在哪? 我想在cf worker里搭建一个项目,用命令行连接ssh并执行指定的命令,以实现某些自动化目的。 不知是否可行?

这个需求更适合写一个简单的web服务来做,可以让AI来写 "write a simple expressjs app, /api/run-cmd API would use basic auth, to get cmd from user ,then run cmd with exec, should read username/password from .env"

.env

USERNAME=xxxx
PASSWORD=yyyy

app.js

const express = require('express');
const app = express();
const basicAuth = require('express-basic-auth');
const { exec } = require('child_process');
const dotenv = require('dotenv');

dotenv.config(); // Load environment variables from .env file

// Set up basic auth middleware
const auth = basicAuth({
  users: {
    [process.env.USERNAME]: process.env.PASSWORD
  },
  challenge: true,
  realm: 'My App'
});

// Apply basic auth middleware to the /api/run-cmd route
app.use('/api/run-cmd', auth);

// Route to run commands
app.get('/api/run-cmd', (req, res) => {
  const cmd = req.query.cmd;
  if (!cmd) {
    return res.status(400).json({ error: 'No command provided' });
  }

  exec(cmd, (error, stdout, stderr) => {
    if (error) {
      return res.status(500).json({ error: `Error executing command: ${error.message}` });
    }
    if (stderr) {
      return res.status(200).json({ stdout, stderr });
    }
    res.status(200).json({ stdout });
  });
});

const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});
yutian81 commented 2 weeks ago

非常感谢。。。膜拜