web-dev-qa-db-ja.com

AWS Linuxインスタンスで.NET Core MVCサイトを実行する方法

AWSAmazon Linux AMIインスタンスから.NET Core MVCウェブサイトを実行したい。

これまでに行った手順は次のとおりです。

  1. テンプレートを作成ASP.NET Core Web Application(.NET Core)-C#-MVC Web ApplicationプロジェクトをVisual Studio 2015でコンパイルし、アプリケーションを=でコンパイルして実行しますIIS Express。構成(web.confg、project.jsonなど)は変更されません。
  2. ウェブアプリケーションソリューション全体をGitHubにアップロードします。
  3. Amazon Linux AMI(2016.03.2)インスタンスを起動します。セキュリティグループは、簡略化のために現在「すべてのトラフィック」アクセスを開いています。
  4. PuTTYを使用してLinuxインスタンスにSSH接続します。 ec2-userでログインします。
  5. インスタンスを更新するSudo yum update -y
  6. インストールlibunwindSudo yum install libunwind -y
  7. インストールgettextSudo yum install gettext -y
  8. インストール。NET Corecurl -sSL https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0-preview1/scripts/obtain/dotnet-install.sh | bash /dev/stdin --version 1.0.0-preview1-002702 --install-dir ~/dotnet
  9. リンクSudo ln -s ~/dotnet/dotnet /usr/local/bin
  10. インストール。NETバージョンマネージャ(DNVM)curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
  11. コマンドsource /home/ec2-user/.dnx/dnvm/dnvm.shを実行します
  12. インストール。NET実行環境(DNX)dnvm upgrade -r coreclr
  13. libuvをインストールしてKestrelが使用するSudo yum install automake libtool wget -y wget http://dist.libuv.org/dist/v1.8.0/libuv-v1.8.0.tar.gz tar -zxf libuv-v1.8.0.tar.gz cd libuv-v1.8.0 Sudo sh autogen.sh Sudo ./configure Sudo make Sudo make check Sudo make install Sudo ln -s /usr/lib64/libdl.so.2 /usr/lib64/libdl Sudo ln -s /usr/local/lib/libuv.so.1.0.0 /usr/lib64/libuv.so
  14. インストールGitSudo yum install git -y
  15. アプリケーション用に「/ home/ec2-user」ディレクトリにディレクトリを作成します。そのディレクトリに移動します。 mkdir director-name cd directory-name
  16. GitでWebアプリのクローンを作成するgit config user.name "myUserName" git config user.email "myEmail" git clone https://github.com/username/repositoryname.git
  17. 「プロジェクト」ディレクトリcd solution-name/src/web-project-nameに移動します。
  18. パッケージの復元dotnet restore
  19. アプリケーションをビルドdotnet build
  20. アプリケーションを実行dotnet run

この時点で、ターミナルに次のように表示されます。

今聞いている:http:// localhost:5000

最後にタグが付けられたポート5000(http:// aws-ip-or-dns:5000)でAWS DNS/IPをヒットしようとしましたが、応答がありません。

DockerMonoが私が使用できるツールであることは知っていますが、私はむしろこのアプローチを機能させたいと思っています。

.NET Core、DNVM、およびDNXのインストールに使用したスクリプトは、これらのリンクからのCentOSとUbuntuの指示を組み合わせたものです。

  1. https://docs.asp.net/en/latest/getting-started.html
  2. https://www.Microsoft.com/net/core#centos
  3. https://docs.asp.net/en/1.0.0-rc1/getting-started/installing-on-linux.html

免責事項私はLinuxの経験がありません。実行しているコマンドの一部が理解できないと言っても過言ではありません。しかし、私は学ぶためにここにいます!

質問:AWS Amazon Linux環境を実行するテンプレート.NET Core Webアプリケーションを取得するには、何をする必要がありますか?

(私の推測では、HTTPサーバーのセットアップで何か不足しています)

3つ以上のリンクを投稿するにはもっと評判が必要なので、誰かが編集したい場合は、感謝します。

16
Bruno L.

@ user326608からの回答でほぼ問題は解決しましたが、.NET Core 1.0.0のリリース後に、現在使用している手順を追加します。

  1. テンプレートを作成ASP.NET Core Web Application(.NET Core)-C#-MVC Web ApplicationプロジェクトをVisual Studio 2015でコンパイルし、アプリケーションを=でコンパイルして実行しますIIS Express。構成(web.confg、project.jsonなど)は変更されません。
  2. ウェブアプリケーションソリューション全体をGitHubにアップロードします。 Gitアップロードにproject.lock.jsonを含めないでください
  3. Amazon Linux AMI(2016.09.0)インスタンスを起動します。 SSH、HTTP、およびHTTPSトラフィックが許可されたセキュリティグループ。
  4. PuTTYを使用してLinuxインスタンスにSSH接続します。 ec2-userでログインします。
  5. インスタンスを更新するSudo yum update -y
  6. インストールlibunwindSudo yum install libunwind -y
  7. ダウンロード。NET Corecurl -sSL -o dotnet.tar.gz https://go.Microsoft.com/fwlink/?LinkID=809131
  8. インストール。NET CoreSudo mkdir -p /opt/dotnet && Sudo tar zxf dotnet.tar.gz -C /opt/dotnet
  9. リンクSudo ln -s /opt/dotnet/dotnet /usr/local/bin
  10. 構成IPテーブルSudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
  11. インストールGitSudo yum install git -y
  12. 構成git config --global user.name "myUserName"
  13. 構成git config --global user.email "[email protected]"
  14. ディレクトリを作成mkdir /var/coreapp
  15. ディレクトリcd /var/coreappに移動します
  16. Gitからプロジェクトを取得git clone https://github.com/myUsername/myRepository.git
  17. 所有者を変更Sudo chown -R ec2-user /var/coreapp
  18. 飼育所に移動cd /var/coreapp/solution-name/src/web-project-name
  19. dotnet restoreを復元し、dotnet buildをビルドして、バックグラウンドで実行しますNohup dotnet run > /dev/null 2>&1 &

この解決策は今私にとってうまく機能しています。私は 関連する投稿 を作成しようとしていますユーザーデータbootstrapスクリプトを試してこれをさらに簡単にします。

5
Bruno L.

Microsoft.NETCore.App 1.0.1 2016年9月のアップデートで上記をアップデートする必要がある人は、 https://www.Microsoft.com/net/core#centos の手順でうまくいきました:

curl -sSL -o dotnet.tar.gz https://go.Microsoft.com/fwlink/?LinkID=827529
Sudo mkdir -p /opt/dotnet && Sudo tar zxf dotnet.tar.gz -C /opt/dotnet
Sudo rm /usr/local/bin/dotnet
Sudo ln -s /opt/dotnet/dotnet /usr/local/bin

続いてdotnet --infoを実行すると、次のようになります。

.NET Command Line Tools (1.0.0-preview2-003131)

Product Information:
 Version:            1.0.0-preview2-003131
 Commit SHA-1 hash:  635cf40e58

Runtime Environment:
 OS Name:     amzn
 OS Version:  2016.09
 OS Platform: Linux
 RID:         amzn.2016.09-x64

その後、project.lock.jsonを削除してdotnet restoreを実行しました。

RIDが不明だったため、dotnet runを直接動作させることができませんでしたが、Microsoft/dotnet:onbuildDockerfileを使用すると、project.jsonのこのセクションが機能しました。

"runtimes": {
    "debian.8-x64" : {}
},
1
user326608

Opswork(またはChef)を使用している場合は、次のChefレシピ https://supermarket.chef.io/cookbooks/dotnetcore を使用して、AWS Linuxにdotnetコアをインストールできます。 dotnet publishファイルを使用してS3バケットに圧縮されたファイル。
レイヤjsonには、アプリの短い名前を持つJSONがあります。

{
  myapp {}
}

# The recipe to install
# 1) Figure which App needs to be installed using JSON in Opsworks layer
# 2) Get the Zip file from S3 and Unzip into /usr/bin/myapp/publish
# 3) Create bash file to start
# 4) Start the app 

    apps = search(:aws_opsworks_app)
    apps.sort_by { |v| v["shortname"] }.each do |app|
        appname = app["shortname"]
        app_source = app["app_source"]
        bucket, remote_path = OpsWorks::SCM::S3.parse_uri("#{app_source['url']}")
        filename = remote_path.split("/")[-1]
        extn = File.extname  filename
        if (!node["#{appname}"].nil? && extn == '.Zip')
            apppath = "/usr/bin/#{appname}"
            dotnetapp = app["environment"]["dotnetapp"]
            aspnetcore_environment = app["environment"]["aspnetcore_environment"]
            Chef::Log.info("App dotnet Name:#{app[:environment][:dotnetapp]}")
            Chef::Log.info("Enviroment:#{aspnetcore_environment}")


            app_checkout = ::File.join(Chef::Config["file_cache_path"], app["shortname"])

            package = "#{app_checkout}/#{filename}"

# Use https://github.com/awslabs/opsworks-windows-demo-cookbooks or any s3_file recipe to download the Zip file
# if you copy the opsworks-windows-cookbooks you will to modify the recipe a little to work on aws linux
            opsworks_scm_checkout app["shortname"] do
                destination      app_checkout
                repository       app_source["url"]
                user             app_source["user"]
                password         app_source["password"]
                type             app_source["type"]
                ssh_key          app_source["ssh_key"]
                revision         app_source["revision"]
            end


            directory "#{apppath}" do
            end

            execute 'unzip package' do
                command "unzip -o #{app_checkout}/#{filename} -d #{apppath}"

            end

            # create a sysvint sh file to manage dotnet service 
            initd_directory = "/etc/init.d"

            intd_file = File.join(initd_directory, app["shortname"])

            template intd_file do
                mode "744"
                source 'file.sh.erb'
                variables(
                    :service_name => app["shortname"],
                    :dotnetapp => "#{dotnetapp}",
                    :apppath => "#{apppath}/publish"
                )
            end
            execute "start service #{dotnetapp}" do
                command ".#{initd_directory}/#{appname} start"
                environment ({"ASPNETCORE_ENVIRONMENT" => "#{aspnetcore_environment}"})
            end
            Chef::Log.info("End Install #{appname}")
        end
    end

# The ERB Template:

#!/bin/bash
#
# description: <%= @service_name %>
#

# Get function from functions library
. /etc/init.d/functions
#
# Start the service <%= @service_name %>
#
start() {
        initlog -c "echo -n Starting dotnet <%= @service_name %> server: "
        cd <%= @apppath %>
        Nohup dotnet <%= @dotnetapp %> /dev/null 2>&1 &
        ### Create the lock file ###
        touch /var/lock/subsys/<%= @service_name %>
        success $"<%= @service_name %> server startup"
        echo
}

# Restart the service <%= @service_name %>
stop() {
        initlog -c "echo -n Stopping dotnet <%= @service_name %> server: "
        killproc dotnet
        ### Now, delete the lock file ###
        rm -f /var/lock/subsys/<%= @service_name %>
        echo
}

### main logic ###
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status dotnet
        ;;
  restart|reload|condrestart)
        stop
        start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac

exit 0 
0
Haroon

AWSインスタンスをVPCモードで実行していて、インバウンドルールが「すべてのトラフィック」であり、ソースが「どこでも」であると言うセキュリティグループがない場合、または「カスタムTCPルール」と言う場合"、ポートが5000、ソースが"どこでも "の場合、そのポートに接続することはできません。 VPCモードでは、すべての受信ポートがデフォルトで閉じられます。事前に定義されたセキュリティグループまたは独自のセキュリティグループを使用して、ポートを明示的に許可する必要があります。

0