雷って幻想的だよね?

宗教:C#、ラノベ好きの戯言です。※Google Analytics 埋め込みを利用しています。

Githubでpullを行う際にログインやパスワード入力を必要としない

ついでに git も ReadOnly となるので、安全と思われる

GithubのDeploy keysを利用する

参考:
GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita


ssh-keygenを行う際は別名で作成するようにすること


ファイル名を指定してSSHキーを作成

cd .ssh
ssh-keygen -t rsa -b 4096 -C "メールアドレス" -f id_github_rsa

.sshフォルダに以下のファイルを作成する
ファイル名:config
※IdentityFile は "~/"と".ssh"の間にスペースはありません。(あると思って勘違いしてた・・・)

Host github github.com
HostName github.com
IdentityFile ~/.ssh/id_github_rsa
User git


接続確認

ssh -T github

以下のを参考にした場合は、git cloneよりやり直す必要がある。
さくらVPSでCentOS7を利用してSSL付き 個人運用環境構築 - 雷って幻想的だよね?


OKであれば、shで実行できるようにしておく
ファイル名:rebuild_develop.sh

echo git pull ...

cd ~/develop/MyHP
git checkout develop
git pull

echo git pull end !

echo docker-compose buid ...
cd ~/develop
docker-compose build --no-cache

echo docker-compose up ...
docker-compose up -d --force-recreate

echo finish !

EOS

さくらVPSでCentOS7を利用してSSL付き 個人運用環境構築

さくらVPSでCentOS7を利用してSSL付き 個人運用環境構築

自分と同じ事をしたい人がいたらご参考にしてください。

目的・内容:

VPSで自分のドメイン1つで、masterブランチの公開と、developブランチの公開を行う。
・作業はWindowsTeratermを想定しています。
・Dockerfile,docker-compose,SSL(letsencrypt,独自ドメイン),nginxを利用しています。
・セキュリティはここに書いてあるのがすべてではないのでご自身で最適な設定を行ってください。
・2019/07/21の実施で問題なく表示出来ているのを確認済み
・基本的にBlazorの公開を想定していますが、Dockerfileを書ける物であれば何でも出来ると思います。

以下、独自ドメインexample.comとする。
また、wwwと同じようにエントリ名として「develop」を登録して更新されていることを前提としています。

公開サイト構成:

example.com(masterブランチのサイト公開を想定)
├www.example.com(上に同じ)
└develop.example.com(developブランチのサイト公開を想定

考慮外:

・gitより最新コードを落とすのは自動化されていません。
・ポート:111が解放されたままになっているので、ご注意ください。

作業開始です。。。

さくらVPSCentOS 7を選択して、実行。
スクリプトはなしです。

ユーザ作成:

useradd ユーザー名
passwd ユーザー名
usermod -G wheel ユーザ名

TeraTermで作成したユーザでログインし直す(パスワードログイン)

公開鍵認証でTeraTermを利用するための準備
TeraTermでid_rsa.pubをコピーします(画面上にD&D)

mkdir .ssh
chmod 700 .ssh
cat id_rsa.pub > .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
rm -f id_rsa.pub

id_rsa.pubの作成は下記のサイトなどを参考にすると良いと思います。
公開鍵認証によるSSH接続 - Tera Termの使い方 - Linux入門 - Webkaru

SSHのポート設定変更(大事)

その1

sudo vim /etc/ssh/sshd_config

#「/Port]でvimの検索が出来る
# N:後方に連続で検索
# 「:wq」で保存して終了

でPortを変更する。

#Port 22

Port 好きな物(登録済みポート:1024-49451の範囲を避けて、49452以降が望ましい)

その2

sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-new.xml
sudo vim /etc/firewalld/services/ssh-new.xml

編集画面でその1で設定したポートに変更する(22→好きな物)
SSHと記述してある箇所をSSH-NEWに書き換える。

firewallの起動設定

sudo systemctl start firewalld.service
sudo systemctl enable firewalld.service

新しいSSHを利用できるようにする

sudo firewall-cmd --permanent --add-service=ssh-new

再起動

sudo systemctl restart sshd
sudo firewall-cmd --reload

TeraTermの自動ログインファイル設定(ファイル名:XXX.ttl)でログインを確認する
※下記の22は上記で設定したポートに変えると良いです。

username = 'ログインユーザ名'
hostname = 'VPSIPアドレス(XXX.XXX.XXX.XXX)'
keyfile = '上記で作成した「id_rsa」のあるフォルダ'


msg = 'Enter password for user '
strconcat msg username
passwordbox msg 'Get password'


msg = hostname
strconcat msg ':22 /ssh /auth=publickey /user=' ; 「/auth=publickey」で認証方法として公開鍵認証を指定
strconcat msg username
strconcat msg ' /keyfile='
strconcat msg keyfile
strconcat msg ' /passwd="'
strconcat msg inputstr
strconcat msg '"'
connect msg

以下はアクセスできたら行う
公開鍵認証以外のログイン処理を無効化する

sudo vim /etc/ssh/sshd_config

変更内容

PermitRootLogin no
PasswordAuthentication no

SSHのポートを解除

sudo firewall-cmd --permanent --remove-service=ssh

OSの再起動

sudo reboot

firewallの解放
参考:CentOS 7 firewalld よく使うコマンド - Qiita

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

#再読込

sudo firewall-cmd --reload

#確認

sudo firewall-cmd --list-all

外部からポートの解放を確認する

sudo yum -y install nmap
nmap VPSIPアドレス -p 80

こんな感じの表示になる

PORT STATE SERVICE
80/tcp close http

※これで動かし始めればつながったのでOK

OSのアップデート
※ここでportの111が解放されるのでご注意ください。調べても何故か閉まらないので、パケットフィルタで逃げます。

sudo yum -y update

dockerをインストール
※1行目は恐らく無くてもない状態

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum -y install docker-ce docker-ce-cli containerd.io

sudo systemctl start docker
sudo systemctl enable docker

dockerでsudoなしで実行できるようにする
※グループはすでにあるはず・・・

sudo groupadd docker
sudo usermod -aG docker ユーザー名
sudo gpasswd -a $USER docker

TeraTermで再ログインする(上記のsudo無し実行を反映するため)(面倒なのでreboot)

sudo reboot

docker-composeを入れる

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

さくらVPSのパケットフィルタでhttp,httpsを解放する。
ここ忘れて、ものすごく時間を無駄に・・・

docker-composeでSSL化しつつ実行

以下、フォルダ構造

ユーザTOP
├www
│├docker-compose.yml
│└Dockerfile(好きなアプリ)
├develop
│├docker-compose.yml
│└Dockerfile(好きなアプリ)
└nginx
 └docker-compose.yml


コードをCloneする

cd ~/www
git clone XXX

cd ~/develop
git clone XXX
git checkout develop

ファイル準備
nginx/docker-compose.ymlの中身

version: "2"
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./certs:/etc/nginx/certs:ro
- /etc/nginx/vhost.d
- /usr/share/nginx/html
restart: always
networks:
- shared


letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./certs:/etc/nginx/certs:rw
volumes_from:
- nginx-proxy
restart: always
networks:
- shared


networks:
shared:
external: true

www/docker-compose.ymlの中身
※アプリ:gitでCloneしたフォルダ名
※メールアドレス

version: '3.3'
services:
myapp:
build:
context: ./アプリ
dockerfile: Dockerfile
environment:
VIRTUAL_HOST: example.com,www.example.com # ← カンマ区切り指定
LETSENCRYPT_HOST: example.com,www.example.com # ← カンマ区切り指定
LETSENCRYPT_EMAIL: メールアドレス
networks:
default:
external:
name: shared


develop/docker-compose.ymlの中身
※アプリ:gitでCloneしたフォルダ名
※メールアドレス

version: '3.3'
services:
myapp:
build:
context: ./アプリ
dockerfile: Dockerfile
environment:
VIRTUAL_HOST: develop.example.com # ← カンマ区切り指定
LETSENCRYPT_HOST: develop.example.com # ← カンマ区切り指定
LETSENCRYPT_EMAIL: メールアドレス
networks:
default:
external:
name: shared

nginx、アプリを実行する

cd ~/nginx
docker-compose build --no-cache
docker-compose up -d --force-recreate
cd ~/www
docker-compose build --no-cache
docker-compose up -d --force-recreate
cd ~/develop
docker-compose build --no-cache
docker-compose up -d --force-recreate

以上で、ドメイン設定がされていればサイトが表示されると思います。
1度でも動作確認している場合は、サイトのキャッシュにご注意ください。

上記で利用しているBlazorのDocker情報は以下になります。
Blazorのバージョン(SDK):Nuget:3.0.0-preview5-19227-01
Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0.0-preview5-alpine3.9 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.0.100-preview5-alpine3.9 AS build
WORKDIR /src
COPY ["MyHP.Server/MyHP.Server.csproj", "MyHP.Server/"]
COPY ["MyHP.Shared/MyHP.Shared.csproj", "MyHP.Shared/"]
COPY ["MyHP.Client/MyHP.Client.csproj", "MyHP.Client/"]
RUN dotnet restore "MyHP.Server/MyHP.Server.csproj"
COPY . .
WORKDIR "/src/MyHP.Server"
RUN dotnet build "MyHP.Server.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "MyHP.Server.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyHP.Server.dll"]

git cloneをスクリプトで実行する場合は以下をご参照ください。
https://raiwingprogram.hateblo.jp/entry/2019/07/21/233014

Docker MySQL docker-composeでの実行と、バックアップとリストア

参考にしたサイト:
https://qiita.com/A-Kira/items/f401aea261693c395966

動作確認:

Windows10 Pro build 17763
docker -v :Docker version 18.09.2, build 6247962
docker-compose -v:docker-compose version 1.23.2, build 1110ad01

docker-compose.ymlの中身
${}は環境変数Windowsはシステムからの設定、Linuxは.evn)

version: '3'
services:
# MySQL
db:
image: mysql:5.7
container_name: db_host
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD_SETTING}
MYSQL_DATABASE: ${MYSQL_DATABASE_SETTING}
MYSQL_USER: ${MYSQL_USER_SETTING}
MYSQL_PASSWORD: ${MYSQL_PASSWORD_SETTING}
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/db/data:/var/lib/mysql
ports:
- 3306:3306
# phpMyAdmin
phpmyadmin:
container_name: php
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=db_host
- PMA_USER=root
- PMA_PASSWORD=${MYSQL_ROOT_PASSWORD_SETTING}
ports:
- 8080:80

docker起動
※docker-compose.ymlがあるフォルダに移動していること

docker-compose up -d
# 確認する際は、「-d」なしで実行する

MySQLのダンプを復元

docker cp .\db_host.sql db_host:/tmp/dump.sql
docker exec -it db_host bash
mysql -u root -p < /tmp/dump.sql

MySQLのダンプを作成

docker exec -it db_host bash
mysqldump --databases rairairai -uroot -p > dump.sql
exit
docker cp db_host:dump.sql dump.sql

※shで完結できないかなぁ…

dockerの終了

docker-compose down -v

docker-composeで.evnのWindowsでの設定位置

dockerを利用して、サーバーとローカル環境のを同じにしたいと思って調べたけど、簡単には出てこなかったので、メモ。

参考:
Windows環境における docker-compose の .env と 環境変数の優先順位 - Qiita


Windowsの通常の環境変数設定

ホーム→システム→システム情報→システムの詳細設定→環境変数
ユーザの環境変数に追加して、PC再起動

または

SETX 変数名 値

※PCの再起動を行わないと、反映されない。

以上。

Blazor Preview5 から Preview6へ

CentOSによるDockerの確認はしていないです。

参考:
ASP.NET Blog | ASP.NET Core and Blazor updates in .NET Core 3.0 Preview 6

リリースノート:
core/3.0.0-preview6.md at master · dotnet/core · GitHub

 ・DockerImageも更新されるので注意!(Alpineは更新されてた・・・)

内容:
SDKの更新:忘れてビルドがエラーになってた・・・
https://dotnet.microsoft.com/download/thank-you/dotnet-sdk-3.0.100-preview6-windows-x64-installer

VisualStudioは2019 Verは16.2が必要とのこと。
Preview でないと、16.2がリリースされていませんので注意してください(2019/07/07)

内容:
Nugetで関連する物を「3.0.0-preview6.19307.2」に更新する
(各ソリューションで2個変更する)

Blazorの内部の更新内容:(サンプルの変更点で実際に新しいのは動く)
・全体:
・「@functions」を「@code」に変更する
・「onclick」を「@onclick」にする

・デフォルトソース:*.Server/Startup.cs内

app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});

app.UseBlazor();

app.UseClientSideBlazorFiles();

app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
endpoints.MapFallbackToClientSideBlazor("index.html");
});

以上。

再度作成し直しを行えば、初期の物は動くので、それに合わせれば動くと思われる。

・・・ClientSideはまだ、デバッグできなかったけど・・・

Docker + Blazor 3.0 での実行

基本参考情報:
Blazor(C#)をDockerで動かす - altescy's project


上記は2.1での実行なので、3.0で作るとそのままは動かなかった。

そのため、Dockerfileを以下のように書き換えた

FROM mcr.microsoft.com/dotnet/core/sdk:3.0-alpine AS Build

WORKDIR /app

COPY . ./
RUN dotnet restore
RUN dotnet publish -c Release -o out

EXPOSE 80

ENTRYPOINT ["dotnet", "out/プロジェクト名.Server.dll"]

とりあえず、Localhostでの実行できることを確認した。
FROMとENTRYPOINT が変わっているので注意が必要です。
Windowsで試すと警告が出るので、グローバルへの公開は設定等を見直してください。

以上。
実際にグローバルに公開できたらより詳しく記事にする予定です。

Blazor for VS2019

久しぶりでちょっと迷ったのでメモです。

以下から対象のVS2019 Core3.0をDLする。(ちょっと大きい)

私の時はv3.0.100-preview5
(2019/05/10 22:45)

dotnet.microsoft.com

ASP.NET COREを選択

ここでASP.NET CORE 3.0を選んでBlazorが無ければ拡張機能でBlkazorをいれればOK

Blazor(ASP.NET Core hosted)を選択
(Dockerがサポートされてないだと・・・!?)

そして、、、実行すると、、、
普通に表示される。

Dockerでもしかして実行できないのかなぁ・・・
0.7の時よりデフォルトがちょっとかっこよくなってる感じ。

デフォルトだと、ReSharperに指摘を受けるので、ちょっとどうするかは、検討が必要そう。
エラーいっぱいでウザい場合は、エラー一覧の表示をビルドのみに変更することをおすすめします。

英語の始め方はこちら

docs.microsoft.com