Docker 安装lnmp环境,运行wordprees

domo 发布于 2025-01-18 98 次阅读


每日一学习,今日又跟着大佬学到了新东西,原大佬


常规操作,更新系统

apt update -y  && apt upgrade -y && apt install -y curl wget sudo socat

安装docker&以及dockercompose

curl -fsSL https://get.docker.com | sh

curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

创建目录以及所需文件,具体按自己喜好可以更改问价名,后面的配置里面记得改掉就行

cd /home # 创建home文件夹,容器和wp都在这

mkdir web 

cd web  

mkdir html  

mkdir mysql 

mkdir certs    # 证书存放文件

touch nginx.conf  # nginx配置文件

nano docker-compose.yml  # 容器compose部署文件

配置dockercompose的文档

1.  **宿主机的目录或文件** `./nginx.conf`, `./certs`, `./html`:这些是在宿主机(即你当前机器)上的相对路径。
    
    *   `./nginx.conf` 表示宿主机中当前工作目录下的 `nginx.conf` 文件。
    *   `./certs` 是宿主机中当前目录下的 `certs` 文件夹。
    *   `./html` 是宿主机中当前目录下的 `html` 文件夹。
2.  **容器中的路径** `/etc/nginx/nginx.conf`, `/etc/nginx/certs`, `/var/www/html`:
    
    *   `nginx.conf` 文件在容器中 `/etc/nginx/nginx.conf` 的位置,映射后,容器会使用宿主机提供的配置文件。
    *   `certs` 文件夹在容器中的 `/etc/nginx/certs`,用于存放证书。
    *   `html` 文件夹在容器中的 `/var/www/html`,用于存放网站文件。

### 解释与作用:

*   **文件映射**:将宿主机中的文件夹或文件映射到容器中,使得容器内部能够访问这些文件或文件夹,并且这些文件会随着宿主机的更新而自动同步。
*   **持久化**:如果容器停止或删除,容器内的修改不会丢失,因为数据保存在宿主机中。
*   **开发与调试**:在开发过程中,修改宿主机上的文件(如 `nginx.conf`)会立即反映到容器中,无需重新构建容器。

### 映射的特点:

*   **相对路径**:使用相对路径时,Docker Compose 会将宿主机的相对路径映射到当前的工作目录。
*   **绝对路径**:如果使用绝对路径(如 `/path/to/your/file:/path/in/container`),则会直接将宿主机的指定目录或文件映射到容器中。

### 小结:

文件映射是一个非常实用的功能,可以帮助开发人员更方便地管理容器与宿主机之间的文件交互和持久化。当你需要修改容器内的配置文件或共享文件时,使用 `volumes` 可以轻松实现。

证书申请

curl https://get.acme.sh | sh

~/.acme.sh/acme.sh --register-account -m [email protected]

~/.acme.sh/acme.sh --issue -d s.kejilion.eu.org --standalone

下载证书

~/.acme.sh/acme.sh --installcert -d s.kejilion.eu.org --key-file /home/web/certs/key.pem --fullchain-file /home/web/certs/cert.pem

cloudflare15年证书申请

  • 源服务器
  • 创建证书
  • 保存下证书,以及私钥

NGINX配置

  • 配置nignx.conf文件
events {
    worker_connections 1024;
}

http {

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
    
    client_max_body_size 1000m;  
    #上传限制参数1G以内文件可上传

    # HTTP server
    server {
        listen 80;
        server_name test.com;   # 替换自己的域名

        # Redirect all HTTP requests to HTTPS
        return 301 https://$host$request_uri;
    }

    # HTTPS server
    server {
        listen 443 ssl;
        server_name test.com;   # 替换自己的域名

        http2 on;
            
        ssl_certificate /etc/nginx/certs/cert.pem;
        ssl_certificate_key /etc/nginx/certs/key.pem;

        root /var/www/html;
        index index.php;

        # 伪静态配置
        # 该规则用于 WordPress 等应用,将所有请求先尝试访问实际文件,如果没有找到,再重定向到 index.php
        location / {
            try_files $uri $uri/ /index.php?$args;
            # 如果没有找到文件或目录,Nginx 会将请求转发到 index.php,并附带请求的查询参数($args)
        }

        # PHP-FPM 配置
        location ~ \.php$ {
            fastcgi_pass php:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
}

这段的小结

events {
    worker_connections 1024;   # 设置每个 Nginx 工作进程的最大连接数为 1024。每个工作进程可以同时处理最多 1024 个客户端连接,适用于高流量站点时,可能需要增大此值。
}

http {
    include /etc/nginx/mime.types;   # 引入 MIME 类型配置文件,Nginx 通过该文件定义不同文件扩展名和 MIME 类型的映射关系,帮助浏览器正确解析文件。
    default_type application/octet-stream;   # 如果 MIME 类型文件未定义,默认使用二进制文件类型 `application/octet-stream`,通常用于下载文件。

    sendfile on;   # 启用高效文件传输,Nginx 将通过操作系统的零拷贝技术直接将文件从硬盘发送到客户端,减少 CPU 负担,提高性能。
    keepalive_timeout 65;   # 设置服务器和客户端之间的 HTTP keep-alive 连接的最大空闲时间,65 秒后若无数据交换,连接会被关闭。

    client_max_body_size 1000m;   # 设置客户端上传文件的最大大小为 1000MB(1GB)。超出该大小的文件会导致 `413 Request Entity Too Large` 错误。

    # HTTP server
    server {
        listen 80;   # 配置 Nginx 监听 80 端口,这是 HTTP 默认端口。
        server_name test.com;   # 配置域名为 `test.com`,你需要根据实际情况将其修改为你自己网站的域名。

        # Redirect all HTTP requests to HTTPS
        return 301 https://$host$request_uri;   # 所有 HTTP 请求会被重定向到 HTTPS 版本,`$host` 和 `$request_uri` 代表请求的域名和路径。
    }

    # HTTPS server
    server {
        listen 443 ssl;   # 配置 Nginx 监听 443 端口,并启用 SSL 协议,支持 HTTPS。
        server_name test.com;   # 配置域名为 `test.com`,同样需要根据实际情况修改。

        http2 on;   # 启用 HTTP/2 协议,HTTP/2 可以提升性能,尤其是在处理大量小文件和多并发请求时,减少延迟和带宽使用。

        ssl_certificate /etc/nginx/certs/cert.pem;   # 设置 SSL 证书的路径,这个文件包含了网站的加密证书。
        ssl_certificate_key /etc/nginx/certs/key.pem;   # 设置 SSL 证书私钥的路径,用于加密解密 SSL 通信。

        root /var/www/html;   # 配置网站的根目录为 `/var/www/html`,这个目录下应该存放你网站的文件。
        index index.php;   # 配置默认的首页文件为 `index.php`,如果访问根目录,将默认加载此文件。

        # 伪静态配置
        location / {
            try_files $uri $uri/ /index.php?$args;   # Nginx 尝试按顺序访问请求的 URI 对应的文件或目录。如果文件或目录不存在,则将请求重定向到 `index.php`,并附带查询参数。
        }

        # PHP-FPM 配置
        location ~ \.php$ {   # 匹配所有以 `.php` 结尾的请求。
            fastcgi_pass php:9000;   # 将 PHP 请求转发到 PHP-FPM 处理,这里 `php` 是 PHP 容器的服务名,`9000` 是 PHP-FPM 服务的端口。
            fastcgi_index index.php;   # 默认访问 `index.php` 文件。
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;   # 设置 PHP 脚本文件的完整路径,确保 PHP-FPM 能正确找到要执行的文件。
            include fastcgi_params;   # 包括标准的 FastCGI 参数配置,确保 Nginx 能正常与 PHP-FPM 配合工作。
        }
    }
}
总结:
这段 Nginx 配置实现了以下功能:

HTTP 请求转 HTTPS:所有的 HTTP 请求都被自动重定向到 HTTPS。
SSL 加密:启用 SSL 配置,使网站支持 HTTPS 加密访问。
伪静态:通过 try_files 指令配置伪静态规则,确保 WordPress 等应用可以处理友好的 URL。
PHP 支持:配置了 PHP-FPM,使 Nginx 能处理 PHP 请求。
文件上传限制:通过 client_max_body_size 设置最大文件上传限制为 1GB。
这些配置对于大多数基于 Nginx 和 PHP 的网站(如 WordPress)非常适用。

下载安装wordprees

cd /home/web && wget https://cn.wordpress.org/wordpress-6.2.2-zh_CN.zip && sudo apt-get install -y unzip && unzip wordpress-6.2.2-zh_CN.zip -d html && rm wordpress-6.2.2-zh_CN.zip && mv /home/web/html/wordpress/* /home/web/html/

运动dockercompose,开始安装容器

cd /home/web && docker-compose up -d


安装扩展

docker exec php apt update && docker exec php apt install -y libmariadb-dev-compat libmariadb-dev libzip-dev libmagickwand-dev imagemagick

docker exec php docker-php-ext-install mysqli pdo_mysql zip exif gd intl bcmath opcache

docker exec php pecl install imagick && docker exec php sh -c 'echo "extension=imagick.so" > /usr/local/etc/php/conf.d/imagick.ini'

docker exec -it php sh -c 'echo "upload_max_filesize=50M \n post_max_size=50M" > /usr/local/etc/php/conf.d/uploads.ini'

最后这段,拆开其实就是进入php的docker容器,来到/usr/local/etc/php/conf.d/路径下,创建了uploads.ini的文件,然后设置了上传和post限制到了50m,

upload_max_filesize=50M
post_max_size=50M
memory_limit = 256M  #设置php的内存
php -i | grep 'memory_limit\|upload_max_filesize\|post_max_size'
#使用上面这个指令看看设置生效没有

重启PHP

docker restart php

然后就可以浏览域名进行设置了

修改wordprees的FTP限制,跳过账户验证

代码解读就是将echo "define('FS_METHOD', 'direct');"添加到/wp-config.php中

echo "define('FS_METHOD', 'direct');" >> /home/web/html/wp-config.php
此作者没有提供个人介绍
最后更新于 2025-01-18