1 |
|
2 |
yum install firewalld -y |
3 |
systemctl start firewalld |
4 |
systemctl enable firewalld |
5 |
firewall-cmd --permanent --zone=public --add-interface=eth0 |
6 |
firewall-cmd --permanent --add-service=http --add-service=https --zone=public |
7 |
firewall-cmd --reload |
8 |
|
9 |
# Just for nginx testing... |
10 |
|
11 |
cat > /srv/robots.txt << EOF |
12 |
User-agent: ia_archiver |
13 |
Disallow: / |
14 |
EOF |
15 |
|
16 |
yum install epel-release -y |
17 |
yum install supervisor -y |
18 |
|
19 |
cat > /etc/supervisord.d/sample.ini << EOF |
20 |
[program:sample] |
21 |
command=/usr/bin/dotnet /srv/sample/bin/Debug/netcoreapp1.0/publish/sample.dll |
22 |
directory=/srv/sample |
23 |
autostart=true |
24 |
autorestart=true |
25 |
stderr_logfile=/var/log/sample.err.log |
26 |
stdout_logfile=/var/log/sample.out.log |
27 |
environment=ASPNETCORE_ENVIRONMENT=Production |
28 |
user=nginx |
29 |
stopsignal=INT |
30 |
EOF |
31 |
|
32 |
# App |
33 |
|
34 |
yum install libunwind libicu -y |
35 |
curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809131 |
36 |
mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet |
37 |
ln -s /opt/dotnet/dotnet /usr/bin |
38 |
|
39 |
cd /srv |
40 |
mkdir sample |
41 |
cd sample |
42 |
|
43 |
cat > project.json << EOF |
44 |
{ |
45 |
"version": "1.0.0-*", |
46 |
"buildOptions": { |
47 |
"debugType": "portable", |
48 |
"emitEntryPoint": true |
49 |
}, |
50 |
"dependencies": {}, |
51 |
"frameworks": { |
52 |
"netcoreapp1.0": { |
53 |
"dependencies": { |
54 |
"Microsoft.NETCore.App": { |
55 |
"type": "platform", |
56 |
"version": "1.0.0" |
57 |
}, |
58 |
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0" |
59 |
}, |
60 |
"imports": "dnxcore50" |
61 |
} |
62 |
} |
63 |
} |
64 |
EOF |
65 |
|
66 |
cat > Startup.cs << EOF |
67 |
using System; |
68 |
using Microsoft.AspNetCore.Builder; |
69 |
using Microsoft.AspNetCore.Hosting; |
70 |
using Microsoft.AspNetCore.Http; |
71 |
namespace sample |
72 |
{ |
73 |
public class Startup |
74 |
{ |
75 |
public void Configure(IApplicationBuilder app) |
76 |
{ |
77 |
app.Run(context => |
78 |
{ |
79 |
return context.Response.WriteAsync("This verbose monstrosity works."); |
80 |
}); |
81 |
} |
82 |
} |
83 |
} |
84 |
EOF |
85 |
|
86 |
cat > Program.cs << EOF |
87 |
using System; |
88 |
using Microsoft.AspNetCore.Hosting; |
89 |
namespace sample |
90 |
{ |
91 |
public class Program |
92 |
{ |
93 |
public static void Main(string[] args) |
94 |
{ |
95 |
var host = new WebHostBuilder() |
96 |
.UseUrls("http://unix:/srv/sample/run.sock") |
97 |
.UseKestrel() |
98 |
.UseStartup() |
99 |
.Build(); |
100 |
host.Run(); |
101 |
} |
102 |
} |
103 |
} |
104 |
EOF |
105 |
|
106 |
dotnet restore |
107 |
dotnet publish |
108 |
|
109 |
#Nginx |
110 |
|
111 |
cat > /etc/yum.repos.d/nginx.repo << EOF |
112 |
[nginx] |
113 |
name=nginx repo |
114 |
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/ |
115 |
gpgcheck=0 |
116 |
enabled=1 |
117 |
EOF |
118 |
|
119 |
yum install -y nginx |
120 |
|
121 |
export PUBLIC_IP=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/') |
122 |
|
123 |
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled |
124 |
cat > /etc/nginx/conf.d/webapi.conf << EOF |
125 |
server { |
126 |
listen $PUBLIC_IP:80; |
127 |
|
128 |
location /robots.txt { |
129 |
alias /srv/robots.txt; |
130 |
} |
131 |
|
132 |
location / { |
133 |
proxy_pass http://unix:/srv/sample/run.sock; |
134 |
|
135 |
proxy_redirect off; |
136 |
proxy_set_header Host \$host; |
137 |
proxy_set_header X-Real-IP \$remote_addr; |
138 |
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; |
139 |
proxy_set_header X-Forwarded-Host \$server_name; |
140 |
} |
141 |
} |
142 |
EOF |
143 |
|
144 |
chown -R nginx:nginx /srv |
145 |
restorecon -R -v /srv |
146 |
|
147 |
systemctl start supervisord |
148 |
systemctl enable supervisord |
149 |
|
150 |
systemctl start nginx |
151 |
systemctl enable nginx |
152 |
|