Je souhaite exécuter un site Web .NET Core MVC à partir d'une instance AWS Amazon Linux AMI.
Voici les mesures que j'ai prises jusqu'à présent:
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
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
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
cd solution-name/src/web-project-name
.dotnet restore
dotnet build
dotnet run
À ce stade, je vois ce qui suit dans le terminal:
Vous écoutez maintenant sur: http: // localhost: 5000
J'essaie de frapper le DNS/IP AWS avec le port 5000 étiqueté à la fin (http: // aws-ip-or-dns: 5000), mais je ne reçois aucune réponse.
Je sais que Docker et Mono sont des outils que je peux utiliser, mais je préférerais que cette approche fonctionne.
Les scripts que j'ai utilisés pour installer .NET Core, DNVM et DNX sont une combinaison des instructions CentOS et Ubuntu à partir de ces liens:
Disclaimer Je ne connais pas très bien Linux. Il est juste de dire que je ne comprends pas certaines des commandes que je lance. Mais je suis ici pour apprendre!
Question: Que dois-je faire pour obtenir un modèle d'application Web .NET Core exécutant un environnement AWS Amazon Linux?
(J'imagine qu'il me manque quelque chose lors de la configuration du serveur HTTP)
J'ai besoin de plus de réputation pour publier plus de deux liens, donc si quelqu'un veut éditer, je l'apprécierais.}
Pour ceux qui ont besoin de mettre à jour ce qui précède pour la mise à jour Microsoft.NETCore.App 1.0.1 de septembre 2016, les instructions https://www.Microsoft.com/net/core#centos ont fonctionné pour moi:
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
Par la suite, exécuter dotnet --info
donne:
.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
Après cela, j'ai supprimé mon project.lock.json
et exécuté un dotnet restore
.
Je ne pouvais pas faire fonctionner un dotnet run
directement car mon RID n'était pas connu, mais utiliser une Dockerfile
avec Microsoft/dotnet:onbuild
et cette section de mon project.json
fonctionnaient:
"runtimes": {
"debian.8-x64" : {}
},
Si vous utilisez Opswork (ou Chef), vous pouvez utiliser la recette suivante de Chef https://supermarket.chef.io/cookbooks/dotnetcore pour installer un noyau de réseau de points sur AWS Linux, en supposant que vous ayez téléchargé le fichier a fichier en utilisant le fichier de publication dotnet dans un compartiment S3.
Le calque JSON a un JSON qui porte le nom abrégé de l’application, par exemple.
{
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
Si vous exécutez votre instance AWS en mode VPC et que le groupe de sécurité ne dit pas que sa règle entrante contient "Tout le trafic" et que Source correspond à "Partout", ou s'il indique que "règle personnalisée TCP", Le port est 5000 et la source est "Partout", il ne vous permettra pas de vous connecter à ce port . En mode VPC, tous les ports entrants sont fermés par défaut et vous devez les autoriser explicitement avec certains groupes de sécurité prédéfinis ou propres.