首页
Search
1
解决visual studio code (vscode)安装时没有选择安装路径问题
321 阅读
2
如何在 Clash for Windows 上配置服务
216 阅读
3
Linux 下 Bash 脚本 bad interpreter 报错的解决方法
150 阅读
4
Arch Linux 下解决 KDE Plasma Discover 的 Unable to load applications 错误
149 阅读
5
uniapp打包app提示通讯录权限问题,如何取消通讯录权限
113 阅读
clash
服务器
javascript
全部
游戏资讯
登录
Search
加速器之家
累计撰写
1,205
篇文章
累计收到
0
条评论
首页
栏目
clash
服务器
javascript
全部
游戏资讯
页面
搜索到
1205
篇与
的结果
2024-08-12
Docker 安装 Shlink 自建短网址
本文将指导使用 Docker 安装 Shlink 搭建自建短网址服务。PS:本文同时适用于任何可安装 Docker 的 Linux 发行版。什么是短网址?短网址,即 URL Shortener (缩略网址服务),一般我们使用 HTTP 协议 的 301 或 302 响应码,现在也有使用 307 或 308 来跳转一个长网址。MDN 上有对这几个状态码的详细介绍:301 Moved Permanently302 Found307 Temporary Redirect308 Permanent Redirect301 和 302 有一个最重要的区别,前者会在浏览器留下缓存,后者不会,导致如果你需要精确的统计访客,尤其是有一些使用一个浏览器的重复访客会不准确,但是影响不大,而使用 302 每次都会请求服务器造成服务器资源紧张,所以一般没有特殊需求的话,使用 301 就行。举一个典型的 301 跳转的例子:root@debian ~ # curl -I http://u.sb/ -A Mozilla HTTP/1.1 301 Moved Permanently Date: Tue, 26 Apr 2022 18:28:14 GMT Content-Type: text/html Content-Length: 162 Location: https://u.sb/ 我们可以看到,使用浏览器访问 http://u.sb/ 的时候,会返回 HTTP/1.1 301 Moved Permanently 状态,对应跳转到 Location https://u.sb/。市面上开源和收费的短网址源码众所周知,本人的短域名贼多,对各种短网址程序都有所研究,市面上主要有这几款免费的短网址程序:Blink - Easy-to-host,SSO-integrated,CDN-powered link shortener (+decoupled analytics) for teams。(Source Code) AGPL-3.0 NodejsKutt - A modern URL shortener with support for custom domains。(Source Code) MIT NodejsPolr - Modern,minimalist,modular,and lightweight URL shortener。(Source Code) GPL-2.0 PHPShlink - URL shortener with REST API and command line interface。Includes official progressive web application and docker images。(Source Code,Clients) MIT PHPYOURLS - YOURLS is a set of PHP scripts that will allow you to run Your Own URL Shortener。Features include password protection,URL customization,bookmarklets,statistics,API,plugins,jsonp。(Source Code) MIT PHP我基本上都安装使用过,数据量大了以后性能基本惨不忍睹,对比以后还是使用 PHP Swoole 写的 Shlink 稍微占优,所以本文推荐安装 Shlink。至于收费的?呵呵,没一个好用的,建议别去踩坑,我都帮你们踩过了。。。安装 Docker 和 Docker ComposeDebian 和 Ubuntu 系统请参考本站教程。其他 Linux 系统可以使用 Docker 官方的脚本安装 Docker 和 Docker Compose:curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh 安装 Shlink Server 和 Web Client参考官网的安装教程,我们可以把 Server 和 Web Client 装在一个地方方便管理。首先我们新建 /opt/shlink 和 /opt/shlink/data 目录:mkdir -p /opt/shlink mkdir -p /opt/shlink/data 然后我们新建一个 docker-compose.yaml 文件,假设你的域名是 example.com,放在 /opt/shlink/docker-compose.yaml:cat >> /opt/shlink/docker-compose.yaml << EOF version: '3.8' services: shlink: image: shlinkio/shlink:stable container_name: shlink ports: - '127.0.0.1:8080:8080' environment: - DEFAULT_DOMAIN=example.com - IS_HTTPS_ENABLED=true - GEOLITE_LICENSE_KEY= - DB_DRIVER=maria - DB_NAME=shlink - DB_USER=shlink - DB_PASSWORD=随机密码1 - DB_HOST=db - DB_PORT=3306 - TIMEZONE=UTC - REDIRECT_STATUS_CODE=301 restart: always db: image: mariadb:10.11 depends_on: - shlink container_name: db ports: - '127.0.0.1:3306:3306' environment: - MYSQL_ROOT_PASSWORD=随机 root 密码 - MYSQL_DATABASE=shlink - MYSQL_USER=shlink - MYSQL_PASSWORD=随机密码1 volumes: - /opt/shlink/data:/var/lib/mysql restart: always shlink-web-client: image: shlinkio/shlink-web-client:stable container_name: shlink-web-client ports: - '127.0.0.1:8081:8080' restart: always EOF GEOLITE_LICENSE_KEY 需要在 Maxmind 注册帐号获取,可以参考《使用 Docker 安装 Plausible Analytics 自建网站统计》MYSQL_ROOT_PASSWORD 和 MYSQL_PASSWORD 记得设置两个随机的密码,同时 MYSQL_PASSWORD 需要和 DB_PASSWORD 一致。更多的环境变量参数可以参考这里。然后拉取 Docker 镜像并运行:cd /opt/shlink docker compose pull docker compose up -d 然后获取一个 API Key:docker exec -it shlink shlink api-key:generate 注意第一个 shlink 是 Docker 容器名字,第二个 shlink 是命令名称。所有 API 命令如下:docker exec -it shlink shlink 记得保存你的 API Key,下面会要用到。安装配置 Nginx 反代我们的 Docker Compose 配置文件中,Shlink Server 服务监听在 127.0.0.1:8080 端口,Shlink Web Client 监听在 127.0.0.1:8081 端口,所以我们需要配置 Nginx 反代来访问,假设你短网址是 https://example.com/ Web 客户端是 https://app.example.com/example.com 段配置: location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_redirect off; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; send_timeout 300; proxy_pass http://127.0.0.1:8080; } app.example.com 段配置: location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_redirect off; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; send_timeout 300; proxy_pass http://127.0.0.1:8081; } 最后记得参考本站 Nginx SSL 配置教程加上 SSL 证书后,即可访问 https://app.example.com/:点击 + Add a server 添加你的 Shlink 服务:输入名称,URL 和 API Key 以后点击 Create server 即可使用:如果你懒得搭建 Web Client,也可以使用官方现成的服务:Shlink Web Client数据都是储存在浏览器本地的,可放心使用。升级 Shlink直接使用 Docker Compose 升级并删除旧的镜像文件:cd /opt/shlink docker compose pull docker compose up -d docker system prune -f 迁移 Shlink可以参考《使用 Docker 安装 Mailcow 自建域名邮箱》。备份 Shlink我们可以定期备份数据库,导出命令如下:docker exec db /usr/bin/mysqldump -u root --password=随机 root 密码 shlink > shlink-$(date +"%Y_%m_%d_%I_%M_%p").sql 请替换 随机 root 密码 为你的数据库 root 密码。本文短网址:https://z.sh/nBSur
2024年08月12日
10 阅读
0 评论
0 点赞
2024-08-12
Debian 12 / Ubuntu 24.04 安装 PowerDNS 和 PowerDNS-Admin 自建权威 DNS 教程
本文将指导如何在 Debian 12 和 Ubuntu 24.04 下安装 PowerDNS 以及 PowerDNS-Admin,本教程略复杂,学习者需要有一定的 Linux 运维经验以及熟读本站之前的教程。什么是权威 DNS?DNS 分为两种类型,一种是权威 DNS (Authoritative DNS),一种是递归 DNS (Recursive DNS),权威 DNS 提供 DNS 的解析记录,递归 DNS 提供解析 DNS 记录的功能,是不是有点拗口?通俗来讲,权威 DNS 就是负责储存你的 DNS 解析记录,然后提供给递归 DNS 进行解析操作,举个例子,典型的权威 DNS 即为类似 Cloudflare 的域名解析服务,比如可能分配给你的 bob.ns.cloudflare.com,典型的递归 DNS 即为 Cloudflare 的公共 DNS 服务 1.1.1.1,你的域名的 DNS 记录储存在 bob.ns.cloudflare.com 这台服务器上,而你本地的电脑通过 1.1.1.1 来解析你的域名。本文要介绍的是权威 DNS,递归 DNS 在国内没有相关资质和备案是无法在公网自建的。为什么使用 PowerDNS?按照我们多年的维护经验,PowerDNS 比 Bind 9 维护起来更方便,且原生支持各种数据库方便储存 DNS 记录,而 Bind 9 目前还是仅支持文本储存,其他储存需要安装第三方插件。准备工作首先,我们默认你已经拥有一个或者两个域名至少两台不同网络的 VPS 服务器本文教程举例的域名和对应的 A/AAAA 解析记录如下:域名IPv4IPv6example.com203.0.113.22001:db8::2example.org233.252.0.22001:db8:3ns1.example.com192.0.2.532001:db8::53ns2.example.com198.51.100.532001:db8::153这里我们假设你已经拥有 example.com 这个域名以及 192.0.2.53 和 192.0.2.153 这两台 VPS 服务器,分别对应 ns1.example.com 和 ns2.example.com,那么我们需要分两种情况1、你需要 example.com 也使用 ns1.example.com 和 ns2.example.com 的 DNS 服务:请前往你的域名注册商,添加 NS 记录,也称为 Glue 胶水记录,分别对应ns1.example.com - 192.0.2.53 和 2001:db8::53ns2.example.com - 198.51.100.53 和 2001:db8::153然后修改 example.com 的 NS 记录为 ns1.example.com 和 ns2.example.com,这样就完成了域名的 NS 记录的更新。2、你不需要 example.com 使用 ns1.example.com 和 ns2.example.com 的 DNS 服务,仅仅需要 example.org 使用这个 DNS 服务:前往你的 DNS 服务商,添加 A/AAA 记录,分别对应ns1.example.com - 192.0.2.53 和 2001:db8::53ns2.example.com - 198.51.100.53 和 2001:db8::153此时所有的 ns1.example.com 和 ns2.example.com 的请求会经过你的 DNS 服务商,请务必保证你的 DNS 服务商比较稳定,如果不稳定,就会导致所有的域名 DNS 都无法解析本文以第一种情况为例,假设你要使用的域名 example.com 也同时会使用 ns1.example.com 和 ns2.example.com 的 DNS 服务,每个服务商的后台 UI 可能不一样,我们以 Riven Cloud 为例,注册完域名以后在域名管理页面里找到 Private Nameservers (私人 DNS 服务器) 然后注册 NS 即可:然后在 Nameservers (DNS 服务器) 添加 ns1.example.com 和 ns2.example.com 即可。安装 PowerDNS + Mariadb首先使用 root 进入 ns1.example.com,更新系统apt update apt upgrade -y 然后我们添加 PowerDNS 的官方源,添加 PowerDNS 的 GPG 公钥后增加 apt 源文件:curl -sSL https://repo.powerdns.com/FD380FBB-pub.asc | gpg --dearmor > /usr/share/keyrings/powerdns.gpg cat > /etc/apt/sources.list.d/pdns.list << EOF deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/powerdns.gpg] http://repo.powerdns.com/debian $(lsb_release -sc)-auth-49 main deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/powerdns.gpg] http://repo.powerdns.com/debian $(lsb_release -sc)-rec-50 main deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/powerdns.gpg] http://repo.powerdns.com/debian $(lsb_release -sc)-dnsdist-19 main EOF curl -sSL https://repo.powerdns.com/FD380FBB-pub.asc | gpg --dearmor > /usr/share/keyrings/powerdns.gpg cat > /etc/apt/sources.list.d/pdns.list << EOF deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/powerdns.gpg] http://repo.powerdns.com/ubuntu $(lsb_release -sc)-auth-49 main deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/powerdns.gpg] http://repo.powerdns.com/ubuntu $(lsb_release -sc)-rec-50 main deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/powerdns.gpg] http://repo.powerdns.com/ubuntu $(lsb_release -sc)-dnsdist-19 main EOF 您也可以修改使用 repo.powerdns.com 官方源优先安装 Powerdns 软件:cat >> /etc/apt/preferences.d/pdns << EOF Package: pdns-* Pin: origin repo.powerdns.com Pin-Priority: 600 EOF 然后安装 Mariadb,可以参考本站教程《Debian 使用源安装 LEMP 教程》:下载并导入 GPG Key:curl -sSL https://mariadb.org/mariadb_release_signing_key.asc | gpg --dearmor > /usr/share/keyrings/mariadb.gpg 然后添加 MariaDB 的源:echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mariadb.gpg] https://mirror-cdn.xtom.com/mariadb/repo/11.4/debian $(lsb_release -sc) main" > /etc/apt/sources.list.d/mariadb.list echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mariadb.gpg] https://mirror-cdn.xtom.com/mariadb/repo/11.4/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/mariadb.list 然后我们就可以更新系统并安装 PowerDNS + Powerdns MySQL Backend + Mariadb:apt update apt install pdns-server pdns-backend-mysql mariadb-server 然后我们重复 ns1.example.com 的操作,安装完成 ns2.example.com 服务器,这里不再赘述。配置 MySQL 主从同步我们使用 ns1.example.com 作为 Master,ns2.example.com 作为 Slave,则需要配置 MySQL 主从同步:首先,在 ns1.example.com 上执行以下命令:建立文件夹,方便以后保存 Bin 日志:mkdir /var/lib/mysql-bin chown mysql:mysql /var/lib/mysql-bin 添加 MariaDB 配置文件,让 MySQL 监听在所有的 IP:cat > /etc/mysql/mariadb.conf.d/61-master.cnf <<EOF [mysqld] skip-host-cache skip-name-resolve bind-address = 0.0.0.0 server-id = $SRANDOM log-bin = /var/lib/mysql-bin/binlog expire_logs_days = 7 EOF 注:我们设置 Master 机器的 ID 为随机数 $SRANDOM安装并开启 nftables,只允许本机和 Slave 机器,也就是 ns2.example.com 可以访问 MySQL 3306 端口:apt install nftables cat > /etc/nftables.conf <<EOF #!/usr/sbin/nft -f flush ruleset table inet filter { chain input { type filter hook input priority filter; policy accept; ip saddr 127.0.0.1 accept ip saddr 198.51.100.53 accept tcp dport 3306 drop } chain forward { type filter hook forward priority filter; policy accept; } chain output { type filter hook output priority filter; policy accept; } } EOF 注意替换 198.51.100.53 为你的 ns2.example.com 的 IPv4 地址新建一个 backup 的 MySQL 用户名并设置密码为 backup_pass,并开启所有数据库的访问权限mariadb -e "GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by 'backup_pass';" 启动 nftables 服务并重启 MariaDB 服务:systemctl enable nftables --now systemctl restart mariadb 然后我们来到 Slave 机器,即 ns2.example.com,执行以下命令:mkdir /var/lib/mysql-bin chown mysql:mysql /var/lib/mysql-bin 添加 MariaDB 配置:cat > /etc/mysql/mariadb.conf.d/61-slave.cnf <<EOF [mysqld] skip-host-cache skip-name-resolve server-id = $SRANDOM relay-log = /var/lib/mysql-bin/relaylog expire_logs_days = 7 EOF 注:我们设置 Slave 机器的 ID 为随机数 $SRANDOM注释 expire_logs_dayssed -i 's/expire_logs_days/#expire_logs_days/g' /etc/mysql/mariadb.conf.d/50-server.cnf 开启 nftbales 服务并写入配置,只允许本机访问 3306 端口:apt install nftables cat > /etc/nftables.conf <<EOF #!/usr/sbin/nft -f flush ruleset table inet filter { chain input { type filter hook input priority filter; policy accept; ip saddr 127.0.0.1 accept tcp dport 3306 drop } chain forward { type filter hook forward priority filter; policy accept; } chain output { type filter hook output priority filter; policy accept; } } EOF 启动 nftables 服务并重启 MariaDB 服务:systemctl enable nftables --now systemctl restart mariadb 然后我们回到 Master 机器,即 ns1.example.com,运行:mariadb -e "show binary logs;\G" 找到最后一个类似 binlog.000001 的日志名称,并对应的 File_size,一般来说,新安装的机器应该为 binlog.000001 和 325然后我们回到 Slave 机器,即 ns2.example.com,运行:mariadb -e "CHANGE MASTER TO MASTER_HOST='192.0.2.53', MASTER_USER='backup', MASTER_PASSWORD='backup_pass', MASTER_PORT=3306, MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=325; START SLAVE; SHOW SLAVE STATUS\G" 注意替换 192.0.2.53 为 ns1.example.com 的 IPv4 地址此时可以看到类似输出 Slave_IO_State: Waiting for master to send event,即安装 MySQL 主从同步完成开启 PowerDNS 数据库并导入默认数据配置完 MySQL 主从以后,我们回到 Master 机器,即 ns1.example.com,新添加一个 PowerDNS 的用户和数据库,比如 pdns_user 和 pdns_database 并设置密码 pdns_password:mariadb -u root CREATE DATABASE pdns_database DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL ON pdns_database.* TO 'pdns_user'@'%' IDENTIFIED BY 'pdns_password'; FLUSH PRIVILEGES; EXIT; 然后导入 PowerDNS 的建议默认数据库cd /usr/share/pdns-backend-mysql/schema mariadb -u pdns_user --default-character-set=utf8mb4 -p pdns_database < schema.mysql.sql mariadb -u pdns_user --default-character-set=utf8mb4 -p pdns_database < enable-foreign-keys.mysql.sql 此时可以在 ns2.example.com 机器运行:mariadb -e "show databases;\G" 查看是否已经同步 pdns_database 这个数据库,如果过了一分钟还没有,则返回前面的教程仔细看看自己遗漏或者写错了什么。配置 PowerDNS 服务首先,删除默认安装后的 bind.conf:rm -rf /etc/powerdns/pdns.d/bind.conf 然后添加一个 /etc/powerdns/pdns.d/dns.conf 文件并输入输入以下内容:cat >> /etc/powerdns/pdns.d/dns.conf << EOF launch=gmysql gmysql-host=localhost gmysql-user=pdns_user gmysql-dbname=pdns_database gmysql-password=pdns_password gmysql-dnssec=yes default-soa-content=ns1.example.com hostmaster.example.com 0 3600 14400 604800 3600 api=yes api-key=random_api_key local-address=0.0.0.0 :: local-port=53 webserver-address=0.0.0.0 webserver-allow-from=127.0.0.1, ::1, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 webserver-port=8081 EOF 注意几个地方gmysql-host=localhost gmysql-user=pdns_user gmysql-dbname=pdns_database gmysql-password=pdns_password gmysql-dnssec=yes 这几个 gmysql 开头的参数即 MySQL 数据库连接信息,以及开启 DNSSECdefault-soa-content=ns1.example.com hostmaster.example.com 0 3600 14400 604800 3600 这是添加的域名的默认 SOA 记录ns1.example.com 为默认 DNS 服务器域名,hostmaster.example.com 为默认 DNS 管理员邮箱 hostmaster@example.com,在 SOA 记录里,需要替换 @ 为英文点号第一个 0 为 Serial,没有特殊需求可以从 0 开始后面四个数字分别对应 Refresh,Retry,Expire 和 Minimum TTL,单位都是秒,没有特殊需求建议设置 300 以上api=yes api-key=random_api_key local-address=0.0.0.0 :: local-port=53 webserver-address=0.0.0.0 webserver-allow-from=127.0.0.1, ::1, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 webserver-port=8081 这段配置则是我们开启了 API 和内置 API Web 服务器,请替换 random_api_key 为你需要的 API Key,随机字符即可,默认我们设置了 Web 服务器监听在所有 IP 并且只能内网 IP 访问,可以按照需求自行更改。local-address=0.0.0.0 :: local-port=53 这段配置表示你的权威 DNS 服务监听在本机所有 IPv4 和 IPv6 地址,并且使用默认的 53 端口。然后我们重启 PowerDNS 服务systemctl restart pdns 没有报错即配置成功。然后我们进入 Slave 机器,即 ns2.example.com 按照同样的配置操作一次。至此,PowerDNS + MySQL 主从已经配置完毕,但是添加域名解析等记录需要直接操作 MySQL 数据库,略显麻烦,此时我们的神奇 PowerDNS-Admin 登场安装并使用 PowerDNS-AdminPowerDNS-Admin 是一款 Python 写的 PowerDNS Web 管理软件,我们需要准备一台单独的机器,测试的时候您也可以直接装在 ns1 或 ns2 上 (不建议) 甚至装在本地电脑上。首先,我们需要安装 Docker 和 Docker Compose,具体方法请参考《Debian 安装 Docker 以及 Docker Compose 教程》安装完毕后,我们在 /opt 目录新建一个 docker-compose.yamlcat > /opt/docker-compose.yaml <<EOF version: '3.9' services: powerdns-admin: image: powerdnsadmin/pda-legacy:latest container_name: powerdns-admin ports: - "127.0.0.1:8080:80" environment: - SECRET_KEY=random_secret_key - SQLALCHEMY_DATABASE_URI=mysql://powerdns-admin-user:powerdns-admin-password@powerdns-admin-mariadb/powerdns-admin-database - GUNICORN_TIMEOUT=60 - GUNICORN_WORKERS=4 - GUNICORN_LOGLEVEL=DEBUG - OFFLINE_MODE=False restart: unless-stopped volumes: - ./data/powerdns-admin:/data depends_on: - powerdns-admin-mariadb powerdns-admin-mariadb: image: mariadb:11.4 container_name: powerdns-admin-mariadb ports: - '127.0.0.1:3306:3306' environment: - MYSQL_ROOT_PASSWORD=mysql_root_password - MYSQL_DATABASE=powerdns-admin-database - MYSQL_USER=powerdns-admin-user - MYSQL_PASSWORD=powerdns-admin-password restart: unless-stopped volumes: - ./data/mysql:/var/lib/mysql EOF 记得修改 random_secret_key 为随机字符串,这个字符串可以随便写,但是不能为空,否则登录后会提示错误。然后我们启动 docker compose:cd /opt docker compose pull docker compose up -d 成功启动后,PowerDNS-Admin 会监听在 127.0.0.1 的 8080 端口,本地机器可以直接访问 http://127.0.0.1:8080 来登录,第一个注册的用户即为管理员。如果您搭建在公网上,我们强烈推荐使用 Nginx 做一层反代服务,安装 Nginx 可以参考教程《Debian 使用源安装 LEMP 教程》以及《Nginx 配置 SSL 证书》安装完成后,在 location 字段中使用如下配置文件即可location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection ""; proxy_redirect off; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; end_timeout 300; proxy_pass http://127.0.0.1:8080; } 然后我们即可登录 PowerDNS-Admin 并注册帐号,第一个帐号即为管理员,登录后输入 PowerDNS 的 API 地址和 API Key 以及 PowerDNS 的版本,截止本文发布,可以填写 4.6.0记得把 PowerDNS-Admin 机器的 IP 加在 ns1.example.com 机器 /etc/powerdns/pdns.d/dns.conf 文件的 webserver-allow-from= 最后,这样 PowerDNS-Admin 就可以访问 PowerDNS 的 API 了。然后我们添加一个域名模板,在左侧 Domain Templates 新建一个域名模板,随便写个名称和描述后,修改添加以下解析内容NameTypeTTLData@SOA86400ns1.example.com. hostmaster.example.com. 0 3600 14400 604800 3600@NS86400ns1.example.com@NS86400ns2.example.com如图所示保存好模板后,点击左侧 New Domain 即可新添加域名 example.com,Type 选默认的 Native,记得选择 Template 为刚刚保存的模板,如无特殊需求,SOA-EDIT-API 选默认的 DEFAULT 即可添加完域名后,我们进入左侧 Dashboard,然后在 Hosted Domains 里选择添加的 example.com如果需要开启 DNSSEC,则点击 DNSSEC 的按钮让其变成 Enabled 即可:我们点击 Enabled 小按钮,需要记录下 DNSKEY 值,一般是一个 “257 + 3 + 13 + 一串字符” 以及第二个 DS 值,一般是一个 “随机数字 + 13 + 2 + 一串字符”,如下图所示:点击 example.com 进入解析页面,点击 Add Record 即可添加解析记录,我们添加以下几个记录NameTypeTTLData@A3600203.0.113.2@AAAA36002001:db8::2ns1A3600192.0.2.53ns1AAAA36002001:db8::53ns2A3600198.51.100.53ns2AAAA36002001:db8::153这里假设的是 example.com 解析到 203.0.113.2 和 2001:db8::2好了,大功告成,然后我们返回注册商的网站添加 DNSSEC 记录,一般我们选择 “随机数字 + 13 + 2 + 一串字符”,分别对应:随机数字 - Key Tag13 - Algorithm 算法 132 - Digest Type,类型 2,即 SHA-256一串字符 - Digest个别后缀 (比如德国 .de 和爱沙尼亚 .ee) 需要添加 DNSKEY,此时我们添加上面截图里的 DNSKey 即可:Flags - 填写 257Protocol - 填写 3Algorithm - 填写 13Public Key - 填写 DNSKEY 对应的一串字符所有的注册商原理都一样,还是以 Riven Cloud 为例,找到域名管理的 DNSSEC Management 选项,按照图示直接添加 DS 记录即可:请注意所有的 gTLD 都明确规定必须支持 DNSSEC,但是国别域名不一定支持,可以通过 dig DS 记录查询你的域名后缀是否支持 DNSSEC此时去耐心喝一杯咖啡,一般域名会在 10 分钟到 24 小时内生效,喝完咖啡后您应该优雅地打开服务器,检查 example.com 是否解析生效并正确首先安装万能的 dnsutilsapt install dnsutils -y 然后查看解析root@debian ~ # host example.com example.com has address 203.0.113.2 example.com has IPv6 address 2001:db8::2 一切正确即安装成功,如果失败,则进入 ns1.example.com 和 ns1.example.com 的服务器分别检查本地解析是否正确root@ns1 ~ # dig A example.com @localhost +short 203.0.113.2 root@ns2 ~ # dig A example.com @localhost +short 203.0.113.2 如果返回正确结果,则检查你的 DNS 是否生效root@ns1 ~ # dig NS example.com +short ns1.example.com. ns2.example.com. 检查公网其他递归 DNS 是否生效root@ns1 ~ # dig NS example.com @1.1.1.1 +short ns1.example.com. ns2.example.com. 检查你的 DNS 是否在注册局被注册 (仅限 gTLD)安装 whois 服务apt install whois 检查 whois 里的 DNS 是否生效root@ns2 ~ # whois example.com | grep 'Name\ Server' Name Server: NS1.EXAMPLE.COM Name Server: NS2.EXAMPLE.COM 检查 DNSSEC 的 DS 记录是否生效root@ns2 ~ # dig DS example.com +short 如果都没问题,则耐心等待 DNS 缓存生效,一般 gTLD 生效时间在 24 小时内,如果你的域名是国别域名,则可能需要等待 72 小时,切记生效前不要删除旧的 DNS 服务。如果遇到超时等问题,请检查您的云服务器提供商防火墙是否正确打开 UDP 53 和 TCP 53 以及 TCP 3306 端口课后作业,安装搭建完 PowerDNS + PowerDNS-Admin 后添加 example.org 域名并解析到 233.252.0.2 和 2001:db8:3 然后测试本地是否生效。
2024年08月12日
13 阅读
0 评论
0 点赞
2024-08-12
Debian 12 / Ubuntu 24.04 安装 Docker 以及 Docker Compose 教程
本文将指导如何在 Debian 12 和 Ubuntu 24.04 下安装 Docker 以及 Docker Compose。PS:本文同时适用于 Debian 11 以及 Ubuntu 20.04, Ubuntu 22.04什么是 Docker?Docker 是一种容器化技术,可以在服务器上快速搭建容器并在不污染宿主机的情况下运行软件,而不再需要安装配置各种环境。开源 Docker 社区致力于改进这类技术,并免费提供给所有用户,使之获益。什么是 Docker Compose?传统模式下运维人员需要运行 docker run 来启动各种容器,一旦容器过多,就无法一次性记住所有的运行参数和命令,这时候我们可以使用 Docker Compose 来解决这个问题。Docker Compose 是一个用于在单个主机上定义和运行多个 Docker 容器的工具。它使用 YAML 文件来配置应用程序的服务,然后使用一个命令就可以创建并启动所有服务。使用 Docker Compose 可以大大简化 Docker 容器的管理和部署,特别是对于具有多个互相依赖的容器的复杂应用。使用官方源安装 Docker以下操作需要在 root 用户下完成,请使用 sudo -i 或 su root 切换到 root 用户进行操作。首先,安装一些必要的软件包:apt update apt upgrade -y apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates 然后加入 Docker 的 GPG 公钥和 apt 源:curl -sSL https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://download.docker.com/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list curl -sSL https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list 国内机器可以用清华 TUNA 的国内源:curl -sS https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list curl -sS https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list 然后更新系统后即可安装 Docker CE 和 Docker Compose 插件:apt update apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin 此时可以使用 docker version 命令检查是否安装成功:root@debian ~ # docker version Client: Docker Engine - Community Version: 26.1.4 API version: 1.45 Go version: go1.21.11 Git commit: 5650f9b Built: Wed Jun 5 11:29:22 2024 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 26.1.4 API version: 1.45 (minimum version 1.24) Go version: go1.21.11 Git commit: de5c9cf Built: Wed Jun 5 11:29:22 2024 OS/Arch: linux/amd64 Experimental: true containerd: Version: 1.6.33 GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957 runc: Version: 1.1.12 GitCommit: v1.1.12-0-g51d5e94 docker-init: Version: 0.19.0 GitCommit: de40ad0 如果需要某个特定用户可以用 Docker rootless 模式运行 Docker,那么可以把这个用户也加入 docker 组,比如我们把 www-data 用户加进去:apt install docker-ce-rootless-extras sudo usermod -aG docker www-data 安装 Docker Compose因为我们已经安装了 docker-compose-plugin,所以 Docker 目前已经自带 docker compose 命令,基本上可以替代 docker-compose:root@debian ~ # docker compose version Docker Compose version v2.27.1 如果某些镜像或命令不兼容,则我们还可以单独安装 Docker Compose:我们可以使用 Docker 官方发布的 Github 直接安装最新版本:curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose 此时可以使用 docker-compose version 命令检查是否安装成功:root@debian ~ # docker-compose version Docker Compose version v2.27.1 修改 Docker 配置以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘 (泪的教训):cat > /etc/docker/daemon.json << EOF { "log-driver": "json-file", "log-opts": { "max-size": "20m", "max-file": "3" }, "ipv6": true, "fixed-cidr-v6": "fd00:dead:beef:c0::/80", "experimental":true, "ip6tables":true } EOF 然后重启 Docker 服务:systemctl restart docker 好了,我们已经安装好了 Docker 和 Docker Compose,然后就可以开始愉快的安装各种软件,限于篇幅,我们不再赘述,今后慢慢介绍安装各种 Docker 软件的方法。
2024年08月12日
14 阅读
0 评论
0 点赞
2024-08-12
Docker 安装 FreshRSS 教程
本文将指导如何在 Linux 下使用 Docker 和 Docker Compose 安装 FreshRSS 开源 RSS 聚合器服务。PS:本文同时适用于任何可安装 Docker 的 Linux 发行版。什么是 FreshRSS?FreshRSS 是一款免费且开源的 RSS 聚合器,设计用于帮助用户集中管理和阅读来自不同网站的新闻源。它具有高效、轻量的特点,并且支持多用户使用。安装 Docker 和 Docker ComposeDebian 和 Ubuntu 系统请参考本站教程。其他 Linux 系统可以使用 Docker 官方的脚本安装 Docker 和 Docker Compose:curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh 安装 FreshRSS这里我们使用 PostgreSQL 数据库,首先创建一个目录用于存放 FreshRSS 的配置文件和数据库文件:mkdir -p /opt/freshrss cd /opt/freshrss 然后创建一个 docker-compose.yml 文件:services: freshrss: image: freshrss/freshrss:latest container_name: freshrss hostname: freshrss restart: unless-stopped logging: options: max-size: 10m volumes: - ./data:/var/www/FreshRSS/data - ./extensions:/var/www/FreshRSS/extensions environment: TZ: Etc/UTC CRON_MIN: '3,33' TRUSTED_PROXY: 172.16.0.1/12 192.168.0.1/16 ADMIN_EMAIL: 你的邮箱 BASE_URL: 你的 FreshRSS 访问地址 ports: - 127.0.0.1:8080:80 freshrss-db: image: postgres:16 container_name: freshrss-db hostname: freshrss-db restart: unless-stopped logging: options: max-size: 10m volumes: - ./db:/var/lib/postgresql/data environment: POSTGRES_DB: freshrss POSTGRES_USER: freshrss POSTGRES_PASSWORD: freshrss command: - -c - shared_buffers=1GB - -c - work_mem=32MB 请自行替换 ADMIN_EMAIL 和 BASE_URL 的值,BASE_URL 需要写全,比如 https://freshrss.example.com。然后拉取 Docker 镜像并运行:cd /opt/shlink docker compose pull docker compose up -d 安装配置 Nginx 反向代理我们的 Docker Compose 配置文件中,FreshRSS 服务监听在 127.0.0.1:8080 端口,所以我们需要配置 Nginx 反代来访问,假设你 FreshRSS 的地址是 https://freshrss.example.com:freshrss.example.com 段配置: location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_redirect off; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; send_timeout 300; proxy_pass http://127.0.0.1:8080; } 最后记得参考本站 Nginx SSL 配置教程加上 SSL 证书后,即可访问 https://freshrss.example.com/:配置 FreshRSS访问 https://freshrss.example.com/,在安装向导中填写数据库信息:数据库类型:PostgreSQL数据库主机(Host):freshrss-db数据库名称(Database):freshrss数据库用户(User):freshrss数据库密码(Password):freshrss然后点击 Install FreshRSS 即可完成安装。如果需要安装插件,可以把插件上传到 /opt/freshrss/extensions 目录,然后在 FreshRSS 后台安装。推荐在官方插件仓库里下载插件:FreshRSS Extensions推荐安装 CustomCSS 插件,就可以使用自定义 CSS 样式了,个人比较喜欢这个主题系列。如果需要第三方客户端,可以在这里查看支持的应用:APIs & native apps迁移 FreshRSS可以参考《使用 Docker 安装 Mailcow 自建域名邮箱》。备份 FreshRSS我们可以定期备份 FreshRSS 网站文件和数据库,压缩网站目录和导出数据库命令如下:backup_folder_name=$(date +"%Y_%m_%d_%I_%M_%p") # 备份 FreshRSS 网站文件 tar --exclude /opt/freshrss/data/cache -zcvf data-$backup_folder_name.tar.gz /opt/freshrss/data tar -zcvf extensions-$backup_folder_name.tar.gz /opt/freshrss/extensions # 备份 FreshRSS 数据库 docker exec -t freshrss-db pg_dumpall -c -U freshrss | gzip > database-$backup_folder_name.gz
2024年08月12日
11 阅读
0 评论
0 点赞
2024-08-12
Ubuntu 22.04 Jammy 升级 Ubuntu 24.04 Noble
本文将指导如何升级 Ubuntu 22.04 Jammy Jellyfish 到 Ubuntu 24.04 Noble Numbat。相关教程:Ubuntu 20.04 Focal Fossa 升级 Ubuntu 22.04 Jammy Jellyfish。准备工作除非你是物理服务器,以及没有用过奇奇怪怪定制或修改的内核的 KVM 构架的 VPS 和云主机,否则升级大版本更新内核是有一定机率导致 Grub 加载失败的,切记备份重要数据!OpenVZ 6 和 LXC 构架的 VPS 是无法升级的,因为他们没有自己独立的内核再强调一遍,一定要备份重要数据!以下操作需要在 root 用户下完成,请使用 sudo -i 或 su root 切换到 root 用户进行操作更新系统首先需要更新你当前的系统apt update apt upgrade -y apt dist-upgrade -y apt autoclean apt autoremove -y 如果内核更新了,可以重启让最新的内核生效,也可以直接进行升级。升级系统这里有两种升级系统的方法,第一种是使用 do-release-upgrade 命令,第二种是手动更新 apt 源文件。方法一:使用 do-release-upgrade 命令首先需要安装 ubuntu-release-upgrader-core 包:apt install ubuntu-release-upgrader-core 然后修改 /etc/update-manager/release-upgrades 文件,确保 Prompt 值为 lts:cat /etc/update-manager/release-upgrades | grep lts 显示如下内容即可:root@ubuntu ~ # cat /etc/update-manager/release-upgrades | grep lts # lts - Check to see if a new LTS release is available. The upgrader Prompt=lts 最后执行以下命令升级系统:do-release-upgrade -d 方法二:手动更新 apt 源文件首先更新 apt 源,替换 jammy 为 noble:sed -i 's/jammy/noble/g' /etc/apt/sources.list sed -i 's/jammy/noble/g' /etc/apt/sources.list.d/*.list 系统 apt 源文件 /etc/apt/sources.list 应该是类似这样的:deb https://archive.ubuntu.com/ubuntu/ noble main restricted universe multiverse deb https://archive.ubuntu.com/ubuntu/ noble-updates main restricted universe multiverse deb https://archive.ubuntu.com/ubuntu/ noble-backports main restricted universe multiverse deb http://security.ubuntu.com/ubuntu/ noble-security main restricted universe multiverse 由于在 Ubuntu 24.04 之前,Ubuntu 的软件源配置文件使用传统的 One-Line-Style,路径为 /etc/apt/sources.list;从 Ubuntu 24.04 开始,Ubuntu 的软件源配置文件变更为 DEB822 格式,路径为 /etc/apt/sources.list.d/ubuntu.sources(参考),所以使用 DEB822 格式的源文件 /etc/apt/sources.list.d/ubuntu.sources:Types: deb URIs: https://archive.ubuntu.com/ubuntu Suites: noble noble-updates noble-backports Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Types: deb URIs: http://security.ubuntu.com/ubuntu/ Suites: noble-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg 国内服务器可以替换 archive.ubuntu.com 和 security.ubuntu.com 为 mirrors.tuna.tsinghua.edu.cn然后我们再次执行更新系统:apt update apt upgrade -y apt dist-upgrade -y 更新过程种会提示一些软件是否需要自动重启,选 Yes 即可,以及一些软件的配置文件是否需要更新,按照自己的情况选择即可,默认回车即视为使用旧的配置文件,一般会出现在 OpenSSH 等软件的更新上。更新后删除不必要的软件和依赖:apt autoclean apt autoremove -y 然后我们使用 reboot 命令重启系统,耐心等待后,查看最新的系统版本:root@ubuntu ~ # lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04 LTS Release: 24.04 Codename: noble root@ubuntu ~ # uname -a Linux ubuntu 6.8.0-35-generic #35-Ubuntu SMP PREEMPT_DYNAMIC Mon May 20 15:51:52 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux 这时我们就已经更新到了最新的 Ubuntu 24.04 Noble 和内核了。
2024年08月12日
49 阅读
0 评论
0 点赞
1
...
236
237
238
...
241