Docker初探——用Docker部署Homepage

前段时间看到一个很有意思的项目,Homepage。就是一个很好看的静态导航页,想到我那用HTML手搓的(甚至没写CSS)简陋到用“简陋”一词都不足以形容的导航页,我顿时心动了。

我原本以为既然Document里声称这个项目是纯静态的网页,那我是不是在本地生成好静态页面之后扔到我某个服务器的www目录,再随便写点配置就行了呢?但我鼓捣了半天才发现并非如此。首先这个项目并不希望你这样做,比如他的npm run build默认不会生成dist文件夹;此外这个网页也并不是完全静态的,它涉及一些系统参数的获取(CPU占用、内存占用等)以及天气API,如果非要生成一个静态页面,那这些API也不能正常工作。

而官方最推荐的部署方式就是使用Docker,这下从没用过Docker的我也打算尝试一下了,顺便把我的Minecraft服务器也搬到Docker上,这样就可以完全变成一个服务,方便地自启动和重启了(每次重启机器都去开TMUX手动启动实在是太不优雅了)。

简单了解了一下,Docker其实就是一个介于虚拟机和直接多开程序之间的一种方案,它的资源占用要比开虚拟机更少,同时也能给不同的服务提供独立的环境,避免互相干扰。

看了一下Docker的Manual以及一些教程,我决定使用docker compose,这个按照我的理解就是把一个Docker的配置写进一个配置文件里,这样每次启动这个Docker就只需要读这个配置文件就行了,这样更容易部署成一个服务。

首先创建一个新文件夹,在里面创建一个名叫compose.yaml的文件,这就是这个Docker的配置文件了。按照Homepage的教程,这个文件应该有如下内容:

version: "3.3"
services:
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    ports:
      - 3000:3000
    volumes:
      - /path/to/config:/app/config
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

这里的image代表所使用的Docker镜像;ports代表把外部的端口(左侧)映射到Docker内部的某个端口;volumes则是代表将外部的目录(左侧)挂载到Docker内部的某个位置。restart一项是我额外添加的,为了让这个容器在开机时能自启动。

写完这个compose.yaml,我们就可以把自己写好的Homepage配置文件放到上面指定的目录下,待会运行Docker的时候Docker里面的Homepage服务就可以根据这个配置文件渲染对应的页面。

接下来在终端输入:

docker compose up -d

这个命令就会根据你在compose.yaml里指定的配置为你生成一个Docker并运行,这时我们curl localhost:3000,可以看到页面源代码,说明配置成功了。再在终端输入:

sudo systemctl enable docker.service

这样docker服务就会被启用,如果你在compose.yaml正确配置了restart参数,那这个容器就能开机自启动了。

接下来就是在你的nginx或者其他服务器软件里设置一个端口转发,让你的页面能正确显示在公网,我的配置如下,供参考:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name nvg.clf3.org;
    ssl_certificate /certificate/path;
    ssl_certificate_key /privkey/path;
    client_max_body_size 50G;
    location / {
      proxy_pass http://localhost:3000/;
      proxy_set_header Host $http_host;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection upgrade;
      proxy_set_header Accept-Encoding gzip;
    }
}
server {
    listen 80;
    listen [::]:80;
    server_name nvg.clf3.org;
    rewrite ^(.*)$ https://${server_name}$1 permanent;
}

最后配置好的效果在这里

感觉用Docker部署这种配置好就不用怎么动的服务还是很适合的,现在有点想把我的所有服务都docker化了。主要是想配置的服务越来越多,但每次都开一个新的虚拟机,即使是64G内存也有点捉襟见肘,如果都放到一个Linux机器上,又担心环境冲突。等到我又想部署新项目的时候,可能就考虑把之前的Wordpress、Gitea之类的给Docker化了。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇