今注目のChatGPT君.私も結構趣味の範囲で使うことが多いです.特にChatGPT4はすごいですよ.
で,久しぶりに腹抱えて笑った.
やっぱり,名作の名言ってのは,説得力があるんだなぁと(違
今注目のChatGPT君.私も結構趣味の範囲で使うことが多いです.特にChatGPT4はすごいですよ.
で,久しぶりに腹抱えて笑った.
やっぱり,名作の名言ってのは,説得力があるんだなぁと(違
こちらは色んなところを見た、、、かったのですが、なかなか参考になるHPがなかったので、参考HPは省略します。
では、さっそく。
mkdir ~/docker/sync && cd $_
PUID=`id -u`
PGID=`id -g`
cat << EOF > docker-compose.yml
version: "3"
services:
syncthing:
image: syncthing/syncthing
container_name: syncthing
hostname: my-syncthing
environment:
- PUID=${PUID}
- PGID=${PGID}
volumes:
- /var/docker/sync/config:/var/syncthing/config
- /var/docker/sync/data:/var/syncthing
networks:
nginx-proxy-network:
aliases:
- syncthing.example.com
environment:
- VIRTUAL_HOST=sync.example.com # 利用するドメインを記載
ports:
- 8384:8384 # Web UI
#- 22000:22000/tcp # TCP file transfers
- target: 22000
published: 22000
protocol: tcp
mode: host
#- 22000:22000/udp # QUIC file transfers
- target: 22000
published: 22000
protocol: udp
mode: host
- 21027:21027/udp # Receive local discovery broadcasts
restart: unless-stopped
networks:
nginx-proxy-network:
external: true
EOF
docker-compose pull
docker-compose build --no-cache .
docker exec -it syncthing chown -R ${PUID}:${PGID} /var/syncthing/config
docker exec -it syncthing chmod -R 750 /var/syncthing/config
docker-compose up -d
たぶんこれで、うごくはずです。注意点は以下。
実はここが一番てこずった。というか、てこずってる。予想通りの結果が出てるんだけど、出てないという。まぁ、それでも動いたので忘れないように記載します。
GitHub – ethersys/ethersys-docker-munin
では、さっそく。注意点などは下記へ。
cd ~/docker
git clone https://github.com/ethersys/ethersys-docker-munin.git munin
cd munin
#git clone https://github.com/occitech/docker.git munin を使った場合は。
#HTMLログフォルダのパーミッションが間違っているので、その修正。
#このdockerは放置され、メンテされていないため。
#/munin/Dockerfileの中に.
#RUN chown munin:munin /var/log/munin
#を追加するとよい.
#cp Dockerfile Dockerfile.ori
#
#cat << EOF > diff.patch
#--- Dockerfile.ori
#+++ Dockerfile
#@@ -25,6 +25,7 @@
# # copy launcher
# ADD run.sh /usr/local/bin/run
# RUN chmod +x /usr/local/bin/run
#+RUN chown munin:munin /var/log/munin
#
# # persist
# VOLUME /var/lib/munin
#EOF
#
#patch Dockerfile < diff.patch
mkdir -p /docker && cd $_
docker build --no-cache -t munin ./
#docker-compose.ymlを作る
cat << EOF > docker-compose.yml
version: '3'
services:
munin:
image: munin
networks:
nginx-proxy-network:
aliases:
- munin.example.com #THISNODENAMEと同じにしたらわかりやすい.
#ports:
# - "8080:80"
volumes:
- /var/docker/munin/db:/var/lib/munin
- /var/docker/munin/logs:/var/log/munin
- /var/docker/munin/cache:/var/cache/munin
restart: always
environment:
THISNODENAME: "munin.example.com"
CRONDELAY: 2
TZ: "Asia/Tokyo"
NODES: "localhost:127.0.0.1 Ubuntu22HostOS:172.20.0.1"
VIRTUAL_HOST: munin.example.com
VIRTUAL_PORT: 80
#HTTPS_METHOD: noredirect # リダイレクトを無効にする
networks:
nginx-proxy-network:
external: true
networks:
nginx-proxy-network:
external: true
EOF
docker-compose up -d
まず、大きくコメントで残してあるのは、古いdockerイメージと知らずに使ってしまい、四苦八苦した部分です。フォルダの権限が正常ではなかったので、muninの.htmlを生成するフォルダに書き込めず、何時間経ってもまだ準備中だよ的なコメントのHPしか表示されない事態に。それを解決するのが、コメントの中に記入してるchownのコマンド。しかし、めんどくさかったので、他のイメージを使用し、この設定と相成りました。
以下、その他の注意点
さて、上でmunin-serverをコンテナにしたが、ホストOSにノードを入れる。これは簡単。
sudo apt install munin-node
はい、おわり。
で、設定が少しある。まずは、muin-serverコンテナがどのIPアドレスを取得しているかをみる。
docker network inspect munin-serverのネットワーク
または、
docker inspect muninコンテナ名
で、IPアドレスを探し出し、そのアドレスからmunin-nodeのアクセスをできるように設定ファイルを変更する。設定ファイルは「/etc/munin/munin-node.conf」だったと思う。
中に、
「allow 172\.20\.0.\.5$」と指定するか、「allow 172\.20\.0.\.0$」と範囲で許可するかしてください。
そして、munin-serverコンテナのdocker-compose.ymlの先ほどのIPアドレスを適時変更してください。そうすればOKのはず。
こちらも公式のDockerをつかう。どうやら、しばらくしたら、dockerでの開発に移行するみたいなことがHPに書いてあるらしい。英語の得意な方はちゃんと読んで下さい。私は読んでないです。伝聞です。
Tiny Tiny RSS を Docker版に移行した | KUSONEKOの見る世界
こちらもまずはサンプルを。注意点は、docker-compose.ymlと.envの二つがあること。
詳細は下記へ。
mkdir -p /docker && cd $_
git clone https://git.tt-rss.org/fox/ttrss-docker-compose.git ttrss-docker && cd ttrss-docker
mv docker-compose.yml docker-compose.yml.ori
#docker-compose.ymlを作る
cat << EOF > docker-compose.yml
version: '3'
services:
db:
image: postgres:12-alpine
restart: unless-stopped
environment:
- POSTGRES_USER=\${TTRSS_DB_USER}
- POSTGRES_PASSWORD=\${TTRSS_DB_PASS}
- POSTGRES_DB=\${TTRSS_DB_NAME}
volumes:
- /var/docker/ttrss/ttrss_db:/var/lib/postgresql/data
networks:
nginx-proxy-network:
aliases:
- tt-rss.db.example.com
app:
build:
context:
./app
restart: unless-stopped
env_file:
- .env
volumes:
- /var/docker/ttrss/ttrss_app:/var/www/html
- /var/docker/ttrss/config.d:/opt/tt-rss/config.d:ro
depends_on:
- db
networks:
nginx-proxy-network:
aliases:
- tt-rss.app.example.com
backups:
build:
context:
./app
restart: unless-stopped
env_file:
- .env
volumes:
- /var/docker/ttrss/ttrss_backups:/backups
- /var/docker/ttrss/ttrss_app:/var/www/html
depends_on:
- db
command: /opt/tt-rss/dcron.sh -f
networks:
nginx-proxy-network:
aliases:
- tt-rss.backups.example.com
updater:
build:
context:
./app
restart: unless-stopped
env_file:
- .env
volumes:
- /var/docker/ttrss/ttrss_app:/var/www/html
- /var/docker/ttrss/config.d:/opt/tt-rss/config.d:ro
depends_on:
- app
command: /opt/tt-rss/updater.sh
networks:
nginx-proxy-network:
aliases:
- tt-rss.updater.example.com
web-nginx:
build: ./web-nginx
restart: unless-stopped
# ports:
# - \${HTTP_PORT}:80
volumes:
- /var/docker/ttrss/ttrss_app:/var/www/html:ro
depends_on:
- app
networks:
nginx-proxy-network:
aliases:
- web-nginx.example.com
environment:
- VIRTUAL_HOST=ttrss.example.com
- VIRTUAL_PORT=80
- VIRTUAL_ROOT=/tt-rss
- HTTPS_METHOD=noredirect
networks:
default:
external:
name: bridge
nginx-proxy-network:
external: true
EOF
#.envファイルをつくる.defaultを保存したければ,してください.
#mv .env .env_ori
PUID=`id -u`
PGID=`id -g`
cat << EOF > .env
# Copy this file to .env before building the container.
# Put any local modifications here.
# Run under this UID/GID.
OWNER_UID=${PUID}
OWNER_GID=${PGID}
# FPM settings.
#PHP_WORKER_MAX_CHILDREN=5
#PHP_WORKER_MEMORY_LIMIT=256M
# ADMIN_USER_* settings are applied on every startup.
# Set admin user password to this value. If not set, random password will be
# generated if default password is being used, look for it in the 'app'
# container logs.
ADMIN_USER_PASS=adminhanihani
# Sets admin user access level to this value.
# Valid values:
# -2 - forbidden to login
# -1 - readonly
# 0 - default user
# 10 - admin
#ADMIN_USER_ACCESS_LEVEL=
# Auto create another user (in addition to built-in admin) unless it
# already exists.
#AUTO_CREATE_USER=
#AUTO_CREATE_USER_PASS=
#AUTO_CREATE_USER_ACCESS_LEVEL=0
# Default database credentials.
TTRSS_DB_USER=postgres
TTRSS_DB_NAME=postgres
TTRSS_DB_PASS=password
# You will likely need to set this to the correct value, see README.md
# for more information.
#TTRSS_SELF_URL_PATH=http://localhost:8280/tt-rss
#TTRSS_SELF_URL_PATH=http://ttrss.example.com:8280/tt-rss
TTRSS_SELF_URL_PATH=http://ttrss.example.com/tt-rss
# You can customize other config.php defines by setting overrides here.
# See app/Dockerfile for complete list. Examples:
# TTRSS_PLUGINS=auth_remote
# TTRSS_SINGLE_USER_MODE=true
# TTRSS_SESSION_COOKIE_LIFETIME=2592000
# TTRSS_FORCE_ARTICLE_PURGE=30
# etc, etc.
# bind exposed port to 127.0.0.1 by default in case reverse proxy is used.
# if you plan to run the container standalone and need origin port exposed
# use next HTTP_PORT definition (or remove "127.0.0.1:").
#HTTP_PORT=127.0.0.1:8280
HTTP_PORT=8280
EOF
docker-compose build --no-cache
docker-compose up -d
注意点は、
参考は公式HPから。
GitHub – l3tnun/docker-mirakurun-epgstation: Mirakurun + EPGStation on Docker
あいかわらず、スクリプトモドキを貼り付けて、注意点は以下へ。
mkdir -p ~/docker & cd $_
git clone https://github.com/l3tnun/docker-mirakurun-epgstation.git
cd docker-mirakurun-epgstation
#以下のファイルのコピーはバインドボリュームの場所に変更しています./var/docker
PUID=`id -u`
PGID=`id -g`
#cp docker-compose-sample.yml docker-compose.yml
sudo cp epgstation/config/enc.js.template /var/docker/epgstation/config/enc.js
sudo cp epgstation/config/config.yml.template /var/docker/epgstation/config/config.yml
sudo cp epgstation/config/operatorLogConfig.sample.yml /var/docker/epgstation/config/operatorLogConfig.yml
sudo cp epgstation/config/epgUpdaterLogConfig.sample.yml /var/docker/epgstation/config/epgUpdaterLogConfig.yml
sudo cp epgstation/config/serviceLogConfig.sample.yml /var/docker/epgstation/config/serviceLogConfig.yml
#docker-compose run --rm -e SETUP=true mirakurun
#defaultのdocker-compose.ymlを保存.
#mv docker-compose.yml docker-compose.yml.ori
cat << EOF > docker-compose.yml
version: '3.7'
services:
mirakurun:
image: chinachu/mirakurun
cap_add:
- SYS_ADMIN
- SYS_NICE
ports:
- "40772:40772"
- "9229:9229"
networks:
openvpn-network:
ipv4_address: 172.20.0.3
aliases:
- mirakurun.example.com
volumes:
- /var/docker/mirakurun/conf:/app-config
- /var/docker/mirakurun/data:/app-data
environment:
- TZ="Asia/Tokyo"
devices:
- /dev/bus:/dev/bus
- /dev/dvb:/dev/dvb
restart: always
logging:
driver: json-file
options:
max-file: "1"
max-size: 10m
mysql:
image: mariadb:10.5
# image: mysql:8.0 # 囲み文字を使用する場合
networks:
openvpn-network:
ipv4_address: 172.20.0.4
aliases:
- mirakurun.mysql.example.com
volumes:
- /var/docker/mirakurun/mira_sql:/var/lib/mysql
environment:
MYSQL_USER: epgstation
MYSQL_PASSWORD: epgstation
MYSQL_ROOT_PASSWORD: epgstation
MYSQL_DATABASE: epgstation
TZ: "Asia/Tokyo"
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --performance-schema=false --expire_logs_days=1 # for mariadb
# command: --character-set-server=utf8mb4 --collation-server=utf8mb4_0900_as_ci --performance-schema=false --expire_logs_days=1 --default-authentication-plugin=mysql_native_password # for myql
restart: always
logging:
options:
max-size: "10m"
max-file: "3"
epgstation:
build:
context: "./epgstation"
dockerfile: "debian.Dockerfile"
networks:
openvpn-network:
ipv4_address: 172.20.0.5
aliases:
- epgstation.example.com
volumes:
- /var/docker/epgstation/config:/app/config
- /var/docker/epgstation/data:/app/data
- /var/docker/epgstation/thumbnail:/app/thumbnail
- /var/docker/epgstation/logs:/app/logs
- /var/recorded:/app/recorded #ここだけちょいとディレクトリが違うのは,別のHDDをマウントしたいから.
environment:
- TZ="Asia/Tokyo"
depends_on:
- mirakurun
- mysql
ports:
- "8888:8888"
- "8889:8889"
user: "1000:1000"
devices:
- /dev/dri:/dev/dri
restart: always
networks:
openvpn-network:
external: true
EOF
docker-compose build --no-cache
docker-compose run --rm -e SETUP=true mirakurun
docker-compose up -d
#チャンネルスキャン
#curl -X PUT "http://localhost:40772/api/config/channels/scan?type=GR&setDisabledOnAdd=false&refresh=true" &&
curl -X PUT "http://localhost:40772/api/config/channels/scan?type=BS&setDisabledOnAdd=false&refresh=true" &&
curl -X PUT "http://localhost:40772/api/config/channels/scan?type=CS&setDisabledOnAdd=false&refresh=true"
#config.ymlのrecordedFileExtensionをm2tsからtsに変更すれば拡張子が変わる?
注意点は、
参考にしたHPは以下。
LinuxにDockerでOpenVPNを簡単にインストールする方法 | 小茂根の暮らし
同じく、スクリプトもどきを貼り付けます。
mkdir -p ~/docker/openvpn && cd $_
PUID=`id -u`
PGID=`id -g`
#docker-compose.ymlを作る.
cat << EOF > docker-compose.yml
version: "3"
services:
openvpn-as:
image: linuxserver/openvpn-as
container_name: openvpn-as
cap_add:
- NET_ADMIN
privileged: true
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=Asia/Tokyo
- INTERFACE=eth0 #optional
volumes:
- /var/docker/openvpn/data:/config
ports:
- 943:943
- 9443:443 #443番ポートを他が使ってるので変更.
- 1194:1194/udp
restart: always
networks:
openvpn-network:
ipv4_address: 172.20.0.2
aliases:
- openvpn.example.com
networks:
openvpn-network:
external: true
EOF
docker-compose up -d
注意点は、
さて、管理者のパスアワード変更ですが、
docker exec -it openvpn-as passwd admin
と実行すると、パスワードを2回入れる事を求められるので、これで変更ができます。あとは、GUIでログインして設定をゴニョゴニョしてください。設定は参考HPなどを見ていただければよろしいかと。
ココがメイン。とはいえ、dockerなので、結構簡単です。参考HPは公式のdockerイメージより。
wordpress – Official Image | Docker Hub
スクリプトもどきを貼りまして、注意点は下記へ。
mkdir -p ~/docker/wordpress && cd $_
#docker-compose.ymlを作る
cat << EOF > docker-compose.yml
version: "3.7"
services:
wordpress:
image: wordpress #WordPressのイメージ
container_name: wordpress-docker
# ports: # ポートの指定はnginx-proxyでするのでここではしない
# "80:80"
networks:
nginx-proxy-network:
aliases:
- wordpress.example.com
volumes:
- /var/docker/wp/html:/var/www/html #docker_wordpress/html にデータがマウントされる
- /var/docker/wp/config:/usr/local/etc/php/conf.d/upload.ini
environment:
WORDPRESS_DB_HOST: wordpressdb:3306
WORDPRESS_DB_USER: wordpressuser
WORDPRESS_DB_NAME: wordpress-db #WordPressの設定
WORDPRESS_DB_PASSWORD: wordpresspassword #WordPressの設定
VIRTUAL_HOST: example.com # nginx-proxyのホスト設定 ※本番では使用するFQDNなどにする。
LETSENCRYPT_HOST: example.com # Let's Encryptのホスト設定 ※本番では使用するFQDNなどにする。
LETSENCRYPT_EMAIL: xxx@example.com # Let's Encryptのメール設定
LETSENCRYPT_TEST: "true" # Let's Encryptのテストかどうかのフラグ 本番ではfalseにする (指定しない とテスト扱いになる)
CERT_NAME: example.com # ローカルで認証局を立てるときに使う ※本番ではLet's Encryptから直接取得するの でコメントアウトする
#HTTPS_METHOD: noredirect # リダイレクトを無効にする
depends_on:
- mysql
restart: always
mysql:
image: mariadb #MariaDBのイメージ
container_name: wordpressdb
ports:
- "3306:3306" #他のMySQLとポートがバッティングする場合は変える 例) "33060:3306"
networks:
nginx-proxy-network:
aliases:
- wordpress.mqspl.example.com
volumes:
- /var/docker/wp/db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: mysql-root-pw
MYSQL_DATABASE: wordpress-db
MYSQL_USER: wordpressuser
MYSQL_PASSWORD: wordpresspassword
restart: always
networks:
nginx-proxy-network:
external: true
EOF
cat << EOF > /var/docker/wp/config/upload.ini
upload_max_filesize = 100M
post_max_size = 100M
EOF
docker-compose build --no-cache
#cat << EOF > php.ini
#upload_max_filesize = 100M
#post_max_size = 100M
#EOF
#
#docker cp ./php.ini wordpress-docker:/usr/local/etc/php/php.ini
docker-compose up -d
注意点は、
今回参考にしたHPは以下。
Docker環境で簡単にSSL化する方法を解説 【失敗しない初心者でもできる方法】
今回は、以下のHPを参考にして作成していく。注意点は、
以下に同じくオマジナイを書くと.shとして使えそうなスクリプトを貼っておきます。
mkdir -p ~/docker/proxy && cd $_
#docker-compose.ymlを作る
cat << EOF > docker-compose.yml
version: '3.7'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
privileged: true
environment:
- "DHPARAM_GENERATION=false"
ports:
- 80:80
- 443:443
networks:
nginx-proxy-network:
aliases:
- nginx-proxy.example.com
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /var/docker/proxy/proxy:/usr/share/nginx/html
- /var/docker/proxy/proxy:/etc/nginx/vhost.d
- /var/docker/proxy/encrypt/certs:/etc/nginx/certs:ro
#- /var/docker/conf.d:/etc/nginx/conf.d/proxy.conf:ro # 設定を上書きするときはconf.d内に「.conf」拡張子で追加する
restart: always
labels:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
letsencrypt-nginx:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt-nginx
privileged: true
environment:
- NGINX_PROXY_CONTAINER=nginx-proxy
networks:
nginx-proxy-network:
aliases:
- letsencrypt-nginx.example.com
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /var/docker/proxy/proxy:/etc/nginx/vhost.d
- /var/docker/proxy/proxy:/usr/share/nginx/html
- /var/docker/proxy/encrypt/certs:/etc/nginx/certs:rw
restart: always
depends_on:
- nginx-proxy
networks:
default:
external:
name: bridge
nginx-proxy-network:
external: true
EOF
docker-compose build --no-cache
docker-compose up -d
注意点は特にないですが、バインドボリュームの設定を/var/dockerにしていますが、カレントディレクトリ以下でも良かったかもしれない。結局別のHDDをシンボリックリンクするんだし・・・
ChatGPTさんによると、
SSLHは、複数のプロトコルを1つのポートで同時に受け付けることができるオープンソースのプログラムです。具体的には、HTTP、HTTPS、SSH、OpenVPNなどのプロトコルを同じポート番号で受け付けることができます。
ChatGPT
SSLHは、ポート番号を節約するために使用されます。通常、各プロトコルには異なるポート番号が必要ですが、SSLHを使用することで、1つのポート番号で異なるプロトコルを切り替えながら使用できます。
また、SSLHは、ファイアウォールの背後にあるサーバーにアクセスするために、HTTPS経由でSSH接続を行うような場合にも使用できます。
だそうです。
インストール手順は以下に。先頭にオマジナイを書けば、.shファイルとして使えるはずです。
mkdir -p ~/docker/sslh && cd $_
#docker-compose.ymlを作る.
cat << EOF > docker-compose.yml
version: '3'
services:
sslh:
build:
context: sslh
container_name: sslh
ports:
- "443:443"
environment:
TZ: Asia/Tokyo
LISTEN_IP: 0.0.0.0
LISTEN_PORT: 443
SSH_HOST: 192.168.0.22
SSH_PORT: 22
OPENVPN_HOST: openvpn-as
OPENVPN_PORT: 9443
HTTPS_HOST: nginx-proxy
HTTPS_PORT: 443
restart: always
networks:
nginx-proxy-network:
aliases:
- sslh.example.com
openvpn-network:
aliases:
- sslh.example.com
networks:
nginx-proxy-network:
external: true
openvpn-network:
external: true
EOF
mkdir sslh
#Dockerfileを作る
cat << EOF > sslh/Dockerfile
FROM alpine:latest
RUN apk update && \
apk add --update-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ sslh && \
rm -rf /var/cache/apk/*
ADD entry.sh /usr/local/bin/entry.sh
RUN chmod +x /usr/local/bin/entry.sh
ENTRYPOINT ["/usr/local/bin/entry.sh"]
EOF
#entry.shを作る.
cat << 'EOF' > sslh/entry.sh
#!/bin/sh
# コマンド表示
echo "sslh -f -u root --listen=${LISTEN_IP}:${LISTEN_PORT} \
--ssh=${SSH_HOST}:${SSH_PORT} \
--tls=${HTTPS_HOST}:${HTTPS_PORT} \
--openvpn=${OPENVPN_HOST}:${OPENVPN_PORT}"
# コマンド実行
sslh -f -u root --listen=$LISTEN_IP:$LISTEN_PORT \
--ssh=$SSH_HOST:$SSH_PORT \
--tls=$HTTPS_HOST:$HTTPS_PORT \
--openvpn=$OPENVPN_HOST:$OPENVPN_PORT
EOF
cd sslh
docker-compose pull
docker-compose build --no-cache
docker-compose up -d
ポイントは以下。
参考にしたHPは以下。
DockerでSSLH!貴重な443番ポートでHTTPS、OpenVPN、SSHを同時に待ち受ける方法 | 小茂根の暮らし
https://komone-life.com/2020/03/24/how-to-install-sslh/
大まかな構成図を作ってみました。
自宅で普段使ってるPCとはローカルで繋がってます。書き忘れ。
さて、上記のような組み合わせを考えているので、どの辺りから入れていけばいいのかさっぱりわかりませんが、適当に入れていきます。
上記の順番で入れました。
実際は3から始めて2,1は最後の方に入れながら設定を弄るのがいいのでしょうが、さんざん失敗したので、最後はこの方法で入れました。
(つづく)