由于一些原因,Docker 国内的镜像源全军覆没 。国内服务器使用官方源安装 Docker
,已经不可行,需要使用国内源安装。目前中科大源 、阿里云源 还能安装 Docker
,但不能拉取镜像。拉取 Docker
镜像可以白嫖Cloudflare Workers 搭建 Docker Hub镜像加速服务 。
一、更新系统 1、和更新源同步
2、显示出哪些软件可以更新
1 sudo apt list --upgradable
3、进行更新
4、也可以直接用复合命令更新
1 sudo apt update && sudo apt upgrade -y
二、安装 Docker
按照 官方文档 步骤安装 docker
。
2.1、卸载旧版本 1、卸载 Docker Engine
、CLI
、containerd
和 Docker Compose
包
1 sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
2、删除所有映像、容器和卷
1 sudo rm -rf /var/lib/docker
1 sudo rm -rf /var/lib/containerd
3、运行以下命令以卸载所有冲突的软件包
1 for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg ; done
2.2、使用 apt
存储库安装 在新主机上首次安装 Docker
引擎之前,需要设置 Docker
存储库。之后,可以安装和更新存储库中的 Docker
。
1、更新软件包索引并安装软件包以允许使用基于 HTTPS
的存储库
1 sudo apt-get install ca-certificates curl gnupg -y
2、创建 /etc/apt/keyrings
目录并设置其权限为 755
1 sudo install -m 0755 -d /etc/apt/keyrings
3、添加存储库的 GPG
密钥(建议使用中科大源)
1 curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
1 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
1 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
4、修改 /etc/apt/keyrings/docker.gpg
文件的权限,以便所有用户都可以读取该文件
1 sudo chmod a+r /etc/apt/keyrings/docker.gpg
5、使用以下命令向 source.list
中添加 Docker
存储库(建议使用中科大源)
1 2 3 4 echo \ "deb [arch=" $(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.ustc.edu.cn/docker-ce/linux/debian \ " $(. /etc/os-release && echo "$VERSION_CODENAME " )" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
1 2 3 4 echo \ "deb [arch=" $(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian \ " $(. /etc/os-release && echo "$VERSION_CODENAME " )" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
1 2 3 4 echo \ "deb [arch=" $(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ " $(. /etc/os-release && echo "$VERSION_CODENAME " )" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
6、更新包索引
2.3、安装 Docker
引擎 安装 Docker Engine
、containerd
和 Docker Compose
,要安装最新版本,请运行
1 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
腾讯云使用阿里云的镜像安装 Docker
,速度很慢,建议使用中科大源。
2.4、查看 Docker
状态
Docker
安装完成默认是 active
状态,开机自启是 enabled
状态。
2.5、拉取镜像 此时虽然安装好了 Docker
,但是去拉取镜像的话,拉取不下来,因为目前国内所有的镜像源全军覆没 ,可以查看这篇博文:白嫖Cloudflare Workers 搭建 Docker Hub镜像加速服务 中的方法自建。
三、安装 nginx
按照 官方文档 步骤安装 nginx
。
3.1、安装必备组件 1 sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring -y
3.2、导入官方 nginx
签名密钥,以便 apt
可以验证软件包真实性 获取密钥
1 2 curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
3.3、验证下载的文件是否包含正确的密钥 1 gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
3.4、输出应包含完整指纹,如下所示 1 2 3 4 5 6 7 8 9 10 11 pub rsa4096 2024-05-29 [SC] 8540A6F18833A80E9C1653A42FD21310B49F6B46 uid nginx signing key <signing-key-2@nginx.com> pub rsa2048 2011-08-19 [SC] [expires: 2027-05-24] 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 uid nginx signing key <signing-key@nginx.com> pub rsa4096 2024-05-29 [SC] 9E9BE90EACBCDE69FE9B204CBCDCD8A38D88A2B3 uid nginx signing key <signing-key-3@nginx.com>
如果指纹不同,请删除该文件。
3.5、将 nginx
的稳定源加入系统 1 2 3 echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
3.6、设置 nginx 官方源
的优先级高于 Debian
系统的官方仓库 1 2 echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \ | sudo tee /etc/apt/preferences.d/99nginx
3.7、更新源,并安装 nginx
1 sudo apt install nginx -y
3.8、查看状态,启动 nginx
安装好的 nginx
默认是 dead
状态,需要启动,并设置开机启动。
1 sudo systemctl start nginx
1 sudo systemctl enable nginx
1 2 3 4 sudo nginx -V <-- 查看 nginx 的编译参数 cat /etc/nginx/nginx.conf <-- 查看 nginx 的配置文件cat /etc/nginx/conf.d/default.conf <-- 还是 nginx 的配置文件ip a <-- 查看本机 IP 地址
四、安装 PHP
官方手册
4.1、 查看版本 1 apt-cache search php-fpm
通过以上指令,我们可以确认 Debian 12
中 php-fpm
的版本是 8.2
,所以我们直接安装系统自带的版本(8.2版本
)就好。
4.2、安装 PHP 8.2
包
4.3、安装 PHP 8.2
扩展
PHP 8.2
扩展是为向 PHP
编程语言提供本机不可用的额外功能而创建的库。请参阅下面的示例,该示例演示了 cli,zip,mysql,bz2,curl,mbstring,intl,commonPHP
模块的安装
1 sudo apt install php8.2-{cli,zip,mysql,bz2,curl,mbstring,intl,common}
1 sudo apt install php8.2-<extension-name>
4.4、安装 php8.2-fpm
使用 Nginx
,PHP
代码通常由单独的进程执行,例如 PHP-FPM
(FastCGI 进程管理器)。 PHP-FPM
是一个守护进程,用于侦听传入的 PHP
请求并在单独的进程中运行它们。 Nginx
充当反向代理,将传入请求转发到 PHP-FPM
来执行
1 sudo apt install php8.2-fpm
安装 Nginx
和 FPM
扩展后,您需要配置 Nginx
以使用 FastCGI
协议将传入请求转发到 PHP-FPM
。编辑 Nginx
配置文件并在 http
块中添加以下块,以配置 Nginx
将 PHP
请求转发到 PHP-FPM
1 sudo vim /etc/nginx/nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 server { listen 80 ; server_name mysite.example.com; root /var/www/mysite; index index.php index.html; location / { try_files $uri $uri / /index.php?$args ; } location ~ \.php$ { include fastcgi_params; fastcgi_intercept_errors on ; fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ; } }
4.5、配置 php8.2-fpm
1 cat /etc/nginx/nginx.conf
编辑 user
、group
、listen.owner
和 listen.group
属性,改为与 nginx
启动相同的用户——即 nginx
1 sudo vi /etc/php/8.2/fpm/pool.d/www.conf
将 cgi.fix_pathinfo 设置为 0 是一个安全最佳实践,特别是在与 Nginx 配合使用时。它可以有效地防止潜在的攻击,并提升性能。
1 sudo sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/8.2/fpm/php.ini
1 sudo systemctl restart php8.2-fpm
1 ls -al /run/php/php8.2-fpm.sock
1 sudo systemctl enable php8.2-fpm
1 2 3 4 5 6 7 8 9 10 11 root@iZj6cbu3y55faj33gzi8ybZ:~# grep '^user' /etc/nginx/nginx.conf user nginx; root@iZj6cbu3y55faj33gzi8ybZ:~# cat /etc/php/8.2/fpm/pool.d/www.conf | grep '^[^;]' | grep 'user\|group\|owner' user = nginx group = nginx listen.owner = nginx listen.group = nginx root@iZj6cbu3y55faj33gzi8ybZ:~# grep 'cgi.fix_pathinfo=' /etc/php/8.2/fpm/php.ini cgi.fix_pathinfo=0 root@iZj6cbu3y55faj33gzi8ybZ:~# ls -alF /run/php/php8.2-fpm.sock srw-rw---- 1 nginx nginx 0 Sep 21 01:09 /run/php/php8.2-fpm.sock=
1 sudo mkdir -p /usr/share/nginx/html/test-www
1 sudo chown -R nginx:nginx /usr/share/nginx/html/test-www/
1 ls -al /usr/share/nginx/html/test-www/
五、安装 Certbot
5.1、安装 snapd
您需要安装 snapd
并确保按照任何说明启用经典 snap
支持
按照 snapcraft 网站上的这些说明安装 snapd
1 sudo apt install snapd -y
注销并重新登录,或重新启动系统,以确保 snap
的路径正确更新
重新连接服务器之后,使用 Snap
包管理器安装 core
包
输出以下信息代表安装成功
1 core 16-2.45.2 from Canonical✓ installed
5.2、删除 certbot-auto
和任何 Certbot OS
软件包 1 sudo apt-get remove certbot
5.3、安装 Certbot
1 sudo snap install --classic certbot
5.4、准备 Certbot
命令 在机器的命令行上执行以下指令设置软链接,确保 certbot
命令可以运行
1 sudo ln -s /snap/bin/certbot /usr/bin/certbot
5.5、确认插件包含级别 在计算机上的命令行上运行此命令,以确认已安装的插件将具有与 Certbot snap
相同的包含。classic
1 sudo snap set certbot trust-plugin-with-root=ok
5.6、安装正确的 DNS
插件 如果您的 DNS
提供商是 Cloudflare
,您需运行以下命令
1 sudo snap install certbot-dns-cloudflare
5.7、设置 DNS
凭据 使用此插件需要一个包含 Cloudflare API
凭证的配置文件,该文件可从您的 Cloudflare
仪表板获取
以前,Cloudflare
的 全局 API 密钥
用于身份验证,但是此密钥可以访问您帐户中所有域的整个 Cloudflare API
,这意味着如果泄露,它可能会造成很大的损害
Cloudflare 较新的 API 令牌
可以限制为特定的域和操作,因此现在是推荐的身份验证选项
Certbot
所需的令牌仅需要您需要证书的区域的权限 Zone:DNS:Edit
在 root
用户文件夹下建一个 ~/.secrets/certbot/cloudflare.ini
文件
1 mkdir -p ~/.secrets/certbot
1 touch ~/.secrets/certbot/cloudflare.ini
1 vim ~/.secrets/certbot/cloudflare.ini
1 2 dns_cloudflare_api_token = hu3tMEMQmz6Ao8r-PmqVcxHtHmGjjneXjXQYga0O
1 chmod 600 ~/.secrets/certbot/cloudflare.ini
600
权限意味着只有文件的所有者才具有对它的完全读写访问权限。一旦文件权限设置为 600
,其他任何人都无法访问该文件。不设置的话,获证书的时候 Certbot
会红色错误提示。
5.8、运行 DNS
提供商说明的示例
部分中的命令获取证书 1 certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d test.ysbzcn.com --email 'email@ysbzcn.com'
参数详解:certbot certonly
若要仅获取证书而不将其安装在任何位置,可以使用(“仅证书”)命令。–dns-cloudflare-credentials Cloudflare credentials INI
文件。(必填)-d
指定域名–register-unsafely-without-email
不加这行命令会报错,加了就不会再有强制输入邮箱的提示,官方不推荐这样做。
5.9、测试自动续费 系统上的 Certbot
软件包附带一个 cron
作业或 systemd
计时器,它们将在证书过期之前自动续订证书。除非您更改配置,否则您无需再次运行 Certbot
。您可以通过运行以下命令来测试证书的自动续订
1 sudo certbot renew --dry-run
5.10、确认 Certbot
工作正常 要确认您的网站设置正确,请在浏览器中访问并在 URL
栏中查找安全盾牌标志。