WordPress是一种流行的开源内容管理系统(CMS),用于创建和管理网站。安装WordPress的方法之一是使用Docker Compose,这是一个用于定义和运行多容器Docker应用程序的工具。
使用 Docker Compose 安装 WordPress
第 1 步。首先,通过在终端中运行以下命令,确保所有系统软件包都是最新的。apt
<span class="pln">sudo apt update sudo apt upgrade</span>
第 2 步。安装 Docker。
默认情况下,Docker 在 Ubuntu 22.04 基础存储库上不可用。现在运行以下命令将 Docker 存储库添加到系统中:
<span class="pln">echo </span><span class="str">"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"</span> <span class="pun">|</span><span class="pln"> sudo tee </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">apt</span><span class="pun">/</span><span class="pln">sources</span><span class="pun">.</span><span class="pln">list</span><span class="pun">.</span><span class="pln">d</span><span class="pun">/</span><span class="pln">docker</span><span class="pun">.</span><span class="pln">list</span>
接下来,将 GPG 密钥导入您的系统:
<span class="pln">curl </span><span class="pun">-</span><span class="pln">fsSL https</span><span class="pun">:</span><span class="com">//download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg</span>
启用存储库后,现在使用以下命令安装最新版本的 Docker 包:
<span class="pln">sudo apt update sudo apt install docker</span><span class="pun">-</span><span class="pln">ce docker</span><span class="pun">-</span><span class="pln">ce</span><span class="pun">-</span><span class="pln">cli containerd</span><span class="pun">.</span><span class="pln">io docker</span><span class="pun">-</span><span class="pln">compose</span><span class="pun">-</span><span class="pln">plugin</span>
您可以验证 Docker 是否已安装以及当前版本:
<span class="pln">docker </span><span class="pun">-</span><span class="pln">v</span>
成功安装后,启用 Docker(在系统启动时自动启动)、启动并使用以下命令验证状态:
<span class="pln">sudo systemctl enable docker sudo systemctl start docker sudo systemctl status docker</span>
默认情况下,Docker 需要根权限。如果要避免在每次运行命令时使用,请将用户名添加到组中:sudo
docker
docker
<span class="pln">sudo usermod </span><span class="pun">-</span><span class="pln">aG docker $</span><span class="pun">(</span><span class="pln">whoami</span><span class="pun">)</span><span class="pln"> su </span><span class="pun">-</span><span class="pln"> $</span><span class="pun">{</span><span class="pln">USER</span><span class="pun">}</span>
确认您的用户已添加到 Docker 组:
<span class="pln">groups</span>
有关安装和管理 Docker 的其他资源,请阅读下面的帖子:
- 如何在 Ubuntu Linux √ 上安装 Docker。
第 3 步。为 WordPress 创建 Docker Compose 文件。
首先,为 WordPress 配置创建一个目录:
<span class="pln">mkdir wordpress cd wordpress</span>
接下来,使用您喜欢的文本编辑器创建并打开 Docker 撰写文件:
<span class="pln">nano docker</span><span class="pun">-</span><span class="pln">compose</span><span class="pun">.</span><span class="pln">yml</span>
添加以下文件:
<span class="pln">version</span><span class="pun">:</span> <span class="str">'3.9'</span><span class="pln"> services</span><span class="pun">:</span><span class="pln"> wp</span><span class="pun">:</span><span class="pln"> image</span><span class="pun">:</span><span class="pln"> wordpress</span><span class="pun">:</span><span class="pln">latest container_name</span><span class="pun">:</span><span class="pln"> wordpress</span><span class="pun">-</span><span class="pln">app restart</span><span class="pun">:</span> <span class="kwd">unless</span><span class="pun">-</span><span class="pln">stopped expose</span><span class="pun">:</span> <span class="pun">-</span> <span class="lit">8080</span><span class="pln"> volumes</span><span class="pun">:</span> <span class="pun">-</span> <span class="pun">./</span><span class="pln">config</span><span class="pun">/</span><span class="pln">php</span><span class="pun">.</span><span class="pln">conf</span><span class="pun">.</span><span class="pln">ini</span><span class="pun">:</span><span class="str">/usr/</span><span class="kwd">local</span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">php</span><span class="pun">/</span><span class="pln">conf</span><span class="pun">.</span><span class="pln">d</span><span class="pun">/</span><span class="pln">conf</span><span class="pun">.</span><span class="pln">ini </span><span class="pun">-</span> <span class="pun">./</span><span class="pln">wp</span><span class="pun">-</span><span class="pln">app</span><span class="pun">:</span><span class="str">/var/</span><span class="pln">www</span><span class="pun">/</span><span class="pln">html </span><span class="com">#- ./plugin-name/trunk/:/var/www/html/wp-content/plugins/plugin-name # Plugin development</span> <span class="com">#- ./theme-name/trunk/:/var/www/html/wp-content/themes/theme-name # Theme development</span><span class="pln"> environment</span><span class="pun">:</span><span class="pln"> WORDPRESS_DB_HOST</span><span class="pun">:</span><span class="pln"> db WORDPRESS_DB_NAME</span><span class="pun">:</span> <span class="str">"${DB_NAME}"</span><span class="pln"> WORDPRESS_DB_USER</span><span class="pun">:</span> <span class="str">"${DB_USER_NAME}"</span><span class="pln"> WORDPRESS_DB_PASSWORD</span><span class="pun">:</span> <span class="str">"${DB_USER_PASSWORD}"</span><span class="pln"> VIRTUAL_HOST</span><span class="pun">:</span><span class="pln"> your</span><span class="pun">-</span><span class="pln">domain</span><span class="pun">.</span><span class="pln">com LETSENCRYPT_HOST</span><span class="pun">:</span><span class="pln"> your</span><span class="pun">-</span><span class="pln">domain</span><span class="pun">.</span><span class="pln">com depends_on</span><span class="pun">:</span> <span class="pun">-</span><span class="pln"> db links</span><span class="pun">:</span> <span class="pun">-</span><span class="pln"> db wpcli</span><span class="pun">:</span><span class="pln"> image</span><span class="pun">:</span><span class="pln"> wordpress</span><span class="pun">:</span><span class="pln">cli container_name</span><span class="pun">:</span><span class="pln"> wpcli_app volumes</span><span class="pun">:</span> <span class="pun">-</span> <span class="pun">./</span><span class="pln">config</span><span class="pun">/</span><span class="pln">php</span><span class="pun">.</span><span class="pln">conf</span><span class="pun">.</span><span class="pln">ini</span><span class="pun">:</span><span class="str">/usr/</span><span class="kwd">local</span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">php</span><span class="pun">/</span><span class="pln">conf</span><span class="pun">.</span><span class="pln">d</span><span class="pun">/</span><span class="pln">conf</span><span class="pun">.</span><span class="pln">ini </span><span class="pun">-</span> <span class="pun">./</span><span class="pln">wp</span><span class="pun">-</span><span class="pln">app</span><span class="pun">:</span><span class="str">/var/</span><span class="pln">www</span><span class="pun">/</span><span class="pln">html environment</span><span class="pun">:</span><span class="pln"> WORDPRESS_DB_HOST</span><span class="pun">:</span><span class="pln"> db WORDPRESS_DB_NAME</span><span class="pun">:</span> <span class="str">"${DB_NAME}"</span><span class="pln"> WORDPRESS_DB_USER</span><span class="pun">:</span> <span class="str">"${DB_USER_NAME}"</span><span class="pln"> WORDPRESS_DB_PASSWORD</span><span class="pun">:</span> <span class="str">"${DB_USER_PASSWORD}"</span><span class="pln"> depends_on</span><span class="pun">:</span> <span class="pun">-</span><span class="pln"> db </span><span class="pun">-</span><span class="pln"> wp pma</span><span class="pun">:</span><span class="pln"> image</span><span class="pun">:</span><span class="pln"> phpmyadmin</span><span class="pun">/</span><span class="pln">phpmyadmin container_name</span><span class="pun">:</span><span class="pln"> pma restart</span><span class="pun">:</span> <span class="kwd">unless</span><span class="pun">-</span><span class="pln">stopped environment</span><span class="pun">:</span> <span class="com"># https://docs.phpmyadmin.net/en/latest/setup.html#docker-environment-variables</span><span class="pln"> PMA_HOST</span><span class="pun">:</span><span class="pln"> db PMA_PORT</span><span class="pun">:</span> <span class="lit">3306</span><span class="pln"> MYSQL_ROOT_PASSWORD</span><span class="pun">:</span> <span class="str">"${DB_ROOT_PASSWORD}"</span><span class="pln"> UPLOAD_LIMIT</span><span class="pun">:</span> <span class="lit">50M</span><span class="pln"> VIRTUAL_HOST</span><span class="pun">:</span><span class="pln"> phpmyadmin</span><span class="pun">.</span><span class="pln">your</span><span class="pun">-</span><span class="pln">domain</span><span class="pun">.</span><span class="pln">com LETSENCRYPT_HOST</span><span class="pun">:</span><span class="pln"> phpmyadmin</span><span class="pun">.</span><span class="pln">your</span><span class="pun">-</span><span class="pln">domain</span><span class="pun">.</span><span class="pln">com expose</span><span class="pun">:</span> <span class="pun">-</span> <span class="lit">8081</span><span class="pln"> links</span><span class="pun">:</span> <span class="pun">-</span><span class="pln"> db</span><span class="pun">:</span><span class="pln">db db</span><span class="pun">:</span><span class="pln"> image</span><span class="pun">:</span><span class="pln"> mysql</span><span class="pun">:</span><span class="pln">latest container_name</span><span class="pun">:</span><span class="pln"> wordpressdb restart</span><span class="pun">:</span> <span class="kwd">unless</span><span class="pun">-</span><span class="pln">stopped command</span><span class="pun">:</span> <span class="pun">[</span> <span class="str">'--default_authentication_plugin=mysql_native_password'</span><span class="pun">,</span> <span class="str">'--character-set-server=utf8mb4'</span><span class="pun">,</span> <span class="str">'--collation-server=utf8mb4_unicode_ci'</span> <span class="pun">]</span><span class="pln"> volumes</span><span class="pun">:</span> <span class="pun">-</span> <span class="pun">./</span><span class="pln">wp</span><span class="pun">-</span><span class="pln">data</span><span class="pun">:/</span><span class="pln">docker</span><span class="pun">-</span><span class="pln">entrypoint</span><span class="pun">-</span><span class="pln">initdb</span><span class="pun">.</span><span class="pln">d </span><span class="pun">-</span><span class="pln"> db_data</span><span class="pun">:</span><span class="str">/var/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">mysql environment</span><span class="pun">:</span><span class="pln"> MYSQL_DATABASE</span><span class="pun">:</span> <span class="str">"${DB_NAME}"</span><span class="pln"> MYSQL_ROOT_PASSWORD</span><span class="pun">:</span> <span class="str">"${DB_ROOT_PASSWORD}"</span><span class="pln"> MYSQL_USER</span><span class="pun">:</span> <span class="str">"${DB_USER_NAME}"</span><span class="pln"> MYSQL_PASSWORD</span><span class="pun">:</span> <span class="str">"${DB_USER_PASSWORD}"</span><span class="pln"> volumes</span><span class="pun">:</span><span class="pln"> db_data</span><span class="pun">:</span>
保存并关闭文件,然后为撰写文件中使用的变量创建环境文件:
<span class="pln">sudo nano </span><span class="pun">.</span><span class="pln">env</span>
添加以下文件:
<span class="pln">DB_NAME</span><span class="pun">=</span><span class="pln">wordpress DB_USER_NAME</span><span class="pun">=</span><span class="pln">username DB_USER_PASSWORD</span><span class="pun">=</span><span class="pln">userpassword DB_ROOT_PASSWORD</span><span class="pun">=</span><span class="pln">your</span><span class="pun">-</span><span class="pln">strong</span><span class="pun">-</span><span class="pln">password</span>
保存并关闭文件,然后为 PHP 配置创建一个文件夹:
<span class="pln">mkdir config</span>
现在我们创建并打开文件进行编辑:php.conf.ini
<span class="pln">nano config</span><span class="pun">/</span><span class="pln">php</span><span class="pun">.</span><span class="pln">conf</span><span class="pun">.</span><span class="pln">ini</span>
添加以下文件:
<span class="pln">file_uploads </span><span class="pun">=</span> <span class="typ">On</span><span class="pln"> memory_limit </span><span class="pun">=</span> <span class="lit">512M</span><span class="pln"> upload_max_filesize </span><span class="pun">=</span> <span class="lit">30M</span><span class="pln"> post_max_size </span><span class="pun">=</span> <span class="lit">30M</span><span class="pln"> max_execution_time </span><span class="pun">=</span> <span class="lit">400</span>
第 4 步。为 nginx 配置 Docker Compose。
首先,我们为 Nginx 配置创建目录:
<span class="pln">mkdir nginx</span>
接下来,在该目录中为虚拟主机创建一个目录:
<span class="pln">mkdir nginx</span><span class="pun">/</span><span class="pln">vhost</span>
之后,创建并打开它们进行编辑。nginx/vhost/wordpress.your-domain.com
<span class="pln">nano nginx</span><span class="pun">/</span><span class="pln">vhost</span><span class="pun">/</span><span class="pln">wordpress</span><span class="pun">.</span><span class="pln">your</span><span class="pun">-</span><span class="pln">domain</span><span class="pun">.</span><span class="pln">com</span>
粘贴以下文件:
<span class="pln">server_tokens off</span><span class="pun">;</span><span class="pln"> client_max_body_size </span><span class="lit">30m</span><span class="pun">;</span>
保存并关闭文件。
对文件执行相同的操作。nginx/vhost/phpmyadmin.example.com
<span class="pln">nano nginx</span><span class="pun">/</span><span class="pln">vhost</span><span class="pun">/</span><span class="pln">phpmyadmin</span><span class="pun">.</span><span class="pln">your</span><span class="pun">-</span><span class="pln">domain</span><span class="pun">.</span><span class="pln">com</span>
添加以下代码:
<span class="pln">server_tokens off</span><span class="pun">;</span><span class="pln"> client_max_body_size </span><span class="lit">50m</span><span class="pun">;</span>
保存并关闭文件,然后再次打开 docker 撰写文件:
<span class="pln">nano docker</span><span class="pun">-</span><span class="pln">compose</span><span class="pun">.</span><span class="pln">yml</span>
将以下代码粘贴到该行之前。volumes: db_data:
<span class="pln">nginx</span><span class="pun">:</span><span class="pln"> container_name</span><span class="pun">:</span><span class="pln"> nginx image</span><span class="pun">:</span><span class="pln"> nginxproxy</span><span class="pun">/</span><span class="pln">nginx</span><span class="pun">-</span><span class="pln">proxy restart</span><span class="pun">:</span> <span class="kwd">unless</span><span class="pun">-</span><span class="pln">stopped ports</span><span class="pun">:</span> <span class="pun">-</span> <span class="lit">80</span><span class="pun">:</span><span class="lit">80</span> <span class="pun">-</span> <span class="lit">443</span><span class="pun">:</span><span class="lit">443</span><span class="pln"> volumes</span><span class="pun">:</span> <span class="pun">-</span> <span class="str">/var/</span><span class="pln">run</span><span class="pun">/</span><span class="pln">docker</span><span class="pun">.</span><span class="pln">sock</span><span class="pun">:</span><span class="str">/tmp/</span><span class="pln">docker</span><span class="pun">.</span><span class="pln">sock</span><span class="pun">:</span><span class="pln">ro </span><span class="pun">-</span> <span class="pun">./</span><span class="pln">nginx</span><span class="pun">/</span><span class="pln">html</span><span class="pun">:</span><span class="str">/usr/</span><span class="pln">share</span><span class="pun">/</span><span class="pln">nginx</span><span class="pun">/</span><span class="pln">html </span><span class="pun">-</span> <span class="pun">./</span><span class="pln">nginx</span><span class="pun">/</span><span class="pln">certs</span><span class="pun">:</span><span class="str">/etc/</span><span class="pln">nginx</span><span class="pun">/</span><span class="pln">certs </span><span class="pun">-</span> <span class="pun">./</span><span class="pln">nginx</span><span class="pun">/</span><span class="pln">vhost</span><span class="pun">:</span><span class="str">/etc/</span><span class="pln">nginx</span><span class="pun">/</span><span class="pln">vhost</span><span class="pun">.</span><span class="pln">d logging</span><span class="pun">:</span><span class="pln"> options</span><span class="pun">:</span><span class="pln"> max</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span> <span class="str">"10m"</span><span class="pln"> max</span><span class="pun">-</span><span class="pln">file</span><span class="pun">:</span> <span class="str">"3"</span>
第5步。为 SSL 配置 Docker Compose。
现在我们使用以下命令打开一个 docker-compose 文件:
<span class="pln">nano docker</span><span class="pun">-</span><span class="pln">compose</span><span class="pun">.</span><span class="pln">yml</span>
在该行之前添加以下代码:volumes: db_data:
<span class="pln">acme</span><span class="pun">-</span><span class="pln">companion</span><span class="pun">:</span><span class="pln"> container_name</span><span class="pun">:</span><span class="pln"> acme</span><span class="pun">-</span><span class="pln">companion image</span><span class="pun">:</span><span class="pln"> nginxproxy</span><span class="pun">/</span><span class="pln">acme</span><span class="pun">-</span><span class="pln">companion restart</span><span class="pun">:</span> <span class="kwd">unless</span><span class="pun">-</span><span class="pln">stopped volumes_from</span><span class="pun">:</span> <span class="pun">-</span><span class="pln"> nginx volumes</span><span class="pun">:</span> <span class="pun">-</span> <span class="str">/var/</span><span class="pln">run</span><span class="pun">/</span><span class="pln">docker</span><span class="pun">.</span><span class="pln">sock</span><span class="pun">:</span><span class="str">/var/</span><span class="pln">run</span><span class="pun">/</span><span class="pln">docker</span><span class="pun">.</span><span class="pln">sock </span><span class="pun">-</span> <span class="pun">./</span><span class="pln">nginx</span><span class="pun">/</span><span class="pln">acme</span><span class="pun">:</span><span class="str">/etc/</span><span class="pln">acme</span><span class="pun">.</span><span class="pln">sh environment</span><span class="pun">:</span><span class="pln"> DEFAULT_EMAIL</span><span class="pun">:</span><span class="pln"> admin@your</span><span class="pun">-</span><span class="pln">domain</span><span class="pun">.</span><span class="pln">com</span>
步骤 7.配置防火墙。
现在我们使用WordPress设置了一个简单防火墙(UFW),以允许公共访问默认Web端口80:
<span class="pln">sudo ufw allow </span><span class="typ">OpenSSH</span><span class="pln"> sudo ufw allow </span><span class="str">'Nginx Full'</span><span class="pln"> sudo ufw enable</span>
第8步。安装WordPress。
完成所有配置文件后,就可以启动和启动容器了:
<span class="pln">docker compose up </span><span class="pun">-</span><span class="pln">d</span>
输出:
<span class="pln">$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES r1e8agdt169d nginxproxy</span><span class="pun">/</span><span class="pln">acme</span><span class="pun">-</span><span class="pln">companion </span><span class="str">"/bin/bash /app/entr…"</span> <span class="lit">12</span><span class="pln"> seconds ago </span><span class="typ">Up</span> <span class="lit">8</span><span class="pln"> seconds acme</span><span class="pun">-</span><span class="pln">companion </span><span class="lit">9m3ilk8ff790</span><span class="pln"> wordpress</span><span class="pun">:</span><span class="pln">latest </span><span class="str">"docker-entrypoint.s…"</span> <span class="lit">12</span><span class="pln"> seconds ago </span><span class="typ">Up</span> <span class="lit">8</span><span class="pln"> seconds </span><span class="lit">80</span><span class="pun">/</span><span class="pln">tcp</span><span class="pun">,</span> <span class="lit">8080</span><span class="pun">/</span><span class="pln">tcp wordpress</span><span class="pun">-</span><span class="pln">app </span><span class="lit">1f9c777g9dta</span><span class="pln"> phpmyadmin</span><span class="pun">/</span><span class="pln">phpmyadmin </span><span class="str">"/docker-entrypoint.…"</span> <span class="lit">12</span><span class="pln"> seconds ago </span><span class="typ">Up</span> <span class="lit">8</span><span class="pln"> seconds </span><span class="lit">80</span><span class="pun">/</span><span class="pln">tcp</span><span class="pun">,</span> <span class="lit">8081</span><span class="pun">/</span><span class="pln">tcp pma </span><span class="lit">1bmwil07an42</span><span class="pln"> nginxproxy</span><span class="pun">/</span><span class="pln">nginx</span><span class="pun">-</span><span class="pln">proxy </span><span class="str">"/app/docker-entrypo…"</span> <span class="lit">12</span><span class="pln"> seconds ago </span><span class="typ">Up</span> <span class="lit">10</span><span class="pln"> seconds </span><span class="lit">0.0</span><span class="pun">.</span><span class="lit">0.0</span><span class="pun">:</span><span class="lit">80</span><span class="pun">-></span><span class="lit">80</span><span class="pun">/</span><span class="pln">tcp</span><span class="pun">,</span> <span class="pun">:::</span><span class="lit">80</span><span class="pun">-></span><span class="lit">80</span><span class="pun">/</span><span class="pln">tcp</span><span class="pun">,</span> <span class="lit">0.0</span><span class="pun">.</span><span class="lit">0.0</span><span class="pun">:</span><span class="lit">443</span><span class="pun">-></span><span class="lit">443</span><span class="pun">/</span><span class="pln">tcp</span><span class="pun">,</span> <span class="pun">:::</span><span class="lit">443</span><span class="pun">-></span><span class="lit">443</span><span class="pun">/</span><span class="pln">tcp nginx t0dh64a2f4a3 mysql</span><span class="pun">:</span><span class="pln">latest </span><span class="str">"docker-entrypoint.s…"</span> <span class="lit">12</span><span class="pln"> seconds ago </span><span class="typ">Up</span> <span class="lit">10</span><span class="pln"> seconds </span><span class="lit">3306</span><span class="pun">/</span><span class="pln">tcp</span><span class="pun">,</span> <span class="lit">33060</span><span class="pun">/</span><span class="pln">tcp wordpressdb</span>
现在打开您的网络浏览器并使用 URL 访问 WordPress Web UI。您将被重定向到以下页面:https://your-domain.com
此外,您可以通过 URL 访问 phpMyAdmin 。https://phpmyadmin.your-domain.com
感谢您使用本教程在 Ubuntu 系统上安装 WordPress with Docker Compose。有关其他帮助或有用信息,我们建议您查看 Docker 官方网站。