📢 この記事は ChatGPT によって翻訳されました
思いつきから完全に実現するまで、なんと3ヶ月かかった(主に怠けすぎただけ)
Docker のインストール
APT でインストールする方法。
- 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
|
- 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
|
- ソースリストに 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
|
stable
→ test
にすればテスト版も使える。
- インストール実行:
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
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
登録:
証明書取得(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证书,代理宿主机服务