- 投稿日:
公式のドキュメントには書かれていない気がするがDockerだけあればセットアップ可能。WSL2でのセットアップが面倒なVargantは不要
本記事ではWSL2内のUbuntuの中でDockerとDocker Composeを使った構築法について記述する。Windows向けのDocker Desktopは使用しない
前提
- WSL2のUbuntuにVSCodeで接続して作業
- 起動してログイン、トゥート、設定と言った最低限の画面操作が可能な程度まで
確認環境
Env | ver |
---|---|
Mastodon | v3.5.3 |
Docker | 20.10.21, build baeda1f |
Docker Compose | v2.12.2 |
Ubuntu | 20.04.5 LTS |
WSL2 | 1.0.3.0 |
DevContainer | v0.266.1 |
VSCode | 1.73.0 |
手順
git clone https://github.com/mastodon/mastodon.git
- 最新版などバージョン指定が必要な場合は追加で
tag
をチェックアウトする
- 最新版などバージョン指定が必要な場合は追加で
- VSCodeでClone先を開く
- Reopen Containerする
- セットアップが走るので暫く待つ
foreman start
を流す- http://localhost:3000/ へアクセス
操作方法
ユーザーを作ったりしたい場合、Using the admin CLIが参考になる
一例としてユーザー作成は次の書式で行ける
./bin/tootctl accounts create foo --emaill foo@example.com --confirmed
トラブルシュート
DB接続エラーが出る
ActiveRecord::ConnectionNotEstablished at /
could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql//.s.PGSQL.5432"?
上記のエラーが出る場合、ビルドしたDockerイメージが壊れてるので以下のコマンドで全て消して作り直すとうまく行く
docker rm -f `docker ps -a -q`
docker rmi `docker images -q`
docker system prune
他のMastodonインスタンスが動かない
複数のMastodonインスタンスのDocker環境を同居させると多分コンフリクトする
- 投稿日:
Ubuntu22.04 LTSのターミナルのレンダリングが異常に重いのでバージョンを落として運用するためのメモ
Node.jsの開発環境だけ入れる
環境
環境 | Version |
---|---|
Windows 11 Pro | Build 22621.3155 |
Ubuntu | 20.04.6 LTS |
zsh | 5.8 (x86_64-ubuntu-linux-gnu) |
MariaDB | Ver 15.1 Distrib 10.3.38-MariaDB |
Docker | 20.10.17, build 100c701 |
Git | 2.42.0 |
WSL2の構成
- 管理者権限のPowerShellで以下を流す
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- OS再起動
- Linuxカーネル更新プログラム パッケージをインストールする
- Ubuntuを入れる
Ubuntu側のセットアップ
適当な開発環境をサクッと
# systemdの有効化
cat <<EOF | sudo tee /etc/wsl.conf
[boot]
command=service docker start; service nginx start; service mysql start;
[interop]
appendWindowsPath = false
[user]
default=ここにユーザー名
EOF
sudo apt update -y
sudo apt upgrade -y
sudo apt install -y \
zsh \
ssh \
net-tools \
traceroute \
unzip \
mariadb-server \
nginx \
git \
keychain
# chsh
sudo apt -y install zsh unzip traceroute
chsh -s $(which zsh)
# Docker
sudo apt remove docker docker-engine docker.io containerd runc
sudo apt update
# 依存関係のインストール
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# Docker公式のGPG鍵を追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# リポジトリをパッケージマネージャーに登録
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
# docker本体のインストール
sudo apt install -y dockerdocker-ce docker-ce-cli containerd.io docker-compose-plugin
# sudo緩和
sudo usermod -aG docker $USER
# WSLをリブート
# dot file設定
git clone https://github.com/Lycolia/my-dotfiles.git
rm -Rf my-dotfiles/.git/
mv my-dotfiles/.* .
rm -Rf my-dotfiles/
# Node.js @ nvm
export NVM_DIR="$HOME/.nvm" && (
git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR"
cd "$NVM_DIR"
git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
) && \. "$NVM_DIR/nvm.sh"
nvm install --lts
# Keychain設定
cat <<'EOF' | tee -a ~/.zshrc
Keychain
keychain -q --nogui $HOME/.ssh/id_ed25519
source $HOME/.keychain/hostname-sh
EOF
トラブルシューティング
上記手順に書いてないことをすると起きるが、一応付記しておく
<3>WSL (639) ERROR: CreateProcessEntryCommon:345: getpwnam(USER_NAME) failed 0
というエラーが出る
wsl.conf
の[user]
セクションでdefault=USER_NAME
が存在しないユーザーを指定していると出る
Dockerやnginxのサービスが起動しない
systemdが有効になっていると起動しないので/etc/wsl.conf
からsystemd=true
を消す
- 投稿日:
フルスクラッチで組むやつ
確認環境
Env | Ver |
---|---|
Ubuntu | 20.04.4 LTS |
nginx | 1.18.0 (Ubuntu) |
MariaDB | 15.1 Distrib 10.3.34-MariaDB |
grafana-server | Version 9.2.5 (commit: 042e4d216b, branch: HEAD) |
前提
- Windows側から
http://grafana.test/
としてアクセスする - DBにはMariaDBを使用
hostsの編集
Windows側のhosts
に以下を追記
127.0.0.1 grafana.test
各種環境のインストール
sudo apt update
sudo apt install -y nginx mariadb-server
sudo apt-get install -y apt-transport-https software-properties-common wget
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
nginxの設定
cat <<'EOF' | sudo tee /etc/nginx/conf.d/granafa.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream grafana {
server localhost:4000;
}
server {
listen 80;
server_name grafana.test;
access_log /var/log/nginx/grafana.access.log;
error_log /var/log/nginx/grafana.error.log;
location / {
proxy_set_header Host $http_host;
proxy_pass http://grafana;
}
location /api/live/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_pass http://grafana;
}
}
EOF
sudo service nginx start
MariaDBの設定
ユーザー作成
id
とpw
の部分は適当に変える
sudo service mysql start
sudo mysql
CREATE USER 'id'@'%' IDENTIFIED BY 'pw';
GRANT ALL PRIVILEGES ON *.* TO 'id'@'%' WITH GRANT OPTION;
quit
外部接続テスト
適当なRDBクライアントから繋げればOK
grafanaの設定
sudo nano /etc/grafana/grafana.ini
で適当にいじる
# The http port to use
http_port = 4000
# The public facing domain name used to access grafana from a browser
domain = grafana.test
sudo service grafana-server start
- http://grafana.test/ へアクセス
- IDPW共に
admin
が初期
- IDPW共に
DBの読み込み
- MariaDBに適当なDBとテーブルを作る
- Grafanaにログインする
- サイドバーから
Configuration
-> Data sources - DBの情報を入れて接続
- 後はよしなにやる
- 投稿日:
配列をループして処理したい時に使える技。複数行ある場合も想定
一行文字列の配列
スペースで区切った文字列を()
で括っておくとfor in
として使える
取り出した要素は${foo}
で拾えます。配列全体は${bar[@]}
で取れる。以下のようにダブルクォートで囲っていると機能しなくなるので注意
("AAA BBB CCC")
#!/bin/bash
textList=(YWFhYWEK LWFhYQogICAtIOOBguOBguOBguOBgg== LWFhYQogICAtIOOBguOBguOBguOBgg==)
for text in "${textList[@]}"
do
echo ${text}
done
出力結果
YWFhYWEK
LWFhYQogICAtIOOBguOBguOBguOBgg==
LWFhYQogICAtIOOBguOBguOBguOBgg==
複数行文字列の配列
Base64辺りでエンコードしておくと扱いが楽
#!/bin/bash
textList=(YWFhYWEK LWFhYQogICAtIOOBguOBguOBguOBgg== LWFhYQogICAtIOOBguOBguOBguOBgg==)
for text in "${textList[@]}"
do
pure=$(echo ${text} | base64 -d)
echo "$pure"
done
出力結果
aaaaa
-aaa
- ああああ
-aaa
- ああああ
ls
の結果を配列にする
#!/bin/bash
# .と..は除外
# 最後にxargsを入れておくと改行が飛ぶ
results=($(ls -1a | grep -vP "^\.+$" | xargs))
for item in "${results[@]}"
do
echo "$item";
done
スペース区切りの文字を配列にする
IFS変数に区切り文字を設定することで実現する。IFSとはInternal Field Separatorのこと
#!/bin/bash
IFS=$'\n'
text=$(cat <<'EOF'
aa bb
a b c
EOF
)
textList=($(echo "$text"))
for text in "${textList[@]}"
do
echo "${text}"
done
出力結果
aa bb
a b c
- 投稿日:
環境
Env | Ver |
---|---|
Windows 11 Pro | Build 22621.674 |
Ubuntu | 22.04.01 |
ベースのセットアップ
wsl --update
- Microsoft StoreからUbuntu 22.04.01 LTSをインストール
- GUIのウィザードがコケたらやり直す
/etc/wsl.conf
に起動設定を追加- リファレンス:learn.microsoft.com
[boot]
systemd=true
[user]
default=<ユーザー名>
wsl --shutdown
- Ubuntuのコンソールを開きデフォルトユーザーが設定通りなのを確認
- アップデート
sudo apt update
sudo apt upgrade
開発環境のセットアップ
- 以下を流す
sudo apt install -y \
zsh \
ssh \
net-tools \
git \
unzip \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# Docker公式のGPG鍵を追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# リポジトリをパッケージマネージャーに登録
echo
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# docker本体のインストール
sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-compose-plugin
# 一般ユーザーで docker を利用可能にする
sudo usermod -aG docker $USER
# Node.js
curl https://get.volta.sh | bash
# zsh切り替え
chsh -s $(which zsh)
- ターミナル再起動
# zsh設定取り込み
git clone https://github.com/Lycolia/my-zsh-conf.git
rm -Rf my-zsh-conf/.git/
mv my-zsh-conf/.* .
rm -Rf my-zsh-conf/
# install Node.js
volta install node@lts
- ターミナル再起動してzsh設定の反映を確認