[英]How to Run a .NET Core MVC Site on AWS Linux Instance
我想從AWS Amazon Linux AMI實例運行.NET Core MVC網站。
以下是我到目前為止采取的步驟:
sudo yum update -y
sudo yum install libunwind -y
sudo yum install gettext -y
curl -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
curl -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
sudo ln -s ~/dotnet/dotnet /usr/local/bin
curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
source /home/ec2-user/.dnx/dnvm/dnvm.sh
dnvm upgrade -r coreclr
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
sudo yum install git -y
mkdir director-name cd directory-name
git config user.name "myUserName" git config user.email "myEmail" git clone https://github.com/username/repositoryname.git
克隆Web應用程序git config user.name "myUserName" git config user.email "myEmail" git clone https://github.com/username/repositoryname.git
cd solution-name/src/web-project-name
。 dotnet restore
dotnet build
dotnet run
此時我在終端中看到以下內容:
現在收聽:http:// localhost:5000
我嘗試使用端口5000標記的AWS DNS / IP(http:// aws-ip-or-dns:5000),但沒有得到響應。
我知道Docker和Mono是我可以使用的工具,但我寧願讓這種方法起作用。
我用來安裝.NET Core,DNVM和DNX的腳本是這些鏈接中CentOS和Ubuntu方向的一些組合:
免責聲明我不熟悉Linux。 可以說我不理解我正在運行的一些命令。 但是,我在這里學習!
問題:如何獲取運行AWS Amazon Linux環境的模板.NET Core Web應用程序需要做什么?
(我的猜測是我在設置HTTP服務器時缺少一些東西)
我需要更多的聲譽來發布兩個以上的鏈接,所以如果有人想編輯,我會很感激。
來自@ user326608的答案幾乎可以實現,但我將在.NET Core 1.0.0發布后添加我現在使用的步驟。
sudo yum update -y
sudo yum install libunwind -y
curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809131
sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet
sudo ln -s /opt/dotnet/dotnet /usr/local/bin
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
sudo yum install git -y
git config --global user.name "myUserName"
git config --global user.email "myGitEmail@something.com"
mkdir /var/coreapp
cd /var/coreapp
git clone https://github.com/myUsername/myRepository.git
獲取項目 sudo chown -R ec2-user /var/coreapp
cd /var/coreapp/solution-name/src/web-project-name
dotnet restore
,構建dotnet build
,並在后台nohup dotnet run > /dev/null 2>&1 &
這個解決方案現在對我很有用。 我有一個相關的帖子試圖創建一個用戶數據引導腳本,試圖讓這更容易。
對於需要更新以上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
。
我不能讓一個dotnet run
,直接為我的RID工作是不知道的,但使用Dockerfile
與microsoft/dotnet:onbuild
,在我的這部分project.json
工作:
"runtimes": {
"debian.8-x64" : {}
},
如果您在VPC模式下運行AWS實例,並且您沒有安全組表明其入站規則具有“所有流量”且Source為“Anywhere”或者如果它表示“自定義TCP規則”,則端口為5000並且源是“任何地方”,然后它將不允許您連接到該端口。 在VPC模式下,默認情況下關閉所有傳入端口,您應該明確允許它們使用某些預定義或您自己的安全組。
如果您使用Opswork(或Chef),您可以使用以下Chef配方https://supermarket.chef.io/cookbooks/dotnetcore在AWS Linux上安裝dotnet核心,假設您已使用dotnet發布上傳了壓縮文件文件到S3存儲桶。
圖層json具有JSON,其具有app短名稱,例如
{
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.