记录第一次搭图床

5 min

解析域名

登录你的域名注册商,例如:.xyz,进入 DNS 解析管理。

添加一条 A 记录

  • 主机记录: image (或者 img, static 等你喜欢的名字)
  • 记录值: [你的服务器 IP 地址]

保存后,等待一小会儿生效。现在 image.example.xyz 就会指向你的服务器了。

docker 部署 Lsky Pro

我们将使用 Docker Compose 来启动 Lsky Pro 服务。

# 1. 创建 lsky-pro 应用数据目录
sudo mkdir -p /root/data/docker_data/lsky-pro/lsky-pro-data

# 2. 创建 MySQL 数据库数据目录
sudo mkdir -p /root/data/docker_data/lsky-pro/db

创建 docker-compose.yml

services:
  lsky-pro:
    container_name: lsky-pro
    image: dko0/lsky-pro
    restart: always
    volumes:
      - /root/data/docker_data/lsky-pro/lsky-pro-data:/var/www/html
    ports:
      - 8080:80
    environment:
      - MYSQL_HOST=mysql
      - MYSQL_DATABASE=lsky-pro
      - MYSQL_USER=lsky-pro
      - MYSQL_PASSWORD=lsky-pro

  mysql:
    image: mysql:8.0
    container_name: lsky-pro-db
    restart: always
    environment:
      - MYSQL_DATABASE=lsky-pro
      - MYSQL_USER=lsky-pro
      - MYSQL_PASSWORD=lsky-pro
      - MYSQL_ROOT_PASSWORD=lsky-pro # 注意:这个 root 密码和 lsky-pro 用户密码相同
    volumes:
      - /root/data/docker_data/lsky-pro/db:/var/lib/mysql

设置新目录权限

# 1. Lsky Pro (PHP) 权限
sudo chown -R 33:33 /root/data/docker_data/lsky-pro/lsky-pro-data

# 2. MySQL 数据库权限
sudo chown -R 999:999 /root/data/docker_data/lsky-pro/db

启动服务:sudo docker compose up -d.

安装和配置 Nginx(反向代理)

我们需要 Nginx 来接收来自 image.example.xyz 的 80 端口(HTTP)请求,并将其转发到 Lsky Pro 正在运行的 8080 端口。

# 1. 安装 Nginx
sudo apt install -y nginx

# 2. 创建一个新的 Nginx 配置文件
sudo nano /etc/nginx/sites-available/image.example.xyz

配置文件的内容如下:

server {
    listen 80;
    server_name image.example.xyz; # 换成你的子域名

    location / {
        # 核心:反向代理到 Lsky Pro 容器
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

启用这个配置:

# 1. 删除默认的配置(如果有的话)
sudo rm /etc/nginx/sites-enabled/default

# 2. 启用你的新配置
sudo ln -s /etc/nginx/sites-available/image.example.xyz /etc/nginx/sites-enabled/

# 3. 测试 Nginx 配置是否有语法错误
sudo nginx -t
# (如果显示 ...syntax is ok, ...test is successful 就说明没问题)

# 4. 重启 Nginx 使配置生效
sudo systemctl restart nginx

现在,访问 http://image.example.xyz,你应该能看到 Lsky Pro 的安装向导了。但先别急着安装,我们先配置 HTTPS。

配置 HTTPS(SSL 证书)

我们将使用 Certbot 自动为你的域名配置免费的 Let’s Encrypt 证书。

# 1. 安装 Certbot 及其 Nginx 插件
sudo apt install -y certbot python3-certbot-nginx

# 2. 自动配置 HTTPS (记得替换域名)
sudo certbot --nginx -d image.example.xyz

完成后,Certbot 会自动修改 Ngi你的浏览器收到数据,解密,并最终显示出 Lsky Pro 的安装页面。nx 配置,并设置证书自动续期。

访问安装

当你在浏览器访问 https://image.aununo.xyz 时,浏览器向公共 DNS 服务器(比如 8.8.8.8)查询:“image.aununo.xyz 的 IP 地址是什么?”

DNS 服务器查询全球地址簿,找到了你添加的那条 A 记录:“哦,image.aununo.xyz 指向 [你的服务器 IP]”。

浏览器知道了 IP 地址,于是它向服务器的 443 端口发起连接请求。

服务器防火墙检查规则表,看到允许 TCP 端口 443 的流量进入,遂放行,请求进入服务器。

IMPORTANT

注意,这里要添加服务器的出入站规则以及检查内部防火墙ufw.

Nginx 此时正在监听 443 端口,查看请求,发现是 HTTPS,它使用你通过 Certbot 配置的 SSL 证书,与你的浏览器“握手”,建立一条加密通道。它负责了所有的加密/解密工作。

Nginx 查看请求的 server_name(主机名),发现是 image.aununo.xyz。它立刻去 /etc/nginx/sites-enabled/ 目录查找,找到了 image.aununo.xyz 这个配置文件(软链接)。

Nginx 读取配置文件的核心指令:proxy_pass http://127.0.0.1:8080; 把这个请求原封不动地转发给服务器内部的 8080 端口,然后等待回复。

请求到达了服务器的 8080 端口。Docker 正在监听这个端口,转交给 lsky-pro 容器内部的 80 端口。

PHP 程序开始执行,由于在一个 docker 网络下,lsky-pro 容器成功连接到 lsky-pro-db 容器。

它在自己的数据库 MYSQL_DATABASE=lsky-pro 里查询数据,然后把结果返回给 lsky-pro 容器。

最终,一层一层的传回来,你的浏览器收到数据,解密,并最终显示出 Lsky Pro 的安装页面。