debian12,oneinstack
docker安装
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
在本地8080尝试安装Termix,先创建数据储存。
docker volume create termix-data
docker run -d \
--name termix \
--restart unless-stopped \
-p 8080:8080 \
-v termix-data:/app/data \
-e PORT=8080 \
ghcr.io/lukegus/termix:latest
很好,用HTTP+8080打开,没有问题。关掉,删了他。
docker stop termix
docker rm termix
考虑了一下,希望本地端口用8007,对docker固定ip 172.18.0.2,方便后面nginx反代。
docker本身用了 172.17.0.1/16,那我们就创建 172.18.0.0/16 分隔。
先创建个docker网络
docker network create --subnet=172.18.0.0/24 termix-network
如果创建错了可以删掉
docker network rm termix-network
也可以看看网络创建好没有
docker network ls
再运行
docker run -d \
--name termix \
--restart unless-stopped \
--network termix-network \
--ip 172.18.0.2 \
-p 127.0.0.1:8007:8080 \
-v termix-data:/app/data \
-e PORT=8080 \
ghcr.io/lukegus/termix:latest
我们可以看到-p这里,这是因为指定网络和IP,并映射端口8007了,之后只需要在Nginx配置中反代这个443就行了。
注意,这个-p 127.0.0.1是因为我不希望从别的地方可以访问,不加这个的话,你就可以从HTTP+IP+8007访问了。
这里可以通过删掉-p下的127.0.0.1,来通过 localhost:8007 看一眼,数据库不报错就ok了。
你可能会报错,提示The container name "/termix" is already in use by container
这时候用
docker ps -a
docker rm -f termix
好了,接下来配置nginx,因为基于oneinstack,所以正常配置后,进nginx/conf/vhost来找到相关配置。
之前的server{}都不用管,我们只看location。
在所有location块前面加
location ~ ^/assets/ {
proxy_pass http://127.0.0.1:8007;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
在所有location块最后加
location / {
proxy_pass http://127.0.0.1:8007;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
好了,用 nginx -t 检测一下,没问题的话用 nginx -s reload 就可以了。可以通过域名访问了。
在创建的时候遇到了一些问题,一个是,在nginx一开始通过普通匹配的时候,会报错404,找不到文件。
究其原因,是因为原始配置如下
location /assets/ { # 普通前缀匹配
proxy_pass http://127.0.0.1:8007/assets/;
}
location ~ .*\.(js|css)?$ { # 正则匹配
expires 7d;
access_log off;
}
普通匹配没有正则优先级高,所以请求被第二个location处理了,没有代理到termix。
另一个是可能出现502 bad gateway,这是因为我在nginx配置中配置了 172.18.0.2,我改成127.0.0.1就可以了。
那如果nginx强制要求配置172.18.0.2,或许可以通过docker写-p 172.18.0.2:8007:8080 \来实现?待测试,情况不明。
然后这个termix就好了,但是你会发现你怎么不能连接ssh,竟然是没有写ssh代理!
那就整一个,放在哪都行。我放在了第二位,测试没问题。
location /ssh/ {
proxy_pass http://127.0.0.1:8007;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400;
}