服务器的折腾

一台腾讯云的学生云服务器(10元/月 1核2G内存50G硬盘)
一个.cn结尾的域名
两者结合能有啥用?
以下是我的一些想法

基础设施

了解需求

首先,服务器上主要是跑一些web应用

  • 个人博客
  • 个人网盘

本来还想弄一个phith0n师傅那样的conote安全测试辅助工具(未开源,懒,菜)

其次,想用二级域名来访问应用,支持https,同时域名的安全组里面不需要开放多余的端口

最后,就是应用应该容易移植

最终方案

首先,决定使用nginx进行反向代理,方便二级域名访问

其次,使用acme.shletsencrypt生成免费的证书,支持https

最后,就是应用的容器化,主要还是使用docker-compose,方便数据卷的映射和启动服务

注意

这里需要注意一点,如果多个镜像(包括每个镜像运行的多个容器)使用了同一个基础镜像,是不会花费额外的空间的,这个归功于dockerOverlay文件系统

由于mysql的镜像是在基础镜像debian:buster-slim上构建的,所以对于其他镜像如nginxphp我都会选择基于debian:buster-slim镜像的版本。(所以没必要使用alpine)

基础镜像

经过上面的考虑,在网上进行了筛选,最后选择了neilpang/letsproxy镜像
该镜像基于jwilder/nginx-proxy镜像,在此基础上添加了一个acme.sh支持
如果需要个人定制,就可以将其克隆后,自行修改

简单介绍docker-compose用法

version: '2'

services:
  letsproxy:
    image: neilpang/letsproxy
    ports:
      - "80:80"
      - "443:443"
      volumes:
        - /var/run/docker.sock:/tmp/docker.sock:ro
        - ./proxy/certs:/etc/nginx/certs
        - ./proxy/acme:/acmecerts
        - ./proxy/conf.d:/etc/nginx/conf.d
        - ./proxy/vhost.d:/etc/nginx/vhost.d \
        - ./proxy/stream.d:/etc/nginx/stream.d \
        - ./proxy/dhparam:/etc/nginx/dhparam \
      environment:
        ENABLE_IPV6: "true" #开启ipv6,一般云服务器都没有ipv6
        DEFAULT_HOST: m0yuqi.cn #默认主机
      network_mode: "host"

此外有一些启动其他容器时的环境参数

  • VIRTUAL_HOST: m0yuqi.cn,www.m0yuqi.cn #代理的主机
  • ENABLE_ACME: "true" #开启https
  • VIRTUAL_PORT: 8888 #多端口时,代理的端口
  • NETWORK_ACCESS: "internal" #容器只能内部访问

个人博客

了解需求

首先,是一个拥有后端的博客,且前端好看

其次,简洁,便于管理

最后,就是支持markdown

最终方案

在对比多个博客系统之后,决定使用轻量高效,简洁友好的Typecho
之后的主题选择了Story,也是比较简洁的

具体实现

依赖镜像nginx:latest+php:7.3-fpm
数据库使用php自带的sqlite
为啥选sqlite

  • 数据量不高
  • 博客访问量不高
  • 对数据库来说是读多写少
  • 整个数据库存储在一个单个的文件中,数据导入导出备份恢复都是复制文件

最终使用docker-compose编排,docker-compose up -d运行,docker-compose.yml文件如下

version: "3"
services:
    nginx:
        image: nginx:latest
        restart: always
        volumes:
            - ./www:/var/www/html
            #还可以映射一些配置文件
        environment:
            VIRTUAL_HOST: m0yuqi.cn,www.m0yuqi.cn
            ENABLE_ACME: "true"
            TZ: Asia/Shanghai
        networks:
            - default
    php:
        image: php:7.3-fpm
        volumes:
            - ./www:/var/www/html
            #还可以映射一些配置文件
        networks:
            - default

networks:
    default:

个人网盘

了解需求

首先,一个容量够大的网盘(显然存云服务器不行

其次,下载速度要比某度网盘快(主要是没钱

最后,可以和某度网盘一样分享文件

最终方案

了解现有的软件后,也想起了我白嫖的那个office 365,看到我的onedirve有5T容量,也不想买阿里云OSS、腾讯云COS(穷,缺富婆)

最终选择了cloudreveonedrive的方案,数据库还是sqlite,但此方案仍然有以下缺点,将就着用

  • cloudreve不会把onedrive所有文件同步,只会记录你在cloudreve上传的文件
  • 不可以批量删除文件
  • 下载速度感觉还是不快

优点如下

  • 分享文件时限制下载次数,
  • 可设置预览,设置过期时间,设置分享密码

具体实现

由于是个人使用,就禁止了注册功能
镜像地址xavierniu/cloudreve
如果需要个人定制,就可以将其克隆后,自行修改
docker-compose.yml文件如下

version: "3"
services:

    cloudreve: 
        image: xavierniu/cloudreve
        environment: 
            PUID: 1000
            PGID: 1000
            VIRTUAL_HOST: pan.m0yuqi.cn
            ENABLE_ACME: "true"

windows设置

一般来说,在线的,都有可能不靠谱
为了备份,是时候拿出我珍藏的1T移动硬盘了
主要是将windows上的OneDrive应用的同步文件夹放在了我的硬盘上
当我需要备份的时候,只需插入硬盘,打开OneDrive应用,就会自动同步到硬盘中
快哉,美哉!!!
可惜linux不能访问这个同步文件夹

总结

人总是要折腾的。。。

https://github.com/acmesh-official/acme.sh
https://github.com/Neilpang/letsproxy
https://github.com/nginx-proxy/nginx-proxy
https://github.com/typecho/typecho
https://github.com/txperl/Story-for-Typecho
https://github.com/cloudreve/Cloudreve
https://github.com/xavier-niu/cloudreve-docker
Edit with markdown