THE JOURNAL / DAY ONE

从一台服务器,
到自己的数字空间

今天,把原来的 Python 文件共享程序搬上服务器,接好子域名,再为自己搭起一个主页。这里把过程中的选择、调整和结果一起留下来。

· guguking · 按北京时间记录

今天留下了这些东西

  • guguking.com:个人主页与服务入口。
  • code.guguking.com:保留原来的 code-server,继续使用它自己的登录验证。
  • file.guguking.com:带账号验证的文件服务器,可以上传、下载和新建文本。
  • 完整的私人操作记录、原程序副本和旧业务备份。
01 / BEFORE WE BUILD

先盘点,再决定清理范围

最初的想法是清空服务器,重新搭一套文件服务。登录后先检查了系统、磁盘、监听端口、运行中的服务和已有目录,确认旧网站由 Docker 中的 Nginx 提供,code-server 则在独立运行。

随后调整了范围:不重装系统,只删除旧网站容器,保留 code-server、Docker 引擎、原网站文件和开发环境。删除前后核对了 code-server 的进程编号与启动时间,确认没有受到影响。

原来的 share.py 保留不动,在副本上开发;旧业务和配置做了本地备份,并对下载前后的校验值进行比对。验收结束后,清除了服务器上的临时备份副本与测试文件。

02 / PYTHON FILE SERVER

让文件共享程序也能写一点文字

沿用 Python 标准库的 http.server,保留目录浏览、文件上传、文件夹上传、单文件下载及目录 ZIP 下载。新增“新建文本文件”窗口:填写文件名、输入文字,保存为 UTF-8 文件。

  • 同名文件不会被覆盖,保存失败时输入的文字保留在窗口中。
  • 补充路径检查和跨源写入拦截,下载文件按附件处理。
  • 上传的 index.html 不会替换目录页面,HTML 文件也按附件下载。
  • 验证了中文内容、文件下载、重名冲突、ZIP 下载和路径访问限制。

部署使用 Python、Caddy 和 systemd:Python 处理文件,Caddy 处理网站入口与登录验证,systemd 负责后台运行、异常重启和开机启动。文件服务以独立系统用户运行,后端仅监听服务器内部地址。

03 / GETTING IN

从端口入口,走到更好记的地址

文件服务最初通过主域名提供 HTTPS 访问。为了和 8080 上的代码编辑器区分,又把文件服务入口移到 8081,释放了 80 端口。文件网站的访问密码也按要求更新,并验证新密码可以使用、旧密码已失效。

之后遇到一次“无法访问”。检查时公网端口、服务状态和账号登录均正常,最终确认与地址输入有关:当时 8081 提供的是 HTTPS,省略协议后浏览器可能按 HTTP 请求。为满足直接输入“域名加端口”的使用习惯,8081 后来改为 HTTP,并保留登录验证。

再往后决定使用子域名,不再记端口号。现在输入代码或文件子域名,就能从默认 HTTP 入口自动转到对应的 HTTPS 页面。此前的端口入口暂时保留。

04 / DOMAIN NAMES

分清域名购买、DNS 解析和备案

为代码空间选择 code.guguking.com,为文件空间选择 file.guguking.com。文件子域名最终使用的是单数 file,不是最初讨论的 files。

添加记录时发现:域名虽然在阿里云管理,注册局指定的权威 DNS 却属于 DNSPod。因此,仅在阿里云解析后台增加记录,不会改变当前实际生效的解析。核对注册局和多处 DNS 查询结果后,改由本人在 DNSPod 添加记录。

期间也讨论过把 DNS 和备案接入统一到阿里云;了解了记录迁移、修改 DNS 服务器以及接入备案的区别后,最终决定暂不迁移。DNS 继续由 DNSPod 提供,备案接入没有变更。

记录生效后,刷新服务器 DNS 缓存,重试证书申请。两个子域名均通过公网验证:代码空间能打开登录页,文件空间要求登录且原账号可用。主域名与 www 的 A 记录也随后查到正确的服务器地址。

DNSPod 保留 · 子域名已接通
05 / A PLACE OF MY OWN

最后,为自己留一个主页

主域名原来会跳转到文件服务器,现在换成独立的静态个人主页。介绍保留一句简单的话:“这是guguking的网站”。联系邮箱为 a282928@outlook.com,页面同时提供代码编辑器和文件服务器入口。

主页采用浅色背景与绿色点缀,适配手机与桌面。静态页面直接部署在自己的服务器上,由 Caddy 提供访问,不需要再启动一套网站应用。

最后把今天的过程整理成这篇建站记录,并在主页增加文章入口。以后回看时,既能看到最后搭成了什么,也能知道中间为什么改过端口、为什么去 DNSPod 添加记录,以及哪些迁移只是讨论而没有执行。

主页与今日记录已发布
06 / MY TECH STACK

我的技术栈:每一层负责什么

这套网站部署在阿里云服务器上,当前使用以下组件。版本和目录在发布前通过服务器实际查询核对。

组成使用的技术与职责
服务器系统Debian GNU/Linux 13.1,提供运行环境、磁盘和系统服务。
个人主页与文章原生 HTML + CSS 静态页面,使用响应式布局;当前没有前端框架,也不需要构建或数据库。
文件服务后端Python 3.13.5,基于标准库 http.server 的 ThreadingHTTPServer 与 SimpleHTTPRequestHandler,运行改造后的 share.py。
文件服务前端HTML、CSS 和原生 JavaScript。通过 fetch 发送 HTTP PUT 请求上传文件、保存 UTF-8 文字;ZIP 使用 Python 标准库 zipfile 生成。
网站入口Caddy 2.6.2,按域名分发请求、提供 HTTPS、申请和续期证书、记录访问日志,并为文件网站提供 HTTP Basic 账号验证;密码以 bcrypt 哈希配置。
后台进程管理systemd 管理 Python 文件服务的开机启动和异常重启。服务名称为 fileshare.service;Caddy 由 caddy.service 管理。
浏览器代码编辑器保留既有的 code-server 4.110.0~rc.1,继续使用原来的登录验证,由 Caddy 反向代理到其 8080 端口。
域名解析腾讯 DNSPod。@、www、code、file 的 A 记录指向同一台服务器,再由 Caddy 区分服务。
数据存储服务器本地文件系统。上传文件和新建文本直接写入磁盘;当前没有 MySQL、PostgreSQL 或对象存储。
容器使用情况旧 Nginx 网站容器已删除,Docker 引擎保留。本次的个人主页和 Python 文件服务直接部署在系统中,没有放进 Docker 容器。

访问请求如何到达文件

浏览器 → Caddy(80 自动转 HTTPS,443 接收请求)
  guguking.com       → 读取静态主页与文章
  www.guguking.com   → 跳转至 guguking.com
  code.guguking.com  → 127.0.0.1:8080 → code-server
  file.guguking.com  → 登录验证 → 127.0.0.1:8000 → Python → 磁盘文件

原来的 8080、8081 端口入口暂时保留。日常访问使用上面的子域名;Python 文件后端的 8000 端口只监听本机回环地址。

07 / WHERE EVERYTHING LIVES

文件到底存放在哪里

通过文件网站上传或新建的内容,实际存放在服务器的 /srv/fileshare/。 浏览器中的目录结构与这里对应。它与个人主页的静态文件目录分开,上传文件不会自动出现在主页上。

服务器上的程序、内容与配置

用途实际位置
文件服务器程序/opt/fileshare/share.py
处理目录浏览、上传、下载、ZIP 和新建文本。
上传和新建的文件/srv/fileshare/
例如在文件网站根目录创建“笔记.txt”,服务器上对应 /srv/fileshare/笔记.txt。这是路径示例,不代表已创建该文件。
主页静态目录/srv/guguking-homepage/
由 Caddy 直接读取并提供访问。
主页 HTML/srv/guguking-homepage/index.html
当前这篇文章/srv/guguking-homepage/journal/2026-10-22/index.html
域名、HTTPS 与反向代理/etc/caddy/Caddyfile
配置各域名对应的服务及文件网站的认证规则。
文件服务启动配置/etc/systemd/system/fileshare.service
指定运行用户 fileshare、程序路径、数据目录和重启策略。
code-server 服务模板/usr/lib/systemd/system/code-server@.service
目前使用 code-server@root.service 这个实例。
code-server 配置/root/.config/code-server/config.yaml
是私有配置文件,不作为网页公开。
code-server 用户数据/root/.local/share/code-server/
用于编辑器自身的用户数据;项目文件位置取决于编辑器中打开的文件夹。
保留的旧项目目录/srv/guguking.com/
/home/guguking/file_and_txt/
/root/mycode/
/root/test/
这些目录已确认保留,未因删除旧网站容器而清空。

访问日志与部署记录

记录类型实际位置或查看方式
Caddy 访问日志/var/log/caddy/
主页:homepage-access.log
代码子域名:code-access.log
文件子域名:file-domain-access.log
旧文件入口:files-access.log
访问日志设置了大小轮转和保留数量。
Python 与代理运行日志journalctl -u fileshare
journalctl -u caddy
由 systemd journal 管理,持久日志目录为 /var/log/journal/。
当天部署操作记录/var/log/fileshare-deployment/20261022/
保存服务器侧变更日志、部分配置备份和操作记录,未放进网站静态目录。

本地电脑上的源码与备份

原始 Python 程序仍在 Windows 电脑的 E:\文件服务器\share.py,原文件未修改。今天的工作副本、页面源码、操作日志和备份统一保存在:

C:\Users\guguking\Documents\ChatGPT\本地\server-migration-20261022\
  • share.original.py:原始程序备份;share.py:改造后的文件服务器程序。
  • homepage/dist/index.html:个人主页源码。
  • homepage/dist/journal/2026-10-22/index.html:这篇文章的源码。
  • 操作记录.md、remote-operations.log 和各验证日志:操作过程、命令输出及检查结果。
  • legacy-backup.tar.gz:旧业务与配置的本地备份。它不在公开网站目录中。

这里公开的是文件位置与技术说明,不是文件访问权限。配置、日志、备份和编辑器私有数据不会因为列出路径而通过主页提供下载;它们的内容仍需在本地或登录服务器后查看。

本文是根据今天的实际操作整理的公开记录。密码、密钥、身份资料和私人备份未公开;包含具体命令、输出、配置备份与验证结果的详细运维记录另行保存。本文所述状态以 2026 年 10 月 22 日本次发布时为准。