На днях потербовалось показывать C# (или ASP.NET, я точно не понимаю) веб страницы на новом сервере. Долго тупил, поэтому решил написать руководство по установке, настройке и автозапуску соответствующего софта.
Нам потребуется Nginx (если нужен), FastCGI Mono Server и три бутылки пива
1
2
| apt-get install nginx
apt-get install mono-fastcgi-server4
|
Для работы с Mono, в конфиге сайта Nginx нужно прописать fastcgi_pass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| server
{
listen 80;
server_name zadrot.ru;
root /var/www/zadrot.ru;
location /
{
index default.aspx;
fastcgi_index default.aspx;
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
}
}
|
Ещё разработчик рекомендует добавить в /etc/nginx/fastcgi_params следующие строчки (у меня и без них прекрасно работает)
1
2
| fastcgi_param PATH_INFO "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
С настройкой Nginx закончили, автозапускается он сам. Можно выпить
Далее создаём 2 директории, чтобы быть как Nginx
В первой мы создаём кофиги сайтов, для которых требуется поддержка C#, а во вторую делаем символическую ссылку из первой :)
1
2
| mkdir /etc/mono/fcgi/apps-available
mkdir /etc/mono/fcgi/apps-available
|
Пример файла zadrot.ru.webapp в директории apps-available
1
2
3
4
5
6
7
8
9
| <app>
<web-application>
<name>zadrot.ru</name>
<vhost>*</vhost>
<vport>80</vport>
<vpath>/</vpath>
<path>/var/www/zadrot.ru</path>
</web-application>
</app>
|
Теперь, чтобы не запускать Mono Server каждый раз руками, засовываем скрипт с именем monoserve в директорию с сервисами /etc/init.d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
| #!/bin/bash
### BEGIN INIT INFO
# Provides: monoserve.sh
# Required-Start: $local_fs $syslog $remote_fs
# Required-Stop: $local_fs $syslog $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Запуск FastCGI Mono Server
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/mono
NAME=monoserver
DESC=monoserver
## Begin -- Настройки --
PROGRAM=fastcgi-mono-server4
ADDRESS=127.0.0.1
PORT=9000
USER=www-data
GROUP=$USER
LOGFILE=/var/log/mono/fastcgi.log
LOGLEVELS=Standard # All если нужно больше информации
FCGI_CONFIG_DIR=/etc/mono/fcgi/apps-enabled
## End -- Настройки --
# Переменные
MONOSERVER=$(which $PROGRAM)
MONOSERVER_PID=""
# Запуск сервера
start_up()
{
get_pid
if [ -z "$MONOSERVER_PID" ]; then
start-stop-daemon -S -c $USER:$GROUP -x $MONOSERVER -- --appconfigdir $FCGI_CONFIG_DIR /socket=tcp:$ADDRESS:$PORT /logfile=$LOGFILE /loglevels=$LOGLEVELS &
echo "FastCGI Mono Server $PROGRAM запущен от $USER на $ADDRESS:$PORT"
else
echo "FastCGI Mono Server уже запущен - PID $MONOSERVER_PID"
fi
}
# Остановка сервера
shut_down()
{
get_pid
if [ -n "$MONOSERVER_PID" ]; then
kill $MONOSERVER_PID
echo "FastCGI Mono Server остановлен"
else
echo "FastCGI Mono Server не запущен"
fi
}
# Обновление PID
get_pid()
{
MONOSERVER_PID=$(ps auxf | grep $PROGRAM.exe | grep -v grep | awk '{print $2}')
}
case "$1" in
start)
start_up
;;
stop)
shut_down
;;
restart)
shut_down
start_up
;;
status)
get_pid
if [ -z "$MONOSERVER_PID" ]; then
echo "FastCGI Mono Server не запущен"
else
echo "FastCGI Mono Server запущен - PID $MONOSERVER_PID"
fi
;;
*)
echo "Пиши так: monoserve (start|stop|restart|status)"
;;
esac
exit 0
|
Руками создаём лог на случай проблем с правами и устанавливаем для него владельца www-data. Такого же владельца ставим файлам в директории /etc/mono/fcgi
1
2
3
| touch /var/log/mono/fastcgi.log
chown -R www-data:www-data /var/log/mono
chown -R www-data:www-data /etc/mono/fcgi
|
Всё готово. Можно выпить
Нет, не всё, ещё нужно выдать bash скрипту рут и сделать запускаемым. А так же добавить его в автозапуск
1
2
3
| chmod +x /etc/init.d/monoserve
systemctl daemon-reload
update-rc.d monoserve defaults
|
Вроде ничего не забыл. Писал по памяти и не проверял.
Можно выпить