カテゴリー: サーバ管理

  • PuTTYでCloudflare Tunnelを使って自宅のSSHサーバに接続する

    Cloudflare Tunnelトンネルを使うとプライベートIPアドレスしか持たないような環境でも外部からアクセスが可能になります。

    HTTP/HTTPSの場合は簡単で、Cloudflaredでドメインの設定(ネームサーバー等。たくさん記事があるので省略)を終えたら、Cloudflaredのダッシュボードから次を開きます。

    • Access
      • Tunnels
        • Create a tunnel

    これで割り当てたドメイン名でアクセスできるようになります。
    HTTPSも自動で設定されているのでとても楽です。

    SSHの場合はもうひと手間必要です。

    • [Connect with SSH through Cloudflare Tunnel]()

    詳しくは上記の記事の「Connect to SSH server with cloudflared access」の通りですが、クライアント側にもcloudflaredを入れる必要があります。

    WindowsでPuTTYを使っている場合は、次を参考にしました。

    user7633
    ’22 年 2月

    Simply in putty, go to proxy settings, select local, and configure the commandline to be

    cloudflared.exe access ssh –hostname %host

    (no \n at the end) and save the session as normal. works for me

    まずWindows用のfloudflaredをインストールします。

    なぜか64bitインストーラーが起動しても進まないので、手っ取り早くインストールするならコマンドプロンプトで次のようにする。

    > winget install --id Cloudflare.cloudflared
    見つかりました cloudflared [Cloudflare.cloudflared] バージョン 2023.10.0
    このアプリケーションは所有者からライセンス供与されます。
    Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
    ダウンロード中 https://github.com/cloudflare/cloudflared/releases/download/2023.10.0/cloudflared-windows-amd64.msi
      ██████████████████████████████  17.1 MB / 17.1 MB
    インストーラーハッシュが正常に検証されました
    パッケージのインストールを開始しています...
    インストールが完了しました

    AMD64版なのになぜかインストールされたのは C:\Program Files (x86)\cloudflared\cloudflared.exe です。
    このパスを残しておきます。

    PuTTYの接続画面で次の項目を設定します。

    • Connection

      • Proxy
    • Proxy type: Local(run a subprogram to connect)

    • Command to send to proxy(for some types): "cloudflared.exeへのパス" access ssh –hostname %host`

    PuTTYはホスト名だけCloudflare Tunnelで設定したものにして、他の設定はローカルで接続するのと同等でOK
    公開鍵認証で接続できました。

  • docker-compose で建てた CodiMD(HackMD) を 1.3.1 から 2.0.1 に更新する

    docker-compose で建てた CodiMD(HackMD) を 1.3.1 から 2.0.1 に更新する

    以前の記事の最新版です。

    更新時に注意するバージョンについて次に挙げるページで言及されていますが、1.1.0 以降は特に表立った手順は必要ないようです。

    前回の記事の後追いなので、詳細は省略して残します。

    手順

    PosgreSQL データのバックアップ

    不要ですが念のため。

    $ cd docker-hackmd
    $ sudo docker-compose exec database pg_dump hackmd -U hackmd  > backup.sql

    コンテナ削除

    $ sudo docker-compose down
    Stopping docker-hackmd_app_1      ... done
    Stopping docker-hackmd_database_1 ... done
    Removing docker-hackmd_app_1      ... done
    Removing docker-hackmd_database_1 ... done
    Removing network docker-hackmd_backend

    docker-compose.yml を変更

    イメージの指定を 2.0.1 に変更します。
    app: 下の image: hackmdio/hackmd:1.2.0image: hackmdio/hackmd:2.0.1 に書き換えます。

    新しいイメージの取得

    $ sudo docker-compose pull
    Pulling database ... done
    Pulling app      ... done

    コンテナ作成

    $ sudo docker-compose up -d
    Creating network "docker-hackmd_backend" with the default driver
    Creating docker-hackmd_database_1 ... done
    Creating docker-hackmd_app_1      ... done

    失敗

    一見うまくいっているように見えていますが、appのコンテナが落ちています。

    $ sudo docker-compose ps
              Name                        Command                State       Ports
    --------------------------------------------------------------------------------
    docker-hackmd_app_1        /home/hackmd/app/docker-en      Restarting
                               ...
    docker-hackmd_database_1   docker-entrypoint.sh postgres   Up           5432/tcp

    原因調査

    $ sudo docker logs docker-hackmd_app_1
    Error: value of env: CMD_DB_URL is empty!Error: value of env: CMD_DB_URL is empty!Error: value of env: CMD_DB_URL is empty!Error: value of env: CMD_DB_URL is empty!Error: value of env: CMD_DB_URL is empty!Error: value of env: CMD_DB_URL is empty!Error: value of env: CMD_DB_URL is empty!Error: value of env: CMD_DB_URL is empty!Error: value of env: CMD_DB_URL is empty!Error: value of env: CMD_DB_URL is empty!

    環境変数が一つだけ変更されていました。
    HMD_DB_URLCMD_DB_URL に変更すればOKです。

    コンテナ再生成

    $ sudo docker-compose down
    Stopping docker-hackmd_app_1      ... done
    Stopping docker-hackmd_database_1 ... done
    Removing docker-hackmd_app_1      ... done
    Removing docker-hackmd_database_1 ... done
    Removing network docker-hackmd_backend
    $ sudo docker-compose up -d
    Creating network "docker-hackmd_backend" with the default driver
    Creating docker-hackmd_database_1 ... done
    Creating docker-hackmd_app_1      ... done
    
    $ sudo docker-compose ps
             Name                   Command           State           Ports
    --------------------------------------------------------------------------------
    docker-hackmd_app_1      /home/hackmd/app/docke   Up      0.0.0.0:3000->3000/tcp
                             r-en ...
    docker-                  docker-entrypoint.sh     Up      5432/tcp
    hackmd_database_1        postgres

    これで元通り問題なく使えました。

  • さくらのレンタルサーバーで Redis 5.0.8 を使う

    Redis 3.2.x の記事はいくつもありますが、現在の Stable である 5.0.8 に関しての記事がなかったので記録します。

    セットアップ手順

    ソースのダウンロードと展開

    % http://download.redis.io/releases/redis-5.0.8.tar.gz
    % tar xvzf redis-5.0.8.tar.gz

    ビルド前準備

    Redis には configure がありません。
    src/Makefile のインストールパスを直接編集します。

    PREFIX?=/usr/localPREFIX?=$(HOME)/usr/local とします。

    ### 省略 ###
    PREFIX?=$(HOME)/usr/local
    ### 省略 ###

    ビルドとインストール

    % gmake
    % gmake install

    Warning はいくつも出ますが、Error は発生していません。

    動作確認

    % $HOME/usr/local/bin/redis-server -v
    Redis server v=5.0.8 sha=00000000:0 malloc=libc bits=64 build=7ae0b2bf8de7e59e

    起動手順

    原始的な方法ですが、nohup とバックグラウンドプロセスを組み合わせて起動します。

    % nohup $HOME/usr/local/bin/redis-server < /dev/null >& /dev/null &

    動作確認

    redis-cli を実行します。

    % $HOME/usr/local/bin/redis-cli
    127.0.0.1:6379> exit
    %

    プロンプトが表示されれば成功です。

    参考

  • さくらのレンタルサーバーで Python 3.6.10 をインストール

    さくらのレンタルサーバーで Python 3.6.10 をインストール

    さくらインターネットのレンタルサーバーは標準で Python 2 が使えます。
    しかし、Python 3 への移行が進んだ現在では、できれば Python 3 系列を使いたいです。

    既に先人が残した記事が多くありますが、pyenv を使った記事が多いため、やや煩雑に感じます。
    純粋に Python 3 を使うための手順を残します。

    必要なもの

    • レンタルサーバーのスタンダードプラン以上
      • SSH で作業するので必須です

    手順

    SSH のログイン

    さくらインターネットの説明を確認して SSH でログインしてください。

    Python 3.6.10 のダウンロードと展開

    上記リリースページからソースコード(Gzipped source tarball)を取得します。

    % wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz
    % tar xvzf https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz

    ビルドとインストール

    不要かもしれませんが、インストール先を用意しておきます。

    % mkdir -p $HOME/usr/local/python

    インストール先を指定して configure, make します。

    % ./configure CPPFLAGS="-I/usr/local/ssl/include" LDFLAGS="-L/usr/local/ssl/lib" --prefix=$HOME/usr/local/python
    % make
    % make install

    動作確認

    % $HOME/usr/local/python/bin/python3 -V
    Python 3.6.10
    % $HOME/usr/local/python/bin/pip3 -V
    pip 18.1 from /home/username/usr/local/python/lib/python3.6/site-packages/pip (python 3.6)

    試しに pip でパッケージをインストールして、python で import できるか試してみます。

    % $HOME/usr/local/python/bin/pip3 install bottle
    Collecting bottle
      Downloading https://files.pythonhosted.org/packages/e9/39/2bf3a1fd963e749cdbe5036a184eda8c37d8af25d1297d94b8b7aeec17c4/bottle-0.12.18-py3-none-any.whl (89kB)
        100% |################################| 92kB 8.8MB/s
    Installing collected packages: bottle
    Successfully installed bottle-0.12.18
    You are using pip version 18.1, however version 20.1b1 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    % $HOME/usr/local/python/bin/python3
    Python 3.6.10 (default, Apr 27 2020, 12:00:08)
    [GCC 7.4.0] on freebsd11
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import bottle

    問題ありませんね。

    参考

  • Raspbian (Debian buster) のタイムゾーンを JST にする

    現在のタイムゾーンを確認する

    timedatectl を使います。root権限は不要です。

    pi@raspberrypi:~ $ timedatectl
                   Local time: 水 2020-04-22 02:15:09 BST
               Universal time: 水 2020-04-22 01:15:09 UTC
                     RTC time: n/a
                    Time zone: Europe/London (BST, +0100)
    System clock synchronized: yes
                  NTP service: active
              RTC in local TZ: no

    有効なタイムゾーンを確認する

    timedatectl list-timezone を実行します。

    pi@raspberrypi:~ $ timedatectl list-timezones
    Africa/Abidjan
    Africa/Accra
    Africa/Addis_Ababa
    Africa/Algiers
    Africa/Asmara
    Africa/Bamako
    (省略)

    数が多いので Asia/Tokyo があるかを確認するにはパイプで grep します。

    pi@raspberrypi:~ $ timedatectl list-timezones | grep Tokyo
    Asia/Tokyo

    タイムゾーンを変更する

    Asia/Tokyo に変更するには timedatectl set-timezone Asia/Tokyo を実行します。
    root権限が必要です。

    pi@raspberrypi:~ $ sudo timedatectl set-timezone Asia/Tokyo

    トラブルシュート

    ==== AUTHENTICATING FOR org.freedesktop.timedate1.set-timezone === と表示された

    timedatectl set-timezone を一般ユーザで実行すると表示されます。
    root権限を持つユーザか、sudoで実行してください。

    システムのタイムゾーンを設定するには認証が必要です。 と表示された

    timedatectl set-timezone を一般ユーザで実行すると表示されます。
    root権限を持つユーザか、sudoで実行してください。

    Authentication is required to set the system timezone. と表示された

    timedatectl set-timezone を一般ユーザで実行すると表示されます。
    root権限を持つユーザか、sudoで実行してください。

    一般ユーザで timedatectl set-timezone を実行しても何も表示されない

    変更前と変更後のタイムゾーンが同一だと何も表示されません。

  • Redmine の初期設定と簡単な使い方

    Redmine の初期設定と簡単な使い方

    管理者でログイン

    インストール直後は次のように表示されます。
    右上からログインできます。

    初期管理者は次の通りです。

    • ログインID: admin
    • パスワード: admin

    ログインすると即パスワードの変更を求められるので変更してください。

    パスワードを変更すると管理者の登録情報編集画面になります。
    タイムゾーンを GMT+09:00 にして、他は適宜変更します。
    編集し終えたら「保存」を押します。

    最低限必要な設定

    管理者(admin)でログインした状態で、左上の「管理」を開きます。

    ロール、トラッカー、チケットのステータス、ワークフローがまだ設定されていません。
    デフォルト設定のロードを強くお勧めします。ロードした後、それを修正することができます。

    このような内容が表示されているはずなので「Japanese(日本語)」を選択して「デフォルト設定をロード」を開きます。

    「デフォルト設定をロードしました。」と表示されるのを確認します。

    プロジェクトの作成

    画面左上の「プロジェクト」を開きます。

    「新しいプロジェクト」を開きます。
    「名称」と「識別子」を入力し、その他は適宜入力してください。
    「モジュール」は最初は最低限で試すと良いと思います。

    「作成」を開くと「作成しました。」と表示されます。

    チケットの登録

    プロジェクトを開いた状態で「チケット」を開きます。

    「新しいチケット」を開きます。

    「題名」を入力して「作成」を開きます。
    「チケット #1 が作成されました。」と表示されたら完了です。

    用語の簡単な説明

    タスク

    調査、作成、開発といった具体的な作業のこと。

    チケット

    タスクの進捗を管理するために使う。
    ここに現在の状況や進捗を記入していく形になる。

    トラッカー

    チケットの種類。
    デフォルト設定では「バグ」「機能」「サポート」が登録されているが、これはソフトウェアの開発に関連する分類。

    ステータス

    チケットの状況。
    デフォルト設定では「新規」「進行中」「解決」「フィードバック」「終了」「却下」が用意されている。

  • Let’s encrypt 証明書を使って Nginx で TLS(SSL) を有効化する

    /etc/nginx/sites-available/ の設定に次の3行を追加して reload すれば完了。

    kuratsuki.net の部分を適宜変更してください。

    server {
        # .....
        listen 443 ssl;
        ssl_certificate     /etc/letsencrypt/live/kuratsuki.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/kuratsuki.net/privkey.pem;
        # .....
    }
    
    $ sudo systemctl reload nginx