docker デプロイメントラン空画像ホスティング#
最近画像ホスティングの VPS が期限切れになり、移行中に元のオープンソース版 chevereto 画像ホスティングの docker 版が直接消えてしまい、直接リポジトリが削除されて課金を強いられました。そこで、使わなくなったので、国産のものに切り替えました。ラン空画像ホスティングのオープンソース版も更新されていませんが、少なくとも docker は引けるので、自分用にも問題ありませんし、mysql を使わずに済むので、小型のマシンでは mysql を使わないのが確実に優先されます。
1.docker イメージの取得#
イメージのアドレス:https://github.com/HalcyonAzure/lsky-pro-docker
私は docker-compose を使用してデプロイし、mysql は使用せず、sqlite を使用します。他に変更がある場合は、作者のリポジトリ内の docker-compose ファイルを参考にしてください。
ポートについて説明しますが、ここで少し逆になっています。HTTPS_PORT は https 用に提供されるポートで、WEB_PORT は http のポートです。https のポートはデフォルトで自己署名証明書が付属しています。私は NGINX で WEB_PORT ポートをプロキシしていますが、現在特に問題はありません。マニュアルに従って NGINX を接続する場合は、HTTPS_PORT ポートであるべきですので、注意してください。
version: '3'
services:
lskypro:
image: halcyonazure/lsky-pro-docker:latest
restart: unless-stopped
hostname: lskypro
container_name: lskypro
environment:
- HTTPS_PORT=8088
- WEB_PORT=8089
volumes:
- $PWD/web:/var/www/html/
ports:
- "9080:8088"
- "9081:8089"
networks:
- lsky-net
2.NGINX の設定で https を有効にする#
私の NGINX 設定ファイル
server {
listen 443 ssl;
server_name xxx.com;
#証明書
ssl_certificate /root/.acme.sh/xxx.com_ecc/xxx.com.cer;
ssl_certificate_key /root/.acme.sh/xxx.com_ecc/xxx.com.key;
access_log /var/log/nginx/lskylog/access.log main;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_pass http://127.0.0.1:9081;
proxy_redirect off;
client_max_body_size 100m;
client_body_buffer_size 128k;
}
}
その中の「client_max_body_size 100m;」の部分は、画像のアップロードが大きすぎて NGINX が転送を中断するのを防ぐためのものです。このコンテナはデフォルトで phpini ファイルのアップロード制限を変更していますが、数メガの画像をアップロードしてもエラーが出る場合は、NGINX 側の制限が原因であるかどうかを考慮する必要があります。