{"id":1836,"date":"2026-02-23T14:09:41","date_gmt":"2026-02-23T05:09:41","guid":{"rendered":"https:\/\/beeknowledge.co.jp\/?p=1836"},"modified":"2026-03-01T09:37:35","modified_gmt":"2026-03-01T00:37:35","slug":"1836","status":"publish","type":"post","link":"https:\/\/beeknowledge.co.jp\/?p=1836","title":{"rendered":"xxx.xxx.com Giocode\u30b5\u30fc\u30d0\u69cb\u7bc9\u624b\u9806\u307e\u3068\u3081\u3000\u809d\u5fc3\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u7121\u3057"},"content":{"rendered":"\n<!doctype html>\n<html lang=\"ja\">\n<head>\n  <meta charset=\"utf-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/>\n  <title>xxx.xxx.com \u69cb\u7bc9\u624b\u9806\u307e\u3068\u3081\uff08Ubuntu \/ Nginx\u540c\u5c45 \/ ABR + Flask\uff09\u809d\u5fc3\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u7121\u3057<\/title>\n  <style>\n    :root{\n      --bg:#ffffff; --text:#0b1f44; --muted:#4b5b78; --line:#e4ebf5;\n      --card:#f7fbff; --accent:#2563eb; --ok:#0f766e; --warn:#b45309;\n      --mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    }\n    *{box-sizing:border-box}\n    body{margin:0;font-family:system-ui,-apple-system,\"Segoe UI\",Roboto,\"Hiragino Kaku Gothic ProN\",\"Noto Sans JP\",\"Yu Gothic\",\"Meiryo\",sans-serif;background:var(--bg);color:var(--text);line-height:1.6}\n    header{padding:22px 16px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#f7fbff, #fff)}\n    header h1{margin:0 0 6px;font-size:20px}\n    header p{margin:0;color:var(--muted);font-size:14px}\n    main{max-width:980px;margin:0 auto;padding:16px}\n    .grid{display:grid;gap:12px}\n    @media(min-width:900px){.grid.cols2{grid-template-columns:1fr 1fr}}\n    section{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px}\n    h2{font-size:16px;margin:0 0 10px}\n    h3{font-size:14px;margin:14px 0 6px}\n    p,li{font-size:14px}\n    code,pre{font-family:var(--mono)}\n    pre{margin:10px 0;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:#fff;overflow:auto}\n    .tag{display:inline-block;font-size:12px;border:1px solid var(--line);border-radius:999px;padding:2px 8px;background:#fff;color:var(--muted);margin-right:6px}\n    .ok{color:var(--ok);font-weight:700}\n    .warn{color:var(--warn);font-weight:700}\n    .accent{color:var(--accent);font-weight:700}\n    .kvs{display:grid;grid-template-columns:180px 1fr;gap:6px 10px;align-items:start}\n    .kvs div:nth-child(odd){color:var(--muted)}\n    a{color:var(--accent);text-decoration:none}\n    a:hover{text-decoration:underline}\n    .small{font-size:12px;color:var(--muted)}\n    .hr{height:1px;background:var(--line);margin:10px 0}\n  <\/style>\n<\/head>\n<body>\n<header>\n\n  <p>Ubuntu \/ Nginx\u540c\u5c45 \/ HTTPS(LE) \/ ABR(abr-geocoder) + Flask(Gunicorn) \/ GSI reverse\uff08\u5ea7\u6a19\u2192\u4f4f\u6240\uff09<\/p>\n<\/header>\n\n<main class=\"grid\">\n  <section>\n    <h2>1. \u76ee\u7684\u3068\u63d0\u4f9bAPI<\/h2>\n    <div class=\"kvs\">\n      <div>\u516c\u958b\u30c9\u30e1\u30a4\u30f3<\/div><div><span class=\"accent\">xxx.xxx.com<\/span><\/div>\n      <div>\u4f4f\u6240\u2192\u5ea7\u6a19<\/div><div><code>GET \/v1\/geocode?address=...&amp;provider=abrg|gsi|nominatim<\/code><\/div>\n      <div>\u5ea7\u6a19\u2192\u4f4f\u6240\uff08\u9006\u5f15\u304d\uff09<\/div><div><code>GET \/v1\/reverse?lat=..&amp;lon=..&amp;provider=gsi|nominatim<\/code><\/div>\n      <div>EXIF\u2192\u4f4f\u6240<\/div><div><code>POST \/v1\/exif\/reverse<\/code>\uff08multipart file=@photo.jpg\uff09<\/div>\n      <div>\u5185\u90e8<\/div><div>ABR: <code>http:\/\/127.0.0.1:3000\/geocode<\/code> \/ Flask: <code>unix:\/run\/geoapi\/geoapi.sock<\/code><\/div>\n    <\/div>\n    <div class=\"hr\"><\/div>\n    <p class=\"small\">\n      \u540c\u5c45nginx\u74b0\u5883\u306e\u6700\u5927\u306e\u7f60\u306f <b>server_name\u91cd\u8907<\/b> \u3068 <b>\/.well-known \u304cFlask\u306b\u6d41\u308c\u308b<\/b> \u3053\u3068\u3002\n      \u3053\u3053\u3092\u5916\u3059\u3068 Let\u2019s Encrypt \u304c\u5931\u6557\u2192\u30ec\u30fc\u30c8\u5236\u9650\u306b\u306a\u308a\u307e\u3059\u3002\n    <\/p>\n  <\/section>\n\n  <section>\n    <h2>2. \u5168\u4f53\u69cb\u6210<\/h2>\n    <pre>\nInternet(443)\n  \u2193\nNginx (xxx.xxx.com)\n  \u2193 proxy_pass unix:\/run\/geoapi\/geoapi.sock\nGunicorn + Flask (geoapi.service)\n  \u251c\u2500 \/v1\/geocode \u2192 ABR(abr-geocoder) http:\/\/127.0.0.1:3000\/geocode\n  \u2514\u2500 \/v1\/reverse \u2192 GSI reverse API\uff08\u5916\u90e8\uff09\nABR server (abrg.service) :3000 (localhost\u306e\u307f)<\/pre>\n    <p class=\"small\"><span class=\"tag\">\u516c\u958b\u30dd\u30fc\u30c8<\/span>80\/443\u306e\u307f\uff08ABR:3000\u306f\u5916\u306b\u51fa\u3055\u306a\u3044\uff09<\/p>\n  <\/section>\n\n  <section>\n    <h2>3. \u4e8b\u524d\u6e96\u5099\uff08DNS \/ FW\uff09<\/h2>\n    <ul>\n      <li>DNS\uff1a<code>xxx.xxx.com<\/code> \u306e A\u30ec\u30b3\u30fc\u30c9 \u2192 \u30b5\u30fc\u30d0IP\uff08AAAA\u7121\u3057\u3067\u3082OK\uff09<\/li>\n      <li>FW\uff1a80\/443 \u3092\u8a31\u53ef\uff08UFW\u4f8b\uff09<\/li>\n    <\/ul>\n    <pre>sudo ufw allow 80\/tcp\nsudo ufw allow 443\/tcp\nsudo ufw status<\/pre>\n  <\/section>\n\n  <section>\n    <h2>4. Ubuntu \u57fa\u672c\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h2>\n    <pre>sudo apt update\nsudo apt install -y nginx curl sqlite3 ca-certificates \\\n  python3-venv python3-pip<\/pre>\n    <h3>Node.js 20\uff08ABR\u7528\uff09<\/h3>\n    <pre>curl -sL https:\/\/deb.nodesource.com\/setup_20.x | sudo -E bash -\nsudo apt install -y nodejs\nnode -v\nnpm -v<\/pre>\n  <\/section>\n\n  <section>\n    <h2>5. \u914d\u7f6e\u5148\u30fb\u30e6\u30fc\u30b6\u30fc<\/h2>\n    <pre>sudo adduser --system --group --home \/opt\/geoapi geoapi\nsudo mkdir -p \/opt\/geoapi\/{abrg,flask}\nsudo chown -R geoapi:geoapi \/opt\/geoapi<\/pre>\n    <p class=\"small\">\n      \u4ee5\u964d\u3001ABR\u30c7\u30fc\u30bf\u306f <code>\/opt\/geoapi\/abrg\/data<\/code>\u3001Flask\u306f <code>\/opt\/geoapi\/flask<\/code> \u3092\u524d\u63d0\u3002\n    <\/p>\n  <\/section>\n\n  <section>\n    <h2>6. ABR\uff08abr-geocoder\uff09\u69cb\u7bc9<\/h2>\n    <h3>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h3>\n    <pre>sudo npm install -g @digital-go-jp\/abr-geocoder\nabrg --help<\/pre>\n\n    <h3>\u30c7\u30fc\u30bf\u751f\u6210\uff08\u4f8b\uff1a\u6771\u4eac\u90fd 130001\uff09<\/h3>\n    <pre>sudo -u geoapi mkdir -p \/opt\/geoapi\/abrg\/data\nsudo -u geoapi abrg download -c 130001 -d \/opt\/geoapi\/abrg\/data<\/pre>\n\n    <h3>systemd\uff1a\/etc\/systemd\/system\/abrg.service<\/h3>\n    <pre>[Unit]\nDescription=ABR Geocoder (abrg) REST server\nAfter=network.target\n\n[Service]\nUser=geoapi\nGroup=geoapi\nWorkingDirectory=\/opt\/geoapi\nExecStart=\/usr\/bin\/abrg serve start -d \/opt\/geoapi\/abrg\/data -p 3000\nRestart=always\nRestartSec=2\n\n[Install]\nWantedBy=multi-user.target<\/pre>\n\n    <h3>\u6709\u52b9\u5316\u3068\u758e\u901a<\/h3>\n    <pre>sudo systemctl daemon-reload\nsudo systemctl enable --now abrg\nsudo systemctl status abrg --no-pager\n\ncurl \"http:\/\/127.0.0.1:3000\/geocode?address=\u6771\u4eac\u90fd\u5343\u4ee3\u7530\u533a\u4e38\u306e\u51851-9-1\"<\/pre>\n  <\/section>\n\n  <section>\n    <h2>7. Flask\uff08Gunicorn\uff09\u69cb\u7bc9<\/h2>\n    <p>\n      Flask\u306f\u300c\u7d71\u4e00API\u300d\u3068\u300c\u30ad\u30e3\u30c3\u30b7\u30e5\u300d\u300cprovider\u5207\u66ff\u300d\u3092\u62c5\u5f53\u3002ABR\/GSI\u306f\u88cf\u3067\u5207\u66ff\u3002\n    <\/p>\n\n    <h3>\u30a2\u30d7\u30ea\u914d\u7f6e<\/h3>\n    <ul>\n      <li><code>\/opt\/geoapi\/flask\/app.py<\/code> \u306bFlask\u30b3\u30fc\u30c9\u3092\u914d\u7f6e<\/li>\n      <li class=\"warn\">\u91cd\u8981\uff1agunicorn\u3067\u306f <code>__main__<\/code> \u304c\u8d70\u3089\u306a\u3044\u306e\u3067\u3001DB\u521d\u671f\u5316\u306f import\u6642\u306b\u5fc5\u305a\u5b9f\u884c<\/li>\n    <\/ul>\n\n    <h3>\u5fc5\u9808\u4fee\u6b63\uff08\u4f8b\uff1acache\u30c6\u30fc\u30d6\u30eb\u4f5c\u6210\uff09<\/h3>\n    <pre># app.py \u3067 init_db() \u5b9a\u7fa9\u306e\u76f4\u5f8c\u306b\u3053\u308c\u3092\u7f6e\u304f\ninit_db()  # \u2190 gunicorn\u8d77\u52d5\u3067\u3082\u5fc5\u305a\u8d70\u308b\uff08no such table: cache \u3092\u9632\u3050\uff09<\/pre>\n\n    <h3>venv &amp; \u4f9d\u5b58<\/h3>\n    <pre>sudo -u geoapi python3 -m venv \/opt\/geoapi\/flask\/.venv\nsudo -u geoapi \/opt\/geoapi\/flask\/.venv\/bin\/pip install -U pip\nsudo -u geoapi \/opt\/geoapi\/flask\/.venv\/bin\/pip install flask gunicorn requests pillow<\/pre>\n\n    <h3>systemd\uff1a\/etc\/systemd\/system\/geoapi.service<\/h3>\n    <pre>[Unit]\nDescription=Geo API (Flask via Gunicorn)\nAfter=network.target abrg.service\nRequires=abrg.service\n\n[Service]\nUser=geoapi\nGroup=www-data\nWorkingDirectory=\/opt\/geoapi\/flask\nEnvironment=\"PYTHONUNBUFFERED=1\"\n# \u516c\u958b\u3059\u308b\u306a\u3089 API\u30ad\u30fc\u63a8\u5968\n# Environment=\"API_KEY=YOUR_SECRET\"\nExecStart=\/opt\/geoapi\/flask\/.venv\/bin\/gunicorn \\\n  --workers 2 \\\n  --bind unix:\/run\/geoapi\/geoapi.sock \\\n  --umask 007 \\\n  app:app\nRestart=always\nRestartSec=2\nRuntimeDirectory=geoapi\n\n[Install]\nWantedBy=multi-user.target<\/pre>\n\n    <h3>\u6709\u52b9\u5316\u30fb\u30bd\u30b1\u30c3\u30c8\u78ba\u8a8d<\/h3>\n    <pre>sudo systemctl daemon-reload\nsudo systemctl enable --now geoapi\nsudo systemctl status geoapi --no-pager\nls -l \/run\/geoapi\/geoapi.sock<\/pre>\n\n    <h3>\u5207\u308a\u5206\u3051\uff08Nginx\u629c\u304d\u3067\u53e9\u304f\uff09<\/h3>\n    <pre>curl --unix-socket \/run\/geoapi\/geoapi.sock -G \"http:\/\/localhost\/v1\/geocode\" \\\n  --data-urlencode \"address=\u6771\u4eac\u90fd\u5343\u4ee3\u7530\u533a\u4e38\u306e\u51851-9-1\" \\\n  --data-urlencode \"provider=abrg\"<\/pre>\n  <\/section>\n\n  <section>\n    <h2>8. Nginx\uff08\u540c\u5c45\u524d\u63d0\u306e\u8a2d\u5b9a\uff09<\/h2>\n    <p class=\"warn\"><b>server_name \u91cd\u8907\u306f\u7981\u6b62<\/b>\uff08\u540c\u3058\u30c9\u30e1\u30a4\u30f3\u304c\u8907\u6570\u30d5\u30a1\u30a4\u30eb\u306b\u3042\u308b\u3068\u7247\u65b9 ignored\uff09\u3002<\/p>\n\n    <h3>HTTP\uff0880\uff09\u307e\u305a\u901a\u3059\uff1a\/etc\/nginx\/sites-available\/giocode<\/h3>\n    <pre>server {\n  listen 80;\n  listen [::]:80;\n  server_name xxx.xxx.com;\n\n  # ACME \u306f\u5fc5\u305a Nginx \u304c\u8fd4\u3059\uff08Flask\u306b\u6d41\u3059\u3068\u8a8d\u8a3c\u5931\u6557\uff09\n  location ^~ \/.well-known\/acme-challenge\/ {\n    root \/var\/www\/html;\n    default_type \"text\/plain\";\n    try_files $uri =404;\n  }\n\n  location \/ {\n    proxy_pass http:\/\/unix:\/run\/geoapi\/geoapi.sock;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n  }\n}<\/pre>\n\n    <h3>\u6709\u52b9\u5316<\/h3>\n    <pre>sudo ln -s \/etc\/nginx\/sites-available\/giocode \/etc\/nginx\/sites-enabled\/giocode\nsudo nginx -t && sudo systemctl reload nginx<\/pre>\n\n    <h3>ACME\u5230\u9054\u30c6\u30b9\u30c8\uff08\u7d76\u5bfe\u3084\u308b\uff09<\/h3>\n    <pre>sudo mkdir -p \/var\/www\/html\/.well-known\/acme-challenge\necho ok | sudo tee \/var\/www\/html\/.well-known\/acme-challenge\/ping.txt >\/dev\/null\n\ncurl -i \"http:\/\/&lt;PUBLIC_IP&gt;\/.well-known\/acme-challenge\/ping.txt\" -H \"Host: xxx.xxx.com\"\n# 200 OK + ok \u304c\u8fd4\u308c\u3070\u5408\u683c<\/pre>\n\n    <h3>server_name\u91cd\u8907\u30c1\u30a7\u30c3\u30af<\/h3>\n    <pre>sudo nginx -T | grep -n \"server_name giocode\\.disasterinformation\\.jp\"<\/pre>\n  <\/section>\n\n  <section>\n    <h2>9. HTTPS\uff08Let\u2019s Encrypt \/ webroot\u65b9\u5f0f\u63a8\u5968\uff09<\/h2>\n    <p>\u540c\u5c45\u74b0\u5883\u306f <b>&#8211;nginx<\/b> \u3088\u308a <b>&#8211;webroot<\/b> \u304c\u5b89\u5168\u3002<\/p>\n\n    <h3>staging\uff08\u4e88\u884c\uff09<\/h3>\n    <pre>sudo apt install -y certbot\nsudo certbot certonly --staging --webroot -w \/var\/www\/html -d xxx.xxx.com<\/pre>\n\n    <h3>\u672c\u756a<\/h3>\n    <pre>sudo certbot certonly --webroot -w \/var\/www\/html -d xxx.xxx.com\nsudo systemctl restart nginx<\/pre>\n\n    <h3>\u8a3c\u660e\u66f8\u78ba\u8a8d\uff08staging\u6df7\u5165\u3092\u9632\u3050\uff09<\/h3>\n    <pre>sudo openssl x509 -in \/etc\/letsencrypt\/live\/xxx.xxx.com\/fullchain.pem -noout -issuer\necho | openssl s_client -connect xxx.xxx.com:443 \\\n  -servername xxx.xxx.com 2>\/dev\/null \\\n  | openssl x509 -noout -issuer -subject<\/pre>\n\n    <h3>HTTPS\u306eNginx\u5b8c\u6210\u5f62\uff0880\u2192443\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\uff09<\/h3>\n    <pre>server {\n  listen 80;\n  listen [::]:80;\n  server_name xxx.xxx.com;\n\n  location ^~ \/.well-known\/acme-challenge\/ {\n    root \/var\/www\/html;\n    default_type \"text\/plain\";\n    try_files $uri =404;\n  }\n  location \/ { return 301 https:\/\/$host$request_uri; }\n}\n\nserver {\n  listen 443 ssl http2;\n  listen [::]:443 ssl http2;\n  server_name xxx.xxx.com;\n\n  ssl_certificate     \/etc\/letsencrypt\/live\/xxx.xxx.com\/fullchain.pem;\n  ssl_certificate_key \/etc\/letsencrypt\/live\/xxx.xxx.com\/privkey.pem;\n\n  client_max_body_size 20m;\n\n  location \/ {\n    proxy_pass http:\/\/unix:\/run\/geoapi\/geoapi.sock;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n  }\n}<\/pre>\n\n    <h3>\u53cd\u6620<\/h3>\n    <pre>sudo nginx -t && sudo systemctl reload nginx<\/pre>\n  <\/section>\n\n  <section>\n    <h2>10. \u547c\u3073\u51fa\u3057\u65b9\u6cd5\uff08\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\uff09<\/h2>\n    <p class=\"warn\">Windows PowerShell\u306f <code>curl<\/code> \u304c\u5225\u7269\u306a\u306e\u3067 <b>curl.exe<\/b> \u3092\u4f7f\u3046\u3002<\/p>\n\n    <h3>\u4f4f\u6240\u2192\u5ea7\u6a19\uff08ABR\uff09<\/h3>\n    <pre>curl.exe -G \"https:\/\/xxx.xxx.com\/v1\/geocode\" ^\n  --data-urlencode \"address=\u6771\u4eac\u90fd\u5343\u4ee3\u7530\u533a\u4e38\u306e\u51851-9-1\" ^\n  --data-urlencode \"provider=abrg\"<\/pre>\n\n    <h3>\u9006\u5f15\u304d\uff08\u5ea7\u6a19\u2192\u4f4f\u6240\uff09<\/h3>\n    <pre>curl.exe -G \"https:\/\/xxx.xxx.com\/v1\/reverse\" ^\n  --data-urlencode \"lat=35.681382\" ^\n  --data-urlencode \"lon=139.766084\"<\/pre>\n\n    <h3>EXIF\u2192\u4f4f\u6240\uff08GPS\u304c\u3042\u308bJPEG\uff09<\/h3>\n    <pre>curl.exe -F \"file=@photo.jpg\" https:\/\/xxx.xxx.com\/v1\/exif\/reverse<\/pre>\n  <\/section>\n\n  <section>\n    <h2>11. \u904b\u7528\u30fb\u30ed\u30b0\u30fb\u5fa9\u65e7\u30b3\u30de\u30f3\u30c9<\/h2>\n    <pre># \u72b6\u614b\nsudo systemctl status abrg geoapi nginx --no-pager\n\n# \u30ed\u30b0\nsudo journalctl -u geoapi -n 200 --no-pager -o cat\nsudo journalctl -u abrg -n 200 --no-pager -o cat\n\n# \u518d\u8d77\u52d5\nsudo systemctl restart abrg\nsudo systemctl restart geoapi\nsudo systemctl restart nginx\n\n# \u66f4\u65b0\u30c6\u30b9\u30c8\nsudo certbot renew --dry-run<\/pre>\n\n    <h3>\u5178\u578b\u30c8\u30e9\u30d6\u30eb<\/h3>\n    <ul>\n      <li><b>LE\u5931\u6557\u2192\u30ec\u30fc\u30c8\u5236\u9650<\/b>\uff1a<code>\/.well-known<\/code> \u304cFlask\u3078\u6d41\u308c\u3066\u306a\u3044\u304b\uff08Host\u30d8\u30c3\u30c0curl\u3067200\u78ba\u8a8d\uff09<\/li>\n      <li><b>staging\u8a3c\u660e\u66f8\u306e\u307e\u307e<\/b>\uff1aopenssl\u306eissuer\u306b <code>(STAGING)<\/code> \u304c\u51fa\u3066\u306a\u3044\u304b<\/li>\n      <li><b>Flask 500<\/b>\uff1a<code>sqlite3.OperationalError: no such table: cache<\/code> \u2192 import\u6642 <code>init_db()<\/code><\/li>\n      <li><b>ABR\u63a5\u7d9a\u4e0d\u53ef<\/b>\uff1a<code>curl http:\/\/127.0.0.1:3000\/geocode?... <\/code> \u3068 <code>systemctl status abrg<\/code><\/li>\n      <li><b>Nginx\u540c\u5c45\u306e\u885d\u7a81<\/b>\uff1a<code>nginx -T | grep server_name<\/code> \u3067\u91cd\u8907\u3092\u6f70\u3059<\/li>\n    <\/ul>\n  <\/section>\n\n  <section>\n    <h2>12. \u5225\u74b0\u5883\u3078\u5c55\u958b\u3059\u308b\u6642\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h2>\n    <ul>\n      <li>DNS A\u30ec\u30b3\u30fc\u30c9\u304c\u65b0\u30b5\u30fc\u30d0IP\u3092\u5411\u3044\u3066\u3044\u308b<\/li>\n      <li>Nginx\u306b <code>server_name xxx.xxx.com<\/code> \u304c1\u3064\u3060\u3051<\/li>\n      <li>ACME\u30d1\u30b9\u304cNginx\u3067200\u306b\u306a\u308b\uff08Host\u30d8\u30c3\u30c0curl\uff09<\/li>\n      <li>ABR:3000 \u304c localhost \u3067\u7a3c\u50cd<\/li>\n      <li>geoapi.sock \u304c\u4f5c\u3089\u308c\u3001Nginx\u304c\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u6a29\u9650\uff08Group=www-data \/ umask 007\uff09<\/li>\n      <li>\u8a3c\u660e\u66f8\u306f\u672c\u756a\uff08issuer\u306bSTAGING\u304c\u51fa\u306a\u3044\uff09<\/li>\n      <li>\u5916\u90e8curl\u3067 \/v1\/geocode \/v1\/reverse \u304cJSON\u3092\u8fd4\u3059<\/li>\n    <\/ul>\n    <p class=\"small\">\u3053\u306eHTML\u306f\u300c\u5225\u74b0\u5883\u306b\u30b3\u30d4\u30fc\u3057\u3066\u3001\u305d\u306e\u307e\u307e\u624b\u9806\u66f8\u300d\u3068\u3057\u3066\u4f7f\u3046\u76ee\u7684\u3067\u4f5c\u3063\u3066\u3042\u308a\u307e\u3059\u3002<\/p>\n  <\/section>\n\n<\/main>\n<\/body>\n<\/html>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>xxx.xxx.com \u69cb\u7bc9\u624b\u9806\u307e\u3068\u3081\uff08Ubuntu \/ Nginx\u540c\u5c45 \/ ABR + Flask\uff09\u809d\u5fc3\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u7121\u3057 Ubuntu \/ Nginx\u540c\u5c45 \/ HTTPS(LE) \/ ABR(abr-geocode [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"saved_in_kubio":false,"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"vkexunit_cta_each_option":"","footnotes":""},"categories":[78],"tags":[],"class_list":["post-1836","post","type-post","status-publish","format-standard","hentry","category-78"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/1836","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1836"}],"version-history":[{"count":5,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/1836\/revisions"}],"predecessor-version":[{"id":1844,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/1836\/revisions\/1844"}],"wp:attachment":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1836"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1836"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1836"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}