サーバーでの Docker デプロイ記録

📢 この記事は ChatGPT によって翻訳されました

思いつきから完全に実現するまで、なんと3ヶ月かかった(主に怠けすぎただけ)

Docker のインストール

APT でインストールする方法。

  1. HTTPS 転送と CA 証明書用パッケージを追加:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# まずは更新
sudo apt-get update

# パッケージをインストール
sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg \
     lsb-release
  1. GPG 鍵を追加してパッケージの正当性を確認:
1
2
3
4
5
# 中国ミラー
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 公式
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. ソースリストに Docker ソースを追加:

Debian のバージョンを確認して、以下の $(lsb_release -cs) を置き換えること 例:Debian10 → buster、Debian11 → bullseye

1
2
3
4
5
6
7
8
9
# 中国ミラー
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian \
  bullseye stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 公式
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  bullseye stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

stabletest にすればテスト版も使える。

  1. インストール実行:
1
2
3
4
5
6
7
8
# キャッシュ更新
sudo apt-get update

# Docker インストール
sudo apt-get install docker-ce docker-ce-cli containerd.io

# docker-compose
sudo apt-get install docker-compose

一括スクリプトもある:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# テスト版
curl -fsSL test.docker.com -o get-docker.sh

# 安定版
curl -fsSL get.docker.com -o get-docker.sh

# Aliyun ミラー
sudo sh get-docker.sh --mirror Aliyun

# Azure China ミラー
sudo sh get-docker.sh --mirror AzureChinaCloud

Docker 起動

1
2
sudo systemctl enable docker
sudo systemctl start docker

インストール確認:

1
docker run --rm hello-world

出力があれば成功。

Blog1: WordPress

例:/root/wordpress に作成。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
version: '3.3'
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - /root/wordpress/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    ports:
      - 8000:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}

uploads.ini

1
2
3
4
5
file_uploads = On
memory_limit = 256M
upload_max_filesize = 10M
post_max_size = 10M
max_execution_time = 600

Docker 関連操作

1
2
3
4
5
6
7
8
# バックグラウンド実行
docker-compose up -d

# 停止
docker-compose stop

# 停止+削除
docker-compose down

Blog2: Typecho

Docker Hub: 80x86/typecho

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
version: '3.0'
services:
  typecho:
    image: 80x86/typecho:latest
    container_name: Typecho_Blog
    volumes:
      - /root/typecho/data:/data
    ports:
      - 8001:80
    restart: always
    environment:
      PHP_TZ: Asia/Shanghai
      PHP_MAX_EXECUTION_TIME: 600

クラウドストレージ(PanIndex)

GitHub: https://github.com/px-org/PanIndex Docs: https://docs.noki.icu/

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
version: "3.0"
services:
  PanIndex:
    restart: always
    image: iicm/pan-index:latest
    container_name: VRC_Pan
    volumes:
      - /root/pan/data:/app/data
    ports:
      - 8002:5238

Nginx + SSL

GUI 管理ツール: https://github.com/0xJacky/nginx-ui

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
version: '3.1'
services:
  nginx-ui:
    restart: always
    image: uozi/nginx-ui:latest
    container_name: nginx_UI
    volumes:
      - /root/nginx/nginx:/etc/nginx
      - /root/nginx/nginx-ui:/etc/nginx-ui
      - /root/nginx/www:/www
    ports:
      - 80:80
      - 443:443

ホスト側 IP は 172.17.0.1 で参照できる。確認は:

1
ip addr show docker0

コンテナに入る

1
2
3
4
5
# 一覧確認
docker container ls

# 入る
docker exec -i [ID] bash

bash がない場合もある。

補足:SSL 証明書

Docker: neilpang/acme.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
version: '3.1'
services:
  acme.sh:
    image: neilpang/acme.sh
    container_name: acme.sh
    command: daemon
    volumes:
      - /root/acme/acme.sh:/acme.sh
      - /root/acme/conf:/.acme.sh
    environment:
      - CF_Key="CFのAPIキー"
      - CF_Email="メールアドレス"

DNS API 参考: https://github.com/acmesh-official/acme.sh/wiki/dnsapi

登録:

1
docker exec acme.sh --register-account -m [email protected]

証明書取得(Cloudflare):

1
docker exec acme.sh --issue --dns dns_cf -d example.com -d www.example.com

cron 自動更新は省略。


Nginx (手動構築)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
version: '3.1'
services:
  nginx:
    restart: always
    image: nginx
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - /root/docker/nginx/conf.d:/etc/nginx/conf.d
      - /root/docker/nginx/www:/user/share/nginx/html
      - /root/docker/nginx/log:/var/log/nginx
      - /root/acme/acme.sh:/ssl

conf.d/default.conf 例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
server {
    listen          80;
    listen          [::]:80;
    server_name     your_domain.com;
    rewrite ^(.*)$  https://$host$1 permanent;
}

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen  443 ssl http2;
    listen  [::]:443 ssl http2;
    server_name your_domain.com;

    ssl_certificate     /ssl/fullchain.cer;
    ssl_certificate_key /ssl/your_domain.key;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_pass http://172.17.0.1:9000/;
    }
}

参考資料

docker安装nginx并配置ssl证书,代理宿主机服务_Blueeyedboy521的博客-CSDN博客_bitwarden docker ssl

Nginx 安装 SSL 配置 HTTPS 超详细完整全过程-阿里云开发者社区 (aliyun.com)

快速部署 Docker 同时发布多个网站或服务_天道酬勤~的博客-CSDN博客_docker部署 一台服务器多个系统

Let’s Encrypt 使用教程,免费的SSL证书,让你的网站拥抱 HTTPS - Diamond-Blog (diamondfsd.com)

Nginx反向代理的一次使用总结 - 简书 (jianshu.com)

Nginx配置反向代理隐藏服务端口 - &大飞 - 博客园 (cnblogs.com)


参考記事

Debian - Docker — 从入门到实践 (gitbook.io)

Docker 安装 Wordpress 博客 - 腾讯云开发者社区-腾讯云 (tencent.com)

Docker部署WordPress解决“上传的文件尺寸超过php.ini中定义的upload_max_filesize值”问题_neiro-DevPress官方社区 (csdn.net)

let’s Encrypt 证书之安装故障 Could not bind to IPv4 or IPv6. - 料网 (liaosam.com)

基于Let’s Encrypt生成免费证书-支持多域名泛域名证书 - DevOps在路上 - 博客园 (cnblogs.com)

Docker Compose-菜鸟教程 (runoob.com)

Nginx配置文件详解 - 程序员自由之路 - 博客园 (cnblogs.com)

Docker使用acme.sh申请ssl证书 – 萌精灵 (moeelf.com)

docker安装nginx并配置ssl证书,代理宿主机服务

This post is licensed under CC BY-NC-SA 4.0 by the author.

Visits Since 2025-02-28

Hugo で構築されています。 | テーマ StackJimmy によって設計されています。