Featured image of post 使用 Docker 部署一些好玩的项目

使用 Docker 部署一些好玩的项目

Docker 基础教程与学习笔记

简介

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

这是比较官方化说法,用通俗一点的话来讲docker就相当于虚拟机,但是剔除了很多不必要的功能,只保留最基本的运行查询所需要的环境,用来解决那种“程序在你电脑上可以运行,在我电脑就运行不了”的尴尬情况。在这种情况下,docker相当于直接把人家电脑拿过来给你用,但是其他功能全部删掉,只保留了运行程序所需要的软件和环境,只能特定运行这一个程序

安装教程

参考文档

🔗如何在debian11上安装docker?

🔗Docker官方文档

在Debian11.1上安装Docker可以参考以下步骤

照例安装前先进行升级

sudo apt-get update

一键安装基础工具

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

安装docker的gpg key:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

安装docker源

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装docker

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

换源,这里我们用的是阿里云的镜像加速器(阿里云的容器镜像加速服务和其他不同,需要自己注册阿里云账号,开通镜像服务。镜像工具中有镜像加速服务,其中就有你的专属加速地址),你也可以用别的

sudo vim /etc/docker/daemon.json

然后把官方给出的json格式链接粘贴进去

{
  "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}

重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

使用docker info就可以再最后看到我们添加的镜像加速器地址了

💡其他源介绍

中科大

https://docker.mirrors.ustc.edu.cn

网易

https://hub-mirror.c.163.com

七牛云

https://reg-mirror.qiniu.com

Docker中国区官方镜像

https://registry.docker-cn.com

至此安装完成。

在debian系的Linux发行版上,docker会开机启动启动。

如果平时使用非root账户,又不想每次执行docker命令之前都加上sudo,可以添加docker组(有的情况会默认已经帮我们创建好了docker组,有的话可以跳过第一条指令),并将非root账户加入到该组中。执行完成之后重新登陆生效:

sudo groupadd docker
sudo usermod -aG docker $USER

常用指令

查看所有镜像

docker images

通过 ID 彻底删除镜像(id通过上一步指令查看)

docker rmi xxxxxxx

以下指令都要进入项目文件夹下操作,最好是不同项目单独创建一个文件夹,然后里面放一个docker-compose.yml文件

形如以下格式

image-20230718000339309

启动

docker compose up -d

停止

docker compose stop

查看正在运行的程序

docker ps

项目部署

Umami

简介

Umami 是一款简单、易用、美观、轻量、快速、隐私、安全的开源免费网站统计工具,从部署到使用,都是简单、快速,体验也很满意。

官方文档介绍了多种部署方式,包括使用自己服务器,或者第三方平台,例如 Netlify、Verce、Railway 等等,这里我们采用docker一键部署的方式

第一个项目我们讲的详细一些(其实很简单)

首先创建项目文件夹umami,然后进入其中,并创建docker-compose.yml文件,输入内容。

这一系列操作合起来就是这样一行代码

mkdir umami && cd umami && vim docker-compose.yml

docker-compose.yml文件如下,不需要任何改动。其中端口可以自定义,具体操作为:把ports冒号前的 3000 改为你想要的端口

---
version: '3'
services:
  umami:
    image: docker.umami.dev/umami-software/umami:postgresql-latest
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgresql://umami:umami@db:5432/umami
      DATABASE_TYPE: postgresql
      APP_SECRET: replace-me-with-a-random-string
      TRACKER_SCRIPT_NAME: random-string.js
    depends_on:
      - db
    restart: always
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: umami
    volumes:
      - ./sql/schema.postgresql.sql:/docker-entrypoint-initdb.d/schema.postgresql.sql:ro
      - umami-db-data:/var/lib/postgresql/data
    restart: always
volumes:
  umami-db-data:

顺便说一下,image: docker.umami.dev/umami-software/umami:postgresql-latest这一行指出了镜像的地址(网站被重定向到Github),所以不需要我们手动docker pull拉取镜像。当然也有些文件是没有指出具体地址的,后面会进行介绍。

这里部署是采用的postgresql数据库服务,如果你想要使用mysql可以参考官方文档,手动拉取一下镜像。

接下来启动docker服务(-d表示在后台运行)

docker compose up -d

接下来就是等待过程,有的下载特别慢,比如umami就是…我去找了一下镜像的地址,发现是托管在github上面的,如果不是dockerhub的话没办法用镜像,再加上文件体积本身就很大,所以时间要特别长时间才能下好

总用时一个小时,这个时长说实话还是蛮炸裂的😅

image-20230717234103276

完成以后我们就可以在3000端口(记得打开防火墙)看到我们的网页了!

然后在nginx配置端口转发,这里给出模板。location中的内容是重点,少了这几行就没法统计地区信息

server {
	listen	443 ssl;               # 开启HTTPS
	server_name  umami.lovir.cn;   # 域名

	location ~ / {
		proxy_pass http://127.0.0.1:3000;  # 源端口
		proxy_set_header Host $proxy_host;  # 修改转发请求头,让目标端口的应用可以受到真实的请求
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}

优化部分可以参考🔗Umami Docker 部署及优化

网易云音乐

简介

本项目使用的是YesPlayMusic,这是一款高颜值的第三方网易云播放器,它完全可以作为网易云官方应用的替代品。而且还拥有一些网易云官方应用没有的功能,比如可以自动签到,支持PWA可以直接一键安装,界面简洁美观,没有多余的社交功能,没有广告等特点。

引用一下官方的宣传图,截的很好看😊

这是实际部署出来的样子,颜值确实很在线!

image-20230718235727243

官方给出的docker-compose.yml文件如下,我把端口改成了800,防止首次运行和nginx冲突

services:
  YesPlayMusic:
    build:
      context: .
    image: yesplaymusic
    container_name: YesPlayMusic
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
    ports:
      - 800:80
    restart: always

这里面只给出了镜像的名称,而没有给出镜像地址,所以在此之前我们需要先手动pull一下

先创建好文件夹

mkdir YesPlayMusic && cd YesPlayMusic && vim docker-compose.yml

拉取docker镜像,这个是放在了dockerhub上面的

💡这里说一下,官方给出的构建镜像的办法是根据Dockfile以及本地文件来构建镜像,但是我不知道是不是没装node导致一直失败,所以直接拿构建好的镜像😇

docker pull fogforest/yesplaymusic:latest

同样也是很慢,完成以后直接docker compose up -d运行就可以了~

Bitwarden

简介

参考文档-《保护自己的密码安全,自托管或免费部署 Bitwarden》

你是否考虑过你的的密码强度如何?测试你的密码需要多久能破解

Bitwarden是一款支持自部署的跨平台密码管理器,通过自部署可以免费使用所有VIP功能,相比之下是性价比较高的一个选择

docker-compose.yml文件如下,同样也是创建好文件夹和yml文件后一键部署,但是相比前两个这个速度很快🥲感动极了

version: '3'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    environment:
    - WEBSOCKET_ENABLED=true 
    - SIGNUPS_ALLOWED=false
    volumes:
      - /data/docker/bitwarden/data:/data
    ports:
      - 7006:80  # Needed for the ACME HTTP-01 challenge.
      - 7007:443
      - 3012:3012

完成后在7006端口打开,显示如下界面

image-20230720000645648

环境变量中 - SIGNUPS_ALLOWED=false表示不允许其他用户注册,毕竟是我们自托管的服务,别人进来插一脚也不好。

值得一提的是,网站需要开启https才能登录进去,在此之前我们需要设置好反向代理和ssl证书。

nginx配置文件

server
    {
        client_max_body_size 128M;
        location / {
        proxy_pass http://127.0.0.1:7006;
        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 /notifications/hub {
        proxy_pass http://127.0.0.1:3012;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        }
  
        location /notifications/hub/negotiate {
        proxy_pass http://127.0.0.1:7006;
        }
    }

部署完成以后定期 docker pull vaultwarden/server:latest 来更新最新的服务端!防止有什么bug,毕竟自己的密码安全还是很重要的!

Waline

目前博客正在使用的评论系统!感觉还是很不错的,界面简洁管理方便,没有服务器也可以通过vercel部署。 首先拉取镜像(这个下载速度很快)

docker pull lizheming/waline

SQLite版 docker-compose.yml 文件如下:

version: '3'

services:
  waline:
    container_name: waline
    image: lizheming/waline:latest
    restart: always
    ports:
      - 127.0.0.1:8360:8360
    volumes:
      - ${PWD}/data:/app/data
    environment:
      TZ: 'Asia/Shanghai'
      SQLITE_PATH: '/app/data'
      JWT_TOKEN: '123456'

使用 SQLite 时需要下载 waline.sqlite 文件至合适的位置,注意文件存放位置

.
├── data
│   └── waline.sqlite
└── docker-compose.yml

Leancloud版 docker-compose.yml 文件如下:

version: '3'

services:
  waline:
    container_name: waline
    image: lizheming/waline:latest
    restart: always
    ports:
      - 127.0.0.1:8360:8360
    volumes:
      - ${PWD}/data:/app/data
    environment:
      TZ: 'Asia/Shanghai'
        LEAN_ID: 'xxxxxxxxxxxxxxx'
        LEAN_KEY: 'xxxxxxxxxxxxxx'
        LEAN_MASTER_KEY: 'xxxxxxxxxxxxxx'
        LEAN_SERVER: 'https://waline.lovir.cn'

使用Leancloud数据库要自己绑定以下api域名,要不然好像会报403,请求不到数据。

其他数据库的环境变量配置参考上面格式修改一下就差不多了,参考🔗官方文档

Twikoo

Twikoo也是一款简洁大方的静态网站评论系统,这是我在折腾vitepress的时候发现的,使用下来发现,不管是界面、响应速度、颜值都都很在线!说实话如果不是因为先入为主,我真的会更偏向于Twikoo,不过waline在Stack主题的上的表现也还可以,颜值也略胜一筹,不过速度倒是一般,所以就把Twikoo当作是一个备选方案吧

docker-compose.yml 文件如下:

version: '3'
services:
  twikoo:
    image: imaegoo/twikoo
    container_name: twikoo
    restart: unless-stopped
    ports:
      - 8080:8080
    environment:
      TWIKOO_THROTTLE: 1000
    volumes:
      - ./data:/app/data

运行好之后并不是直接打开网站就能出现评论框,这是云函数用来传输数据的,数据存放在同目录下的data文件夹,为json格式,所以是不需要数据库的,后期直接备份data文件夹就行。同时需要在nginx配置反向代理,参考前文中umami的配置。

Stack主题的配置文件中已经给出了相关配置,我们只需要把云函数地址填进envId就行了

Alist

Alist一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,通俗来讲,就是可以把各种云存储拉到网页端或者挂载到本地,方便管理文件。

docker-compose.yml 文件如下:

version: '3.3'
services:
  alist:
    restart: always
    volumes:
      - '/etc/alist:/opt/alist/data'
    ports:
      - '5244:5244'
      - '5245:5245'
    environment:
      - PUID=0
      - PGID=0
      - UMASK=022
      - TZ=UTC
    container_name: alist
    image: 'xhofe/alist:latest'

同时需要在nginx配置反向代理,参考前文中umami的配置。

部署完成后使用以下命令生成密码 123456

docker exec -it alist ./alist admin set 123456

此时我们可以使用 admin + 123456 登录,然后修改密码,添加存储等操作

Squoosh

Squoosh 是谷歌的一款黑科技在线图片压缩工具,几乎是目前压缩效率顶级的工具,支持多种压缩算法,压缩后的图片质量几乎无损,而且免费安全,支持自部署。相比于官方的在线版本,自部署的版本可以复制 npm 代码,不知道为啥官方的没有这个功能。但是无法使用类似于“调整图片大小至 25%”的预设,对我来说很致命,因为批量调整的话每个图片尺寸是不一样的。

docker-compose.yml 文件如下:

version: '3'
services:
  squoosh:
    image: dko0/squoosh:latest
    container_name: squoosh
    restart: unless-stopped
    ports:
      - 7701:8080
Licensed under CC BY-NC-SA 4.0
最后更新于 2023 年 8 月 25 日