由于一些原因,Docker 国内的镜像源全军覆没。国内服务器使用官方源安装 Docker
,已经不可行,需要使用国内源安装。目前中科大源、阿里云源还能安装 Docker
,但不能拉取镜像。拉取 Docker
镜像可以白嫖Cloudflare Workers 搭建 Docker Hub镜像加速服务。
一、更新系统
1、和更新源同步
BASH
sudo apt update
2、显示出哪些软件可以更新
BASH
sudo apt list --upgradable
3、进行更新
BASH
sudo apt upgrade -y
4、也可以直接用复合命令更新
BASH
sudo apt update && sudo apt upgrade -y
二、安装 Docker
按照 官方文档 步骤安装 docker
。
2.1、卸载旧版本
1、卸载 Docker Engine
、CLI
、containerd
和 Docker Compose
包
BASH
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
2、删除所有映像、容器和卷
BASH
sudo rm -rf /var/lib/docker
BASH
sudo rm -rf /var/lib/containerd
3、运行以下命令以卸载所有冲突的软件包
BASH
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
的存储库
BASH
sudo apt-get update
BASH
sudo apt-get install ca-certificates curl gnupg -y
2、创建 /etc/apt/keyrings
目录并设置其权限为 755
BASH
sudo install -m 0755 -d /etc/apt/keyrings
3、添加存储库的 GPG
密钥(建议使用中科大源)
- 中科大源
BASH
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
- 阿里云源
BASH
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
- 官方源
BASH
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
4、修改 /etc/apt/keyrings/docker.gpg
文件的权限,以便所有用户都可以读取该文件
BASH
sudo chmod a+r /etc/apt/keyrings/docker.gpg
5、使用以下命令向 source.list
中添加 Docker
存储库(建议使用中科大源)
- 中科大源
BASH
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
- 阿里云源
BASH
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
- 官方源
BASH
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、更新包索引
BASH
sudo apt-get update
2.3、安装 Docker
引擎
安装 Docker Engine
、containerd
和 Docker Compose
,要安装最新版本,请运行
BASH
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
腾讯云使用阿里云的镜像安装
Docker
,速度很慢,建议使用中科大源。
2.4、查看 Docker
状态
- 查看
Docker
服务的状态
BASH
systemctl status docker
Docker
安装完成默认是active
状态,开机自启是enabled
状态。
2.5、拉取镜像
此时虽然安装好了 Docker
,但是去拉取镜像的话,拉取不下来,因为目前国内所有的镜像源全军覆没,可以查看这篇博文:白嫖Cloudflare Workers 搭建 Docker Hub镜像加速服务 中的方法自建。
三、安装 nginx
按照 官方文档 步骤安装 nginx
。
3.1、安装必备组件
BASH
sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring -y
3.2、导入官方 nginx
签名密钥,以便 apt
可以验证软件包真实性
获取密钥
BASH
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
3.3、验证下载的文件是否包含正确的密钥
BASH
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
3.4、输出应包含完整指纹,如下所示
PLAINTEXT
pub rsa4096 2024-05-29 [SC]
8540A6F18833A80E9C1653A42FD21310B49F6B46
uid nginx signing key <[email protected]>
pub rsa2048 2011-08-19 [SC] [expires: 2027-05-24]
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid nginx signing key <[email protected]>
pub rsa4096 2024-05-29 [SC]
9E9BE90EACBCDE69FE9B204CBCDCD8A38D88A2B3
uid nginx signing key <[email protected]>
如果指纹不同,请删除该文件。
3.5、将 nginx
的稳定源加入系统
BASH
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
系统的官方仓库
BASH
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
BASH
sudo apt update
BASH
sudo apt install nginx -y
3.8、查看状态,启动 nginx
安装好的 nginx
默认是 dead
状态,需要启动,并设置开机启动。
- 查看
nginx
服务的状态
BASH
systemctl status nginx
- 启动
nginx
服务
BASH
sudo systemctl start nginx
- 设置
nginx
开机启动
BASH
sudo systemctl enable nginx
- 确认
nginx
服务的启动状态
BASH
systemctl status nginx
- 相关命令
BASH
sudo nginx -V <-- 查看 nginx 的编译参数
cat /etc/nginx/nginx.conf <-- 查看 nginx 的配置文件
cat /etc/nginx/conf.d/default.conf <-- 还是 nginx 的配置文件
ip a <-- 查看本机 IP 地址
四、安装 PHP
4.1、 查看版本
BASH
apt-cache search php-fpm
BASH
apt-cache show php-fpm
通过以上指令,我们可以确认
Debian 12
中php-fpm
的版本是8.2
,所以我们直接安装系统自带的版本(8.2版本
)就好。
4.2、安装 PHP 8.2
包
BASH
sudo apt install php8.2
4.3、安装 PHP 8.2
扩展
PHP 8.2
扩展是为向PHP
编程语言提供本机不可用的额外功能而创建的库。请参阅下面的示例,该示例演示了cli,zip,mysql,bz2,curl,mbstring,intl,commonPHP
模块的安装
BASH
sudo apt install php8.2-{cli,zip,mysql,bz2,curl,mbstring,intl,common}
- 可以使用以下命令语法安装任何其他模块
BASH
sudo apt install php8.2-<extension-name>
4.4、安装 php8.2-fpm
- 使用
Nginx
,PHP
代码通常由单独的进程执行,例如PHP-FPM
(FastCGI 进程管理器)。PHP-FPM
是一个守护进程,用于侦听传入的PHP
请求并在单独的进程中运行它们。Nginx
充当反向代理,将传入请求转发到PHP-FPM
来执行
BASH
sudo apt install php8.2-fpm
- 安装
Nginx
和FPM
扩展后,您需要配置Nginx
以使用FastCGI
协议将传入请求转发到PHP-FPM
。编辑Nginx
配置文件并在http
块中添加以下块,以配置Nginx
将PHP
请求转发到PHP-FPM
BASH
sudo vim /etc/nginx/nginx.conf
NGINX
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$ {
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini,cgi.fix_pathinfo = 0; 用于禁用 Nginx 自动修正 CGI 脚本的 PATH_INFO 环境变量的行为。
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
#The following parameter can be also included in fastcgi_params file
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
- 更改后验证
Nginx
配置
BASH
sudo nginx -t
- 重载
Nginx
配置
BASH
sudo nginx -s reload
4.5、配置 php8.2-fpm
- 确认
nginx
启动的用户,为nginx
BASH
cat /etc/nginx/nginx.conf
BASH
id nginx
- 编辑
user
、group
、listen.owner
和listen.group
属性,改为与nginx
启动相同的用户——即nginx
BASH
sudo vi /etc/php/8.2/fpm/pool.d/www.conf
- 将 cgi.fix_pathinfo 设置为 0 是一个安全最佳实践,特别是在与 Nginx 配合使用时。它可以有效地防止潜在的攻击,并提升性能。
BASH
sudo sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/8.2/fpm/php.ini
- 重启
php8.2-fpm
服务
BASH
sudo systemctl restart php8.2-fpm
- 确认
socket
用户已变更
BASH
ls -al /run/php/php8.2-fpm.sock
- 设置
php-fpm
服务开机启动
BASH
sudo systemctl enable php8.2-fpm
- 配置完成,验证输出应如下所示
CONSOLE
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=
- 建立新站点的根目录
BASH
sudo mkdir -p /usr/share/nginx/html/test-www
- 变更站点目录的所有者为
nginx
用户
BASH
sudo chown -R nginx:nginx /usr/share/nginx/html/test-www/
- 确认根目录用户已变更
BASH
ls -al /usr/share/nginx/html/test-www/
五、安装 Certbot
5.1、安装 snapd
您需要安装 snapd
并确保按照任何说明启用经典 snap
支持
snap
可以直接从命令行安装
BASH
sudo apt update
BASH
sudo apt install snapd -y
- 注销并重新登录,或重新启动系统,以确保
snap
的路径正确更新
BASH
reboot
- 重新连接服务器之后,使用
Snap
包管理器安装core
包
BASH
sudo snap install core
输出以下信息代表安装成功
PLAINTEXT
core 16-2.45.2 from Canonical✓ installed
5.2、删除 certbot-auto
和任何 Certbot OS
软件包
BASH
sudo apt-get remove certbot
5.3、安装 Certbot
BASH
sudo snap install --classic certbot
5.4、准备 Certbot
命令
在机器的命令行上执行以下指令设置软链接,确保 certbot
命令可以运行
BASH
sudo ln -s /snap/bin/certbot /usr/bin/certbot
5.5、确认插件包含级别
在计算机上的命令行上运行此命令,以确认已安装的插件将具有与 Certbot snap
相同的包含。classic
BASH
sudo snap set certbot trust-plugin-with-root=ok
5.6、安装正确的 DNS
插件
如果您的 DNS
提供商是 Cloudflare
,您需运行以下命令
BASH
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
文件
BASH
mkdir -p ~/.secrets/certbot
BASH
touch ~/.secrets/certbot/cloudflare.ini
BASH
vim ~/.secrets/certbot/cloudflare.ini
- 使用受限
API
令牌的示例凭证文件(推荐)
INI
# Cloudflare API token used by Certbot
dns_cloudflare_api_token = hu3tMEMQmz6Ao8r-PmqVcxHtHmGjjneXjXQYga0O
- 设置令牌文件权限
BASH
chmod 600 ~/.secrets/certbot/cloudflare.ini
600
权限意味着只有文件的所有者才具有对它的完全读写访问权限。一旦文件权限设置为600
,其他任何人都无法访问该文件。不设置的话,获证书的时候Certbot
会红色错误提示。
5.8、运行 DNS
提供商说明的示例
部分中的命令获取证书
BASH
certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d test.ysbzcn.com --email '[email protected]'
参数详解:
certbot certonly
若要仅获取证书而不将其安装在任何位置,可以使用(“仅证书”)命令。
–dns-cloudflare-credentials Cloudflare credentials INI
文件。(必填)
-d
指定域名
–register-unsafely-without-email
不加这行命令会报错,加了就不会再有强制输入邮箱的提示,官方不推荐这样做。
5.9、测试自动续费
系统上的 Certbot
软件包附带一个 cron
作业或 systemd
计时器,它们将在证书过期之前自动续订证书。除非您更改配置,否则您无需再次运行 Certbot
。您可以通过运行以下命令来测试证书的自动续订
BASH
sudo certbot renew --dry-run
5.10、确认 Certbot
工作正常
要确认您的网站设置正确,请在浏览器中访问并在 URL
栏中查找安全盾牌标志。
文章作者: 羽乐
文章链接: https://blog.ysbzcn.com/posts/docker-newest/
版权声明: 本博客所有文章除特别声明外,均采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 许可协议。转载请注明来自 云深不知处!