跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 【教程】轻量折腾计划3,搭建属于自己的开发全家桶,下篇
未分類
21 8 月 2021

【教程】轻量折腾计划3,搭建属于自己的开发全家桶,下篇

nnt 大佬有话说 :

【教程】轻量折腾计划3,搭建属于自己的开发全家桶,下篇

本帖最后由 nnt 于 2021-8-21 14:14 编辑

原文Markdown写的,更好的阅读体验请前往:https://cloud.tencent.com/developer/article/1865833

前言

在[上篇文章](https://blog.1234234.xyz/archives/22/)中,我们利用腾讯云轻量应用服务器搭建了codeserver在线IDE、gogs轻量GIT平台,在这篇文章中,我将继续为大家带来:

[*]自建docker镜像仓库;
[*]基于web的ssh管理平台;
[*]nps端口映射面板

以上三大功能都是在实际开发中所需要或者说能够用得上的服务,可能会对大家有所帮助。

正文

自建docker镜像仓库

说道docker镜像仓库,大家估计脑海里第一个想起的就是dockerhub了吧,虽说dockerhub是有私人镜像的功能,但是在我们的日常工作中,处于企业的数据安全考虑(同时可能也跟全球两个经济体的碰撞有关),基本上是不会上传到dockerhub中,这时候自建一个简单的镜像仓库,用于在一些复杂网络的环境进行部署还是非常有必要的。

可能看到这有的小伙伴会想到:Harbor,不可否认地说,Harbor的确是一款非常成熟的产品,有这完善的功能且美观的UI,可是关键在于他不够轻量!在上文中,我们搭建了两款好用的应用,总计占用才不到500MB内存,可这Harbor最低配置要求就要2核4G,显示是不够全部应用分的,所以在这里我将使用的是docker官方给出的一个提供给用户快速搭建私有镜像的这么一个镜像:https://hub.docker.com/_/registry。

跟之前一样的,我们新建一个目录作为存放镜像的目录:

shell
mkdir /registry

创建完毕之后我们在创建一个容器应用的配置文件(/root/config.yml),内容如下:

yml
version: 0.1
log:
fields:
    service: registry
storage:
delete:
    enabled: true
cache:
    blobdescriptor: inmemory
filesystem:
    rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
    X-Content-Type-Options:
health:
storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

目的是为了能够在线删除镜像,默认的配置中是不支持此操作的。

接着运行命令:

shell
docker run -d -p 5000:5000 -v /registry:/var/lib/registry-v /root/config.yml:/etc/docker/registry/config.yml –name registry registry:2

用docker起一个registry应用,并把/registry和/root/config.yml文件挂载上去,同时映射容器内的5000端口。

这时候打开我们的宝塔,新建一个网站(由于这里需要适用SSL证书,下列图片中的域名我会码掉一部分,当然不用也可以,但是得多一些步骤,如果不想上SSL的读者请自行搜索查询方法),给网站添加上SSL证书:

https://i.loli.net/2021/08/20/nIZ3fc2xjLbaYD9.png

之后添加反向代理:

https://i.loli.net/2021/08/20/t5REaySNwzqnhis.png

然后给git添加一个basic_auth(这里的账号密码就是我们后边docker login时候输入的账号密码):

https://i.loli.net/2021/08/20/LBKNr1gwcaG6j9O.png

接着点击配置文件:

https://i.loli.net/2021/08/20/bitKpHWdqzASZl5.png

复制红框中的路径:/www/server/panel/vhost/nginx/dir_auth/docker.xxxxx.com(自选替换)

去到此文件夹,打开唯一的conf文件:

https://i.loli.net/2021/08/20/Jp1TWXqwLZgsjbm.png

复制框住的这两行:

    auth_basic "Authorization";
    auth_basic_user_file /www/server/pass/docker.xxxxxx.com/123.pass;

回到配置文件那,把include那行注释掉(反代和basic_auth的location有重合):

https://i.loli.net/2021/08/20/SPjvGzJrfhYXuBl.png

接着来到反向代理处,点击编辑:

https://i.loli.net/2021/08/20/gJtnwGKeIpBTcoq.png

添加如下这几行:

    auth_basic "Authorization";
    auth_basic_user_file /www/server/pass/docker.xxxx.com/123.pass; // 自行替换为你复制的那两行
    add_header ‘Docker-Distribution-Api-Version’ ‘registry/latest’ always;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_read_timeout 900;

添加后点击保存即可。此时已经配置完成,打开浏览器访问:`https://docker.xxxxxx.com/v2/_catelog`,在弹窗输入账号密码,如下图所示即为部署成功:

https://i.loli.net/2021/08/20/ZvYOI2QJEuUKyzG.png

在客户端尝试上传一个镜像试试,首先先登录到我们的私人镜像仓库:

docker login docker.xxxxxx.com

https://i.loli.net/2021/08/20/gjWifQGUcFX5rh6.png

接着我们尝试传我们在上篇中使用的gogs/gogs镜像:

REPOSITORY                  TAG       IMAGE ID       CREATED      SIZE
gogs/gogs                     latest    8ec7cc11f4a3   3 months ago   93.9MB

使用docker tag命令为镜像新增一个标签:

docker tag gogs/gogs:latest docker.xxxxxx.com/gogs/gogs:latest

接着上传镜像:

docker push docker.xxxxxx.com/gogs/gogs:latest

https://i.loli.net/2021/08/20/5hsXIlUSZDYai83.png

接着我们重新访问:https://docker.xxxxxx.com/v2/_catelog

https://i.loli.net/2021/08/20/onu5rA8wqbvVGOL.png

可以看到已经成功上传上去了,存放镜像的本地目录也出现了对应的文件夹:

https://i.loli.net/2021/08/20/sndgbNQY2MwyRiP.png

上传没啥问题,接着我们来试试拉取镜像,这里使用另一台服务器演示:

https://i.loli.net/2021/08/20/WMxQ7n6KlEtD1p8.png

也没啥问题,最后就是删除镜像,首先获取要删除的镜像的sha256签名:

curl –user admin:admin -v –silent "docker.xxxxxx.com/v2/gogs/gogs/manifests/latest" 2>&1 | grep Docker-Content-Digest | awk ‘{print ($3)}’

https://i.loli.net/2021/08/20/YIKGOoTX357hzMm.png

然后就是拼接删除语句,发送删除请求:

curl -I –user admin:admin -X DELETE docker.xxxxxx.com/v2/gogs/gogs/manifests/sha256:3b0c0c685e16f2b8bdd0289e7eb8812a188b014919464f0c6f6ce5d77dac2ad9

此时只是把元数据删除掉了,具体的镜像文件并没有删除,若读者想删除腾些空间的话,还需要进入容器,执行垃圾回收命令:

docker exec -it registry sh

进入容器后执行:

registry garbage-collect /etc/docker/registry/config.yml

至此,关于私有镜像仓库的部署及使用基本明了~https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif

nnt 大佬有话说 :

基于web的ssh管理平台

接下来就是ssh管理工具了,有时候在外边手边没有趁手工具使的时候,这东西的作用就体现了出来,我们只需要打开浏览器,输入我们的平台的地址:ssh.test.com,就可以直接连接上对应服务器,效率这一块拿捏得死死的。

这里我们使用的是webssh这个python库,安装过程可谓是十分简单方便,不过这里我们还是为了方便管理,选择使用docker。

官方并没有提供docker版本或者命令,这里我根据安装命令简单写了个Dockerfile,接下来就是安装的过程:

首先我们新建一个Dockerfile文件:

vim Dockerfile

内容如下:

FROM python:3

RUN pip install webssh -i https://pypi.tuna.tsinghua.edu.cn/simple

CMD ["wssh"]

保存后执行命令构建镜像:

docker build –tag webssh .

等待一会儿构建完成后运行容器:

docker run -d -p 8082:8888 webssh

https://i.loli.net/2021/08/20/ToNb9mAh1BLuSIc.png

还是老规矩,进行反代。新建一个网站ssh.test.com,点击反向代理:

https://i.loli.net/2021/08/20/3xFmLt28QGSe5JT.png

由于网站需要使用websocket,所以我们还需要编辑一下我们的配置文件:

https://i.loli.net/2021/08/20/uD4Q61z5mk3ntSM.png

加上框中的三行:

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection upgrade;

点击保存后,打开浏览器访问我们的平台:

https://i.loli.net/2021/08/20/cadJmW5C7ZzpGwn.png

尝试连接一个服务器:

https://i.loli.net/2021/08/20/Rv3mhrAu8oCzIQZ.png

点击连接:

https://i.loli.net/2021/08/21/drjEcuTitPYZGMS.png

至此,我们的SSH管理平台也搭建好了。

nnt 大佬有话说 :

nps端口映射面板

最后便是nps端口映射面板的搭建了,要说他的应用过程可谓是十分广泛的,就比如我本地有个服务想让其他朋友也能访问得到,但由于一般来说非云服务的带宽很少带有公网IP,都是基于NAT的网络情况,这时候我们便可以利用我们的云服务器来进行端口映射,将我们本地的端口转发到我们的开发全家桶服务器上,这样大家都可以通过开发全家桶服务器访问到我们本地无公网IP机子所转发的端口了。

对于我个人来说,我经常用于转发我本地Mysql的端口,用于项目调试,当然玩法还有很多,比如对于Kali系统来说,我们可以映射一个端口方便我们反弹Shell等操作,游戏用途的话可以局域网连接,用法因人而异。

项目地址:https://github.com/ehang-io/nps

下面是安装过程,首先是去官方git仓库拉取项目:

git clone https://github.com/ehang-io/nps.git

国内服务器拉取无速度可以使用一下镜像:

git clone https://github.com.cnpmjs.org/ehang-io/nps.git

拉取完成后输入:

cd nps

进入项目目录:

https://i.loli.net/2021/08/21/HFqSA6pUOeMjl5i.png

输入命令,拷贝并重命名一份Dockerfile文件:

cp Dockerfile.nps Dockerfile

编辑Dockerfile文件:

把第二行的:

ARG GOPROXY=direct

改为,防止国内机子因为网络问题无法构建镜像:

ARG GOPROXY=https://goproxy.cn,direct

接着跟上边的步骤差不多,构建镜像:

docker build –tag nps .

https://i.loli.net/2021/08/21/v2tNKeXBlsh4xaS.png

构建完成后,新建一个目录与一个配置文件:

mkdir /conf
vim /conf/nps.conf

填写内容如下(账号密码在#web处,线上部署请自行修改):

appname = nps
#Boot mode(dev|pro)
runmode = dev

#HTTP(S) proxy port, no startup if empty
http_proxy_ip=0.0.0.0
http_proxy_port=80
https_proxy_port=443
https_just_proxy=true
#default https certificate setting
https_default_cert_file=conf/server.pem
https_default_key_file=conf/server.key

##bridge
bridge_type=tcp
bridge_port=8024
bridge_ip=0.0.0.0

# Public password, which clients can use to connect to the server
# After the connection, the server will be able to open relevant ports and parse related domain names according to its own configuration file.
public_vkey=123

#Traffic data persistence interval(minute)
#Ignorance means no persistence
#flow_store_interval=1

# log level LevelEmergency->0LevelAlert->1 LevelCritical->2 LevelError->3 LevelWarning->4 LevelNotice->5 LevelInformational->6 LevelDebug->7
log_level=7
#log_path=nps.log

#Whether to restrict IP access, true or false or ignore
#ip_limit=true

#p2p
#p2p_ip=127.0.0.1
#p2p_port=6000

#web
web_host=a.o.com
web_username=admin
web_password=123
web_port = 8080
web_ip=0.0.0.0
web_base_url=
web_open_ssl=false
web_cert_file=conf/server.pem
web_key_file=conf/server.key
# if web under proxy use sub path. like http://host/nps need this.
#web_base_url=/nps

#Web API unauthenticated IP address(the len of auth_crypt_key must be 16)
#Remove comments if needed
#auth_key=test
auth_crypt_key =1234567812345678

#allow_ports=9001-9009,10001,11000-12000

#Web management multi-user login
allow_user_login=false
allow_user_register=false
allow_user_change_username=false

#extension
allow_flow_limit=false
allow_rate_limit=false
allow_tunnel_num_limit=false
allow_local_proxy=false
allow_connection_num_limit=false
allow_multi_ip=false
system_info_display=false

#cache
http_cache=false
http_cache_length=100

#get origin ip
http_add_origin_header=false

#pprof debug options
#pprof_ip=0.0.0.0
#pprof_port=9999

#client disconnect timeout
disconnect_timeout=60

配置项对应的含义:

| 名称                | 含义                                                         |
| ——————- | ———————————————————— |
| web_port            | web管理端口                                                |
| web_password      | web界面管理密码                                              |
| web_username      | web界面管理账号                                              |
| web_base_url      | web管理主路径,用于将web管理置于代理子路径后面                |
| bridge_port         | 服务端客户端通信端口                                       |
| https_proxy_port    | 域名代理https代理监听端口                                    |
| http_proxy_port   | 域名代理http代理监听端口                                     |
| auth_key            | web api密钥                                                |
| bridge_type         | 客户端与服务端连接方式kcp或tcp                               |
| public_vkey         | 客户端以配置文件模式启动时的密钥,设置为空表示关闭客户端配置文件连接模式 |
| ip_limit            | 是否限制ip访问,true或false或忽略                            |
| flow_store_interval | 服务端流量数据持久化间隔,单位分钟,忽略表示不持久化         |
| log_level         | 日志输出级别                                                 |
| auth_crypt_key      | 获取服务端authKey时的aes加密密钥,16位                     |
| p2p_ip            | 服务端Ip,使用p2p模式必填                                    |
| p2p_port            | p2p模式开启的udp端口                                       |
| pprof_ip            | debug pprof 服务端ip                                       |
| pprof_port          | debug pprof 端口                                             |
| disconnect_timeout| 客户端连接超时,单位 5s,默认值 60,即 300s = 5mins          |

然后在/conf目录继续新建三个空文件(无内容):

vim /conf/hosts.json
vim /conf/clients.json
vim /conf/hosts.json

运行容器:

docker run -d -p 10080:80 -p 10443:443 -p 18080:8080 -p 18024:8024 -v /conf:/conf –name nps nps

其中:

80与443端口为域名解析模式默认端口
8080为web管理访问端口
8024为网桥端口,用于客户端与服务器通信

https://i.loli.net/2021/08/21/sFSkV7IjwfBNRUd.png

最后还是老规矩,使用nginx进行反代:

https://i.loli.net/2021/08/21/uzaDFBvoGbAfQR1.png

反代后访问我们的网站:

https://i.loli.net/2021/08/21/oaHDidNwkXLFl5S.png

至此,我们的nps面板已经搭建好了,具体使用方法由于篇幅所限就不过多赘述了,网上已经有很全面的使用教程,也可以参考官方文档:https://ehang-io.github.io/nps/#/example

后话

至此,我们的开发全家桶已经部署好了,总共有:

[*]CodeServer在线IDE
[*]gogs私有GIT平台
[*]registry私有docker镜像仓库
[*]webssh在线SSH管理平台
[*]nps端口映射面板

现在,让我们来看看服务器的负载情况:

https://i.loli.net/2021/08/21/PqmC3dUIieK8HD1.png

五个应用,总计不到1.2G内存的占用,1核2G的学生机都可以流畅搭建和使用,可谓是便宜又好用~

最后再让我介绍下这次使用的服务器平台:腾讯云轻量应用服务器。

在腾讯云的长期活动中新用户可¥74便可买到一台,1核2G内存60G SSD盘6Mbps的配置在性价比这块拿捏得死死得,感兴趣的读者可考虑入手:https://cloud.tencent.com/act/new。

https://i.loli.net/2021/08/21/MOxBAd9gzeyYTbS.png

byhmsrsh4 大佬有话说 :

战略性mark

nnt 大佬有话说 :

下篇都莫得人看了吗 yc005thttps://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif

6fyC8r 大佬有话说 :

技术文,当然要顶一下

感谢分享,日后再看

无限啸傲 大佬有话说 :

感谢分享,日后再看

/**
* 你们是不是健忘?
* 别不承认,我就问你们一个问题。
* 你原本是来浏览器干嘛的?
* 如果你想起来了,就去做你该做的事情,别在这里迷失了自己的方向。
* ——浏览器引路人
*
* Link https://greasyfork.org/zh-CN/scripts/396933-hostloc-zsbd
*/

nnt 大佬有话说 :

6fyC8r 大佬有话说 : 2021-8-21 14:34
技术文,当然要顶一下

感谢顶贴 :lolhttps://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif

chenliqin123 大佬有话说 :

已收藏

HAZ 大佬有话说 :

很棒,楼主辛苦了,帮顶

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具