vagrantの設定を忘れないように残しておく

※一先ず確認したこと

 ・vagrant上でASP.net core(mvc) の実験用アプリを起動し、ホストPCからブラウザで経由でアクセスできること。

 ・vagrant上のSQLServerに上記アプリからCRUDが正しく行えること。

 ・SSLの対応はしてない。

 

環境

Ubuntu18.4

SQLServer 2017

NetCore2.1

Nginx 1.14.0

ASP.Net Core MVC 2.1

 

その他環境(ホスト[windows]側)

Visual Studio 2017

SQL Server Management Studio 14.0

 

その他

・DBの作成はVisual Studioで「Update-Database」コマンドを利用して作成した。

 ※「appsettings.json」のDB接続文字列を直接書き換えて「Update-Database」を実行

  "ConnectionStrings": {
    "HogeAppContext": "Data Source={IPアドレス};Initial Catalog={DB名};Persist Security Info=True;User ID={ユーザID};Password={パスワード}"
  }

 ・データベースユーザの作成はSQL Server Management Studioを利用して作成した。

 

Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  # Boxは「ubuntu/bionic64」を利用する
  config.vm.box = "ubuntu/bionic64"

  # ホスト以外のPCからもアクセスしたいので「public_network」を設定する
  config.vm.network "public_network"

  # SQLServerは最低2Gメモリを用意しておかないとインストールできない
  config.vm.provider "virtualbox" do |vb|
     vb.memory = "4096"
  end

  # provision用スクリプト
  config.vm.provision :shell, path: "bootstrap.sh"
end

 

bootstrap.sh

netcore及びsql server, sql server toolsのインストール設定は公式の設定をほぼ丸コピ

#!/usr/bin/env bash

sudo apt update -y
sudo apt upgrade -y

echo "------------------------------------------------------"
echo ""
echo "install nginx"
echo ""
echo "------------------------------------------------------"

apt -y install nginx

# default設定を無効にする(やってることはただのSLink解除)
sudo unlink  /etc/nginx/sites-enabled/default

# aspサイトの設定を有効にする
# nginx_aspは予め作成しておいたnginxの設定ファイル
cp /vagrant/nginx_asp /etc/nginx/sites-available/
ln -fs /etc/nginx/sites-available/nginx_asp /etc/nginx/sites-enabled

# アプリの更新を楽するためにリンクをはっておく
ln -fs /vagrant/www/wwwroot /var/www/html

echo "------------------------------------------------------"
echo ""
echo "install dotnet core 2.1"
echo ""
echo "------------------------------------------------------"

wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

sudo apt-get install -y gpg
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget -q https://packages.microsoft.com/config/ubuntu/18.04/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list
sudo apt-get install -y apt-transport-https
sudo apt-get update -y
sudo apt-get install dotnet-sdk-2.1 -y

echo "------------------------------------------------------"
echo ""
echo "install sql server"
echo ""
echo "------------------------------------------------------"

# インストールするSQLServerのEdition(Developer,Express等)
# 今回はDeveloperを利用させてもらうことにする
MSSQL_PID='Developer'

# SA(sqlserverの管理者)のパスワード
MSSQL_SA_PASSWORD='管理者のパスワード'

SQL_INSTALL_AGENT='y'

if [ -z $MSSQL_SA_PASSWORD ]
then
  echo Environment variable MSSQL_SA_PASSWORD must be set for unattended install
  exit 1
fi

echo Adding Microsoft repositories...
sudo curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
repoargs="$(curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list)"
sudo add-apt-repository "${repoargs}"
repoargs="$(curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list)"
sudo add-apt-repository "${repoargs}"

echo Running apt-get update -y...
sudo apt-get update -y

echo Installing SQL Server...
sudo apt-get install -y mssql-server

echo Running mssql-conf setup...
sudo MSSQL_SA_PASSWORD=$MSSQL_SA_PASSWORD MSSQL_PID=$MSSQL_PID opt/mssql/bin/mssql-conf -n setup accept-eula

echo Installing mssql-tools and unixODBC developer...
sudo ACCEPT_EULA=Y apt-get install -y mssql-tools unixodbc-dev

# Add SQL Server tools to the path by default:
echo Adding SQL Server tools to your path...
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

# Optional SQL Server Agent installation:
if [ ! -z $SQL_INSTALL_AGENT ]
then
  echo Installing SQL Server Agent...
  sudo apt-get install -y mssql-server-agent
fi

# Configure firewall to allow TCP port 1433:
echo Configuring UFW to allow traffic on port 1433...
sudo ufw allow 1433/tcp
sudo ufw reload

# Optional example of post-installation configuration.
# Trace flags 1204 and 1222 are for deadlock tracing.
# echo Setting trace flags...
# sudo /opt/mssql/bin/mssql-conf traceflag 1204 1222 on

# Restart SQL Server after installing:
echo Restarting SQL Server...
sudo systemctl restart mssql-server

# Connect to server and get the version:
counter=1
errstatus=1
while [ $counter -le 5 ] && [ $errstatus = 1 ]
do
  echo Waiting for SQL Server to start...
  sleep 3s
  /opt/mssql-tools/bin/sqlcmd \
    -S localhost \
    -U SA \
    -P $MSSQL_SA_PASSWORD \
    -Q "SELECT @@VERSION" 2>/dev/null
  errstatus=$?
  ((counter++))
done

# Display error if connection failed:
if [ $errstatus = 1 ]
then
  echo Cannot connect to SQL Server, installation aborted
  exit $errstatus
fi

 

nginxのサーバ設定

※Microsort社様のページにて公開されているサンプル+α

server {
	listen 80 default_server;

	location /{
		// asp.net coreのアプリにリダイレクトする
		proxy_pass http://localhost:5000;

		// その他色々な設定
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection keep-alive;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_set_header Host $host;
		proxy_cache_bypass $http_upgrade;
	}

	// 静的ファイルはnginxに任せる
	location ~* ^.+.(js|css|svg)$ {
		root /var/www/html;
	}
}

 

ASP.net core サーバの起動

dotnet {VisualStudioでPushlishして生成されたdll}

※Microsoft社様のページにサービス化する方法が記述されていたが今回はやらない