0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

私が使っているセルフホストアプリ

0
Posted at

はじめに

自宅サーバーをいじることはとても楽しいですが情報源が限られているため探すのに時間がかかるため一覧表形式で書きました。

Forgejo&Drone

まずそれぞれの機能についてです。ForgejoはGitHubの代替ソフトウェアでありGitHubと変わりなく使用ができます。そしてDroneはCI/CDのためのプラットフォームであり本番環境に自動的に切り替える時などに使うものです。今回この2つを連携することによって.drone.ymlを入れた状態でコミットするだけで実際にサイトに反映されたりできる様にしました。この連携はできると軽量でかつ高性能で便利ですが連携が初心者としてはとても難しく時間がかかるため参考として以下にymlのファイルをあげておきます。
そしてDRONE_RPC_SECRETなどはアクセスなどをするために統一しておきましょう

Client_id等について

ForgejoのURL/user/settings/applicationsにアクセスします。
OAuth2アプリケーションの管理.png
そしてそこにわかりやすいアプリケーション名とリダイレクトURI(DroneのURL/login)を入力して「アプリケーションの作成」のボタンを押すと
新しいOAuth2アプリケーションを作成しました。.png
この様にクライアントIDとクライアントシークレットが作られるためそれを以下のコードに入れましょう

Forgejo.yml

networks:
  forgejo:
    external: false
services:
  server:
    image: codeberg.org/forgejo/forgejo:13
    container_name: forgejo
    # DB情報
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - FORGEJO__database__DB_TYPE=postgres
      - FORGEJO__database__HOST=db:5432
      - FORGEJO__database__NAME=forgejo
      - FORGEJO__database__USER=forgejo
      - FORGEJO__database__PASSWD=forgejo
      - FORGEJO__server__ROOT_URL=実際のURL入力
    restart: always
    networks:
      - forgejo
    volumes:
      - ./forgejo:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000" #実際にアクセスするためのポート番号
      - "222:22"
    depends_on:
      - db
  db:
    image: postgres:14
    restart: always
    environment:
      - POSTGRES_USER=forgejo
      - POSTGRES_PASSWORD=forgejo
      - POSTGRES_DB=forgejo
    networks:
      - forgejo
    volumes:
      - ./postgres:/var/lib/postgresql/data

drone.yml

services:
  drone-server:
    image: drone/drone:2
    container_name: drone-drone-server-1
    ports:
      - 8090:80 #実際に使用するポート番号
    volumes:
      - ./data:/data
    restart: always
    environment:
      - DRONE_SERVER_PROTO=https
      - DRONE_SERVER_HOST=DroneのURL
      - DRONE_GITEA_SERVER=ForgejoのURL
      - DRONE_GITEA_CLIENT_ID=a199ea5f-0e0d-4cb5-a617-f311e3172c12
      - DRONE_GITEA_CLIENT_SECRET=gto_2h3hpzeftbu7ylr7xd7uw7lcieh7kz42rfai6d6vf7ty44qi33iq
      - DRONE_RPC_SECRET=Forgejo
      - DRONE_USER_CREATE=username:ユーザー名,admin:true #管理者権限の設定
    networks:
      - drone-network

networks:
  drone-network:
    name: drone-network # ネットワーク名を固定

drone_runner.yml

services:
  drone-runner:
    image: drone/drone-runner-docker:latest
    container_name: drone-runner
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    environment:
      - DRONE_RPC_HOST=drone-drone-server-1
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_SECRET=Forgejo
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_RUNNER_NETWORKS=drone-network
    networks:
      - drone-network

networks:
  drone-network:
    external: true

注意点

以下の様にTrustedを管理者権限を持っている方がONにしないと反応しません
スクリーンショット 2026-05-02 9.12.47.png
左下のアカウントマークの上にあるもので管理者権限を別の人につけることができます。

AdGuard Home&Nginx Proxy Manager

まずそれぞれの機能です。AdGuard HomeはDNS単位でのトラッカーや広告ブロック、DNS書き換えを行うものです。そしてNginx Proxy Managerはリバースプロキシ(インターネット上のクライアントからのリクエストを代理で受け取り、バックエンドのWebサーバーへ転送する仕組み)の機能を持っています。この2つを組み合わせることでdns.devlinkhub.netでAdGuard Homeにアクセスができる様にしたりできます。

AdGuardHome.yml

services:
  adguardhome:
    image: adguard/adguardhome:latest
    container_name: adguardhome
    restart: unless-stopped
    volumes:
      - adguard-work:/opt/adguardhome/work
      - adguard-conf:/opt/adguardhome/conf
    ports:
      # --- ここが最重要:mode: host を指定してIPを透過させる ---
      - target: 53
        published: 53
        protocol: udp
        mode: host
      - target: 53
        published: 53
        protocol: tcp
        mode: host
      # 管理画面などは Forgejo と被らないよう 4000:3000 のまま
      - "4000:3000/tcp"
      - "853:853/tcp"
      - "853:853/udp"

volumes:
  adguard-work:
  adguard-conf:

そして起動してセットアップを済ませると以下の様な画面になるのでまずフィルターのDNSブロック機能をクリックしてAdGuard DNS filterじゃない方をオフにしてください。オフにしないと広告が表示されなくなります。AdGuard DNS filterはトラッカー等をブロックしてくれるためこれは好みでON/OFFしてください。
そしてDNS書き換えはフィルターの中のDNS書き換えにありDNS書き換え情報を追加するから
書き換え先のドメインとipaddres(Tailscaleであればipv4)を入力します。そして保存します。
スクリーンショット 2026-05-02 9.14.43.png

NginxProxyManager.yml

version: "3"
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

これもセットアップを済ませたらプロキシホスト→プロキシホストを選択をクリックして書き換え先のドメイン、元々のipaddresとポートを入力します。
スクリーンショット 2026-05-02 9.23.16.png

両方のセットアップが完了したらいける様になっているはずです。

SSL化

先ほどの設定画面のSSLから以下の様に設定してDNSプロバイダを選択します。今回はcloudflareを使います。
スクリーンショット 2026-05-02 9.25.03.png

cloudflareのURL/api-tokensのサイトを開き
スクリーンショット 2026-05-02 9.28.47.png
以下の様に設定して作成するとAPI トークンが取得できるためこれを

Cloudflare API token

dns_cloudflare_api_token=ここ

に入力します。そして保存するとSSL化されます。

まとめ

様々なセルフホストアプリを入れてみましたがやはりセルフホストはとてもよい選択肢だと実感しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?