自建图床服务并配置免费CDN全球加速 过程记录

个人有一些图片托管的需求,在很多场景下比如说在博客文章中插入图片,在社交网站上分享图片,抑或是个人开源项目中的图片等等,都需要在文档(特别是MarkDown)中嵌入一个URL直链来指向图片。对于一些免费的图床服务商,个人感觉并不是很信任。数据安全是一方面,另一方面如果服务商跑路了,那么很多原先我创建的链接都会失效。据我所知,这样的例子比比皆是。 网上还有一些教程将GitHub当成免费图床来用。这样做弊端也很明显,GitHub在国内的访问速度非常慢,图片加载很慢。另外,缺少很多图床该有的功能,比如说自动压缩,自动转换成Webp,自动重命名等等。这样做也是不太可行的。下面就是一个我将GitHub用作图床的例子。每次我还需要将图片移动到代码仓库里,然后commit,push,我个人感觉很麻烦。 还有一段时间我试过把WordPress的Midea库当作图床来使用,但是我发现图片链接中带有wp-content/upload这样的路径。然后链接中还会出现图片的名称。我感觉并不是很雅观,而且在隐私的保护中有一种说不好的感觉。就像是别人一看这个URL链接,就能获知一些图片以外的信息。下面就是用WordPress的Media库当图床例子。可以看到,产生的直链不是很美观,而且还能暴露一些信息。 所以,我这边产生了自建图床服务的想法。这种图床最好能自动转换jpg、png格式的图片为webp。这样图片就能比较高质量、快速地在用户浏览器中加载出来。有关WebP的简要介绍如下: WebP is a raster graphics file format developed by Google intended as a replacement for JPEG, PNG, and GIF file formats. It supports both lossy and lossless compression,[8] as well as animation and alpha transparency. Google announced the WebP format in September 2010, and released the first stable version of its supporting library in April 2018. 然后图床还要能够自动压缩图片,然后产生带有MD5或者SHA256的URL链接,能够不暴露我的图片原始信息。然后还能够配置CDN加速,毕竟对于图床来说CDN非常重要,载入速度很大程度上影响用户的终端体验。还有最好能够用PHP写成,因为这样我能够上传到我的网站托管服务商进行托管,不需要另外去单独为这个买VPS来部署。 搭建EasyImages2.0自建图床 经过查找,我发现一款叫做EasyImages2.0的图床项目比较符合我的上述需要。这款图床用PHP写成,理论上能够在我的服务商托管的规则容许下正常运行。而且不需要数据库,免去了额外的数据库的配置,节约时间。 话不多说,先进入项目仓库下载最新发布版本。 先解压检查目录,不出意外的话应该是这样。项目根路径下有index.php,这种结构就可以直接FTP上传到托管服务商FTP上。不需要额外的配置,应该就可以使用了。然后,我就将压缩包上传到托管服务商的FTP上,解压到网站根目录public_html下(有些托管服务商是根目录www目录) 上述步骤完成后,FTP目录应该是下面这样。这个时候我们记得提前去app目录下,将upload.php权限改为0755。 修改权限的操作详情如下。可以按照我这样来。 还需要注意,根据该项目的兼容性描述,PHP环境需要满足一定的要求。 最低PHP 5.6,推荐PHP≥7.0及以上版本,需要PHP支持fileinfo,iconv,zip,mbstring,openssl扩展,如果缺失会导致无法上传/删除图片 文件上传视图提供文件列表管理和文件批量上传功能,允许拖拽(需要HTML5支持)来添加上传文件,支持上传大图片,优先使用HTML5旧得浏览器自动使用Flash和Silverlight的方式兼容 请确保fileinfo,iconv,zip,mbstring,openssl这几个扩展已经安装妥当。找到下面这种界面,然后用浏览器搜索检查是否都安装了。 ...

十一月 18, 2023

搭建一个免费开源好用的Docker面板 Portainer

Portainer是一个好用的Docker容器控制面板。它的代码仓库在这里。它支持单节点和集群部署。 在此之前,我已经将个人服务器完全容器化了。如果能够可视化操作、监控各种容器,对于日常的运维帮助很大,感觉一切尽在掌握。 可以看看搭建好后的效果,界面还是很美观的。 可以快速拉取镜像 可以可视化发布容器,并灵活设置环境变量、网络、重启策略等等参数。 可以在镜像更新的时候,快速用新镜像更新容器。 还可以快速进入接入容器命令行,查看容器日志。 可以说,我日常需要的功能都有,感觉很完善了。 搭建 那么对于单点服务器来说,该如何搭建呢,首先你要确认你的服务器目前有安装Docker。 可以输入docker -v来看看当前环境中是否存在docker。 如果不存在,需要安装docker,你可以在Google找找教程。对于AWS的EC2,可以输入sudo yum install docker -y来安装。 确认安装好Docker后。确认一下Docker是否启动。然后看看/var/run路径下是否有docker.sock文件。 然后,确认8000端口和9443端口都没有被占用,因为Portainer后续要用到这两个端口。 将应用数据存储在Docker Volume 如果你想将Portainer产生的应用数据存在Docker Volume中,你可以直接执行下面的命令。后续部署完成后,Portainer所使用的Docker Volume也可以在Portainer看到并管理。如果8000端口被占用了,可以将-p 8000:8000改成其他端口,类似-p 12345:8000。9443端口也是类似。 如果你想指定容器名为其他,可以修改–name参数,比如说--name myportainer。 % docker volume create portainer\_data % docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer\_data:/data portainer/portainer-ce:latest 将应用数据映射到宿主机的其他地方 你可以在/data下建立目录portainer,所以说,最终的路径是/data/portainer。我最终选择了这种方式,因为我单独购买了AWS的数据盘来存储我的服务器的应用数据。所以我倾向于将应用数据都存在数据盘中。 其他参数设置和上面的部分一致。 % docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /data/portainer:/data portainer/portainer-ce:latest 确认部署状态 然后执行docker ps来确认Portainer是否正常启动。可以参考我的截图中的红框中的信息。 ...

十一月 23, 2022

Ubuntu双系统重装Windows后修复grub2引导 UEFI

如果你在安装了Ubuntu和Windows双系统后,又重装了Windows系统。那么Grub引导项大概率会被Windows Boot Manager覆盖,这时候你就进不了Ubuntu了。但不要慌,按照下面的步骤可以修复grub2引导,而且不需要安装额外的软件。 制作Ubuntu的U盘启动盘 为了修复引导项,我们需要用到Ubuntu系统提供的软件工具。虽然我们暂时进不去原来的Ubuntu系统,但是我们可以使用写在Ubuntu U盘中的镜像来获得一个可用的基本Ubuntu环境。 在Ubuntu官网下载镜像文件。 制作U盘启动盘可以使用免安装、小巧好用的rufus。你可以使用rufus快速创建一个U盘启动盘,注意选择GPT模式。 引导U盘启动盘 重启电脑,在BIOS引导设置中引导U盘,然后进入Ubuntu引导安装程序后,在安装界面选择Try Ubuntu进入Ubuntu Live。 执行Grub2重建操作 使用fdisk,找到EFI分区,/boot挂载点所在的分区(如果你没有设置/boot挂载点则为/挂载点)。 挂载/boot挂载点所在的分区到/mnt下(我的分区在nvme固态硬盘上)。 % sudo mount /dev/nvme0n1p6 /mnt/ 挂载EFI分区,在这里你需要知道在你的硬盘中那一个分区是EFI系统分区(我这里是第五个分区)。 % sudo mount /dev/nvme0n1p5 /mnt/boot/efi 连接其他必要的目录 % sudo mount --bind /dev /mnt/dev % sudo mount --bind /dev/pts /mnt/dev/pts % sudo mount --bind /proc /mnt/proc % sudo mount --bind /sys /mnt/sys 转换根目录到/mnt下 % sudo chroot /mnt 修复Grub2引导 对于32位系统和64位系统,在这里你需要运行的命令是不同的。下面分别给出了它们对应的命令。 32位系统 % sudo grub-install --target=i386-efi /dev/nvme0n1 64位系统 % sudo grub-install --target=x86\_64-efi /dev/nvme0n1 执行完上面命令当中的一条后,再执行一下Recheck % grub-install --recheck /dev/nvme0n1 后续清理步骤(可要可不要) % exit % sudo umount /mnt/sys % sudo umount /mnt/proc % sudo umount /mnt/dev/pts % sudo umount /mnt/dev % sudo umount /mnt 然后重新启动,你会发现已经能够成功进入grub2界面,并且grub2已经识别到了Ubuntu系统和Windows Boot Manager。 ...

十一月 26, 2021

解决yarn安装electron、chromedriver等软件包超时、缓慢的问题

在国内使用 yarn 安装 electron、chromedriver 是经常出现无法连接的问题,这个时候,相对于设置代理,我们可能更希望使用在国内的镜像仓库来加速这个过程。并且安装 electron 的时候,单单设置 yarn 的全局代理是没有用的。那如何根据不同的软件包设置代理呢?你可以按照以下列表中提供的命令样例来设置。 yarn 全局设置 设置 yarn 安装一般的软件包时使用的仓库地址。 yarn config set registry https://r.npm.taobao.org 注册模块镜像 yarn config set disturl https://npm.taobao.org/dist # node-gyp 编译依赖的 node 源码镜像 这是运行以上命令的结果,你可以很清楚地看到设置是否成功。 yarn 安装特定软件包设置 设置 yarn 安装 electron 、chromedriver 等软件包安装使用到的仓库地址。你可以按照需要选择一两个命令来设置,一股脑全部加上是被必要的。 yarn config set sass\_binary\_site https://npm.taobao.org/mirrors/node-sass # node-sass 二进制包镜像 yarn config set electron\_mirror https://npm.taobao.org/mirrors/electron/ # electron 二进制包镜像 yarn config set puppeteer\_download\_host https://npm.taobao.org/mirrors # puppeteer 二进制包镜像 yarn config set chromedriver\_cdnurl https://npm.taobao.org/mirrors/chromedriver # chromedriver 二进制包镜像 yarn config set operadriver\_cdnurl https://npm.taobao.org/mirrors/operadriver # operadriver 二进制包镜像 yarn config set phantomjs\_cdnurl https://npm.taobao.org/mirrors/phantomjs # phantomjs 二进制包镜像 yarn config set selenium\_cdnurl https://npm.taobao.org/mirrors/selenium # selenium 二进制包镜像 yarn config set node\_inspector\_cdnurl https://npm.taobao.org/mirrors/node-inspector # node-inspector 二进制包镜像 和上面的类似,运行命令后你可以很清楚地看到设置是否成功。 ...

十一月 22, 2021

oh my zsh 在Ubuntu下的配置教程

oh my zsh是十分好用的基于zsh的配置框架,它能简化Linux终端用户的很多日常操作。而且,它的界面相对于原始的bash来说,非常好看。这篇文章就是用来介绍如何在Ubuntu下安装并配置oh my zsh及其常用插件的。 oh my zsh 安装与基本配置 在oh my zsh 安装前需要先执行以下命令安装下列git、curl、zsh。 % sudo apt install git curl zsh 安装完依赖项目后,直接执行下面的命令来一键安装: % sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 设置zsh为默认shell: % chsh 按照提示一步一来,输入/bin/zsh即可。 常用插件安装 单单配置oh my zsh本身是远远不够的,你可能需要以下常用插件来真正达到简化操作的目的。 z 历史目录管理 zsh-autosuggestions 命令提示 zsh-syntax-highlighting 高亮 sudo 忘记加sudo前缀之时 extract 一个命令解压几乎所有安装包 z 无需额外安装,直接在plugins中填写即可。 zsh-autosuggestions 先执行以下命令,然后在plugins中填写。 % git clone git://github.com/zsh-users/zsh-autosuggestions ${ZSH\_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions zsh-syntax-highlighting 先执行以下命令,然后在plugins中填写。 % git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH\_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting sudo 无需额外安装,直接在plugins中填写即可。 extract 无需额外安装,直接在plugins中填写即可。 设置代理 我们可以通过在.zshrc中加入以下配置来启动可开关的代理功能: proxy() { export https\_proxy=http://127.0.0.1:1234 export http\_proxy=http://127.0.0.1:1234 export all\_proxy=socks5://127.0.0.1:1234 } unproxy() { unset https\_proxy unset http\_proxy export all\_proxy } 你可以将1234改为你任何想要的端口。 ...

十一月 22, 2021

使用 space-vim-dark 一键配置、美化vim编辑器

一直以来我都使用一些成熟的配置文件来帮助我配置、美化vim编辑器,然而我原来使用的spf13-vim.sh已经很久不更新了,它的插件列表中有些插件已经不能正常下载了。所以我想寻找它的替代品,最后发现 space-vim-dark还不错。 space-vim-dark基本介绍 经过我的寻找,找到了一个比较好用且美观的配置文件space-vim-dark。这个space-vim-dark可能是国人编写的vim配置文件,它能很好使得vim适应暗色模式。 先贴出仓库地址:https://github.com/liuchengxu/space-vim-dark 这是它的效果图,整体看还是不错的。 用它配置、美化vim编辑器 设置space-vim-dark非常简单,你只需要在你的vim插件管理器中添加下面的设置。 Plug 'liuchengxu/space-vim-dark' 整体使用下来,我觉得该有的插件还是有的,并且用起来顺手不少。 加入额外配置 在~/.spacevim中可以加入你自己的一些配置。

十一月 22, 2021

方便快速地写好.gitignore

如果你建立了一个Git仓库,.gitignore是你需要考虑的一个选项。 如果你想套用模板的话,推荐使用如下仓库地址中提供的模板: 进入仓库地址: https://github.com/github/gitignore 各种模板覆盖比较全,可以根据你的具体需求组合使用。

五月 26, 2021

正确地进行SSH的相关配置文件的权限设置

如果当导入外部的SSH公私密钥之时,可能需要在家目录下新建.ssh文件夹并将公私密钥移动到该文件夹下。但如果没有将权限问题配置正确的话,会导致密钥无法使用的问题。 这里给出一组命令对分别配置文件夹、公私密钥的权限进行设置: % chmod 700 ~/.ssh % chmod 600 ~/.ssh/id\_rsa % chmod 600 ~/.ssh/id\_rsa.pub % chmod 600 ~/.ssh/authroized\_keys

五月 26, 2021

为MacOS的终端加上代理设置

MacOS现在默认采用Zsh,所以在用户家目录下寻找.zshrc配置文件,如果没有则自行创建。 编辑.zshrc文件,在最后加入下列代码 \# set proxy alias proxy='export all\_proxy=socks5://127.0.0.1:1234' alias unproxy='unset all\_proxy' 添加完毕后,保存,在终端输入以下命令 % source ~/.zshrc 完毕。 如果需要使用代理,则预先输入proxy命令。如果需要取消代理,则输入unproxy命令。 或者如果需要默认启用代理的话,在.zshrc配置文件末尾添加 % export https\_proxy=http://127.0.0.1:7890 http\_proxy=http://127.0.0.1:7890 all\_proxy=socks5://127.0.0.1:7890 保存。 % source ~/.zshrc 完毕。

五月 25, 2021

HyperV Ubuntu虚拟机开启增强会话 调整分辨率 启用剪切板

在HyperV下Windows系虚拟机默认就能够开启增强会话。在增强会话下可以方便地和宿主机共享剪切板与文件,并且在增强会话开启时也能够比较方便地调整分辨率。而Ubuntu等Linux系统下则默认为基本会话,分辨率的调整需要修改引导文件,而剪切板和宿主机是独立的非常不方便。 进过查找,找到了一种可以在Ubuntu 20.04下开启增强会话的方法,使用后有效,遂在此记录。 首先需要开启增强会话的话必须先在创建虚拟机的时候开启第二代虚拟机选项,在首次启动的时候关闭Secure Boot。记得在安装Ubuntu的时候不要开启自动登录选项。 在终端下输入 % wget https://raw.githubusercontent.com/Hinara/linux-vm-tools/ubuntu20-04/ubuntu/20.04/install.sh % sudo chmod +x install.sh % sudo ./install.sh 在Windows Power Shell运行以下命令,然后重启。 \> Set-VM -VMName <your\_vm\_name> -EnhancedSessionTransportType HvSocket 重启后,就能看到链接虚拟机后会话已经为增强会话模式而后Ubuntu进入的XRDP登录页面,此时正常输入用户名密码即可。

五月 25, 2021