记录第一次搭图床
准备工作
由于服务器上可能运行着其他服务(如 80、443、8080 端口已被占用),我们需要为图床选一个空闲端口。
在终端执行以下命令,检查 8090 是否被占用:
sudo ss -tunlp | grep 8090
# 如果没有任何输出,说明端口空闲,可以使用接着登录你的域名注册商,进入 DNS 解析管理,添加一条 A 记录:
- 主机记录: 例如
image - 记录值:
[你的服务器 IP 地址]
保存后,等待一小会儿生效。现在 image.aununo.xyz(以此为例)就会指向你的服务器了。
Docker 部署 Lsky Pro
我们将使用 Docker Compose 来启动 Lsky Pro 服务。为了安全起见,我们不在 root 用户下运行,而是使用当前用户(如 aununo)。
首先创建必要的目录:
# 1. 创建 lsky-pro 应用数据目录
mkdir -p ~/data/docker_data/lsky-pro/lsky-pro-data
# 2. 创建 MySQL 数据库数据目录
mkdir -p ~/data/docker_data/lsky-pro/db在同级目录下创建 docker-compose.yml:
services:
lsky-pro:
container_name: lsky-pro
image: dko0/lsky-pro
restart: always
volumes:
- ~/data/docker_data/lsky-pro/lsky-pro-data:/var/www/html
ports:
- 127.0.0.1:8090:80 # 仅监听本地 8090,避免对外暴露,配合 Nginx 反代
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 # 注意:生产环境建议设置复杂的密码
volumes:
- ~/data/docker_data/lsky-pro/db:/var/lib/mysql设置目录权限,确保容器内的服务可以读写挂载的卷:
# 1. Lsky Pro (PHP) 权限 (www-data 用户 ID 通常为 33)
sudo chown -R 33:33 ~/data/docker_data/lsky-pro/lsky-pro-data
# 2. MySQL 数据库权限 (mysql 用户 ID 通常为 999)
sudo chown -R 999:999 ~/data/docker_data/lsky-pro/db启动服务:docker compose up -d
安装和配置 Nginx(反向代理)
我们需要宿主机的 Nginx 来接收来自 image.aununo.xyz 的 80/443 请求,并将其转发到 Docker 容器正在运行的 8080 端口。
首先安装 Nginx (如果尚未安装),sudo apt install -y nginx.
创建一个新的 Nginx 配置文件 sudo nano /etc/nginx/sites-available/image.aununo.xyz
配置文件内容如下:
server {
listen 80;
server_name image.aununo.xyz; # 换成你的图床域名
location / {
proxy_pass http://127.0.0.1:8090;
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;
client_max_body_size 100m;
}
}启用这个配置:
# 1. 启用你的新配置(创建软链接)
sudo ln -s /etc/nginx/sites-available/image.aununo.xyz /etc/nginx/sites-enabled/
# 2. 测试 Nginx 配置是否有语法错误
sudo nginx -t
# (如果显示 ...syntax is ok, ...test is successful 就说明没问题)
# 3. 重启 Nginx 使配置生效
sudo systemctl reload nginx配置 HTTPS(SSL 证书)
我们将使用 Certbot 自动为你的域名配置免费的 Let’s Encrypt 证书。
# 1. 安装 Certbot 及其 Nginx 插件
sudo apt install -y certbot python3-certbot-nginx
# 2. 自动配置 HTTPS
sudo certbot --nginx -d image.aununo.xyz
完成后,Certbot 会自动修改 Nginx 配置文件,开启 HTTPS 强制跳转,并设置证书自动续期。访问与原理分析
现在,访问 https://image.aununo.xyz,你应该能看到 Lsky Pro 的安装向导了。
发生了什么?
DNS 解析: 当你在浏览器访问 image.aununo.xyz 时,浏览器向 DNS 服务器查询,得到了一条 A 记录,指向你的服务器 IP。
建立连接: 浏览器向服务器的 443 端口发起连接请求。
[!IMPORTANT] 确保你的云服务器安全组(防火墙)已经放行了 80 和 443 端口。
Nginx 握手: 宿主机的 Nginx 监听到 443 端口的请求,利用 Certbot 申请的 SSL 证书与浏览器完成加密握手。它根据 server_name 匹配到 image.aununo.xyz 的配置文件。
反向代理: Nginx 读取配置 proxy_pass http://127.0.0.1:8080;,将请求解密后,转发给本地的 8080 端口。
Docker 内部处理: Docker 监听宿主机的 8080 端口,将请求转交给 lsky-pro 容器内部的 80 端口。 PHP 程序开始执行,通过 Docker 内部网络连接到 mysql 数据库容器,查询数据。
响应返回: 最终,数据沿着原路层层返回:数据库 -> PHP 容器 -> 宿主机 Nginx -> 加密 -> 你的浏览器。