ArchiveBox

https://github.com/ArchiveBox/ArchiveBox https://hub.docker.com/r/archivebox/archivebox curl -O 'https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/master/docker-compose.yml' docker-compose.yml # Usage: # docker-compose run archivebox init --setup # docker-compose up # echo "https://example.com" | docker-compose run archivebox archivebox add # docker-compose run archivebox add --depth=1 https://example.com/some/feed.rss # docker-compose run archivebox config --set PUBLIC_INDEX=True # docker-compose run archivebox help # Documentation: # https://github.com/ArchiveBox/ArchiveBox/wiki/Docker#docker-compose version: "3.9" services: archivebox: image: archivebox/archivebox:sha-f809e3b command: server --quick-init 0.0.0.0:8000 ports: - "${SERVER_PORT:-8000}:8000" environment: ALLOWED_HOSTS: "*" MEDIA_MAX_SIZE: 2g # SEARCH_BACKEND_ENGINE: sonic # uncomment these if you enable sonic below # SEARCH_BACKEND_HOST_NAME: sonic # SEARCH_BACKEND_PASSWORD: SecretPassword volumes: - "${DATA_ROOT:-./data}:/data" # To run the Sonic full-text search backend, first download the config file to sonic.cfg # curl -O https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/master/etc/sonic.cfg # after starting, backfill any existing Snapshots into the index: docker-compose run archivebox update --index-only # sonic: # image: valeriansaliou/sonic:v1.3.0 # environment: # SEARCH_BACKEND_PASSWORD: SecretPassword # volumes: # - ./sonic.cfg:/etc/sonic.cfg:ro # - ./data/sonic:/var/lib/sonic/store ### Optional Addons: tweak these examples as needed for your specific use case # Example: Run scheduled imports in a docker instead of using cron on the # host machine, add tasks and see more info with archivebox schedule --help # scheduler: # image: archivebox/archivebox:latest # command: schedule --foreground --every=day --depth=1 'https://getpocket.com/users/USERNAME/feed/all' # environment: # USE_COLOR: True # SHOW_PROGRESS: False # volumes: # - ./data:/data .env SERVER_PORT=127.0.0.1:8000 DATA_ROOT=./data 初期設定 管理ユーザの作成、プライベートサーバ化、再起動。 ...

2021年11月6日 · aoirint

Minecraft Server

https://github.com/itzg/docker-minecraft-server https://feedback.minecraft.net/hc/en-us/sections/360001186971-Release-Changelogs docker-compose.yml version: "3.9" services: minecraft: image: itzg/minecraft-server ports: - "${SERVER_PORT}:25565" environment: EULA: "TRUE" OVERRIDE_SERVER_PROPERTIES: 'false' # overwrite on every container start if true TZ: ${TZ} TYPE: ${TYPE} # https://github.com/itzg/docker-minecraft-server#server-types VERSION: ${VERSION} # https://feedback.minecraft.net/hc/en-us/sections/360001186971-Release-Changelogs SERVER_NAME: ${SERVER_NAME} MOTD: ${MOTD} ENABLE_WHITELIST: ${ENABLE_WHITELIST} WHITELIST: ${WHITELIST} OPS: ${OPS} SPAWN_PROTECTION: ${SPAWN_PROTECTION} VIEW_DISTANCE: ${VIEW_DISTANCE} SEED: ${SEED} DIFFICULTY: ${DIFFICULTY} MODE: ${MODE} PVP: ${PVP} LEVEL_TYPE: ${LEVEL_TYPE} GENERATOR_SETTINGS: ${GENERATOR_SETTINGS} ONLINE_MODE: ${ONLINE_MODE} tty: true stdin_open: true restart: unless-stopped volumes: - ./data:/data .env SERVER_PORT=0.0.0.0:25565 TZ=Asia/Tokyo TYPE=VANILLA VERSION=1.17.1 SERVER_NAME=MyServer MOTD=A Vanilla Minecraft Server powered by Docker ENABLE_WHITELIST=true WHITELIST=user1,user2 OPS=user1 SPAWN_PROTECTION=0 VIEW_DISTANCE= SEED= DIFFICULTY=normal MODE=survival PVP=true LEVEL_TYPE= GENERATOR_SETTINGS= ONLINE_MODE=true スーパーフラット https://github.com/itzg/docker-minecraft-server#level-type-and-generator-settings https://minecraft.fandom.com/wiki/Superflat ※ 1.17.1でうまく動きませんでした(常にデフォルトのフラットワールドが生成される)。 代わりに、クライアントでワールドを生成してからサーバにコピーする方法が使えます。 ...

2021年11月6日 · aoirint

GitLab CI, GitLab PagesにビルドしたHTMLを公開する

https://docs.gitlab.com/ee/user/project/pages/ リポジトリのGitLab Pages機能を有効化したあと、 GitLab CI上でpagesというジョブにpublicというパスのArtifactがあるとき、 自動的にpages:deployというジョブが実行され、GitLab Pagesへのデプロイが行われる。 リポジトリがプライベートリポジトリのとき、 デプロイされたGitLab Pagesは、GitLabアカウントで認証が行われる。 .gitlab-ci.yml https://docs.gitlab.com/ee/user/project/pages/getting_started/pages_from_scratch.html#specify-a-stage-to-deploy image: ruby:2.7 workflow: rules: - if: '$CI_COMMIT_BRANCH' pages: stage: deploy script: - gem install bundler - bundle install - bundle exec jekyll build -d public artifacts: paths: - public rules: - if: '$CI_COMMIT_BRANCH == "main"'

2021年11月6日 · aoirint

Overleaf Community Edition

https://overleaf.com/ オンラインLaTeXエディタのShareLaTeXとOverleafは、Overleaf v2として2017年に統合され、OverleafはShareLaTeXのエディタを使うようになった。 https://www.sharelatex.com/ https://ja.overleaf.com/blog/sharelatex-joins-overleaf-2017-07-20 Overleaf(ShareLaTeX)は、overleaf.comで提供されているクラウド版と、セルフホスト可能なオープンソース版(Community Edition)が公開されている。 https://github.com/overleaf/overleaf この記事では、Overleaf Community Editionの公式Dockerイメージ(イメージ名はsharelatex/sharelatex)を使って、セルフホストする。 https://hub.docker.com/r/sharelatex/sharelatex/ クラウド版とCommunity Editionの機能の違いは、以下を参照。 https://www.overleaf.com/for/enterprises/features 使用できない機能 Git管理 Git管理やGitHub連携については、Community Editionには実装されていない(クラウド版のみ)。クラウド版のGit管理はクローズドソースなファイル履歴APIを利用して実装されており、これが技術的な課題になっているらしい。 https://github.com/overleaf/overleaf/issues/782 https://github.com/overleaf/overleaf/issues/10 Overleafに管理させないでよいのなら、ファイルは/var/lib/sharelatex/data/compiles/{project_id}-{user_id}に保存されるので、ここを監視して自動コミットするようなプログラムを使ってもいいかもしれない。 # 後者のIDがユーザIDであることの確認 docker-compose exec mongo mongo sharelatex --eval "db.users.find()" テンプレート クラウド版・Pro版限定機能。 https://github.com/overleaf/web/issues/203 https://github.com/overleaf/overleaf/issues/109 https://github.com/overleaf/overleaf/wiki/Server-Pro:-Setting-up-templates docker-compose.yml https://github.com/overleaf/overleaf/blob/a752bbefdd7ef3316aaf0c34302f08e6024aaadb/docker-compose.yml https://github.com/overleaf/overleaf/wiki/Configuring-Overleaf version: '3.9' services: sharelatex: image: sharelatex/sharelatex:3 restart: always depends_on: mongo: condition: service_healthy redis: condition: service_started ports: - "${SERVER_PORT}:80" volumes: - "${DATA_ROOT}:/var/lib/sharelatex" - "${TEXLIVE_ROOT}:/usr/local/texlive" environment: # https://github.com/overleaf/overleaf/wiki/Configuring-Overleaf SHARELATEX_APP_NAME: Overleaf Community Edition SHARELATEX_MONGO_URL: mongodb://mongo/sharelatex SHARELATEX_REDIS_HOST: redis REDIS_HOST: redis ENABLED_LINKED_FILE_TYPES: 'project_file,project_output_file' # Enables Thumbnail generation using ImageMagick ENABLE_CONVERSIONS: 'true' # Disables email confirmation requirement EMAIL_CONFIRMATION_DISABLED: 'true' # temporary fix for LuaLaTex compiles # see https://github.com/overleaf/overleaf/issues/695 TEXMFVAR: /var/lib/sharelatex/tmp/texmf-var # SHARELATEX_SITE_URL: http://sharelatex.mydomain.com # SHARELATEX_NAV_TITLE: Our ShareLaTeX Instance # SHARELATEX_HEADER_IMAGE_URL: http://somewhere.com/mylogo.png # SHARELATEX_ADMIN_EMAIL: [email protected] # SHARELATEX_LEFT_FOOTER: '[{"text": "Powered by <a href=\"https://www.sharelatex.com\">ShareLaTeX</a> 2016"},{"text": "Another page I want to link to can be found <a href=\"here\">here</a>"} ]' # SHARELATEX_RIGHT_FOOTER: '[{"text": "Hello I am on the Right"} ]' # SHARELATEX_EMAIL_FROM_ADDRESS: "[email protected]" # SHARELATEX_EMAIL_AWS_SES_ACCESS_KEY_ID: # SHARELATEX_EMAIL_AWS_SES_SECRET_KEY: # SHARELATEX_EMAIL_SMTP_HOST: smtp.mydomain.com # SHARELATEX_EMAIL_SMTP_PORT: 587 # SHARELATEX_EMAIL_SMTP_SECURE: false # SHARELATEX_EMAIL_SMTP_USER: # SHARELATEX_EMAIL_SMTP_PASS: # SHARELATEX_EMAIL_SMTP_TLS_REJECT_UNAUTH: true # SHARELATEX_EMAIL_SMTP_IGNORE_TLS: false # SHARELATEX_EMAIL_SMTP_NAME: '127.0.0.1' # SHARELATEX_EMAIL_SMTP_LOGGER: true # SHARELATEX_CUSTOM_EMAIL_FOOTER: "This system is run by department x" mongo: image: mongo:4.0 restart: always volumes: - "${MONGO_ROOT}:/data/db" healthcheck: test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet interval: 10s timeout: 10s retries: 5 redis: image: redis:5 restart: always volumes: - "${REDIS_ROOT}:/data" .env SERVER_PORT=127.0.0.1:8000 DATA_ROOT=./data/sharelatex TEXLIVE_ROOT=./data/texlive MONGO_ROOT=./data/mongo REDIS_ROOT=./data/redis 設定 https://github.com/overleaf/overleaf/wiki/Quick-Start-Guide TeXLiveのフルインストール TeXLiveのフルバージョンは巨大なため、Dockerイメージには最小構成のみが含まれている。 フルバージョンを使うには、インストールコマンドを実行する必要がある。 ...

2021年11月5日 · aoirint

cron

Linux上でプログラムの実行をスケジュールするためのプログラム。 独自の書式をもつcrontabファイルでスケジュールを設定する。 想定環境 Ubuntu 20.04 /etc/crontab SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin MAILTO= # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) crontabの時刻形式は独特で、複雑な設定を新しく書き起こすのは面倒くさい。 ...

2021年11月5日 · aoirint

PulseAudioでSSHサーバ側の音声をクライアント側で再生する

RDPと違い、VNCでは接続先の音声を送れないことがある。 接続先のデスクトップ(SSH・VNCサーバ)で再生された音声をSSH経由で送信し、SSH・VNCクライアント側で再生できるようにする。 https://raspberrypi.stackexchange.com/questions/8621/how-to-set-up-a-pulseaudio-sink https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#module-tunnel-sink-new module-tunnel-sink-newの実装はすでにmodule-tunnel-sinkで動くようになっている(pulseaudio 13.99.1) 音声を受け取る側(SSH・VNCクライアント、PulseAudioサーバ) 受信側 /etc/pulse/default.pa load-module module-native-protocol-tcp auth-ip-acl=127.0.0.0/8 load-module module-null-sink sink_name=DummyOutputRemote0 sink_properties=device.description="DummyOutputRemote0" load-module module-loopback source=DummyOutputRemote0.monitor source_dont_move=true DummyOutputRemote0に対して音声が送られてくる。 DummyOutputRemote0.monitorで入力として音声を拾うこともできる。 受信側 ~/.ssh/config Host your-server # VNC LocalForward 15900 localhost:5900 # PulseAudio RemoteForward 14713 localhost:4713 音声を送る側(SSH・VNCサーバ、PulseAudioクライアント・サーバ=中継用) 送信側 /etc/pulse/default.pa load-module module-tunnel-sink sink_name=Remote server=tcp:127.0.0.1:14713 sink=DummyOutputRemote0 PulseAudio再起動(pulseaudio -k)後、 接続先のデスクトップ上で音声出力デバイス(Sink)をDummyOutputRemote0に設定する。 DummyOutputRemote0が表示されない場合、どこか設定が間違っていると思われる。 電源メニューから音声デバイスを変更できるようにするGNOME拡張 https://extensions.gnome.org/extension/906/sound-output-device-chooser/

2021年10月9日 · aoirint

VOICEVOX Core 0.5.1をUbuntu + GPU + Pythonで使う(exampleを動かすまで)

※ VOICEVOX Coreにより生成した音声の利用にあたっては、VOICEVOX Coreの添付文書・利用規約を必ず確認し、従ってください。 https://github.com/Hiroshiba/voicevox_core Ubuntu 20.04.3 LTS (Focal Fossa) Python 3.9.6 (pyenv) NVIDIA-SMI 470.57.02 Driver Version: 470.57.02 CUDA Version: 11.4 cuDNN 8.2.4 VOICEVOXを使った音声合成について VOICEVOXの音声合成の仕組みについては、以下の記事が参考になるかもしれません。 VOICEVOXの音声合成エンジンの紹介 | Hiho’s Blog VOICEVOX Coreを効果的に使うには、ある程度音声合成の専門知識が必要になると思います。 簡易にTTSを利用したい場合には、VOICEVOX EngineのHTTP APIを使うことをおすすめします。 voicevox_engine API Document VOICEVOX Engineは、公式Dockerイメージが公開されています。 https://github.com/Hiroshiba/voicevox_engine https://hub.docker.com/r/hiroshiba/voicevox_engine VOICEVOX Coreのインタフェースについて Details わたしは音声合成については素人ですが、参考のため現在の理解を書いておきます。 VOICEVOX Coreでは、 「音素ごとの長さの推定 replace_phoneme_length / yukarin_s_forward」、 「モーラごとの音高の推定 replace_mora_pitch / yukarin_sa_forward」、 「音声波形の推定 synthesis / decode_forward」の3つの深層学習モデルを使って音声合成します。 OpenJTalkには、辞書に基づいてテキストを解析し、アクセント句・モーラ・アクセント位置・疑問文フラグなどの情報で構成された フルコンテキストラベルというデータに変換する機能があります。 フルコンテキストラベルの仕様は、以下のURLを開き、 HTS-2.3 > Speaker dependent training demo > Japanese > tar.bz2からHTS-demo_NIT-ATR503-M001.tar.bz2をダウンロード・展開し、 data/lab_format.pdfを見ると英語で記述されています。 ...

2021年9月11日 · aoirint

SendGrid

背景 Discourseをセットアップしようとしていたところ、いくつかのEmailプロバイダが紹介されていた。 https://github.com/discourse/discourse/blob/4e0a43f2117ac83bcf7e0f9bed65370f6c4c15bb/docs/INSTALL-email.md Mailgun SendGrid Mailjet Elastic Email Discourseはセットアップにメールサーバが要求される。以前のMastodonのセットアップでは、Gmailとアプリパスワードを使った簡易セットアップを使ったが、経験積みとセキュリティ上の懸念から、今回はメールサーバを用意することにした。 名前を聞いたことのあるSendGridを使う。業務上の利用を想定しているようだが、個人による利用として続行する。スケールする商用サービスでの利用ではないが、利用経験は技術選定の上で大事だと思う。その分、Abuseしないように考えなければならないが。 Freeプラン https://sendgrid.com/pricing/ 1日に100メールまではFreeプランが使用できる。自分しか使わない、またはごくごく小規模な利用では十分だろう。 登録 https://sendgrid.com/ Start For Freeから登録する。 細かい登録の過程は省略する。 ドメインの認証 ダッシュボードを開く。 https://app.sendgrid.com/ https://app.sendgrid.com/settings/sender_auth/domain/create ドメインプロバイダ(DNSホスト)の選択を求められる。 お名前.comはリストになかったので、Other Host (Not Listed)を選択し続行する。 あまり意味はないだろうが、Which DNS Hostにプロバイダ名を書いておく。 ドメイン名を入力する。 DNSサーバに登録すべき認証用のレコードが表示される(DNSサーバにクエリを送れば誰でも確認できるので公開情報)。 ドメインプロバイダ/DNSサーバでDNSレコードを設定する。 設定が反映されるまでしばらく待つ。 ドメインが認証された。 これでSendGridを使って、このドメインからのメールを送信できるようになった。 APIキーの発行(送信テスト) https://app.sendgrid.com/guide/integrate Web APIを選択する。 プログラミング言語/利用プログラムを選択する。チュートリアルの出し分けをするだけで、ここでの選択に特に意味はないと思われる(チュートリアルなしでAPIキーを発行もできる: https://app.sendgrid.com/settings/api_keys)。 とりあえずcURLでテストすることにして、APIキーを発行する。 下のcurlコマンドの送信JSONデータを編集する。 toを自分のメールアドレス、fromを認証したドメインのメールアドレスに変える。 特にfromのメールアカウントを作成する必要はなく、 [email protected]のように適当なアカウント名をつけたアドレスを使えばよい。 コマンドを適当な端末で実行し、メールが届けば成功。 SendGrid上でも送信成功を確認できる。

2021年9月11日 · aoirint

WebDAV in Docker

https://github.com/aoirint/webdav-docker https://hub.docker.com/r/aoirint/webdav 以下のリポジトリをforkし、Windows 10のExplorerクライアントに対応させたDockerイメージ。 Apache Web ServerのDAV機能でWebDAVサーバを立てる。 https://github.com/BytemarkHosting/docker-webdav docker-compose.yml version: '3.9' services: webdav: image: aoirint/webdav:2.4-20210822c restart: always ports: - '${DAV_PORT:-127.0.0.1:8000}:80' environment: LOCATION: /webdav ANONYMOUS_METHODS: OPTIONS AUTH_TYPE: Basic USERNAME: ${DAV_USERNAME:-user} PASSWORD: ${DAV_PASSWORD:-password} # SKIP_CHOWN: 1 volumes: - ./dav:/var/lib/dav 以上の設定で、dav://127.0.0.1:8000/webdavにWebDAVサーバが立つ。 データは./dav/dataに格納される。 Optional: /etc/fstab シンボリックリンクは動作しないので、bindfsを使う。 sudo apt install bindfs fuse-utils /src/path /dest/dav/data/path fuse.bindfs rw,user,uid=YOURUSER 0 0 https://www.netfort.gr.jp/~tosihisa/notebook/doku.php/bindfs

2021年8月22日 · aoirint

SmokePing in Docker

https://hub.docker.com/r/dperson/smokeping Copy Configs docker run --name smokeping --rm -d dperson/smokeping:latest docker cp smokeping:/etc/smokeping ./config docker rm -f smokeping docker-compose.yml version: '3.9' services: smokeping: image: dperson/smokeping:latest restart: always ports: - '{SMOKEPING_PORT:-127.0.0.1:8000}:80' volumes: - './config:/etc/smokeping:ro' - './data:/var/lib/smokeping' environment: TZ: Asia/Tokyo config/config.d/Targets *** Targets *** probe = FPing menu = Top title = Network Latency Grapher remark = Welcome to the SmokePing website of xxx Company. \ Here you will learn all about the latency of our network. + Home menu = Home title = Home Network #parents = owner:/Test/James location:/ ++ Router menu = Router (192.168.0.1) title = Router (192.168.0.1) host = 192.168.0.1 ++ MyServer menu = MyServer (192.168.0.2) title = MyServer (192.168.0.2) host = 192.168.0.2 #alerts = someloss

2021年8月22日 · aoirint