前言

这篇文章我会分享一些在VPS上搭建过的项目,都是一些比较有意思且实用的应用。

基本都通过 Docker Compose部署,并通过反代神器 Nginx Proxy Manager配置反向代理

好处是不需要专业相关知识,跟着教程步骤即可搭建使用。

注意:每次新建Docker容器后,记得开放对应的端口,设置好反向代理和添加域名解析。

Docker部署项目

简单图床 EasyImage

内存占用:40M起步

安装教程:

视频【好玩儿的Docker项目】10分钟搭建一个简单图床——Easyimage哔哩哔哩bilibili

博客【好玩儿的Docker项目】10分钟搭建一个简单图床——Easyimage | 爱玩实验室 (iwanlab.com)

扩展插件:Edge插件 (icret.github.io)

官方文档:三方安装指南 (icret.github.io)

简易流程:

创建安装目录

1
2
3
4
5
mkdir -p /root/data/docker_data/easyimage

cd /root/data/docker_data/easyimage

vim docker-compose.yml

配置docker-compose.yml

version: ‘3.3’
services:
easyimage:
  image: ddsderek/easyimage:latest
  container_name: easyimage
  ports:
     - ‘8180:80’
  environment:
     - TZ=Asia/Shanghai
     - PUID=1000
     - PGID=1000
  volumes:
     - ‘/root/data/docker_data/easyimage/config:/app/web/config’
     - ‘/root/data/docker_data/easyimage/i:/app/web/i’
   restart: unless-stopped

查看端口占用,若被占用则换一个:

lsof -i:8180

启动docker compose服务

docker compose up -d

先别打开图床。

NPM配置反代。切记Details不要勾选Block Common Exploits。

在cf做好域名解析。

修改config.php

cd /root/data/docker_data/easyimage/config/config.php

#把domain和imgurl分别改成自己的域名

访问图床:IP:8180并安装。在设置中修改站点和图片URL。

动态网站 WordPress

内存占用:380M起步 无上限

安装教程:

视频【好玩儿的Docker项目】10分钟搭建美国白宫也用的博客框架——Wordpress!不过没Halo香!哔哩哔哩bilibili

博客【好玩儿的Docker项目】10分钟搭建美国白宫也用的博客框架——Wordpress-我不是咕咕鸽 (laoda.de)

扩展阅读:Docker版本安装WordPress常见问题梳理(附JustNews主题专属美化) | 爱玩实验室 (iwanlab.com)

推荐安装:插件——WP Markdown、SSL不安全内容修复器。主题——Kratos、argon

简易流程:

安装WP

mkdir -p /root/data/docker_data/wordpress

cd /root/data/docker_data/wordpress

vim docker-compose.yml

配置docker-compose.yml,参考官方文档:wordpress - Official Image | Docker Hub

version: ‘3.1’

services:

wordpress:
  image: wordpress:latest
  restart: always
  ports:
    - 8200:80
  environment:
    WORDPRESS_DB_HOST: db
    WORDPRESS_DB_USER: wordpress
    WORDPRESS_DB_PASSWORD: wordpress
    WORDPRESS_DB_NAME: wordpress
  volumes:
    - /root/data/docker_data/wordpress/data:/var/www/html

db:
  image: mysql:5.7
  restart: always
  environment:
    MYSQL_DATABASE: wordpress
    MYSQL_USER: wordpress
    MYSQL_PASSWORD: wordpress
    MYSQL_RANDOM_ROOT_PASSWORD: ‘1’
  volumes:
    - /root/data/docker_data/wordpress/db:/var/lib/mysql

#volumes:

wordpress:

db:

wordpress和mysql的environment的值要一一对应。

(如果VPS的内存不大于1G,建议设置1G的SWAP。mysql占用内存比较大。)

查看端口占用,若被占用则换一个:

lsof -i:8200

启动docker compose服务

docker compose up -d

配置Nginx Proxy Manager反代

打开网站:http://VPS-IP:8200

查看Docker容器内部ID:ip addr show docker0,一般都是172.17.0.1

Add Proxy Host:

Details:

Scheme:http

Forward Hostname / IP:172.17.0.1,或者你的VPS-IP

Forward Port:8200,或者你自定义的端口注意需要与docker-compose里的一致

勾选Block Common Exploits和Websockets Support

SSL:

选择你申请的通配符SSL或者为该域名单独申请一个

全勾选

Cloudflare添加解析记录。

然后进入WP在设置->常规里把两个URL改成你的域名即可。

上传主题并安装

先打开某主题的Github地址,例如Argon主题:solstice23/argon-theme: 📖 Argon - 一个轻盈、简洁的 WordPress 主题 (github.com)并下载.zip文件,在WP主题中点击上传主题,选择压缩包并安装。

正常来讲会出错,下面来解决。

  1. 上传的文件尺寸超过php.ini中定义的upload_max_filesize值

默认php设置的上传文件大小为2M,我们需要调整一下。

cd /root/data/docker_data/wordpress
vim uploads.ini

在uploads.ini末尾加入以下内容

file_uploads = On
upload_max_filesize = 256M    #可以自己设置大小
post_max_size = 256M  #可以自己设置大小

在docker-compose.yml里WP配置的volumes添加一行内容

  • /root/data/docker_data/wordpress/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

暂停并重启容器

docker-compose down
docker-compose up -d

查看修改结果

docker ps
docker exec 你的wp容器id php -i | grep upload

  1. 上传主题,出现“您点击的链接已过期”

cd /root/data/docker_data/wordpress/data
vim .htaccess

文本末尾空一行,添加以下内容

php_value max_execution_time 300
php_value upload_max_filesize 256M
php_value post_max_size 256M
php_value memory_limit 128M
php_value max_input_vars 5000

然后再上传主题并安装,启用主题即可。

配置redis(可选)

教程里有。

动态网站 Typecho

简单说明:比WordPress轻量

参考教程:

视频【好玩儿的Docker项目】10分钟搭建一个Typecho博客|太破口!念念不忘,必有回响!哔哩哔哩bilibili

还未尝试。

动态网站 Halo

内存占用:820M起步,因为Halo本身Java就大,还用的MYSQL8.0

参考教程:

官方文档 Halo 文档

博客 【好玩儿的Docker项目】好用又强大的开源建站工具——Halo 2.0

扩展阅读:

Halo社区:https://bbs.halo.run/

官网地址:https://halo.run/

应用市场:https://www.halo.run/store/apps

简易流程:

创建文件夹

mkdir /data/docker_data/halo
cd /data/docker_data/halo
vim docker-compose.yml

配置docker-compose.yml

version: “3”

services:
halo:
  image: halohub/halo:2.13
  container_name: halo
  restart: on-failure:3
  depends_on:
    halodb:
      condition: service_healthy
  networks:
    halo_network:
  volumes:
    - ./halo2:/root/.halo2
  ports:
    - “8090:8090”
  healthcheck:
    test: [“CMD”, “curl”, “-f”, “http://localhost:8090/actuator/health/readiness"]
    interval: 30s
    timeout: 5s
    retries: 5
    start_period: 30s
  command:
    - –spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
    - –spring.r2dbc.username=root
     # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
    - –spring.r2dbc.password=o#DwN&JSa56
    - –spring.sql.init.platform=mysql
     # 外部访问地址,请根据实际需要修改
    - –halo.external-url=http://localhost:8090/

halodb:
  image: mysql:8.1.0
  container_name: halodb
  restart: on-failure:3
  networks:
    halo_network:
  command:
    - –default-authentication-plugin=caching_sha2_password
    - –character-set-server=utf8mb4
    - –collation-server=utf8mb4_general_ci
    - –explicit_defaults_for_timestamp=true
  volumes:
    - ./mysql:/var/lib/mysql
    - ./mysqlBackup:/data/mysqlBackup
  ports:
    - “3306”
  healthcheck:
    test: [“CMD”, “mysqladmin”, “ping”, “-h”, “127.0.0.1”, “–silent”]
    interval: 3s
    retries: 5
    start_period: 30s
  environment:
     # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
    - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
    - MYSQL_DATABASE=halo

networks:
halo_network:

–halo.external-url改为自己实际要用的域名;–spring.r2dbc.password和MYSQL_ROOT_PASSWORD的值要一致,自行修改;halodb的ports为3306而不是3306:3306,避免把端口暴露在公网,它会随机找一个主机空闲端口进行映射。

确认端口未被占用

lsof -i:8090

启动Docker Compose服务

docker compose up -d

NPM反代配置

先NPM配置再进行Halo安装程序。

域名与–halo.external-url一致,xxx和www.xxx,http,172.17.0.1,8090,全勾选。Force SSL

初始化Halo

打开your-VPS-IP:8090,输入对应信息进行初始化。

安装主题

Joe 3.0慕名而来。参考官方文档:https://docs.halo.run/user-guide/themes

可以选择远程下载,在主题中点击下载,输入域名即可跳转。

基本配置

需要先在设置->通知设置,设置好邮箱服务器后才能接受邮件验证码。然后去用户页验证邮箱。

主题色可改为蓝色:#2a64f6

其他内容自行折腾。

补充

更新操作

修改 docker-compose.yaml 中配置的image版本

services:
halo:
  image: halohub/halo:2.13
  container_name: halo

重启docker compose

docker-compose up -d

卸载操作

cd /root/data/docker_data/halo

docker-compose down

cd ..

rm -rf /root/data/docker_data/halo  # 完全删除映射到本地的数据

网站监控 Uptime Kuma

内存占用:150M

参考教程:

视频【好玩的Docker项目】搭建一个专属自己的网站监控——Uptime Kuma哔哩哔哩bilibili

博客【好玩的Docker项目】搭建一个专属自己的网站监控——Uptime Kuma | 爱玩实验室 (iwanlab.com)

简易流程:

创建项目文件夹

mkdir -p /root/data/docker_data/uptimekuma

cd /root/data/docker_data/uptimekuma

vim docker-compose.yml

配置docker-compose.yml

version: ‘3.3’

services:
uptime-kuma:
  image: louislam/uptime-kuma
  container_name: uptime-kuma
  volumes:
    - ./uptime-kuma:/app/data
  ports:
    - 3001:3001

确认端口未被占用

lsof -i:3001

启动Docker Compose服务

docker compose up -d

打开站点:VPS-IP:3301

自行添加监控项和状态页。

NPM反代:http,172.17.0.1,3001勾选后两个。SSL勾选第一个。

Cloudflare添加解析记录。

回到Uptime Kuma,配置状态页。然后入口页面设为状态页,修改站点主URL为反代地址。

网站统计 Umami

参考教程:

视频【好玩的Docker项目】你的网站究竟有多少流量?搭建一个小而美的网站流量统计工具——Umami哔哩哔哩bilibili

博客【好玩的Docker项目】搭建一个小而美的网站流量监控——Umami | 爱玩实验室 (iwanlab.com)

简易流程:

创建项目文件夹

mkdir -p /root/data/docker_data/umami

cd /root/data/docker_data/umami

vim docker-compose.yml

配置docker-compose.yml文件:

version: ‘3’

services:
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
ports:
  - “3000:3000”
environment:
  DATABASE_URL: postgresql://umami:umami@db:5432/umami
  DATABASE_TYPE: postgresql
  HASH_SALT: replace-me-with-a-random-string
depends_on:
  - db
restart: always

db:
image: postgres:12-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

检查一下端口是否被占用

lsof -i:3000

启动Docker Compose服务

docker compose up -d

访问 IP:3000 进入Umami后台。

默认账号密码是:Username: admin,Password: umami

添加网站,获得跟踪代码,在自己的网站中引入该js代码。

启用共享链接,别人可通过此链接查看网站访客统计数据。

网盘挂载 Alist

内存占用:40M

简单介绍:

支持挂载的网盘存储:本地、阿里云、百度云、谷歌云、OneDrive、蓝奏云、天翼云、迅雷云等等。

支持在线查看文件类型:文本、音频、视频、图片。

注意:Alist挂载非OneDrive和谷歌网盘,流量大了可能会封号。类似项目ZFile可以规避这个问题。

【好玩儿的Docker项目】ZFile ——又一款强大好用的在线文件目录的程序! | 爱玩实验室 (iwanlab.com)

参考教程:

视频【好玩的Docker项目】目前最好用的网盘直链程序——AList,支持市面上几乎所有网盘!可以代替Olaindex!哔哩哔哩bilibili

博客【好玩的Docker项目】目前最好用的网盘直链程序——AList,支持市面上几乎所有网盘!可以代替Olaindex! | 爱玩实验室 (iwanlab.com)

官方文档:Home | AList文档 (nn.ci)

简易流程:

创建项目文件夹

mkdir -p /root/data/docker_data/alist

cd /root/data/docker_data/alist

vim docker-compose.yml

配置docker-compose.yml文件:

version: ‘3.3’
services:
  alist:
      restart: always
      volumes:
          - ‘/root/data/docker_data/alist:/opt/alist/data’    # 冒号左边的地址可以自己修改
      ports:
          - ‘5244:5244’      # 冒号左边的端口可以自己修改
      container_name: alist
      image: ‘xhofe/alist:latest’

检查一下端口是否被占用

lsof -i:5244

启动docker-compose服务

docker compose up -d

查看Alist初始密码

docker logs alist

或者

docker exec -it alist ./alist -password

如果后续忘记密码,可以随机生成或指定

docker exec -it alist ./alist admin random
docker exec -it alist ./alist admin set xxxxxxx

找到Successfully created the admin user and the initial password is: xxxxxx,这里账号是admin,密码是xxxxx。

访问 IP:5244 进入Alist后台并登录。会报错,点击最下方的管理即可。

配置反向代理

正常配置就行了。做好域名解析。

添加存储

存储添加方式参考:通用项 | AList文档 (nn.ci)

挂载路径指的是在Alist主页列表路径,根文件夹路径指的是对应的网盘里的文件夹路径。如果是OneDrive,可以填/OneDrive和/Alist挂载(需要创建对应文件夹)。

本地存储:

先在/root/data/docker_data/alist/下创建local文件夹。

在管理面板->设置->存储,驱动:本机存储,挂载路径:/local,根文件夹路径:/opt/alist/data/local。这样VPS的/root/data/docker_data/alist/local将会成为本地云盘的文件夹,也不用搭建什么NextCloud了。

此时打开Alist主页,能看到挂载的local文件夹。

阿里云、OneDrive:看文档,一遍过,无坑。

蓝奏云:如果访问失败,复制蓝奏云的个人中心->个性域名到Alist设置里的分享链接,刷新下缓存即可(注意有的文件被删了但是目录还在,也可能是这个原因,需要自己去蓝奏云下载下看看还在不)

迅雷、天翼云:手机号验证码登录的话,需要手动设置个密码用于绑定挂载。

百度云:本身限制太多,不好用。

给文件夹加密码

先在用户->游客把停用取消勾选 。

在元信息添加路径(需要该文件夹存在),填写密码和其他信息。

换个浏览器或设备或匿名模式打开Alist主页,打开该文件夹就需要密码正确才能进入。

可以根据个人需要设置用户权限和文件夹元信息。

Docker可视化 Portainer

参考教程:

视频 【Docker系列】超级好用的Docker可视化工具——Portainer哔哩哔哩bilibili

VPS太小,还没装

其他项目

静态导航 Hexo-WebStack

参考教程:

优雅的使用Webstack打造个人网址导航-腾讯云开发者社区-腾讯云 (tencent.com)

通过Nginx Proxy Manager代理静态网站(例如Hexo) – 卢孟德的学习小站 (lumengde.com)

更新Docker

以下是通常情况下的更新指令

cd /root/data/docker_data/xxxx

docker-compose pull

docker compose up -d    # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。

docker image prune  # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像

卸载Docker

cd /root/data/docker_data/xxxx

docker-compose down

cd ..

rm -rf /root/data/docker_data/xxxx  # 完全删除