使用 Watchtower 自动更新 Docker 容器

Watchtower 是一款开源工具,专为 Docker 平台设计。它可以监控正在运行中的 Docker 容器,并监视这些容器是否有新版本可用。如果 Watchtower 检测到镜像发布了新版本,它将自动拉取新镜像并使用相同的选项重启容器。从而简化了容器维护的流程,减少手动干预。 使用 Docker Compose 部署 Watchtower 是推荐且灵活的方式,它能更好的管理容器配置。 Docker Compose 部署 Watchtower 操作步骤 创建 Docker Compose 文件 mkdir docker-compose.yml 编辑 docker-compose.yml 文件 services: watchtower: image: containrrr/watchtower # 指定Watchtower镜像版本 container_name: watchtower # 定义容器名称 volumes: - /var/run/docker.sock:/var/run/docker.sock # 挂载Docker Socket,使Watchtower能与Docker守护进程通信 environment: - 'TZ=Asia/Shanghai' # 设置时区,例如:Asia/Shanghai - 'WATCHTOWER_POLL_INTERVAL=86400' # 设置轮询间隔,单位秒。默认为86400秒(24小时) - 'WATCHTOWER_CLEANUP=true' # 更新后自动删除旧镜像,可选 - 'WATCHTOWER_NOTIFICATIONS=email' # 配置通知方式,例如:email, slack, discord等 - 'WATCHTOWER_NOTIFICATION_EMAIL_FROM=sender@example.com' # 设置发送电子邮件地址 - 'WATCHTOWER_NOTIFICATION_EMAIL_TO=recipient@example.com' # 设置接收电子邮件地址 - 'WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.example.com' # 设置发送电子邮件服务器 - 'WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587' # 设置发送电子邮件服务器端口 - 'WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=user' # 设置邮件服务器用户名 - 'WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=password' # 设置邮件服务器密码 restart: unless-stopped # 设置容器重启策略,除非手动停止,否则自动重启 command: --schedule "0 0 3 * * ?" --cleanup nginx hysteria # 定时任务:每天凌晨3点执行更新并删除旧镜像 更多配置选项: ...

August 29, 2025

Nginx、Hysteria 的 Docker 部署实践

Docker 部署 Nginx 安装 Docker Engine 设置 Docker 的 apt存储库 # Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update 安装 Docker 包 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 运行一个测试镜像验证安装是否成功 sudo docker run hello-world docker-compose 方式部署 Nginx 新建一个目录存放 docker-compose 、 nginx.conf 文件和 conf.d 文件夹 在新建的目录中创建一个名为" docker-compose.yml “的文件,内容如下: services: nginx: image: nginx:stable-alpine-perl container_name: nginx ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro # nginx.conf文件路径根据实际调整 - ./conf.d:/home/sixdian/nginx/conf.d:ro # conf.d 目录路径根据实际调整 - /home/sixdian/site/sixdian.com/public:/home/sixdian/site/sixdian.com/public:ro # 网站根目录路径根据实际调整 - /home/sixdian/ssl:/home/sixdian/ssl:ro # ssl 证书目录路径根据实际调整 - /etc/dhparam:/etc/dhparam:ro environment: TZ: Asia/Shanghai restart: always 在 docker-compose.yml 文件所在目录中执行以下命令启动服务: docker compose up -d Docker 部署 Hysteria docker-compose 方式部署 Hysteria 新建一个目录存放 docker-compose.yml 文件和 hysteria.yaml 配置文件 在新建的目录中创建一个名为” docker-compose.yml “的文件,内容如下: services: hysteria: image: tobyxdd/hysteria container_name: hysteria restart: always network_mode: "host" volumes: - ./hysteria.yaml:/etc/hysteria.yaml:ro # hysteria.yaml 文件路径根据实际调整 - /home/sixdian/ssl:/home/sixdian/ssl:ro # ssl 证书目录路径根据实际调整 environment: TZ: Asia/Shanghai command: ["server", "-c", "/etc/hysteria.yaml"] 在 docker-compose.yml 文件所在目录中执行以下命令启动服务: docker compose up -d

August 28, 2025

OpenWrt、Padavan 下 frp 服务和客户端的配置

OpenWrt frps 配置文件位置:/etc/config/frps config init option stdout 1 option stderr 1 option user frps option group frps option respawn 1 config conf 'common' option bind_port 7000 option dashboard_addr 0.0.0.0 option dashboard_port 7500 option dashboard_user *** option dashboard_pwd ****** option token ****** frpc 配置文件位置:/etc/config/frpc config init option stdout 1 option stderr 1 option user frpc option group frpc option respawn 1 config conf 'common' option server_addr ***.sixdian.com option server_port 7000 option token ****** config conf '***' option type http option local_ip 127.0.0.1 option local_port 80 option subdomain *** 查看生效配置: ...

December 15, 2022

利用 Hysteria 搭建科学上网服务

10月份之后 shadowsocks 扶墙服务器 IP 频繁遭屏蔽,更换 IP 浪费了我不少银两。考虑到 shadowsocks 协议已被防火长城精准识别,再用还会被封 IP,所以就用 Hysteria 替代 shadowsocks,作为以后科学上网的主要方式。 Hysteria 默认运用 UDP 协议进行通信,其主要应用场景有: 绕过网络审查 提升传输速度 绕过商业/学校/企业防火墙 绕过运营商 QoS 限速 下载 Hysteria cd /etc # 切换到系统 etc 文件夹 wget https://github.com/apernet/hysteria/releases/download/v1.3.2/hysteria-linux-amd64 #下载 Hysteria 服务程序 mv hysteria-linux-amd64 hysteria-server #将 Hysteria 服务程序重命名为 hysteria-server chmod +x hysteria-server #为 hysteria-server 赋予可执行权限 创建 Hysteria 服务配置文件 vi config.json { "listen": ":8388", "protocol": "udp", "cert": "/home/sixdian/ssl/cert.pem", "key": "/home/sixdian/ssl/key.pem", "obfs": "******", "up": "100 Mbps", "down": "20 Mbps", "alpn": "sixdian", "recv_window_conn": 8388608, "recv_window_client": 20971520 } 将 Hysteria 服务加入到 systemctl vi /etc/systemd/system/hysteria.service [Unit] Description=hysteria-server After=network-online.target [Service] Type=simple ExecStart=/etc/hysteria/hysteria-server server -c /etc/hysteria/config.json Restart=always RestartSec=2 [Install] WantedBy=multi-user.target 防火墙设置 firewall-cmd --zone=public --add-port=8388/udp --permanent #开放 8388 UDP 端口 firewall-cmd --zone=public --add-port=50000-60000/udp --permanent #开放 50000-60000 UDP 端口 firewall-cmd --zone=public --add-masquerade --permanent #允许防火墙伪装 IP firewall-cmd --zone=public --add-forward-port=port=50000-60000:proto=udp:toport=8388 --permanent #将 50000-60000 UDP 端口转到到 8388 UDP firewall-cmd --reload #使防火墙配置生效 启动 Hysteria,并使 Hysteria 服务开机启动 systemctl start hysteria #启动 Hysteria systemctl enable hysteria #设置 Hysteria 开机启动

December 13, 2022

利用 acme.sh 为网站提供 ssl 支持

原先用 Certbot 为网站安装证书时Nignx配置文件会被 Certbot 自动修改,令配置文件内容凌乱不堪,而且还要额外安装 Snap 影响服务器运行效率。所以放弃了 Certbot ,改用 acme.sh 生成和安装证书。 其安装和使用步骤如下: 安装 acme.sh curl https://get.acme.sh | sh -s email=my@example.com # my@example.com 修改为你自己的 E-mail 地址 alias acme.sh=~/.acme.sh/acme.sh # 创建一个 shell 的 alias 方便使用 生成证书(手动 DNS 方式) acme.sh --issue --dns -d sixdian.com -d *.sixdian.com --keylength ec-256 \ --yes-I-know-dns-manual-mode-enough-go-ahead-please acme.sh 会生成相应的解析记录显示出来,然后在你的域名管理面板中添加这些 txt 记录。 解析完成之后,重新生成证书 acme.sh --renew -d sixdian.com -d *.sixdian.com --ecc\ --yes-I-know-dns-manual-mode-enough-go-ahead-please 获取 cloudflare API key 地址:https://dash.cloudflare.com/profile/api-tokens export CF_Key="Global API Key" # Global API Key 修改为你的 Cloudflare API 密钥 export CF_Email="my@example.com" # my@example.com 修改为你 Cloudflare 账户绑定的邮箱 acme.sh --issue -d sixdian.com -d *.sixdian.com --dns dns_cf --ecc # 申请证书 安装证书(以 Nginx 为例) acme.sh --install-cert -d sixdian.com -d *.sixdian.com \ --key-file /home/sixdian/ssl/key.pem \ --fullchain-file /home/sixdian/ssl/cert.pem \ --reloadcmd "service nginx force-reload" 开启 acme.sh 自动升级 acme.sh --upgrade --auto-upgrade

December 7, 2022

记一次 VPS 的宕机经历

几天前我搭建在 HostHatch 的 Nextcloud 服务突然无法访问了。心想 HostHatch 此前已经连续稳定运行数年,故障大概率是我自己的设置问题或是服务器被入侵了,立马慌了。随即 ssh 登录服务器查看状况,结果 ssh 无法登录。又到控制台想通过VNC登录了解情况,结果系统卡在 GRUB 无法正常引导。进入 GRUB 救援模式,修改 GRUB 启动分区,加载基本模块等一通操作下来还是白忙活。ls查看设备状态,硬盘还是能读出来的。索性懒得折腾了,重装系统吧,反正本地还有备份不怕丢数据。 CentOS8 目前已不受官方支持,而我又不想用 Stream 版的,考虑再三还是用 Rocky Linux 吧。 由于这次故障来的太突然,而且故障的原因又不明,卡在 GRUB 估计与我上次安装系统使用了自定义 ISO 有关。所以这次舍弃了之前通过挂载 ISO 的方式直接装 Rocky Linux,而是先通过官方的 Image 重装 CentOS 8,再从 CentOS 8 迁移到 Rocky Linux。 从 CenOS 8 迁移到 Rocky Linux 重装完 CentOS 8 后首先修复存储库 sed -i -r \ -e 's!^mirrorlist=!#mirrorlist=!' \ -e 's!^#?baseurl=http://(mirror|vault).centos.org/\$contentdir/\$releasever/!baseurl=https://dl.rockylinux.org/vault/centos/8.5.2111/!i' \ /etc/yum.repos.d/CentOS-*.repo 下载官方推荐的的迁移脚本文件 curl https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh -o migrate2rocky.sh 赋予脚本文件可执行权限 chmod u+x migrate2rocky.sh 执行迁移脚本 ...

May 13, 2022

利用 frp 搭建远程办公环境

疫情当下,无法到公司上班,但公司的 ERP、共享文件等又只能在内网访问,在家办公着实不方便。有什么办法在家里也能像在公司一样方便的使用公司的内网服务呢? 一般情况下公司网管会让你在公司电脑上装 TeamViewer、向日葵之类的远程桌面软件,或者用 QQ 的远程协助功能来解决。但这些方法需要在控制端与被控端都安装相同的软件才能正常连接,而且被控端失联后你还要请同事帮忙在被控端打开软件再进行连接。隐私也是个大问题,你所有的操作在被控电脑上都是可以实时看到的。 frp 内网穿透 + Windows 自带的远程桌面完全可以规避以上软件的不足,让你愉快的在家享受远程办公的乐趣。如果公司网络有公网 IP,网管又乐意帮你做端口转发的话,其实也就用不到内网穿透了。本文介绍的就是以上条件都不具备的条件下如何自给自足,而且很流畅的实现远程办公。 话不多说,开干吧! 你所需的条件: 一台有公网 IP 的 Linux 服务器 安装 frp 服务端软件 下载 frp 软件包到服务器 wget https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_linux_amd64.tar.gz 解压软件包 tar -zxvf frp_0.42.0_linux_amd64.tar.gz 从服务器删除刚刚下载的软件包 rm -f frp_0.42.0_linux_amd64.tar.gz 移动已解压的软件包文件夹到服务器 etc 文件夹下,并将文件夹重命名为 frp mv tar -zxvf frp_0.42.0_linux_amd64 /etc/frp frps 服务的配置 编辑 frps 配置配置文件 vi /etc/frp/frps.ini 内容修改如下: [common] bind_port = 7000 #frps 服务监听端口 vhost_http_port = 8080 #如果客户端有 http 服务,用 serverip:8080 访问客户端的 http 服务 subdomain_host = sixdian.com #如果希望用域名访问客户端上的 http 服务则设置你自己的顶级域名地址,子域名在客户端设置 dashboard_port = 7500 #设置访问 frps 仪表板的端口 dashboard_user = username #设置访问仪表板的用户名 dashboard_pwd = ******** #设置访问仪表板的密码 token = ****** #设置连接服务端与客户端所使用的令牌 max_pool_count = 5 设置frps服务开机启动 新建 systemctl 配置文件 ...

May 2, 2022

Rocky Linux 禁用 Ipv6 的设置

昨天 update 了一下服务器,想通过部署在上面的的 frps 内网穿透服务连接家里路由器的时候发现登录页面出错。随即查看 frps 是不是未运行,结果一切正常正常。于是查看 frps 监听的端口是否未在防火墙设置打开,结果也是打开的,没毛病呀。 于是查看端口占用: netstat -ntlp 原来 fprs 只监听了 IPv6 地址,更新 frps 版本还是一样。GitHub 上 frp 的项目 Issues 里也没有找到有用的回答。于是 Google 大法开启,Search"rocky disable ipv6",还真找到了解决方法。 有效的答案是针对 CentOS 8 禁用 IPv6 的设置方法,由于 Rocky 就是基于 CentOS 所以这个方法也对 Rocky 适用。 ip a | grep inet6 #检查服务器是否启用了 IPv6 输出结果是肯定的,显示 IPv6 已开启 具体的禁用 IPv6 方法有两种 使用 sysctl 命令禁用 IPv6 -此方法适用于临时禁用IPv6 使用内核引导选项禁用 IPv6 -这是禁用IPv6的最佳方法 第一种方法-使用 sysctl 命令禁用 IPv6 创建一个新的 sysctl 配置文件 /etc/sysctl.d/70-ipv6.conf ...

May 1, 2022

Nginx 性能优化及反向代理 NextCloud

Nginx 是一个异步框架的网页服务器,具有占用内存少、稳定性高、可大量并行处理等特点。截止 2018 年,全球有 30.46% 的网站使用 Nginx 作为代理。除了网页代理外,Nginx 也可作为反向代理、负载均衡等应用,本站使用的网页服务器就是 Nginx。 我的 Nextcloud 私有云是搭建在 HostHatch 洛杉矶数据中心的大容量机械硬盘 VPS 上。由于性能有限加上 HostHatch 没有对中国路由进行特别优化,导致国内直连的情况下丢包严重,连接状态极差。于是我用狗云圣何塞机房 4837 线路的 VPS 作为 Nextcloud 的中转来解决访问速度的问题,同时把本站也搭建在狗云的VPS上就不会有访问困难的问题了。这两种需求利用 Nginx 都能很好的满足。 我 Nginx 配置的基本架构: Nginx 提供本站的网页服务,并处理本站和 Nextcloud 的 HTTPS 加密。 Nginx 为 Nextcloud 做反向代理,使客户端访问 Nextcloud 经过网络更好的 Nginx 所在的服务器来加速访问。 优化要点: 合理的配置本地缓存 开启压缩并做适当的配置 反向代理服务器不要缓存后端的数据,只作为一个桥梁来提供中转服务。这样数据传输更加直接,同时也能减轻反向代理服务器的压力。(我的反向代理服务器只有 5G 的硬盘,如果开启反向代理缓存的话,向后端传输数据的最大文件大小会受这个缓存的限制) HTTPS 加密方式的选择 我的nginx.conf配置 user site site; #用户和用户组 worker_processes auto; #CPU 核心数 worker_rlimit_nofile 8192; #最大打开文件数量 error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { use epoll; #epoll事件模型 worker_connections 1024; #单个 worker 进程允许客户端最大连接数 multi_accept on; #worker 按串行方式来处理连接 } http { include /etc/nginx/mime.types; #媒体类型 default_type application/octet-stream; #媒体类型 charset UTF-8; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; # 安全 # add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; # add_header X-Robots-Tag none; # add_header X-Download-Options noopen; # add_header X-Permitted-Cross-Domain-Policies none; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # add_header X-Frame-Options SAMEORIGIN; #不允许页面从框架 frame 或 iframe 中显示 ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_session_tickets on; ssl_stapling on; ssl_stapling_verify on; sendfile on; #开启高效文件传输模式 tcp_nopush on; #防止网路阻塞 keepalive_timeout 65; #客户端连接保持会话超时时间 tcp_nodelay on; #防止网络阻塞 types_hash_max_size 2048; client_header_buffer_size 4096; #客户端请求头部的缓冲区大小,getconf PAGESIZE 命令查看 open_file_cache max=8192 inactive=20s; #打开文件指定缓存,建议和打开文件数一致,inactive 经过多长时间文件没被请求后删除缓存 open_file_cache_valid 30s; #多长时间检查一次缓存的有效信息 open_file_cache_min_uses 1; #open_file_cache 指令中的 inactive 时间内文件的最少使用次数,1次都没用,删除 client_header_timeout 15; #设置请求头的超时时间,超过这个时间没有发送任何数据,返回 request time out 错误 client_body_timeout 15; #设置请求体的超时时间 reset_timedout_connection on; #关闭不响应的 client 连接,释放那个 client 所占有的内存 send_timeout 15; #超过这个时间,客户端没有任何活动,nginx 关闭连接 server_tokens off; #关闭 Nginx 版本号 client_max_body_size 614400m; #上传文件大小限制 # 反向代理 proxy_buffering off; proxy_max_temp_file_size 614400m; #反向代理上传文件大小限制 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_pass_header Set-Cookie; proxy_pass_header X-CSRF-TOKEN; proxy_set_header Upgrade $http_upgrade; #连接升级为 WebSocket proxy_set_header Connection $connection_upgrade; #连接 map proxy_connect_timeout 60s; #代理超时 proxy_read_timeout 60s; #读取超时 proxy_send_timeout 60s; #请求改善超时 #proxy_redirect off; fastcgi_connect_timeout 600; #指定连接到后端 FastCGI 的超时时间 fastcgi_send_timeout 600; #向 FastCGI 传送请求的超时时间 fastcgi_read_timeout 600; #指定接收 FastCGI 应答的超时时间 fastcgi_buffer_size 64k; #指定读取 FastCGI 应答第一部分需要用多大的缓冲区 fastcgi_buffers 4 64k; #指定本地需要用多少和多大的缓冲区来缓冲 FastCGI 的应答请求 fastcgi_busy_buffers_size 128k; #建议设置为 fastcgi_buffers 的两倍 fastcgi_temp_file_write_size 128k; #在写入 fastcgi_temp_path 时将用多大的数据块,默认值是 fastcgi_buffers 的两倍 fastcgi_temp_path /tmp; #缓存临时目录 fastcgi_intercept_errors on; #指定是否传递 4xx 和 5xx 错误信息到客户端 fastcgi_cache_path /tmp/blog levels=1:2 keys_zone=cache_fastcgi:300m inactive=60m max_size=3584m; #fastcgi_cache 缓存目录 fastcgi_cache cache_fastcgi; #开启 FastCGI 缓存并为其指定一个名称 fastcgi_cache_valid 200 302 1h; #用来指定应答代码的缓存时间 fastcgi_cache_valid 301 1d; #将 301 应答缓存一天 fastcgi_cache_valid any 1m; #将其他应答缓存为1分钟 fastcgi_cache_min_uses 1; #设置经过多少次请求的相同 URL 将被缓存 fastcgi_cache_key http://$host$request_uri; #设置 web 缓存的 Key 值 #fastcgi_pass; #指定 FastCGI 服务器监听端口与地址 gzip on; #开启压缩 gzip_disable "msie6"; gzip_min_length 1k; #允许压缩的页面最小字节数 gzip_buffers 32 4k; #压缩缓冲区大小 gzip_http_version 1.1; #压缩版本 gzip_comp_level 9; #压缩比例(1-9) gzip_proxied any; #对代理启用压缩 gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; gzip_vary on; #varyheader 支持 map $http_upgrade $connection_upgrade { default upgrade; '' close; } include /etc/nginx/conf.d/*.conf; } 我的 conf.d 里面本站服务器配置 server { listen 443 ssl; #listen [::]:443 ssl ipv6only=on; server_name sixdian.com; root /home/site/sixdian.com; ssl_certificate /etc/letsencrypt/live/sixdian.com-0001/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/sixdian.com-0001/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; # expires 缓存调优 location ~* \.(ico|jpeg|gif|png|bmp|swf|flv)$ { expires 30d; #log_not_found off; access_log off; } location ~* \.(js|css)$ { expires 1d; log_not_found off; access_log off; } # 防盗链(未成功) #location ~*^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ { #valid_referers sixdian.com; #if($invalid_referer) { #return 404; #break; #} #access_log off; #} } server { listen 80; #listen [::]:80 ipv6only=on; server_name sixdian.com; return 301 https://sixdian.com$request_uri; } server { listen 80; server_name www.sixdian.com; return 301 https://sixdian.com$request_uri; } 我 conf.d 里面 Nextcloud 服务器配置 server { listen 443 ssl; server_name drive.sixdian.com; ssl_certificate /etc/letsencrypt/live/sixdian.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/sixdian.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; location / { proxy_pass http://s1.sixdian.com:****; } location = /.well-known/carddav { return 301 $scheme://drive.sixdian.com/remote.php/dav/files/****/; } location = /.well-known/caldav { return 301 $scheme://drive.sixdian.com/remote.php/dav/files/****/; } } server { listen 80; server_name drive.sixdian.com; return 301 https://drive.sixdian.com$request_uri; location = /.well-known/carddav { return 301 $scheme://drive.sixdian.com/remote.php/dav/files/****/; } location = /.well-known/caldav { return 301 $scheme://drive.sixdian.com/remote.php/dav/files/****/; } } 我的 NextCloud 服务器 config.php 配置文件 位置在:/var/snap/nextcloud/current/nextcloud/config/config.php ...

April 29, 2022

Linux 系统的安全设置

Root 是 Linux 系统的超级管理员账户,拥有整个系统的最高权限,可操作系统内的所有对象。一般情况下开放了对外服务的linux系统需要设置一些安全策略来保证服务器的安全,同时亦能防止系统管理员由于平时管理过程中的误操作而导致系统不可挽回的错误。 SELinux 是 Linux 内核的安全模块,Root 账户的登录权限可由 SELinux 模块进行定义。 下面就介绍如何对系统进行设定来规避一些潜在的安全风险。 安全设置思路 禁用 root 登录权限 修改 ssh 默认端口 Root 用户的禁止登录设置 useradd username #username 为你要添加的用户名称 passwd username #设置 username 的用户密码 vi /etc/ssh/sshd_config #打开 ssh 配置文件 PermitRootLogin no #在 ssh 配置文件中找到 PermitRootLogin 这项,把后面默认的 yes 修改为 no 禁止 root 用户登录 service sshd restart #重启 sshd 服务 ssh 默认端口的修改 firewall-cmd --zone=public --add-port=xxxx/tcp --permanent #系统防火墙开放需要加入的端口,xxxx 为你需要加入的端口号 firewall-cmd --reload #重新加载系统防火墙设置,使刚才加入的端口生效 systemctl restart firewalld.service #重启系统防火墙 firewall-cmd --list-ports #列出系统防火墙已开放端口,你会发现你刚才设置的端口号已经加入其中 vi /etc/ssh/sshd_config #打开 ssh 配置文件 #Port 22 #默认 ssh 登录端口,前面加#号注释掉默认的22端口 Port xxxx #xxxx 为你需要添加 ssh 登录权限的端口号 semanage port -a -t ssh_port_t -p tcp xxxx #xxxx 为你需要添加 ssh 登录权限的端口号,这一步是将端口加入到 SELinux 安全模块 semanage port -l|grep ssh #列出具有 ssh 权限的端口号,出现你设置的端口号证明向 SELinux 已经加入成功 systemctl reload sshd #重新加载 ssh 服务使刚才的设置生效 systemctl restart sshd #重启 ssh 服务 reboot #重启 ssh username@ip:port #尝试用新的端口号登录系统

April 23, 2022