{"id":33245,"date":"2023-10-19T19:30:34","date_gmt":"2022-12-23T13:24:30","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/"},"modified":"2024-05-04T05:03:50","modified_gmt":"2024-05-03T21:03:50","slug":"%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/","title":{"rendered":"\u4f7f\u7528Docker\u6784\u5efaNginx + uWSGI + Flask\u7684\u677e\u8026\u5408Web\u5e94\u7528\u670d\u52a1\u5668"},"content":{"rendered":"<p>\u5728\u6ca1\u6709Docker Compose\u548c\u5957\u63a5\u5b57\u6587\u4ef6\u7684\u60c5\u51b5\u4e0b\uff0c\u6784\u5efa\u4f7f\u7528\u5957\u63a5\u5b57\u901a\u4fe1\u7684nginx\u5bb9\u5668 \u21d4 uWSGI\u5bb9\u5668\uff08Flask\u5e94\u7528\u7a0b\u5e8f\uff09\u73af\u5883\u7684\u65b9\u6cd5\u3002<br \/>\n\u6ce8\u610f\uff1a\u672c\u6587\u7684\u914d\u7f6e\u793a\u4f8b\u76f4\u63a5\u6307\u5b9a\u4e86IP\uff0c\u8fd9\u79cd\u72b6\u6001\u4e0d\u662f\u677e\u6563\u8026\u5408\u7684\uff0c\u56e0\u6b64\u6700\u7ec8\u8bf7\u6839\u636e\u9700\u8981\u66ff\u6362\u914d\u7f6e\u503c\uff0c\u4f8b\u5982\u4e3a\u6bcf\u4e2a\u670d\u52a1\u521b\u5efaAPI\u7aef\u70b9\u3002<\/p>\n<p>\u4e3a\u4e86\u5c06\u6bcf\u4e2a\u670d\u52a1\u89e3\u8026\uff0c\u5e76\u5b9e\u73b0\u5fae\u670d\u52a1\u67b6\u6784\u8bbe\u8ba1\uff0c\u901a\u5e38\u4f1a\u5c06\u5bb9\u5668\u7ec6\u5206\u4e3a\u5404\u4e2a\u670d\u52a1\u3002\u7136\u800c\uff0c\u5982\u679c\u4e0d\u4f7f\u7528\u8d1f\u8f7d\u5747\u8861\u5668\u3001\u4ee3\u7406\u548cAPI\u7ec8\u7aef\u7b49\uff0c\u800c\u662f\u76f4\u63a5\u5c06\u5bb9\u5668\u4fdd\u6301\u72ec\u7acb\u901a\u4fe1\uff0c\u8fd9\u4e0d\u4ec5\u9ebb\u70e6\uff0c\u800c\u4e14\u65e0\u6cd5\u5b9e\u73b0\u677e\u6563\u8026\u5408\uff0c\u6240\u4ee5\u9664\u975e\u6709\u7279\u6b8a\u60c5\u51b5\uff0c\u6700\u597d\u4e0d\u8981\u8fd9\u6837\u505a\uff08\u4e5f\u5f88\u5c11\u89c1\u5230\u8fd9\u6837\u7684\u4f8b\u5b50\uff09\u3002<br \/>\n\u4f8b\u5982\uff0c\u5f53\u6258\u7ba1\u542f\u52a8\u8bbe\u7f6e\u7684\u5bb9\u5668\u7684\u4e3b\u673a\u91cd\u65b0\u542f\u52a8\u65f6\uff0c\u5bb9\u5668\u7684IP\u4f1a\u53d1\u751f\u53d8\u5316\uff0c\u5982\u679c\u4e0d\u8fdb\u884c\u914d\u7f6e\u66f4\u65b0\uff0c\u5bb9\u5668\u4e4b\u95f4\u5c31\u65e0\u6cd5\u901a\u4fe1\uff0c\u4f1a\u51fa\u73b0\u95ee\u9898\u3002<\/p>\n<h1>\u73af\u5883<\/h1>\n<p>\u6211\u5728\u8fd0\u884cAmazon ECS\uff08\u5907\u7528\u4efb\u52a1\u5b9a\u4e49\uff09\u548cDocker\u7684\u673a\u5668\uff08RHEL7\u7cfbLinux\uff09\u4e0a\u8fdb\u884c\u4e86\u6d4b\u8bd5\u3002<br \/>\n\u672c\u6587\u5c06\u4ee5\u4ece\u5b98\u65b9AMI\u542f\u52a8\uff0c\u5904\u4e8e\u521d\u59cb\u72b6\u6001\u7684AmazonLinux2\u4e0a\u6784\u5efa\u4e3a\u4f8b\u3002<\/p>\n<details>\u4ee5\u4e0b\u662f\u5728Amazon Linux 2\u4e0a\u6784\u5efa\u7684\u793a\u4f8b\u547d\u4ee4\uff1a$ sudo su<br \/>\n# yum update -y<br \/>\n# yum -y install docker<br \/>\n# systemctl start docker<br \/>\n# systemctl enable docker<br \/>\n# systemctl status docker<br \/>\n# mkdir \/opt\/example-service<\/p>\n<p># mkdir \/opt\/example-service\/app<br \/>\n# cd \/opt\/example-service\/app\/<br \/>\n# nano hello.py<br \/>\n# nano uwsgi.ini<br \/>\n# nano Dockerfile<br \/>\n# docker build -t hello -f Dockerfile .<br \/>\n# docker run -itd -p 3031:3031 hello<\/p>\n<p># mkdir \/opt\/example-service\/web<br \/>\n# cd \/opt\/example-service\/web\/<br \/>\n# nano env_list<br \/>\n# nano uwsgi.conf.template<br \/>\n# nano Dockerfile<br \/>\n# docker build -t hello\/nginx -f Dockerfile .<br \/>\n# docker run -itd &#8211;env-file=env_list -p 80:80 hello\/nginx<br \/>\n# curl http:\/\/172.17.0.3\/hello<\/p>\n<p>\u4ee5\u4e0b\u662f\u5728Amazon Linux 2\u4e0a\u69cb\u5efa\u7684\u547d\u4ee4\u793a\u4f8b\uff1a<\/p>\n<p>$ sudo su<br \/>\n# yum update -y<br \/>\n# yum -y install docker<br \/>\n# systemctl start docker<br \/>\n# systemctl enable docker<br \/>\n# systemctl status docker<br \/>\n# mkdir \/opt\/example-service<\/p>\n<p># mkdir \/opt\/example-service\/app<br \/>\n# cd \/opt\/example-service\/app\/<br \/>\n# nano hello.py<br \/>\n# nano uwsgi.ini<br \/>\n# nano Dockerfile<br \/>\n# docker build -t hello -f Dockerfile .<br \/>\n# docker run -itd -p 3031:3031 hello<\/p>\n<p># mkdir \/opt\/example-service\/web<br \/>\n# cd \/opt\/example-service\/web\/<br \/>\n# nano env_list<br \/>\n# nano uwsgi.conf.template<br \/>\n# nano Dockerfile<br \/>\n# docker build -t hello\/nginx -f Dockerfile .<br \/>\n# docker run -itd &#8211;env-file=env_list -p 80:80 hello\/nginx<br \/>\n# curl http:\/\/172.17.0.3\/hello<\/p>\n<\/details>\n<h1>\u5e94\u7528\u7a0b\u5e8f<\/h1>\n<p>\u6211\u8981\u521b\u5efa\u4e00\u4e2aFlask\u5e94\u7528\u7a0b\u5e8f\u7684\u6587\u4ef6\u3002<br \/>\n\u203b\u867d\u7136\u8fd9\u6837\u5199\u4e86\u5f88\u591a\u4e1c\u897f\uff0c\u4f46\u53ea\u9700\u8981\u4e00\u4e2a\u540d\u4e3ahello\u7684\u51fd\u6570\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">from<\/span> <span class=\"n\">flask<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Flask<\/span><span class=\"p\">,<\/span> <span class=\"n\">jsonify<\/span>\r\n\r\n<span class=\"n\">app<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">Flask<\/span><span class=\"p\">(<\/span><span class=\"n\">__name__<\/span><span class=\"p\">)<\/span>\r\n\r\n<span class=\"nd\">@app.route<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">\/healthcheck<\/span><span class=\"sh\">'<\/span><span class=\"p\">)<\/span>\r\n<span class=\"k\">def<\/span> <span class=\"nf\">healthcheck<\/span><span class=\"p\">():<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"sh\">\"\"<\/span>\r\n\r\n<span class=\"nd\">@app.route<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\/hello<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\r\n<span class=\"k\">def<\/span> <span class=\"nf\">hello<\/span><span class=\"p\">():<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"nf\">jsonify<\/span><span class=\"p\">({<\/span>\r\n        <span class=\"sh\">\"<\/span><span class=\"s\">message<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Hello World!<\/span><span class=\"sh\">\"<\/span>\r\n    <span class=\"p\">})<\/span>\r\n\r\n<span class=\"nd\">@app.route<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">\/api\/v1\/status\/200<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">methods<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">GET<\/span><span class=\"sh\">'<\/span><span class=\"p\">])<\/span>\r\n<span class=\"k\">def<\/span> <span class=\"nf\">status_200<\/span><span class=\"p\">():<\/span>\r\n    <span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">info<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">execute 200 status<\/span><span class=\"sh\">'<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"nf\">jsonify<\/span><span class=\"p\">({<\/span><span class=\"sh\">'<\/span><span class=\"s\">message<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"sh\">'<\/span><span class=\"s\">200 status message<\/span><span class=\"sh\">'<\/span><span class=\"p\">}),<\/span> <span class=\"mi\">200<\/span>\r\n\r\n<span class=\"nd\">@app.route<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">\/api\/v1\/status\/400<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">methods<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">GET<\/span><span class=\"sh\">'<\/span><span class=\"p\">])<\/span>\r\n<span class=\"k\">def<\/span> <span class=\"nf\">status_400<\/span><span class=\"p\">():<\/span>\r\n    <span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">info<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">execute 400 status<\/span><span class=\"sh\">'<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"nf\">jsonify<\/span><span class=\"p\">({<\/span><span class=\"sh\">'<\/span><span class=\"s\">message<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"sh\">'<\/span><span class=\"s\">400 status message<\/span><span class=\"sh\">'<\/span><span class=\"p\">}),<\/span> <span class=\"mi\">400<\/span>\r\n\r\n<span class=\"nd\">@app.route<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">\/api\/v1\/status\/500<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">methods<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">GET<\/span><span class=\"sh\">'<\/span><span class=\"p\">])<\/span>\r\n<span class=\"k\">def<\/span> <span class=\"nf\">status_500<\/span><span class=\"p\">():<\/span>\r\n    <span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">logger<\/span><span class=\"p\">.<\/span><span class=\"nf\">info<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">execute 500 status<\/span><span class=\"sh\">'<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"nf\">jsonify<\/span><span class=\"p\">({<\/span><span class=\"sh\">'<\/span><span class=\"s\">message<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"sh\">'<\/span><span class=\"s\">500 status message<\/span><span class=\"sh\">'<\/span><span class=\"p\">}),<\/span> <span class=\"mi\">500<\/span>\r\n    \r\n<span class=\"c1\"># Flask\u306e\u307f\u3067\u52d5\u4f5c\u3059\u308b\u30d3\u30eb\u30c8\u30a4\u30f3\u30b5\u30fc\u30d0\u30fc\u3092\u8d77\u52d5\u3059\u308b\u203b\u30ed\u30fc\u30ab\u30eb\u3067\u52d5\u304b\u3059\u6642\u7528\r\n<\/span><span class=\"k\">if<\/span> <span class=\"n\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">'<\/span><span class=\"s\">__main__<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span>\r\n    <span class=\"n\">PORT<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">5000<\/span>\r\n    <span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span>\r\n        <span class=\"n\">threaded<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"n\">debug<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"n\">port<\/span><span class=\"o\">=<\/span><span class=\"n\">PORT<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"n\">host<\/span><span class=\"o\">=<\/span><span class=\"sh\">'<\/span><span class=\"s\">0.0.0.0<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"p\">)<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u5c06\u521b\u5efauWSGI\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">[uwsgi]<\/span>\r\n<span class=\"py\">env<\/span><span class=\"p\">=<\/span><span class=\"s\">TZ=UTC-9<\/span>\r\n<span class=\"py\">socket<\/span><span class=\"p\">=<\/span><span class=\"s\">0.0.0.0:3031 # nginx\u3068\u306e\u30bd\u30b1\u30c3\u30c8\u901a\u4fe1\u7528<\/span>\r\n<span class=\"c\">#http=0.0.0.0:9090 # \u5358\u4f53(Web\u30b5\u30fc\u30d0\u30fc\u7121\u3057)\u3067\u52d5\u4f5c\u3059\u308bHTTP\u30b5\u30fc\u30d0\u30fc\u3092\u8d77\u52d5\u3059\u308b\u203buWSGI\u30b3\u30f3\u30c6\u30ca\u306b\u76f4\u63a5HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u305f\u3044\u6642\u7528\r\n<\/span><span class=\"py\">wsgi-file<\/span><span class=\"p\">=<\/span><span class=\"s\">.\/hello.py<\/span>\r\n<span class=\"py\">master<\/span><span class=\"p\">=<\/span><span class=\"s\">true<\/span>\r\n<span class=\"py\">callable<\/span><span class=\"p\">=<\/span><span class=\"s\">app<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u5011\u5c07\u5275\u5efa\u4e00\u500b\u7528\u65bc\u904b\u884c\u61c9\u7528\u7a0b\u5e8f\u7684Dockerfile\u3002<\/p>\n<p>\u5982\u679c\u5c06\u7b2c\u4e00\u884c\u6539\u6210FROM python:latest\uff0c\u90a3\u4e48\u5c31\u4e0d\u9700\u8981\u5b89\u88c5\u7b2c3\u52309\u884c\u7684\u8f6f\u4ef6\u5305\u5b89\u88c5\u547d\u4ee4\uff0c\u4f46\u662f\u5bb9\u5668\u955c\u50cf\u7684\u5927\u5c0f\u4f1a\u589e\u52a0\u4e00\u500d\uff08\u4ece421MB\u53d8\u4e3a952MB\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">FROM<\/span><span class=\"s\"> python:alpine<\/span>\r\n\r\n<span class=\"k\">RUN <\/span>apk <span class=\"nt\">--update-cache<\/span> add <span class=\"se\">\\\r\n<\/span>    gcc <span class=\"se\">\\\r\n<\/span>    g++ <span class=\"se\">\\\r\n<\/span>    build-base <span class=\"se\">\\\r\n<\/span>    linux-headers <span class=\"se\">\\\r\n<\/span>    python3-dev <span class=\"se\">\\\r\n<\/span>    pcre-dev\r\n\r\n<span class=\"k\">RUN <\/span>pip <span class=\"nb\">install<\/span> <span class=\"nt\">--upgrade<\/span> pip <span class=\"se\">\\\r\n<\/span>    <span class=\"o\">&amp;&amp;<\/span> pip <span class=\"nb\">install<\/span> <span class=\"nt\">--no-cache-dir<\/span> <span class=\"se\">\\\r\n<\/span>    Flask <span class=\"se\">\\\r\n<\/span>    uwsgi\r\n\r\n<span class=\"k\">COPY<\/span><span class=\"s\"> hello.py .\/<\/span>\r\n<span class=\"k\">COPY<\/span><span class=\"s\"> uwsgi.ini .\/<\/span>\r\n\r\n<span class=\"k\">EXPOSE<\/span><span class=\"s\"> 3031<\/span>\r\n<span class=\"k\">CMD<\/span><span class=\"s\"> uwsgi uwsgi.ini<\/span>\r\n<\/code><\/pre>\n<p>2023\/10\/06 \u8865\u5145<br \/>\n\u76ee\u524d\u6784\u5efa\u8fd9\u4e2a\u5bb9\u5668\u6620\u50cf\u65f6\uff0c\u5b89\u88c5uwsgi\u65f6\u4f1a\u51fa\u73b0\u9519\u8bef\u3002\uff08\u5c1a\u672a\u8c03\u67e5\u539f\u56e0\u548c\u89e3\u51b3\u65b9\u6848\uff09<\/p>\n<p>&nbsp;<\/p>\n<h2>\u5bb9\u5668\u6784\u5efa\u548c\u542f\u52a8\u547d\u4ee4\u793a\u4f8b<\/h2>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>docker build <span class=\"nt\">-t<\/span> hello <span class=\"nt\">-f<\/span> Dockerfile <span class=\"nb\">.<\/span>\r\n\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>docker run <span class=\"nt\">-itd<\/span> <span class=\"nt\">-p<\/span> 3031:3031 hello\r\n<\/code><\/pre>\n<h1>\u7f51\u7edc<\/h1>\n<p>\u4e3a\u4e86\u907f\u514d\u6bcf\u6b21\u9700\u8981\u66f4\u6539\u8bbe\u7f6e\u65f6\u90fd\u8981\u8fdb\u884c\u6784\u5efa\uff0c\u6211\u4eec\u5c06\u521b\u5efa\u4e00\u4e2a\u9002\u7528\u4e8eenvsubst\u7684\u914d\u7f6e\u6587\u4ef6\u3002\uff08\u5982\u679c\u662fECS\uff0c\u5219\u6307\u5b9a\u4e3a\u73af\u5883\u53d8\u91cf\u3002\uff09<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">SERVER_NAME\uff1anginx\u30b3\u30f3\u30c6\u30ca\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308bIP\u3082\u3057\u304f\u306fFQDN<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">RESOLVER\uff1aHOST_NAME\u3092\u89e3\u6c7a\u3067\u304d\u308b\u30ec\u30b3\u30fc\u30c9\u3092\u6301\u3063\u305fDNS\u30b5\u30fc\u30d0\u30fcIP<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">HOST_NAME\uff1auWSGI\u30b3\u30f3\u30c6\u30ca\u306eIP\u3082\u3057\u304f\u306fFQDN<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">PORT\uff1auWSGI\u30b3\u30f3\u30c6\u30ca\u5074\u3067\u5f85\u3061\u53d7\u3051\u3066\u3044\u308bwsgi\u30bd\u30b1\u30c3\u30c8\u30dd\u30fc\u30c8<\/ul>\n<pre class=\"post-pre\"><code>SERVER_NAME=127.0.0.1\r\nRESOLVER=169.254.169.253\r\nHOST_NAME=172.17.0.2\r\nPORT=3031\r\n<\/code><\/pre>\n<p>\u521b\u5efanginx\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"err\">server<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"err\">listen<\/span> <span class=\"mi\">80<\/span> <span class=\"err\">default_server;<\/span>\r\n    <span class=\"err\">server_name<\/span> <span class=\"err\">$<\/span><span class=\"p\">{<\/span><span class=\"err\">SERVER_NAME<\/span><span class=\"p\">}<\/span><span class=\"err\">;<\/span>\r\n\r\n    <span class=\"err\">location<\/span> <span class=\"err\">\/<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"err\">include<\/span> <span class=\"err\">uwsgi_params;<\/span>\r\n        <span class=\"err\">resolver<\/span> <span class=\"err\">$<\/span><span class=\"p\">{<\/span><span class=\"err\">RESOLVER<\/span><span class=\"p\">}<\/span><span class=\"err\">;<\/span>\r\n        <span class=\"err\">set<\/span> <span class=\"err\">$url<\/span> <span class=\"err\">$<\/span><span class=\"p\">{<\/span><span class=\"err\">HOST_NAME<\/span><span class=\"p\">}<\/span><span class=\"err\">;<\/span>\r\n        <span class=\"err\">uwsgi_pass<\/span> <span class=\"err\">$url:$<\/span><span class=\"p\">{<\/span><span class=\"err\">PORT<\/span><span class=\"p\">}<\/span><span class=\"err\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"err\">error_page<\/span> <span class=\"mi\">500<\/span> <span class=\"mi\">502<\/span> <span class=\"mi\">503<\/span> <span class=\"mi\">504<\/span> <span class=\"err\">\/<\/span><span class=\"mi\">50<\/span><span class=\"err\">x.html;<\/span>\r\n    <span class=\"err\">location<\/span> <span class=\"err\">=<\/span> <span class=\"err\">\/<\/span><span class=\"mi\">50<\/span><span class=\"err\">x.html<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"err\">root<\/span>   <span class=\"err\">\/usr\/share\/nginx\/html;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u521b\u5efa\u4e00\u4e2aDockerfile\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">FROM<\/span><span class=\"s\"> nginx:alpine<\/span>\r\n\r\n<span class=\"k\">RUN <\/span>apk <span class=\"nt\">--no-cache<\/span> add tzdata <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\r\n<\/span>    <span class=\"nb\">cp<\/span> \/usr\/share\/zoneinfo\/Asia\/Tokyo \/etc\/localtime <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\r\n<\/span>    apk del tzdata\r\n\r\n<span class=\"k\">COPY<\/span><span class=\"s\"> [\"uwsgi.conf.template\",\"\/tmp\/\"]<\/span>\r\n\r\n<span class=\"k\">EXPOSE<\/span><span class=\"s\"> 80<\/span>\r\n<span class=\"k\">ENTRYPOINT<\/span><span class=\"s\"> [\"\/bin\/sh\",\"-c\"]<\/span>\r\n<span class=\"k\">CMD<\/span><span class=\"s\"> [\"envsubst '$$SERVER_NAME $$RESOLVER $$HOST_NAME $$PORT' &lt; \/tmp\/uwsgi.conf.template &gt; \/etc\/nginx\/conf.d\/uwsgi.conf &amp;&amp; nginx -g 'daemon off;'\"]<\/span>\r\n<\/code><\/pre>\n<h2>\u5bb9\u5668\u6784\u5efa\u548c\u542f\u52a8\u547d\u4ee4\u793a\u4f8b<\/h2>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>docker build <span class=\"nt\">-t<\/span> hello\/nginx <span class=\"nt\">-f<\/span> Dockerfile <span class=\"nb\">.<\/span>\r\n\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>docker run <span class=\"nt\">-itd<\/span> <span class=\"nt\">--env-file<\/span><span class=\"o\">=<\/span>env_list <span class=\"nt\">-p<\/span> 80:80 hello\/nginx\r\n<\/code><\/pre>\n<h1>\u786e\u8ba4<\/h1>\n<p>\u5411\u6b63\u5728\u8fd0\u884c\u7684nginx\u5bb9\u5668\u53d1\u9001\u8bf7\u6c42\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> curl http:\/\/172.17.0.3\/healthcheck\r\n<span class=\"gp\">$<\/span> curl http:\/\/172.17.0.3\/hello\r\n<span class=\"go\">{\"message\":\"Hello World!\"}\r\n<\/span><span class=\"gp\">$<\/span> curl http:\/\/172.17.0.3\/api\/v1\/status\/200\r\n<span class=\"go\">{\"message\":\"200 status message\"}\r\n<\/span><span class=\"gp\">$<\/span> curl http:\/\/172.17.0.3\/api\/v1\/status\/400\r\n<span class=\"go\">{\"message\":\"400 status message\"}\r\n<\/span><span class=\"gp\">$<\/span> curl http:\/\/172.17.0.3\/api\/v1\/status\/500\r\n<span class=\"go\">{\"message\":\"500 status message\"}\r\n<\/span><\/code><\/pre>\n<p>\u5982\u679c\u8981\u67e5\u770b\uff08\u9664ECS\u4e4b\u5916\u7684\uff09uWSGI\u548cnginx\u7684\u65e5\u5fd7\uff0c\u8bf7\u9075\u5faa\u4ee5\u4e0b\u6b65\u9aa4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo tail<\/span> <span class=\"nt\">-f<\/span> \/var\/lib\/docker\/containers\/[\u30b3\u30f3\u30c6\u30caID]\/[\u30b3\u30f3\u30c6\u30caID]-json.log\r\n<\/code><\/pre>\n<h1>\u9644\u52a0\u4fe1\u606f\uff1a\u5982\u679c\u4f7f\u7528docker-compose\u7684\u60c5\u51b5\u4e0b<\/h1>\n<p>\u4e3a\u4e86\u907f\u514d\u4e0edocker\u7f51\u7edc\u7684\u9ed8\u8ba4\u5b50\u7f51\u5730\u5740\u51b2\u7a81\uff0c\u9700\u8981\u6307\u5b9a\u4e0d\u540c\u7684\u5730\u5740\u8303\u56f4\u3002<br \/>\n\u5982\u679c\u6309\u7167\u672c\u6587\u793a\u4f8b\u8bbe\u7f6e\u4e86env_list\u7684HOST_NAME\uff0c\u8bf7\u5c06\u7b2c\u4e8c\u4e2a\u516b\u4f4d\u6539\u4e3a18\u3002<\/p>\n<pre class=\"post-pre\"><code>HOST_NAME=172.17.0.2\r\n              \u2193\r\nHOST_NAME=172.18.0.2\r\n<\/code><\/pre>\n<details>\u5728AmazonLinux2\u4e0a\u5efa\u7acb\u7684\u547d\u4ee4\u793a\u4f8b<br \/>\n$ sudo su<br \/>\n# curl -L https:\/\/github.com\/docker\/compose\/releases\/download\/1.16.1\/docker-compose-`uname -s`-`uname -m` -o \/usr\/local\/bin\/docker-compose<br \/>\n# chmod +x \/usr\/local\/bin\/docker-compose# nano \/opt\/example-service\/docker-compose.yml<br \/>\n# cd \/opt\/example-service\/<br \/>\n# \/usr\/local\/bin\/docker-compose up -d<br \/>\n# curl http:\/\/172.18.0.3\/hello<\/p>\n<p>\u5728AmazonLinux2\u4e0a\u5efa\u7acb\u7684\u547d\u4ee4\u793a\u4f8b\uff1a<br \/>\n$ sudo su<br \/>\n# curl -L https:\/\/github.com\/docker\/compose\/releases\/download\/1.16.1\/docker-compose-`uname -s`-`uname -m` -o \/usr\/local\/bin\/docker-compose<br \/>\n# chmod +x \/usr\/local\/bin\/docker-compose<\/p>\n<p># nano \/opt\/example-service\/docker-compose.yml<br \/>\n# cd \/opt\/example-service\/<br \/>\n# \/usr\/local\/bin\/docker-compose up -d<br \/>\n# curl http:\/\/172.18.0.3\/hello<\/p>\n<\/details>\n<pre class=\"post-pre\"><code><span class=\"na\">version<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">3'<\/span>\r\n<span class=\"na\">services<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">app<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">hello<\/span>\r\n    <span class=\"na\">networks<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">hello-app-net<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">ipv4_address<\/span><span class=\"pi\">:<\/span> <span class=\"s\">172.18.0.2<\/span>\r\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n     <span class=\"pi\">-<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">3031:3031\"<\/span>\r\n    <span class=\"na\">restart<\/span><span class=\"pi\">:<\/span> <span class=\"s\">always<\/span>\r\n  <span class=\"na\">web<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">hello\/nginx\"<\/span>\r\n    <span class=\"na\">networks<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">hello-app-net<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">ipv4_address<\/span><span class=\"pi\">:<\/span> <span class=\"s\">172.18.0.3<\/span>\r\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n     <span class=\"pi\">-<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">80:80\"<\/span>\r\n    <span class=\"na\">env_file<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/web\/env_list<\/span>\r\n<span class=\"c1\">#    depends_on:<\/span>\r\n<span class=\"c1\">#     - app<\/span>\r\n    <span class=\"na\">restart<\/span><span class=\"pi\">:<\/span> <span class=\"s\">always<\/span>\r\n<span class=\"na\">networks<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">hello-app-net<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">driver<\/span><span class=\"pi\">:<\/span> <span class=\"s\">bridge<\/span>\r\n    <span class=\"na\">ipam<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">driver<\/span><span class=\"pi\">:<\/span> <span class=\"s\">default<\/span>\r\n      <span class=\"na\">config<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">subnet<\/span><span class=\"pi\">:<\/span> <span class=\"s\">172.18.0.0\/24<\/span>\r\n<span class=\"c1\">#        gateway: 172.18.0.1<\/span>\r\n<\/code><\/pre>\n<h1>\u8bf7\u53c2\u8003<\/h1>\n<p>(Translation: Please refer to)<\/p>\n<h2>\u74f6\u5b50<\/h2>\n<p>&nbsp;<\/p>\n<h2>uWSGI -&gt; uWSGI<\/h2>\n<p>&nbsp;<\/p>\n<h2>Docker\u662f\u4e00\u79cd\u5bb9\u5668\u5316\u6280\u672f\u3002<\/h2>\n<p>&nbsp;<\/p>\n<h2>docker-compose (\u7b80\u79f0\u4e3a&#8221;compose&#8221;) \u662f\u4e00\u79cd\u7528\u4e8e\u7ba1\u7406\u591a\u4e2a\u5bb9\u5668\u5e94\u7528\u7a0b\u5e8f\u7684\u5de5\u5177\u3002<\/h2>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u6ca1\u6709Docker Compose\u548c\u5957\u63a5\u5b57\u6587\u4ef6\u7684\u60c5\u51b5\u4e0b\uff0c\u6784\u5efa\u4f7f\u7528\u5957\u63a5\u5b57\u901a\u4fe1\u7684nginx\u5bb9\u5668 \u21d4 uWSGI\u5bb9\u5668 [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-33245","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Docker\u6784\u5efaNginx + uWSGI + Flask\u7684\u677e\u8026\u5408Web\u5e94\u7528\u670d\u52a1\u5668 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528docker\u6784\u5efanginx-uwsgi-flask\u7684\u677e\u8026\u5408web\u5e94\u7528\u670d\u52a1\u5668\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Docker\u6784\u5efaNginx + uWSGI + Flask\u7684\u677e\u8026\u5408Web\u5e94\u7528\u670d\u52a1\u5668\" \/>\n<meta property=\"og:description\" content=\"\u5728\u6ca1\u6709Docker Compose\u548c\u5957\u63a5\u5b57\u6587\u4ef6\u7684\u60c5\u51b5\u4e0b\uff0c\u6784\u5efa\u4f7f\u7528\u5957\u63a5\u5b57\u901a\u4fe1\u7684nginx\u5bb9\u5668 \u21d4 uWSGI\u5bb9\u5668 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528docker\u6784\u5efanginx-uwsgi-flask\u7684\u677e\u8026\u5408web\u5e94\u7528\u670d\u52a1\u5668\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-23T13:24:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-03T21:03:50+00:00\" \/>\n<meta name=\"author\" content=\"\u6e05, \u626c\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u626c\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/\",\"name\":\"\u4f7f\u7528Docker\u6784\u5efaNginx + uWSGI + Flask\u7684\u677e\u8026\u5408Web\u5e94\u7528\u670d\u52a1\u5668 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-12-23T13:24:30+00:00\",\"dateModified\":\"2024-05-03T21:03:50+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Docker\u6784\u5efaNginx + uWSGI + Flask\u7684\u677e\u8026\u5408Web\u5e94\u7528\u670d\u52a1\u5668\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\",\"name\":\"\u6e05, \u626c\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u626c\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Docker\u6784\u5efaNginx + uWSGI + Flask\u7684\u677e\u8026\u5408Web\u5e94\u7528\u670d\u52a1\u5668 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528docker\u6784\u5efanginx-uwsgi-flask\u7684\u677e\u8026\u5408web\u5e94\u7528\u670d\u52a1\u5668\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Docker\u6784\u5efaNginx + uWSGI + Flask\u7684\u677e\u8026\u5408Web\u5e94\u7528\u670d\u52a1\u5668","og_description":"\u5728\u6ca1\u6709Docker Compose\u548c\u5957\u63a5\u5b57\u6587\u4ef6\u7684\u60c5\u51b5\u4e0b\uff0c\u6784\u5efa\u4f7f\u7528\u5957\u63a5\u5b57\u901a\u4fe1\u7684nginx\u5bb9\u5668 \u21d4 uWSGI\u5bb9\u5668 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528docker\u6784\u5efanginx-uwsgi-flask\u7684\u677e\u8026\u5408web\u5e94\u7528\u670d\u52a1\u5668\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-12-23T13:24:30+00:00","article_modified_time":"2024-05-03T21:03:50+00:00","author":"\u6e05, \u626c","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u626c","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"4 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/","name":"\u4f7f\u7528Docker\u6784\u5efaNginx + uWSGI + Flask\u7684\u677e\u8026\u5408Web\u5e94\u7528\u670d\u52a1\u5668 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-12-23T13:24:30+00:00","dateModified":"2024-05-03T21:03:50+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Docker\u6784\u5efaNginx + uWSGI + Flask\u7684\u677e\u8026\u5408Web\u5e94\u7528\u670d\u52a1\u5668"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461","name":"\u6e05, \u626c","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","caption":"\u6e05, \u626c"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e6%9e%84%e5%bb%banginx-uwsgi-flask%e7%9a%84%e6%9d%be%e8%80%a6%e5%90%88web%e5%ba%94%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/33245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=33245"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/33245\/revisions"}],"predecessor-version":[{"id":96279,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/33245\/revisions\/96279"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=33245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=33245"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=33245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}