最近着手搭建一个自用的图床,之前以有博客,图片一般存在博客的某个文件夹下,但是每次写博客的时候都要先将图片上传到服务器然后配图不能本地显示略嫌麻烦,因此准备在自己网站上搭建图床,使用docker,结合开源项目Lychee

补充发现:Chevereto 图床更好用,并且可以结合picGo自动上传,因此建议转为Chevereto 演示地址:https://demo.chevereto.com/

以下操作基于:Ubuntu 18.04

安装docker:

sudo apt-get update  # 更新apt源
# 安装apt依赖包,用于通过https来获取仓库
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
# 添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 设置稳定版仓库
sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"
# 安装Docker-ce
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 测试运行
sudo docker run hello-world
# 添加当前用户到docker用户组
# 列出自己的用户组,确认自己在不在 docker 组中
groups
# 没有则新增docker组
sudo groupadd docker
# 把当前用户加入到docker组中
sudo gpasswd -a ${USER} docker
# 重启docker服务
sudo service docker restart

docker-compose简介

compose是用于定义和运行多容器Docker应用程序的工具,通过Compose,可以使用YAML文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以通过YAML文件配置中创建并启动所有服务。

安装docker-Compose

Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

将可执行权限应用于二进制文件:

sudo chmod +x /usr/local/bin/docker-compose

创建软链:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:

docker-compose --version   # cker-compose version 1.24.1, build 4667896b

部署Chevereto(推荐)

拉取镜像

docker pull mariadb:latest
docker pull nmtan/chevereto:latest

使用docker-compose来启动服务

mkdir cheverto/
cd cheverto
touch docker-compose.yaml

文件内容如下:

version: '3'

services:
  db:
    image: mariadb
    volumes:
      - database:/var/lib/mysql:rw
    restart: always
    networks:
      - private
    environment:
      MYSQL_ROOT_PASSWORD: chevereto_root
      MYSQL_DATABASE: chevereto
      MYSQL_USER: chevereto
      MYSQL_PASSWORD: chevereto

  chevereto:
    depends_on:
      - db
    image: nmtan/chevereto
    restart: always
    networks:
      - private
    environment:
      CHEVERETO_DB_HOST: db
      CHEVERETO_DB_USERNAME: chevereto
      CHEVERETO_DB_PASSWORD: chevereto
      CHEVERETO_DB_NAME: chevereto
      CHEVERETO_DB_PREFIX: chv_
    volumes:
      - chevereto_images:/var/www/html/images:rw
    ports:
      - 8888:80

networks:
  private:
volumes:
  database:
  chevereto_images:

运行

nohup docker-compose up  &> run.log &
disown

使用picGo自动上传图片到图床

  1. 在PicGo插件中安装第三方API web-uploader / chevereto
  2. 在自定义插件区设置自己的图床参数
    图床参数
    API 地址: http://your-site/api/1/upload
    POST 参数名: source
    JSON 路径: image.url
    自定义 Body: {"key":"API Key","user":"your name","album":"album_id"}
  3. 修改Chevereto接受来自客户端的用户名和相册ID参数,避免上传至访客相册
    docker container ls #显示容器的container id
    docker container exec -it [container-id] /bin/bash # 进入容器
    cd /app/routes/route.api.php # 将网站根目录下/app/routes/route.api.php复制到同目录下的/overrides文件夹
    cp route.api.php overrides
    cd overrides
    vim route.api.php
    ±对应新增删除代码
    $version = $handler->request[0];
    $action = $handler->request[1];
    + $user = $_REQUEST['user'];	// 新增
    + $album = $_REQUEST['album'];	//新增
    
    // CHV\Image::uploadToWebsite($source, 'username', [params]) to inject API uploads to a given username
    - $uploaded_id = CHV\Image::uploadToWebsite($source);
    + $uploaded_id = CHV\Image::uploadToWebsite($source, $user, array('album_id'=>$album));

部署Lychee

启动镜像,是端口映射,5120->80,访问5120端口映射到docker容器的80端口

docker image pull kdelfour/lychee-docker
docker image ls
docker run -it -d -p 5120:80 kdelfour/lychee-docker
docker container ls #查看正在运行的容器

搭建成功

访问http://ip:5120,新建用户密码,即可上传成功

图片存于服务器的具体地址

docker container ls #显示容器的container id
docker container exec -it [container-id] /bin/bash # 进入容器
ls
cd updates # 此目录的big目录下即为图片存放位置

卸载方式

docker container stop [container-id] # 停止运行容器
docker container rm [container-id] # 删除容器
docker image rmi [image-id] # 删除镜像

参考文章
1.在Ubuntu 18.04安装Docker
2.Docker容器使用
3.教你如何搭建自己的图床
4.docker-compose简介
5.docker搭建图床 chevereto 非常方便
6.Typora + PicGo 自动上传图片到 Chevereto 图床
感谢以上参考文章!