<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on GMAEDA'S SITE</title><link>https://portfolio.gmaeda.net/</link><description>Recent content in Home on GMAEDA'S SITE</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 16 Jul 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://portfolio.gmaeda.net/index.xml" rel="self" type="application/rss+xml"/><item><title>Linux</title><link>https://portfolio.gmaeda.net/blog/skill-linux/</link><pubDate>Wed, 16 Jul 2025 00:00:00 +0000</pubDate><guid>https://portfolio.gmaeda.net/blog/skill-linux/</guid><description>&lt;h2 id="osの経験"&gt;OSの経験&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;サーバー
&lt;ul&gt;
&lt;li&gt;Debian&lt;/li&gt;
&lt;li&gt;CentOS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ワークステーション
&lt;ul&gt;
&lt;li&gt;Fedora&lt;/li&gt;
&lt;li&gt;Void Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ワークステーションの使用環境"&gt;ワークステーションの使用環境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;editor: neovim, lazyvim&lt;/li&gt;
&lt;li&gt;shell: zsh+zgenom&lt;/li&gt;
&lt;li&gt;terminal: kitty, xfce4-terminal, st&lt;/li&gt;
&lt;li&gt;DE: Xfce4&lt;/li&gt;
&lt;li&gt;WM: dwm&lt;/li&gt;
&lt;li&gt;package: xbps, nix, pip&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="経験"&gt;経験&lt;/h2&gt;
&lt;p&gt;現在は､サーバーはDebian､ワークステーションとしてVoid Linuxを使用しています｡
GUI環境で利用していますが､TUI､CLI環境も多く利用しています｡&lt;/p&gt;
&lt;p&gt;テキスト全般の編集には､vimを用いているため､操作は慣れています｡&lt;/p&gt;
&lt;p&gt;Linuxを利用しているため､エラー対応には慣れています｡
最近は､Perplexity AIを用いてエラー対応をすることも増えました｡&lt;/p&gt;</description></item><item><title>句動詞の検索ウェブアプリ</title><link>https://portfolio.gmaeda.net/blog/phrasal-verb-search-webapp/</link><pubDate>Wed, 16 Jul 2025 00:00:00 +0000</pubDate><guid>https://portfolio.gmaeda.net/blog/phrasal-verb-search-webapp/</guid><description>&lt;p&gt;大学在学中に､句動詞の検索ウェブアプリを作成しました｡&lt;/p&gt;
&lt;h2 id="概要"&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;データを用意: オンラインの辞書で句動詞を検索した結果を､PythonのBeautiful Soupで､スクレイピング&lt;/li&gt;
&lt;li&gt;検索方法: JavaScriptで､動的にsuggestされるように設計｡&lt;/li&gt;
&lt;li&gt;デザイン: HTML/CSSで､見た目を整形&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="成果物"&gt;成果物&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ソースコードは残っていません｡&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>宅内サーバーの構築･運用</title><link>https://portfolio.gmaeda.net/blog/deploying-server-on-home-router/</link><pubDate>Wed, 16 Jul 2025 00:00:00 +0000</pubDate><guid>https://portfolio.gmaeda.net/blog/deploying-server-on-home-router/</guid><description>&lt;p&gt;現在VPSでホストしているYunohostサーバーは､以前は宅内のPCで運用していました｡
そのため､ホストしていたアプリはほぼ同じですが､ネットワークのルーティングが違っていました｡&lt;/p&gt;
&lt;h2 id="概要"&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ネットワーク: WireGuardでVPSと自宅サーバーを接続し､iptablesでルーティングの設定を行う
&lt;ul&gt;
&lt;li&gt;宅内サーバー &amp;lt;- VPS &amp;lt;- Client&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="宅内サーバーを選択した理由"&gt;宅内サーバーを選択した理由&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;VPSをネットワークの単なる中継地点として利用することで､サーバーコストを抑えられるため&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ネットワーク設定の試行錯誤"&gt;ネットワーク設定の試行錯誤&lt;/h2&gt;
&lt;p&gt;利用しているインターネットの通信回線がCGNATのために､グローバルIPアドレスを取得できませんでした｡
そのため､導入が比較的簡単なVPNサービスのポートフォワード機能を使用しましたが､取得できるポートが少ないために拡張性がありませんでした｡&lt;/p&gt;
&lt;p&gt;そこで､VPSを契約し､VPS経由で宅内サーバーにアクセスできるようにしました｡
当初は､sshuttleを用いて､sshのリモートフォワーディングでサーバー公開していました｡
しかし､通信の安定性を求め､WireGuardでの接続をすることにしました｡&lt;/p&gt;
&lt;h2 id="設定"&gt;設定&lt;/h2&gt;
&lt;p&gt;設定については､Yunohostコミュニティーのフォーラムを参考にしました｡&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://forum.yunohost.org/t/homemade-wireguard-vpn-on-a-vps-server/15662"&gt;VPSを用いたNATトラバーサル&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://forum.yunohost.org/t/tutorial-how-to-make-matrix-synapses-coturn-audio-video-calls-work-behind-a-vpn/17597/3#my-wg-nat-settings-are-1"&gt;matrix-synapseやcoturnのNATトラバーサル&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記の投稿通り､wg0.confを設定し､外部のPostUp/PostDownスクリプトを実行するようにしました｡
スクリプトの内容は以下の通りです｡&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/gmaeda-code/yh-over-cgnat"&gt;PostUp/PostDownスクリプト&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="宅内サーバーをやめた理由"&gt;宅内サーバーをやめた理由&lt;/h2&gt;
&lt;p&gt;現在はVPSに直接Yunohostサーバーを設置して運用しています｡
宅内サーバーをやめた理由は､配線を変えたい時や､引っ越しのときに､PCの電源を気軽に落とせないことが不便だったからです｡&lt;/p&gt;</description></item><item><title>自作ブログサイトの構築と公開</title><link>https://portfolio.gmaeda.net/blog/running-a-blog/</link><pubDate>Wed, 16 Jul 2025 00:00:00 +0000</pubDate><guid>https://portfolio.gmaeda.net/blog/running-a-blog/</guid><description>&lt;p&gt;CookieHookeyというブログサイトです｡&lt;/p&gt;
&lt;h2 id="概要"&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;LinuxベースのYunoHostサーバー上に静的Webサイトの公開環境を構築｡インフラからWebコンテンツまで一貫して管理&lt;/li&gt;
&lt;li&gt;Hugoを使ってサイト全体をマークダウンから自動生成&lt;/li&gt;
&lt;li&gt;GitHubへのpushをトリガーにCI/CD（GitHub Actions）がビルド→即デプロイを自動化&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="技術スタック"&gt;技術スタック&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;サーバー: Debian(VPS)&lt;/li&gt;
&lt;li&gt;ブログ生成: Hugo（静的サイトジェネレーター）&lt;/li&gt;
&lt;li&gt;ドメイン: &lt;code&gt;cookiehookey.redirectme.net&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;CI/CD: Hugoサイト生成→自動デプロイ(GitHub + GitHub Action)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="構築運用の工夫"&gt;構築・運用の工夫&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CI/CDで完全自動化：編集作業→サーバー公開が一切手作業不要&lt;/li&gt;
&lt;li&gt;Hugoによる高速表示：Hugoによる静的生成のためページ表示が高速&lt;/li&gt;
&lt;li&gt;自前サーバーでの運用：クラウド依存しない独自ドメイン/高拡張性&lt;/li&gt;
&lt;li&gt;セキュリティ: 認証情報をCI/CDのSecrets機能で安全な認証管理､chrootによる限定的アクセス権限&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="成果物"&gt;成果物&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;公開URL: &lt;a href="https://cookiehookey.redirectme.net/blog/"&gt;https://cookiehookey.redirectme.net/blog/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;サースコード: &lt;a href="https://github.com/gmaeda-code/hugo-cookiehookey"&gt;https://github.com/gmaeda-code/hugo-cookiehookey&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>サーバーの構築･運用</title><link>https://portfolio.gmaeda.net/blog/building-a-server/</link><pubDate>Fri, 11 Jul 2025 00:00:00 +0000</pubDate><guid>https://portfolio.gmaeda.net/blog/building-a-server/</guid><description>&lt;h2 id="サーバーの構築目的"&gt;サーバーの構築目的&lt;/h2&gt;
&lt;p&gt;サーバーを構築した主な目的は以下です｡&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;blogの一般公開&lt;/li&gt;
&lt;li&gt;webサービスのクローズド公開(Matrix Synapse､Elementなど)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="yunohostを選んだ理由"&gt;Yunohostを選んだ理由&lt;/h2&gt;
&lt;p&gt;アプリごとに個別に運用するのではなく､複数のサービスを一元的にインストール･管理したかったため､&lt;a href="https://github.com/awesome-selfhosted/awesome-selfhosted?tab=readme-ov-file#self-hosting-solutions"&gt;Self-hosting Solutions&lt;/a&gt;と言われる仕組みを用いることにしました｡&lt;/p&gt;
&lt;p&gt;Self-hosting Solutionsの中でも､以下を基準に見ていった結果､Yunohostを利用することにしました｡&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Communityの活発さ&lt;/li&gt;
&lt;li&gt;Documentationの充実&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="サーバーのスペック構成"&gt;サーバーのスペック･構成&lt;/h2&gt;
&lt;p&gt;できるだけ費用を抑えるために､&lt;a href="https://lowendtalk.com/"&gt;lowendtalk&lt;/a&gt;で見つけた&lt;a href="https://www.racknerd.com/"&gt;VPS&lt;/a&gt;にホストしました｡
Matrix Synapseでは､VoIPも使う予定だったので､ロケーションは低遅延の場所にしました｡&lt;/p&gt;
&lt;p&gt;&lt;img src="https://portfolio.gmaeda.net/img/neofetch.png" alt="neofetch"&gt;&lt;/p&gt;
&lt;h2 id="自動化バックアップやセキュリティ"&gt;自動化､バックアップやセキュリティ&lt;/h2&gt;
&lt;h3 id="自動化の設定"&gt;自動化の設定&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root@racknerd-1eacad:~# crontab -l
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;50&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt; * * &lt;span style="color:#ae81ff"&gt;6&lt;/span&gt; find /home/yunohost.backup/archives/ -mtime +8 -exec rm &lt;span style="color:#f92672"&gt;{}&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt; * * &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; yunohost tools update 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;15&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt; * * &lt;span style="color:#ae81ff"&gt;6&lt;/span&gt; yunohost tools upgrade system &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; yunohost tools upgrade apps
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;6&lt;/span&gt; * * &lt;span style="color:#ae81ff"&gt;6&lt;/span&gt; /usr/bin/yunohost backup create
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="バックアップ"&gt;バックアップ&lt;/h3&gt;
&lt;p&gt;cronで､yunohostコマンドを用いて､バックアップを自動的に作成しています｡
その後､ワークステーションで､rsyncを実行しローカルのストレージに保存しています｡&lt;/p&gt;
&lt;h3 id="セキュリティ"&gt;セキュリティ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ファイヤーウォール
&lt;ul&gt;
&lt;li&gt;yunohostデフォルトのファイヤーウォールで管理&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSH
&lt;ul&gt;
&lt;li&gt;ポートを変更&lt;/li&gt;
&lt;li&gt;パスワードによるログインを無効化&lt;/li&gt;
&lt;li&gt;ルートのログイン無効化&lt;/li&gt;
&lt;li&gt;fail2banで対策&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="公開中のサービスのリンクや画像"&gt;公開中のサービスのリンクや画像&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://uptime-kuma.kamayahouse.nohost.me/status/mg-service"&gt;サーバーの稼働状況&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="認証が必要なページ"&gt;認証が必要なページ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kamayahouse.nohost.me/yunohost/sso/"&gt;ログインページ&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;すべてのサービスは1つのパスワードで利用可能(SSO)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ログイン後の画面
&lt;ul&gt;
&lt;li&gt;Nextcloud: ファイルストレージや､カレンダー､連絡先管理に使用
&lt;img src="https://portfolio.gmaeda.net/img/nextcloud.png" alt="nextcloud"&gt;&lt;/li&gt;
&lt;li&gt;Element: メッセージのやり取り､通話のために利用
&lt;img src="https://portfolio.gmaeda.net/img/element.png" alt="element"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="公開ページ"&gt;公開ページ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Documentation
&lt;ul&gt;
&lt;li&gt;elementのドキュメントは現在非公開&lt;/li&gt;
&lt;li&gt;&lt;a href="https://documentation.kamayahouse.nohost.me/guide/index.html"&gt;pleroma&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Portfolio(このホームページ)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cookiehookey.redirectme.net/"&gt;ブログ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="yunohostインストール運用での苦労した点"&gt;Yunohostインストール･運用での苦労した点&lt;/h2&gt;
&lt;h3 id="ドキュメンテーションの作成"&gt;ドキュメンテーションの作成&lt;/h3&gt;
&lt;p&gt;セルフホストしたサーバーを使う必要性や､使用方法を説明したドキュメンテーションを作成しました｡
海外の情報しかなかったので､翻訳しつつ､ステップごとの画面遷移をクライアント(デスクトップ､iOS､Android)に合わせて準備することが大変でした｡&lt;/p&gt;</description></item><item><title>About</title><link>https://portfolio.gmaeda.net/about/</link><pubDate>Sun, 01 Jan 2023 08:00:00 -0700</pubDate><guid>https://portfolio.gmaeda.net/about/</guid><description>&lt;p&gt;This is an example page!&lt;/p&gt;</description></item></channel></rss>