http://blog.matchgenius.com/tinycore-nginx-server-with-php-cgi-and-vsftpd/
Create fast testing server with TinyCore. I will be using Microcore (8MB) that resides in RAM and 500MB disk drive for persistence. TinyCore Nginx server with php-cgi and vsftpd can be used for for various testing purposes. My setup will be using another box for mysql. Assuming that you have TinyCore Microcore already installed on hard drive lets proceed to installing nginx. My Tiny Core is already installed and I can ssh to it from local machine.
#1: Install Nginx server
From terminal access application browser and search for nginx.
1
|
tce
-
ab
|
Select nginx.tcz and install. Press 2 then q and i to install. Along with Nginx other dependencies will be downloaded automatically: readline.tcz and pcre.tcz.
#2: Install php5
While you still inside application browser press s to search and type php5. Select php5.tcz and install. Installation will take a little longer because there are a lot more dependencies.
#3: Install vsftpd
Repeat the same installation process for vsftpd. s type vsftpd. Select vsftpd.tcz or if you want to use ssl version vsftpd-ssl.tcz and install.
#4: Copy configuration files
Copy default nginx.conf file to /usr/local/etc and edit it.
1
|
sudo
cp
/
usr
/
local
/
nginx
.conf
.default
/
usr
/
local
/
etc
/
nginx
.conf
|
Copy mime.types to /usr/local/etc
1
|
sudo
cp
/
usr
/
local
/
mime
.types
/
usr
/
local
/
etc
/
mime
.types
|
Copy fastcgi_params to /usr/local/etc
1
|
sudo
cp
/
usr
/
local
/
fastcgi_params
/
usr
/
local
/
etc
/
fastcgi_params
|
Create symbolic link to libodbc.so.1 (In my case php-cgi fails to load without it)
1
|
sudo
ln
-
s
/
usr
/
local
/
lib
/
libodbc
.so
/
usr
/
local
/
lib
/
libodbc
.so
.
1
|
Create nginx php-cgi startup script in /usr/local/etc/init.d/nginx . I modified my OpenSSH startup script like that:
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
|
#!/bin/sh
# nginx php-cgi start script
[
$
(
id
-
u
)
=
0
]
||
{
echo
"must be root"
;
exit
1
;
}
start
(
)
{
[
-
f
/
usr
/
local
/
etc
/
nginx
.conf
]
||
{
echo
"Config file /usr/local/etc/nginx.conf not found"
;
exit
1
;
}
# Load nginx server
echo
-
n
"Starting nginx php-cgi"
/
usr
/
local
/
sbin
/
nginx
-
c
/
usr
/
local
/
etc
/
nginx
.conf
# Load php-cgi server
/
usr
/
local
/
bin
/
php
-
cgi
-
b
127.0.0.1
:
9000
&
}
stop
(
)
{
echo
"Stopping nginx"
kill
$
(
pidof
nginx
)
if
pidof
php
-
cgi
>
/
dev
/
null
;
then
echo
-
n
"Stopping php-cgi"
kill
$
(
pidof
php
-
cgi
)
fi
}
restart
(
)
{
if
pidof
nginx
>
/
dev
/
null
;
then
stop
&&
start
else
start
fi
}
case
$
1
in
start
)
start
;
;
stop
)
stop
;
;
restart
)
restart
;
;
*
)
echo
"Usage $0 {start|stop|restart}"
;
exit
1
esac
|
#5: Edit nginx.conf
Edit /usr/local/etc/nginx.conf and make changes inside http{ server{ location / index index.php
1
2
3
4
5
6
7
8
9
10
11
12
|
server
{
listen
80
;
server_name
localhost
;
#charset koi8-r;
#access_log logs/host.access.log main;
location
/
{
root
html
;
index
index
.html
index
.htm
index
.php
;
}
|
On the bottom of the same file uncomment whats under pass the PHP scripts to FastCGI
1
2
3
4
5
6
7
8
9
|
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location
~
\
.php
$
{
root
/
usr
/
local
/
html
;
fastcgi_pass
127.0.0.1
:
9000
;
fastcgi_index
index
.php
;
fastcgi_param
SCRIPT_FILENAME
/
usr
/
local
/
html
$fastcgi_script_name
;
include
fastcgi_params
;
}
|
#6: Edit vsftpd.conf
Configure /usr/local/etc/vsftpd.conf file. You can tweak it as you like and add more things but I will keep it basic for now. Make sure this settings are present.
1
2
3
4
5
|
anonymous_enabled
=
NO
local_enable
=
YES
local_umask
=
002
connect_from_port_20
=
YES
local_root
=
/
usr
/
local
/
html
|
#7: Create test index.php
Just so you can test your server lets create simple page to test if php is working.
1
|
sudo
vi
/
usr
/
local
/
html
/
index
.php
|
1
2
3
4
5
6
7
8
9
|
<?php
$myvar
=
"Tiny Core simple server test"
;
?>
<
html
>
<
head
>
<
title
>
Tiny
Core
server
<
/
title
>
<
/
head
>
<
body
>
<
h2
>
<
center
>
<?php
echo
$myvar
;
?>
<
/
center
>
<
/
h2
>
<
/
body
>
<
/
html
>
|
#8: Tiny Core persistence save
All configuration will be lost if we reboot the server so lets make it persistent.
Edit /opt/.filetool.lst
1
|
sudo
vi
/
opt
/
.filetool
.lst
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
opt
home
/
etc
/
hostname
/
etc
/
passwd
/
etc
/
shadow
/
usr
/
local
/
etc
/
ssh
/
usr
/
local
/
etc
/
nginx
.conf
/
usr
/
local
/
etc
/
mime
.types
/
usr
/
local
/
html
/
/
usr
/
local
/
etc
/
init
.d
/
nginx
/
usr
/
local
/
etc
/
fastcgi_params
/
usr
/
local
/
lib
/
libodbc
.so
.
1
/
usr
/
local
/
etc
/
vsftpd
.conf
|
Edit /opt/bootlocal.sh
1
|
sudo
vi
/
opt
/
bootlocal
.sh
|
1
2
3
4
5
|
#!/bin/sh
# put other system startup commands here
/
usr
/
local
/
etc
/
init
.d
/
openssh
start
/
usr
/
local
/
etc
/
init
.d
/
nginx
start
/
usr
/
local
/
sbin
/
vsftpd
|
Add auto bakup before server shutdown in /opt/shutdown.sh
1
|
sudo
vi
/
opt
/
shutdown
.sh
|
1
2
3
4
5
|
#!/bin/sh
# put user shutdown commands here
/
usr
/
bin
/
filetool
.sh
-
b
.
.
.
|
Save your files to backup
1
|
sudo
filetool
.
sh
-
b
|
Now you should be ready for reboot and test.
#9: TinyCore Nginx server test connect from outside
In my setup before I can connect to my TinyCore I have to add NAT in my firewall. Depending on your situation you may have to do it as well. Make sure nothing is blocking your connection. Because Im connecting through middle server that is OpenBSD im going to add NAT in my pf.conf file. Im going to open port 80 for Nginx and 20 and 21 for vsftpd.
1
2
3
4
5
|
$external_nic
=
"re0"
$mylaptop
=
"192.168.0.2"
$tinycore_server
=
"10.10.0.2"
pass
in
on
$external_nic
proto
tcp
from
$mylaptop
to
any
port
80
rdr
-
to
$tinycore_server
pass
in
on
$external_nic
proto
tcp
from
$mylaptop
to
any
port
{
20
,
21
}
rdr
-
to
$tinycore_server
|
Web server test:
1
2
|
lynx
http
:
//192.168.0.10 -dump
Tiny
Core
simple
server
test
|
FTP server test:
1
2
3
4
5
6
7
8
9
|
ftp
tc
@
192.168.0.10
Connected
to
192.168.0.10.
220
(
vsFTPd
2.3.5
)
331
Please
specify
the
password
.
Password
:
230
Login
successful
.
Remote
system
type
is
UNIX
.
Using
binary
mode
to
transfer
files
.
ftp
>
|