1panel或则docker部署chevereto开心版
Tanwan

1Panle 部署

安装1panel

在线安装 - 1Panel 文档

1
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh

一路回车即可安装,记得保存面板信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[1Panel Log]: 启动 1Panel 服务
[1Panel Log]: 1Panel 服务启动成功!
[1Panel Log]:
[1Panel Log]: =================感谢您的耐心等待,安装已经完成==================
[1Panel Log]:
[1Panel Log]: 请用浏览器访问面板:
[1Panel Log]: 外网地址: http://35.194.135.232:14705/8dfe25e2d1
[1Panel Log]: 内网地址: http://10.140.0.7:14705/8dfe25e2d1
[1Panel Log]: 面板用户: 1c3e070d23
[1Panel Log]: 面板密码: 86925adabc
[1Panel Log]:
[1Panel Log]: 项目官网: https://1panel.cn
[1Panel Log]: 项目文档: https://1panel.cn/docs
[1Panel Log]: 代码仓库: https://github.com/1Panel-dev/1Panel
[1Panel Log]:
[1Panel Log]: 如果使用的是云服务器,请至安全组开放 14705 端口
[1Panel Log]:
[1Panel Log]: 为了您的服务器安全,在您离开此界面后您将无法再看到您的密码,请务必牢记您的密码。
[1Panel Log]:
[1Panel Log]: ================================================================

1panle设置

访问面板分别在左侧导航栏安装对应服务

网站

未检测到 OpenResty ,请进入应用商店点击安装!


默认设置-直接点击确认即可
image-20241101215025261 

数据库

未检测到 数据库服务 (MySQL 或 MariaDB) ,请进入应用商店点击安装!

image-20241101215144284
默认设置-直接点击确认即可
image-20241101214550593

提示

当前未勾选端口外部访问,将无法通过外网IP:端口访问,是否继续?

选择 确认

创建chevereto数据库

  • 重新点击左侧导航栏数据库-创建数据库

    image-20241101215735942

名称和用户名都是chevereto 密码自己设置或则生成都可以记得保存后面需要使用

设置好以后点击确认创建。

名称 chevereto
用户名 chevereto
密码 DDPXDPy22m7kZJiW
权限 所有人(%)

主机

  • 点击左侧导航栏主机-文件-进入opt目录
  • 点击创建-文件夹-名称chevereto -权限先不用动
  • 进入chevereto文件夹-远程下载

image-20241101221023636

  • 下载完成后,opt/chevereto文件夹下会有CheveretoV4.zip文件

  • 点击解压-保持解压路径/opt/chevereto-确认

  • 再在/opt/chevereto下创建一个文件夹asset
    最后/opt/chevereto目录包含以下文件和文件夹
    image-20241101221254909

  • 返回opt目录下

  • 选择chevereto前面的复选框
    image-20241101221442658

  • 点击权限 把用户组和公共写入打上✅后确认

image-20241101221547118

容器

拉取镜像

  • 点击左侧导航栏-容器
  • 点击镜像
  • 点击拉取镜像
  • 取消镜像仓库
  • 输入镜像名ghcr.io/chevereto/chevereto:4.0.9
  • 点击拉取

image-20241101220242602

耐心等待镜像拉取完成,镜像大小有900多MB,速度取决于你的主机网络环境

等到末尾出现这两行字样,代表拉取完成

1
2
3
{"status":"Digest: sha256:f6f657ab0b7f432dd56bc19e5fe693fd85f2a78e296d3586b33920284f27dbbb"}

{"status":"Status: Downloaded newer image for ghcr.io/chevereto/chevereto:4.0.9"}

部署容器

  • 回到 容器 界面

  • 创建容器

    image-20241101222031860

名称chevereto

镜像选择ghcr.io/chevereto/chevereto:4.0.9

暴露端口 服务器任意未被占用的端口这里示例为4243

容器端口 固定80

网络 选择1panel-network

挂载需要两个本机目录

/opt/chevereto /var/www/html/
/opt/chevereto/asset /var/www/html/images/_assets/

image-20241101222421826

重启规则 选择一直重启

环境变量-需要注意的是

CHEVERETO_DB_PASS=DDPXDPy22m7kZJiW改为你之前保存的数据库密码

1
2
3
4
5
6
7
8
CHEVERETO_DB_HOST=mysql
CHEVERETO_DB_USER=chevereto
CHEVERETO_DB_PASS=DDPXDPy22m7kZJiW
CHEVERETO_DB_PORT=3306
CHEVERETO_DB_NAME=chevereto
CHEVERETO_ASSET_STORAGE_TYPE=local
CHEVERETO_ASSET_STORAGE_URL=/images/_assets/
CHEVERETO_ASSET_STORAGE_BUCKET=/var/www/html/images/_assets/

检查无误后点击确认

编辑

编辑容器需要重建,任何未持久化的数据将丢失,是否继续?

选择确认

如果上诉步骤正确操作后打开IP+端口可以正确进入安装页面

我这里是35.194.135.232:4243

配置好管理员信息点击安装

image-20241101223317924

进入仪表盘 试一下上传没有问题,chevereto更多内容自行研究

image-20241101223436760

域名和SSL

现在访问方式是IP+端口不方便也不安全,图床内容也受限制,为了解决这个问题,首先将你的vps绑定好域名

我这里绑定了img.yyaohuo.me

创建网站

然后回到最开始的1panel-网站-创建网站

  • 选择反向代理
  • 主域名设置域名
  • 代理地址设置为IP:端口

image-20241101224505503

申请证书

  • 创建Acme账户
  • 输入邮箱后点击确定(邮箱可以随便输入)

image-20241101224856691

  • 创建完Acme账户后点击申请证书

  • 主域名可以从网站中获取

  • 验证方式选择HTTP,然后点击确认

    image-20241101225136270

    1
    2024/11/01 14:51:50 开始申请证书,域名 [img.yyaohuo.me] 申请方式 [HTTP]2024/11/01 14:51:50 [INFO] [img.yyaohuo.me] acme: Obtaining bundled SAN certificate2024/11/01 14:51:51 [INFO] [img.yyaohuo.me] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/4241829621872024/11/01 14:51:51 [INFO] [img.yyaohuo.me] acme: Could not find solver for: tls-alpn-012024/11/01 14:51:51 [INFO] [img.yyaohuo.me] acme: use http-01 solver2024/11/01 14:51:51 [INFO] [img.yyaohuo.me] acme: Trying to solve HTTP-012024/11/01 14:51:56 [INFO] [img.yyaohuo.me] The server validated our request2024/11/01 14:51:56 [INFO] [img.yyaohuo.me] acme: Validations succeeded; requesting certificates2024/11/01 14:51:57 [INFO] [img.yyaohuo.me] Server responded with a certificate.2024/11/01 14:51:57 申请 [img.yyaohuo.me] 证书成功!!

    证书申请成功后去网站开启https

    image-20241101225410230

    保存后再次访问看到https已经加载成功了

    image-20241101225533357

Docker compose部署

不用安装1panel,直接使用docker部署,更轻量化但是操作起来更复杂,后续更改配置也很麻烦,非必要建议1panel直接部署。

安装docker

1
curl -fsSL https://get.docker.com | bash -s docker

创建必需文件夹

1
2
3
4
5
6
7
8
mkdir chevereto
cd chevereto
mkdir nginx www mysql
mkdir -p certbot/etc/letsencrypt
mkdir -p certbot/var/lib/letsencrypt
mkdir -p certbot/var/log/letsencrypt
mkdir -p ./www/.well-known/acme-challenge
nano docker-compose.yml

docker compose配置

粘贴以下内容

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
version: "3"
networks:
web:
services:
nginx:
image: nginx:1.23.3
ports:
- "80:80"
- "443:443"
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./www:/var/www/html
- ./nginx:/etc/nginx/conf.d
- ./logs:/var/log/nginx
- ./certbot/etc/letsencrypt:/etc/letsencrypt
- ./www:/var/www
depends_on:
- php
networks:
- web

php:
image: hkccr.ccs.tencentyun.com/idog/php:8.14
restart: always
expose:
- "9000"
privileged: true
volumes:
- ./www:/var/www/html
environment:
- TZ=Asia/Shanghai
command: sh -c "docker-php-ext-enable imagick > /dev/null 2>&1; php-fpm"
depends_on:
- mysql
networks:
- web

mysql:
image: mysql:5.7
restart: always
expose:
- "3306"
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/logs:/var/log/mysql
- ./mysql/conf:/etc/mysql/conf.d
environment:
- TZ=Asia/Shanghai
- LANG=en_US.UTF-8
- MYSQL_ROOT_PASSWORD=HeDDSer8DSHFRyGDDdfwfb
- MYSQL_DATABASE=chevereto
- MYSQL_CHARSET=utf8mb4
networks:
- web

certbot:
image: certbot/certbot
volumes:
- ./certbot/etc/letsencrypt:/etc/letsencrypt
- ./certbot/var/lib/letsencrypt:/var/lib/letsencrypt
- ./certbot/var/log/letsencrypt:/var/log/letsencrypt
- ./www:/var/www
command: certonly --webroot --webroot-path=/var/www --email 1@qq.com --agree-tos --no-eff-email -d img.yyaohuo.me
networks:
- web
  1. 创建nginx配置文件
1
2
cd nginx
nano default.conf

Nginx http配置

粘贴以下内容

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
server {
listen 80;
server_name img.yyaohuo.me; ##修改域名或则ip
root /var/www/html;
index index.php;

access_log /var/log/nginx/typecho_access.log main;

location ~* /(importing|app|content|lib)/.*\.(po|php|lock|sql)$ {
deny all;
}

location ~ \.(jpe?g|png|gif|webp)$ {
log_not_found off;
error_page 404 /content/images/system/default/404.gif;
}

location ~* /.*\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$ {
add_header Access-Control-Allow-Origin "*";
}

location / {
index index.php;
try_files $uri $uri/ /index.php$is_args$query_string;
}

# 限制上传文件大小为50MB

client_max_body_size 50M;

# END Chevereto nginx rules

location ~ \.php(.*)$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

上传开心版源码

1
2
3
4
5
6
7
8
9
10
11
# 使用wget下载压缩包到指定目录
sudo wget -O ./chevereto/www/CheveretoV4.zip https://s3.tebi.io/yaohuo/file/CheveretoV4.zip
# 安装unzip工具(如果没有安装的话)
sudo apt install unzip -y
# 解压缩到指定目录
sudo unzip ./chevereto/www/CheveretoV4.zip -d ./chevereto/www
# 删除原始的 .zip 文件,释放空间
sudo rm ./chevereto/www/CheveretoV4.zip
# 授予文件夹读写权限
chmod 777 ./chevereto/www -R

运行docker服务

1
2
3
4
# 进入chevereto目录
cd ./chevereto
# 启动docker
docker compose up -d

Nginx https配置

1
nano nginx/default.conf

替换为以下内容img.yyaohuo.me都需要修改为你自己的域名

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name img.yyaohuo.me;
return 301 https://$host$request_uri;
}

# HTTPS server
server {
listen 443 ssl;
server_name img.yyaohuo.me;
root /var/www/html;
index index.php;

# SSL Configuration
ssl_certificate /etc/letsencrypt/live/img.yyaohuo.me/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/img.yyaohuo.me/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/img.yyaohuo.me/chain.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;

# 访问日志
access_log /var/log/nginx/typecho_access.log main;

# 安全性配置:禁止访问特定文件
location ~* /(importing|app|content|lib)/.*\.(po|php|lock|sql)$ {
deny all;
}

# 图片文件处理
location ~ \.(jpe?g|png|gif|webp)$ {
log_not_found off;
error_page 404 /content/images/system/default/404.gif;
expires 30d;
add_header Cache-Control "public, no-transform";
add_header X-Content-Type-Options "nosniff";
}

# 静态资源处理
location ~* /.*\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$ {
add_header Access-Control-Allow-Origin "*";
expires 7d;
add_header Cache-Control "public, no-transform";
add_header X-Content-Type-Options "nosniff";
}

# 主要路由配置
location / {
index index.php;
try_files $uri $uri/ /index.php$is_args$query_string;
}

# 限制上传文件大小为50MB
client_max_body_size 50M;

# PHP 处理配置
location ~ \.php(.*)$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;

# FastCGI 缓冲配置
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;

# FastCGI 超时设置
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}

# 安全性头部
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline' 'unsafe-eval'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';" always;
}

修改以后重启Nginx

1
docker compose restart nginx
  1. 打开域名https://img.yyaohuo.me/ 会跳转到安装页面

    image-20241101235147428

  • 数据库主机mysql
  • 数据库端口3306
  • 数据库名称chevereto
  • 数据库用户root
  • 数据库密码HeDDSer8DSHFRyGDDdfwfb
  • 表前缀chv_

image-20241101235332277

解决jpg和webp不能上传

修复:已经在docker compose内置代码了,理论来说不需要这一步了,如果Chevereto不能上传jpg和webp格式的文件再尝试操作以下步骤

1
2
3
4
5
docker exec -it chevereto-php-1 /bin/bash
docker-php-ext-enable imagick
docker exec -it chevereto-php-1 php -m | grep -E "gd|imagick"
exit
docker restart chevereto-php-1

然后在chevereto网站设置-图片上传里面开启jpg和webp后保存修改

image-20241102001331975