Wallos

提供订阅服务的统计

项目安装

创建目录,为了将数据库长期保存在本地

1
mkdir wallos

docker compose文件

根据实际需求,修改映射端口等,如映射到宿主机的3001端口

vim docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
services:
wallos:
container_name: wallos
image: bellamy/wallos:latest
ports:
- "8282:80/tcp"
environment:
TZ: 'America/Toronto'
# Volumes store your data between container upgrades
volumes:
- './db:/var/www/html/db'
- './logos:/var/www/html/images/uploads/logos'
restart: unless-stopped

运行

1
docker compose up -d

使用HTTP访问

要将运行在Docker容器中的服务通过域名访问,并使用Nginx作为反向代理来转发到宿主机的8282端口,你需要完成几个步骤。这包括设置DNS记录、配置Nginx以及确保网络安全。下面是具体步骤:

步骤 1: 设置DNS记录

确保你的域名 wo.lthero.top 的DNS记录指向托管Nginx的服务器的IP地址。这通常在你的域名注册商处进行设置:

  • A记录:将域名指向IPv4地址。
  • AAAA记录:将域名指向IPv6地址(如果适用)。

步骤 2: 安装并启动Nginx

步骤 1: 更新软件包列表

打开终端,首先使用apt命令更新你的包列表,以确保你安装的是最新版本的Nginx。

1
sudo apt update

步骤 2: 安装Nginx

使用apt安装Nginx。

1
sudo apt install nginx

步骤 3: 配置Nginx

你需要在Nginx中创建一个新的服务器块(server block),或者在已有的默认配置中修改,以设置反向代理。以下是一个基本的Nginx配置示例,将会把所有到 wo.lthero.top 的请求转发到本地的8282端口:

  1. 打开或创建一个新的Nginx配置文件:

    1
    sudo vim /etc/nginx/sites-available/wo.lthero.top
  2. 添加以下配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    server {
    listen 80;
    server_name wo.lthero.top;

    location / {
    proxy_pass http://localhost:3001;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    }
    }

    这个配置做了以下几点:

    • listen 80; 告诉Nginx监听80端口(HTTP标准端口)。
    • server_name wo.lthero.top; 设置这个块应当响应的域名。
    • proxy_pass http://localhost:8282; 指定所有传入的请求转发到本地的8282端口。
    • proxy_set_header 指令将重要的HTTP头信息转发给后端应用。
  3. 启用配置文件通过创建一个符号链接:

    1
    sudo ln -s /etc/nginx/sites-available/wo.lthero.top /etc/nginx/sites-enabled/
  4. 检查Nginx配置文件是否有语法错误:

    1
    sudo nginx -t
  5. 如果没有错误,重启Nginx以应用配置:

    1
    sudo systemctl restart nginx

步骤 4: 调整防火墙规则

确保你的服务器的防火墙规则允许HTTP(端口80)和HTTPS(端口443,如果你使用SSL)的流量。如果你正在使用ufw,可以使用以下命令:

1
2
sudo ufw allow 'Nginx Full'
sudo ufw reload

步骤 5: 测试配置

在浏览器中输入 http://wo.lthero.top 或使用命令行工具如 curl 来测试你的配置:

1
curl http://wo.lthero.top

你应该能看到从Docker容器中运行的服务响应的内容。

这样,你就配置好了Nginx作为反向代理,将域名 wo.lthero.top 的流量转发到宿主机的8282端口上的服务。如果你希望使用HTTPS,你还需要设置SSL证书,可以考虑使用Let’s Encrypt免费证书并配置HTTPS。

使用HTTPS访问

要让你的域名 wo.lthero.top 使用 HTTPS,你需要获取 SSL/TLS 证书,并配置 Nginx 以使用这些证书来加密网页内容。以下是详细的步骤,包括如何使用 Let’s Encrypt 提供的免费证书自动化这个过程。

步骤 1: 安装 Certbot

Certbot 是一个自动获取并安装 Let’s Encrypt 证书的客户端。在 Ubuntu 上安装 Certbot 及其 Nginx 插件非常简单:

1
2
sudo apt update
sudo apt install certbot python3-certbot-nginx -y

步骤 2: 获取和安装证书

使用 Certbot 获取并为你的域名安装证书:

1
sudo certbot --nginx -d wo.lthero.top

此命令会自动为指定的域名 wo.lthero.top 配置 SSL 证书,并更新 Nginx 配置以使用这些证书。Certbot 会询问你一些问题,比如电子邮件地址(用于紧急联系和证书续订提醒),以及是否重定向所有 HTTP 请求到 HTTPS(强烈建议启用)。

生成的证书位置/etc/letsencrypt/live/

步骤 3: 更新 Nginx 配置

如果你想手动编辑 Nginx 配置文件,可以按以下方式配置:

1
sudo vim /etc/nginx/sites-available/wo.lthero.top
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
server {
server_name wo.lthero.top;

location / {
proxy_pass http://localhost:8282;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/wo.lthero.top/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/wo.lthero.top/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
if ($host = wo.lthero.top) {
return 301 https://$host$request_uri;
} # managed by Certbot


listen 80;
server_name wo.lthero.top;
return 404; # managed by Certbot


}
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
server {
listen 80;
server_name wo.lthero.top;
return 301 https://$server_name$request_uri; # 强制重定向所有 HTTP 请求到 HTTPS
}


server {
listen 443 ssl http2;
server_name wo.lthero.top;

ssl_certificate /etc/letsencrypt/live/wo.lthero.top/fullchain.pem; # 证书文件路径
ssl_certificate_key /etc/letsencrypt/live/wo.lthero.top/privkey.pem; # 私钥文件路径

ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # 缓存 SSL 会话以提升性能
ssl_session_tickets off;

# 现代加密套件配置
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';
ssl_prefer_server_ciphers on;

# 其他 SSL 优化设置
ssl_stapling on;
ssl_stapling_verify on;

# 允许最大请求体大小为 1000MB
client_max_body_size 1000m;
location / {
proxy_pass http://localhost:8282;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

这个配置不仅启用了 HTTPS,还包括了一些现代的安全实践,如启用 HTTP/2,配置加密套件和协议等。

允许最大请求体大小为 1000MB

client_max_body_size 1000m;

这行最好与config.js中保持一致,如果nginx设置小了,会出现“上传失败”的结果!

步骤 4: 重新加载 Nginx

启用配置文件通过创建一个符号链接

1
sudo ln -s /etc/nginx/sites-available/wo.lthero.top /etc/nginx/sites-enabled/

更改配置后,需要重新加载 Nginx 以应用新的配置:

检查配置文件是否有语法错误,如果有warn!直接看“遇到的问题”部分,重新加载配置是不一定能work的

1
2
3
4
sudo nginx -t  # 检查配置文件是否有语法错误
sudo systemctl reload nginx # 重新加载配置
# 如果重新加载配置后无效,可以尝试重启nginx
sudo systemctl restart nginx

步骤 5: 验证 HTTPS

在浏览器中访问 https://wo.lthero.top 来检查是否配置成功。你应该能够看到一个安全锁标志,表明连接是通过 HTTPS 加密的。

步骤 6: 自动续订证书

Let’s Encrypt 的证书有效期为90天,因此建议设置自动续订:

1
sudo certbot renew

这个命令会测试证书续订过程。如果这个测试成功,添加定时任务crontab

crontab -e再填写下面内容,表示每月第一天会自动执行

1
0 0 1 * * /usr/local/bin/certbot renew --deploy-hook "nginx -s reload"

通过which certbot查看具体程序位置/usr/local/bin/certbot

续签的证书位置/etc/letsencrypt/renewal

通过以上步骤,你的站点 wo.lthero.top 现在应该能够安全地使用 HTTPS 进行通信了。

如果要换crontab编辑器,运行下面的命令

1
select-editor

解析到阿里云DNS的申请方法

如果域名解析在阿里云,可以安装这个插件从而完成证书申请,https://github.com/tengattack/certbot-dns-aliyun

Credentials File

在某个熟悉的目录下,把下面的内容写入credentials.ini

1
2
dns_aliyun_access_key = 12345678
dns_aliyun_access_key_secret = 1234567890abcdef1234567890abcdef

dns_aliyun_access_key是阿里云账号的AccessKey ID

dns_aliyun_access_key_secret是阿里云账号的AccessKey Secret

这两个值可以在阿里云控制台->用户头像->accesskeys按指引获取AccessKey/SecretKey

1
chmod 600 /path/to/credentials.ini

Obtain Certificates

1
2
3
4
certbot certonly \
--authenticator=dns-aliyun \
--dns-aliyun-credentials='/path/to/credentials.ini' \
-d "*.example.com,example.com"

申请下来的证书位置

1
/etc/letsencrypt/archive/

适合阿里云的自动命令

1
0 0 1 * * /usr/local/bin/certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload"