{"id":441818,"date":"2025-07-17T14:11:55","date_gmt":"2025-07-17T06:11:55","guid":{"rendered":"https:\/\/www.idc.net\/help\/?p=441818"},"modified":"2025-09-16T10:08:49","modified_gmt":"2025-09-16T02:08:49","slug":"%e4%bd%bf%e7%94%a8-docker-compose-%e5%9c%a8%e9%a6%99%e6%b8%af%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e9%83%a8%e7%bd%b2-wordpress","status":"publish","type":"post","link":"https:\/\/idc.net\/help\/441818\/","title":{"rendered":"\u5728\u540e\u6d6a\u4e91\u4e0a\u4f7f\u7528Docker Compose\u90e8\u7f72WordPress"},"content":{"rendered":"<h2>\u5f15\u8a00<\/h2>\n<p>WordPress\u4f5c\u4e3a\u5168\u7403\u6700\u6d41\u884c\u7684\u5185\u5bb9\u7ba1\u7406\u7cfb\u7edf\uff08CMS\uff09\uff0c\u4ee5\u5176\u7075\u6d3b\u6027\u548c\u6613\u7528\u6027\u5e7f\u6cdb\u5e94\u7528\u4e8e\u7f51\u7ad9\u5f00\u53d1\u3002\u4f7f\u7528Docker Compose\u53ef\u4ee5\u5728\u4e91\u670d\u52a1\u5668\u4e0a\u5feb\u901f\u90e8\u7f72WordPress\uff0c\u7b80\u5316\u73af\u5883\u914d\u7f6e\u5e76\u63d0\u5347\u53ef\u7ef4\u62a4\u6027\u3002\u672c\u6587\u4ee5<a href=\"https:\/\/idc.net\/cloud-hk\">\u540e\u6d6a\u4e91VPS<\/a>\u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7Docker Compose\u90e8\u7f72WordPress\uff0c\u7ed3\u5408NGINX\u53cd\u5411\u4ee3\u7406\u548cLet\u2019s Encrypt SSL\u8bc1\u4e66\uff0c\u786e\u4fdd\u5b89\u5168\u9ad8\u6548\u7684\u8fd0\u884c\u73af\u5883\u3002<\/p>\n<h2>\u6848\u4f8b\u5206\u6790\uff1a\u540e\u6d6a\u4e91\u4e0a\u7684\u4e2a\u4eba\u535a\u5ba2\u90e8\u7f72<\/h2>\n<p>\u5047\u8bbe\u6211\u4eec\u5728<a href=\"https:\/\/idc.net\/cloud-hk\">\u540e\u6d6a\u4e91HK-1H2G VPS<\/a>\uff081\u6838CPU\u30012GB DDR4\u5185\u5b58\u300130GB SSD\u30011Mbps\u5e26\u5bbd\uff0c\u6708\u8d39\u00a530\uff09\u4e0a\u90e8\u7f72\u4e00\u4e2a\u4e2a\u4eba\u535a\u5ba2\uff0c\u57df\u540d<code>myblog.com<\/code>\u5df2\u901a\u8fc7<a href=\"https:\/\/idc.net\/domain\">\u540e\u6d6a\u4e91\u57df\u540d\u670d\u52a1<\/a>\u89e3\u6790\u5230VPS\u7684\u516c\u7f51IP\u3002\u901a\u8fc7Docker Compose\uff0c\u6211\u4eec\u5feb\u901f\u642d\u5efa\u4e86WordPress\u548cMariaDB\u5bb9\u5668\uff0c\u5e76\u914d\u7f6e\u4e86NGINX\u548cHTTPS\uff0c\u786e\u4fdd\u4e86\u535a\u5ba2\u7684\u5b89\u5168\u8bbf\u95ee\u3002<\/p>\n<h2>\u6280\u672f\u539f\u7406\uff1aDocker Compose\u4e0eWordPress<\/h2>\n<h3>Docker Compose<\/h3>\n<p>Docker Compose\u662f\u4e00\u4e2a\u7528\u4e8e\u5b9a\u4e49\u548c\u8fd0\u884c\u591a\u5bb9\u5668\u5e94\u7528\u7684\u5de5\u5177\uff0c\u901a\u8fc7YAML\u6587\u4ef6\u63cf\u8ff0\u670d\u52a1\u3001\u5377\u548c\u7f51\u7edc\u914d\u7f6e\u3002\u5b83\u7b80\u5316\u4e86WordPress\uff08PHP+Apache\uff09\u548cMariaDB\u7684\u90e8\u7f72\uff0c\u81ea\u52a8\u7ba1\u7406\u5bb9\u5668\u95f4\u7684\u4f9d\u8d56\u548c\u901a\u4fe1\u3002<\/p>\n<h3>NGINX\u53cd\u5411\u4ee3\u7406<\/h3>\n<p>NGINX\u4f5c\u4e3a\u9ad8\u6027\u80fdWeb\u670d\u52a1\u5668\uff0c\u53ef\u901a\u8fc7\u53cd\u5411\u4ee3\u7406\u5c06\u8bf7\u6c42\u8f6c\u53d1\u5230WordPress\u5bb9\u5668\uff0c\u540c\u65f6\u652f\u6301SSL\u7ec8\u6b62\u4ee5\u542f\u7528HTTPS\uff0c\u63d0\u5347\u5b89\u5168\u6027\u548c\u6027\u80fd\u3002<\/p>\n<h3>Let\u2019s Encrypt<\/h3>\n<p>Let\u2019s Encrypt\u901a\u8fc7ACME\u534f\u8bae\u63d0\u4f9b\u514d\u8d39SSL\u8bc1\u4e66\uff0c\u7ed3\u5408Certbot\u5de5\u5177\u5b9e\u73b0\u81ea\u52a8\u5316\u914d\u7f6e\u3002HTTP-01\u9a8c\u8bc1\u9002\u7528\u4e8e\u5df2\u89e3\u6790\u57df\u540d\u7684\u573a\u666f\uff0c\u786e\u4fdd\u5feb\u901f\u90e8\u7f72\u3002<\/p>\n<h2>\u5b9e\u8df5\u6307\u5357\uff1a\u5728\u540e\u6d6a\u4e91VPS\u4e0a\u90e8\u7f72WordPress<\/h2>\n<p>\u4ee5\u4e0b\u662f\u5728Ubuntu 20.04\u4e0a\u4f7f\u7528Docker Compose\u90e8\u7f72WordPress\u7684\u6b65\u9aa4\uff0c\u9002\u7528\u4e8e\u540e\u6d6a\u4e91VPS\u3002<\/p>\n<h3>\u6b65\u9aa41\uff1a\u5b89\u88c5Docker\u548cDocker Compose<\/h3>\n<p>\u66f4\u65b0\u7cfb\u7edf\u5e76\u5b89\u88c5Docker\uff1a<\/p>\n<pre><code class=\"language-bash\"># \u66f4\u65b0\u5305\u5217\u8868\r\nsudo apt update\r\n\r\n# \u5b89\u88c5\u4f9d\u8d56\r\nsudo apt install -y apt-transport-https ca-certificates curl software-properties-common\r\n\r\n# \u6dfb\u52a0Docker\u6e90\r\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/usr\/share\/keyrings\/docker-archive-keyring.gpg\r\necho \"deb [arch=$(dpkg --print-architecture) signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg] https:\/\/download.docker.com\/linux\/ubuntu $(lsb_release -cs) stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null\r\n\r\n# \u5b89\u88c5Docker\r\nsudo apt update\r\nsudo apt install -y docker-ce docker-ce-cli containerd.io\r\n\r\n# \u542f\u52a8\u5e76\u542f\u7528Docker\r\nsudo systemctl start docker\r\nsudo systemctl enable docker\r\n<\/code><\/pre>\n<p>\u5b89\u88c5Docker Compose\uff1a<\/p>\n<pre><code class=\"language-bash\"># \u4e0b\u8f7d\u6700\u65b0\u7248\u672c\r\nsudo curl -L \"https:\/\/github.com\/docker\/compose\/releases\/latest\/download\/docker-compose-$(uname -s)-$(uname -m)\" -o \/usr\/local\/bin\/docker-compose\r\n\r\n# \u8bbe\u7f6e\u6743\u9650\r\nsudo chmod +x \/usr\/local\/bin\/docker-compose\r\n\r\n# \u9a8c\u8bc1\u5b89\u88c5\r\ndocker-compose --version\r\n<\/code><\/pre>\n<h3>\u6b65\u9aa42\uff1a\u521b\u5efaDocker Compose\u914d\u7f6e\u6587\u4ef6<\/h3>\n<p>\u521b\u5efa\u9879\u76ee\u76ee\u5f55\u5e76\u914d\u7f6e<code>docker-compose.yaml<\/code>\uff1a<\/p>\n<pre><code class=\"language-bash\"># \u521b\u5efa\u76ee\u5f55\r\nmkdir ~\/wordpress\r\ncd ~\/wordpress\r\n\r\n# \u7f16\u8f91\u914d\u7f6e\u6587\u4ef6\r\nnano docker-compose.yaml\r\n<\/code><\/pre>\n<p>\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff1a<\/p>\n<pre><code class=\"language-yaml\">version: '3'\r\nservices:\r\n  wordpress:\r\n    image: wordpress:latest\r\n    ports:\r\n      - \"8080:80\"\r\n    environment:\r\n      WORDPRESS_DB_HOST: db\r\n      WORDPRESS_DB_USER: wp_user\r\n      WORDPRESS_DB_PASSWORD: securepassword123\r\n      WORDPRESS_DB_NAME: wordpress_db\r\n    volumes:\r\n      - .\/wp_data:\/var\/www\/html\r\n  db:\r\n    image: mariadb:latest\r\n    environment:\r\n      MYSQL_DATABASE: wordpress_db\r\n      MYSQL_USER: wp_user\r\n      MYSQL_PASSWORD: securepassword123\r\n      MYSQL_ROOT_PASSWORD: securepassword123\r\n    volumes:\r\n      - .\/mariadb:\/var\/lib\/mysql\r\n<\/code><\/pre>\n<p>\u542f\u52a8\u5bb9\u5668\uff1a<\/p>\n<pre><code class=\"language-bash\"># \u542f\u52a8\u5bb9\u5668\r\nsudo docker-compose up -d\r\n<\/code><\/pre>\n<h3>\u6b65\u9aa43\uff1a\u5b89\u88c5\u5e76\u914d\u7f6eNGINX<\/h3>\n<p>\u5b89\u88c5NGINX\uff1a<\/p>\n<pre><code class=\"language-bash\">sudo apt install -y nginx\r\nsudo systemctl start nginx\r\nsudo systemctl enable nginx\r\n<\/code><\/pre>\n<p>\u914d\u7f6eNGINX\u53cd\u5411\u4ee3\u7406\uff1a<\/p>\n<pre><code class=\"language-bash\"># \u521b\u5efa\u914d\u7f6e\u6587\u4ef6\r\nsudo nano \/etc\/nginx\/sites-available\/wordpress\r\n<\/code><\/pre>\n<p>\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff08\u66ff\u6362<code>myblog.com<\/code>\u4e3a\u5b9e\u9645\u57df\u540d\uff09\uff1a<\/p>\n<pre><code class=\"language-nginx\">server {\r\n    listen 80;\r\n    server_name myblog.com www.myblog.com;\r\n    return 301 https:\/\/$host$request_uri;\r\n}\r\n\r\nserver {\r\n    listen 443 ssl;\r\n    server_name myblog.com www.myblog.com;\r\n    ssl_certificate \/etc\/letsencrypt\/live\/myblog.com\/fullchain.pem;\r\n    ssl_certificate_key \/etc\/letsencrypt\/live\/myblog.com\/privkey.pem;\r\n    location \/ {\r\n        proxy_pass http:\/\/localhost:8080;\r\n        proxy_set_header Host $host;\r\n        proxy_set_header X-Real-IP $remote_addr;\r\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n        proxy_set_header X-Forwarded-Proto $scheme;\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>\u542f\u7528\u914d\u7f6e\u5e76\u91cd\u8f7d\uff1a<\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/wordpress \/etc\/nginx\/sites-enabled\/\r\nsudo nginx -t\r\nsudo systemctl reload nginx\r\n<\/code><\/pre>\n<h3>\u6b65\u9aa44\uff1a\u914d\u7f6eLet\u2019s Encrypt SSL<\/h3>\n<p>\u5b89\u88c5Certbot\uff1a<\/p>\n<pre><code class=\"language-bash\">sudo apt install -y certbot python3-certbot-nginx\r\n<\/code><\/pre>\n<p>\u83b7\u53d6\u8bc1\u4e66\uff1a<\/p>\n<pre><code class=\"language-bash\">sudo certbot --nginx -d myblog.com -d www.myblog.com\r\n<\/code><\/pre>\n<p>\u6309\u63d0\u793a\u8f93\u5165\u90ae\u7bb1\u5e76\u540c\u610f\u6761\u6b3e\u3002Certbot\u81ea\u52a8\u914d\u7f6eNGINX\u4ee5\u542f\u7528HTTPS\u3002<\/p>\n<p>\u6d4b\u8bd5\u81ea\u52a8\u7eed\u671f\uff1a<\/p>\n<pre><code class=\"language-bash\">sudo certbot renew --dry-run\r\n<\/code><\/pre>\n<h3>\u6b65\u9aa45\uff1a\u5b8c\u6210WordPress\u5b89\u88c5<\/h3>\n<p>\u8bbf\u95ee<code>https:\/\/myblog.com<\/code>\uff0c\u8fdb\u5165WordPress\u5b89\u88c5\u754c\u9762\uff0c\u914d\u7f6e\u7ba1\u7406\u5458\u8d26\u6237\u548c\u7ad9\u70b9\u4fe1\u606f\u3002<\/p>\n<h3>\u6b65\u9aa46\uff1a\u9a8c\u8bc1\u90e8\u7f72<\/h3>\n<p>\u68c0\u67e5\u5bb9\u5668\u72b6\u6001\uff1a<\/p>\n<pre><code class=\"language-bash\">sudo docker-compose ps\r\n<\/code><\/pre>\n<p>\u786e\u8ba4HTTPS\u8bbf\u95ee\u6b63\u5e38\uff0c\u786e\u4fdd\u535a\u5ba2\u9875\u9762\u52a0\u8f7d\u6b63\u786e\u3002<\/p>\n<h2>\u6280\u672f\u5bf9\u6bd4\uff1aDocker Compose vs. \u624b\u52a8\u90e8\u7f72<\/h2>\n<ul>\n<li><strong>Docker Compose<\/strong>\uff1a\u81ea\u52a8\u5316\u5bb9\u5668\u7ba1\u7406\uff0c\u9002\u5408\u540e\u6d6a\u4e91VPS\uff08\u5982<a href=\"https:\/\/idc.net\/cloud-hk\">HK-1H2G<\/a>\uff09\u7684\u5feb\u901f\u90e8\u7f72\uff0c\u7b80\u5316\u4f9d\u8d56\u914d\u7f6e\u3002<\/li>\n<li><strong>\u624b\u52a8\u90e8\u7f72<\/strong>\uff1a\u7075\u6d3b\u4f46\u914d\u7f6e\u590d\u6742\uff0c\u9700\u624b\u52a8\u5b89\u88c5PHP\u3001MySQL\u548cNGINX\uff0c\u9002\u5408\u7279\u5b9a\u5b9a\u5236\u9700\u6c42\u3002<\/li>\n<\/ul>\n<p>\u5728\u6848\u4f8b\u4e2d\uff0cDocker Compose\u663e\u8457\u964d\u4f4e\u4e86\u90e8\u7f72\u65f6\u95f4\u3002<\/p>\n<h2>\u6280\u672f\u7ecf\u9a8c\u5206\u4eab<\/h2>\n<p>\u901a\u8fc7\u5728\u540e\u6d6a\u4e91VPS\u4e0a\u90e8\u7f72WordPress\uff0c\u6211\u4eec\u5feb\u901f\u4e0a\u7ebf\u4e86\u4e2a\u4eba\u535a\u5ba2\u3002\u4ee5\u4e0b\u662f\u5173\u952e\u7ecf\u9a8c\uff1a<\/p>\n<ul>\n<li><strong>\u9ad8\u6027\u80fd\u652f\u6301<\/strong>\uff1a\u540e\u6d6a\u4e91\u7684SSD\u5b58\u50a8\uff08<a href=\"https:\/\/idc.net\/cloud-hk\">HK-1H2G<\/a>\uff09\u52a0\u901f\u4e86\u5bb9\u5668\u542f\u52a8\u548c\u6570\u636e\u8bbf\u95ee\u3002<\/li>\n<li><strong>DNS\u6548\u7387<\/strong>\uff1a<a href=\"https:\/\/idc.net\/domain\">\u540e\u6d6a\u4e91\u57df\u540d\u670d\u52a1<\/a>\u786e\u4fdd\u5feb\u901f\u89e3\u6790\uff0c\u63d0\u5347\u7528\u6237\u4f53\u9a8c\u3002<\/li>\n<li><strong>\u81ea\u52a8\u5316\u7eed\u671f<\/strong>\uff1aCertbot\u7684\u81ea\u52a8\u7eed\u671f\u4efb\u52a1\u7b80\u5316\u4e86\u8bc1\u4e66\u7ba1\u7406\u3002<\/li>\n<li><strong>\u5bb9\u5668\u9694\u79bb<\/strong>\uff1aDocker Compose\u63d0\u4f9b\u9694\u79bb\u73af\u5883\uff0c\u589e\u5f3a\u4e86\u5b89\u5168\u6027\u3002<\/li>\n<\/ul>\n<p>\u8fdb\u4e00\u6b65\u8d44\u6e90\u53ef\u53c2\u8003Docker Compose\u6587\u6863\u6216<a href=\"https:\/\/idc.net\/\">\u540e\u6d6a\u4e91\u6280\u672f\u652f\u6301<\/a>\u3002<\/p>\n<h2>\u603b\u7ed3<\/h2>\n<p>\u901a\u8fc7Docker Compose\u548cNGINX\uff0c\u6211\u4eec\u5728\u540e\u6d6a\u4e91VPS\u4e0a\u9ad8\u6548\u90e8\u7f72\u4e86WordPress\uff0c\u7ed3\u5408Let\u2019s Encrypt\u5b9e\u73b0\u4e86\u5b89\u5168\u7684HTTPS\u8bbf\u95ee\u3002\u501f\u52a9\u540e\u6d6a\u4e91\u7684\u9ad8\u6027\u80fd\u786c\u4ef6\u548c\u53ef\u9760\u57df\u540d\u670d\u52a1\uff0c\u5f00\u53d1\u8005\u548c\u7cfb\u7edf\u7ba1\u7406\u5458\u53ef\u5feb\u901f\u6784\u5efa\u5b89\u5168\u3001\u7a33\u5b9a\u7684Web\u5e94\u7528\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5f15\u8a00 WordPress\u4f5c\u4e3a\u5168\u7403\u6700\u6d41\u884c\u7684\u5185\u5bb9\u7ba1\u7406\u7cfb\u7edf\uff08CMS\uff09\uff0c\u4ee5\u5176\u7075\u6d3b\u6027\u548c\u6613\u7528\u6027\u5e7f\u6cdb\u5e94\u7528\u4e8e\u7f51\u7ad9\u5f00\u53d1\u3002\u4f7f\u7528Do [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[202757,48],"tags":[],"class_list":["post-441818","post","type-post","status-publish","format-standard","hentry","category-docker","category-wordpress"],"_links":{"self":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/posts\/441818","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/comments?post=441818"}],"version-history":[{"count":0,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/posts\/441818\/revisions"}],"wp:attachment":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/media?parent=441818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/categories?post=441818"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/tags?post=441818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}