登录Ubuntu
创建文件夹
1 2 3 4 5 6
| mkdir -m 777 -p typecho/nginx/conf.d mkdir -m 777 -p typecho/nginx/certs mkdir -m 777 -p typecho/nginx/app mkdir -m 777 -p typecho/mariadb mkdir -m 777 -p typecho/usr mkdir -m 777 -p typecho/uploads
|
配置ddns-go
1 2 3 4 5 6 7
| # 先确保目录存在(如果已存在可跳过) mkdir -p ~/ddns-go
# 然后赋予权限(不需要sudo) chmod 777 ~/ddns-go 或者直接使用绝对路径: chmod 777 /home/zhang-u/ddns-go
|
1
| sudo docker run -d --name ddns-go --restart=always -p 9876:9876 --net=host -v ~/ddns-go:/root jeessy/ddns-go
|
1 2 3
| 登录地址:http://你Ubuntu的IP地址:9876,例如http://192.168.200.25:9876 登录后先配置用户名和密码 配置域名和解析方式,我的域名是blog.lelez.site
|
上传证书文件
先上传证书到ubutu的一个文件夹,然后拷贝证书文件到建立的文件夹typecho/nginx/certs内
例如先用SSH工具上传到/home/zhang-u/下载,然后执行拷贝
1 2
| > cp /home/zhang-u/下载/_.lelez.site.key ~/typecho/nginx/certs > cp /home/zhang-u/下载/_.lelez.site.crt ~/typecho/nginx/certs
|
配置typecho.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| # HTTPS 配置 server { listen 443 ssl http2; server_name blog.lelez.site;
# SSL 证书 (放到 /home/zhang-u/typecho/nginx/certs/) ssl_certificate /etc/nginx/certs/_.lelez.site.crt; ssl_certificate_key /etc/nginx/certs/_.lelez.site.key;
# TLS 推荐配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'; ssl_prefer_server_ciphers on;
# 日志(可选) access_log /var/log/nginx/typecho_access.log; error_log /var/log/nginx/typecho_error.log;
# 反向代理到 typecho 容器 (走 mynet 网络) location / { proxy_pass http://typecho:80; # 注意:这里用的是 docker 服务名 typecho proxy_http_version 1.1; 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; }
# 静态文件缓存(可选优化) location ~* \.(jpg|jpeg|gif|png|webp|ico|css|js|woff|woff2|ttf|svg|eot|mp4|avi|mov)$ { expires 30d; access_log off; proxy_pass http://typecho:80; } }
|
- 上传
typecho.conf到~/typecho/nginx/conf.d内
先上传typecho.conf到Ubuntu的/home/zhang-u/下载文件夹,并拷贝这个文件到typecho/nginx/conf.d内
1
| cp /home/zhang-u/下载/typecho.conf ~/typecho/nginx/conf.d
|
上传后假如需要修改,用下边的命令
1
| nano ~/typecho/nginx/conf.d/typecho.conf
|
在里边修改后按ctrl+x,然后回车,然后yes保存退出
或者ctrl+o后回车,然后yes保存退出
配置docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| # version: '3.8'
services: mariadb: image: linuxserver/mariadb container_name: mariadb environment: - PUID=1000 - PGID=1001 - MYSQL_ROOT_PASSWORD=110119asdF! - MYSQL_DATABASE=typecho - MYSQL_USER=typecho - MYSQL_PASSWORD=TypechoPass123! - TZ=Asia/Shanghai volumes: - /home/zhang-u/typecho/mariadb/config:/config ports: - 43306:3306 networks: - mynet restart: unless-stopped
adminer: image: adminer:latest container_name: adminer environment: - ADMINER_DEFAULT_SERVER=mariadb ports: - 48079:8080 networks: - mynet depends_on: - mariadb restart: unless-stopped typecho: image: joyqi/typecho:nightly-php8.2-apache container_name: typecho-server restart: unless-stopped environment: - TYPECHO_SITE_URL=https://blog.lelez.site/ - TYPECHO_DB_ADAPTER=Pdo_Mysql - TYPECHO_DB_HOST=mariadb - TYPECHO_DB_PORT=3306 - TYPECHO_DB_NAME=typecho - TYPECHO_DB_USER=typecho - TYPECHO_DB_PASSWORD=TypechoPass123! - TYPECHO_REWRITE=1 ports: - 48080:80 networks: - mynet depends_on: - mariadb volumes: - /home/zhang-u/typecho/usr:/app/usr - /home/zhang-u/typecho/uploads:/app/usr/uploads
nginx: image: nginx:latest container_name: nginx ports: - 80:80 - 443:443 volumes: - /home/zhang-u/typecho/nginx/conf.d:/etc/nginx/conf.d - /home/zhang-u/typecho/nginx/certs:/etc/nginx/certs networks: - mynet depends_on: - typecho restart: unless-stopped
networks: mynet: name: mynet
|
注意我docker compose里的配置全部写成了绝对路径/home/zhang-u/typecho/,而不是短路径~/typecho/
先上传docker-compose.yml到Ubuntu的/home/zhang-u/下载文件夹,并拷贝这个文件到typecho/内
1
| cp /home/zhang-u/下载/docker-compose.yml ~/typecho
|
上传后假如需要修改,用下边的命令
1
| nano ~/typecho/docker-compose.yml
|
在里边修改后按ctrl+x,然后回车,然后yes保存退出
或者ctrl+o后回车,然后yes保存退出
运行
假如报错说权限问题,请执行以下命令
1 2
| sudo chown -R www-data:www-data /home/zhang-u/typecho/uploads sudo chown -R www-data:www-data /home/zhang-u/typecho/usr
|
权限通常是因为Typecho 容器里的 Apache/PHP 是以 www-data 用户运行,所以宿主机挂载的目录必须属于 www-data 才能写
其他
任何修改要使其生效,修改后去执行下边命令
1 2
| docker compose down docker compose up -d
|
以上命令需在docker-compose.yml文件所在目录执行才能生效
在 Linux 中,cp 命令默认只能复制文件,不能复制目录。如果你要复制一个目录及其内容,必须加上 -r 参数。
例如:
1
| cp /source/dir /destination/
|
这个命令会报错,因为 /source/dir 是一个目录,而你没加 -r。
正确的写法是:
1
| cp -r /source/dir /destination/
|
你想把 /home/zhang-u/typecho/usr/uploads/2025/09/* 这些子文件夹(比如 04、05、07、08)拷贝到 /home/zhang-u/typecho/uploads/2025/,你应该这样写:
1
| cp -r /home/zhang-u/typecho/usr/uploads/2025/09/* /home/zhang-u/typecho/uploads/2025/
|
⚠️ 注意:
- 使用
* 表示匹配所有子文件夹和文件。
- 如果目标路径
/home/zhang-u/typecho/uploads/2025/ 不存在,需要先创建它。
- 如果你只想复制某个特定文件夹,比如
04,就写成:
1
| cp -r /home/zhang-u/typecho/usr/uploads/2025/09/04 /home/zhang-u/typecho/uploads/2025/
|
📌 小贴士
确保目标目录存在:
1
| mkdir -p /home/zhang-u/typecho/uploads/2025
|
检查权限: 确保你有读取源目录和写入目标目录的权限。如果提示权限不足,可以使用 sudo:
1
| sudo cp -r /home/zhang-u/typecho/usr/uploads/2025/09/* /home/zhang-u/typecho/uploads/2025/
|
避免覆盖已有文件? 如果不想覆盖,可以用 -n 参数:
1
| cp -rn /home/zhang-u/typecho/usr/uploads/2025/09/* /home/zhang-u/typecho/uploads/2025/
|
✅ 总结
你的错误是因为 复制目录时缺少 -r 参数。
👉 解决方法:加上 -r 即可!
1
| cp -r /home/zhang-u/typecho/usr/uploads/2025/09/* /home/zhang-u/typecho/uploads/2025/
|
试试看吧!✅