forked from asascience-open/sci-wms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.html
253 lines (216 loc) · 10.8 KB
/
README.html
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
<!DOCTYPE html><html><head><meta charset="utf-8"><style>html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
body{
color:#444;
font-family:Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman',
"Hiragino Sans GB", "STXihei", "微软雅黑", serif;
font-size:12px;
line-height:1.5em;
background:#fefefe;
width: 45em;
margin: 10px auto;
padding: 1em;
outline: 1300px solid #FAFAFA;
}
a{ color: #0645ad; text-decoration:none;}
a:visited{ color: #0b0080; }
a:hover{ color: #06e; }
a:active{ color:#faa700; }
a:focus{ outline: thin dotted; }
a:hover, a:active{ outline: 0; }
span.backtick {
border:1px solid #EAEAEA;
border-radius:3px;
background:#F8F8F8;
padding:0 3px 0 3px;
}
::-moz-selection{background:rgba(255,255,0,0.3);color:#000}
::selection{background:rgba(255,255,0,0.3);color:#000}
a::-moz-selection{background:rgba(255,255,0,0.3);color:#0645ad}
a::selection{background:rgba(255,255,0,0.3);color:#0645ad}
p{
margin:1em 0;
}
img{
max-width:100%;
}
h1,h2,h3,h4,h5,h6{
font-weight:normal;
color:#111;
line-height:1em;
}
h4,h5,h6{ font-weight: bold; }
h1{ font-size:2.5em; }
h2{ font-size:2em; border-bottom:1px solid silver; padding-bottom: 5px; }
h3{ font-size:1.5em; }
h4{ font-size:1.2em; }
h5{ font-size:1em; }
h6{ font-size:0.9em; }
blockquote{
color:#666666;
margin:0;
padding-left: 3em;
border-left: 0.5em #EEE solid;
}
hr { display: block; height: 2px; border: 0; border-top: 1px solid #aaa;border-bottom: 1px solid #eee; margin: 1em 0; padding: 0; }
pre , code, kbd, samp {
color: #000;
font-family: monospace;
font-size: 0.88em;
border-radius:3px;
background-color: #F8F8F8;
border: 1px solid #CCC;
}
pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; padding: 5px 12px;}
pre code { border: 0px !important; padding: 0;}
code { padding: 0 3px 0 3px; }
b, strong { font-weight: bold; }
dfn { font-style: italic; }
ins { background: #ff9; color: #000; text-decoration: none; }
mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
sup { top: -0.5em; }
sub { bottom: -0.25em; }
ul, ol { margin: 1em 0; padding: 0 0 0 2em; }
li p:last-child { margin:0 }
dd { margin: 0 0 0 2em; }
img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
table { border-collapse: collapse; border-spacing: 0; }
td { vertical-align: top; }
@media only screen and (min-width: 480px) {
body{font-size:14px;}
}
@media only screen and (min-width: 768px) {
body{font-size:16px;}
}
@media print {
* { background: transparent !important; color: black !important; filter:none !important; -ms-filter: none !important; }
body{font-size:12pt; max-width:100%; outline:none;}
a, a:visited { text-decoration: underline; }
hr { height: 1px; border:0; border-bottom:1px solid black; }
a[href]:after { content: " (" attr(href) ")"; }
abbr[title]:after { content: " (" attr(title) ")"; }
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
pre, blockquote { border: 1px solid #999; padding-right: 1em; page-break-inside: avoid; }
tr, img { page-break-inside: avoid; }
img { max-width: 100% !important; }
@page :left { margin: 15mm 20mm 15mm 10mm; }
@page :right { margin: 15mm 10mm 15mm 20mm; }
p, h2, h3 { orphans: 3; widows: 3; }
h2, h3 { page-break-after: avoid; }
}
</style><title>README</title></head><body><h1 id="sci-wms">sci-wms</h1>
<h4 id="a-python-wms-service-for-geospatial-gridded-data">A Python WMS service for geospatial gridded data</h4>
<p>COPYRIGHT 2010 RPS ASA</p>
<pre><code>SCI-WMS is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SCI-WMS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SCI-WMS. If not, see <http://www.gnu.org/licenses/>.
</code></pre>
<h2 id="system-requirements">System Requirements</h2>
<ul>
<li>>= 4GB RAM But it depends directly on the size and extents of the datasets you will be visualizing.</li>
<li>> 2 CPU (> 4 CPU Better)</li>
<li>Python 2.7.x with sqlite</li>
<li>LibGeos (http://download.osgeo.org/geos/)</li>
<li>LibSpatialIndex (http://libspatialindex.github.com)</li>
<li>netCDF4 C library (with opendap enabled, if opendap/remote functionality is desired)</li>
<li>libhdf5 C library (dependency of netCDF4)</li>
<li>libcurl (required for opendap)</li>
</ul>
<p>Your system may have already installed the following dependencies, but
they are required by some of the module dependencies installed in the next section.</p>
<ul>
<li>libpng</li>
<li>libfreetype</li>
<li>libjpeg</li>
<li>libevent</li>
</ul>
<h2 id="community">Community</h2>
<p><a href="https://groups.google.com/forum/?fromgroups#!forum/sci-wms">We have started a Google Group for the sci-wms project located here.</a></p>
<h2 id="installation">Installation</h2>
<p><a href="http://acrosby.github.com/sci-wms">Download the compressed project</a> and unpack or clone this github project into the location the installation will run: <code>git clone https://github.com/asascience-open/sci-wms.git</code>.cat re</p>
<p>Install the following Python dependencies using <code>pip</code>, <code>easy_install</code>, or equivalent.
If you are using <a href="http://www.virtualenv.org/en/latest/">virtualenv</a>, just make
sure you have the environment activated before you try to install the packages
or point to the environment with pip on the install command.</p>
<pre><code class="bash">pip install numpy
pip install Django==1.6
pip install Shapely
pip install greenlet>=0.3.1
pip install gevent>=0.13.6
pip install gunicorn>=0.13.4
pip install matplotlib>=1.2.0
pip install netCDF4>=1.0.2
pip install rtree
pip install south
</code></pre>
<p>You also need to ensure that you have basemap matplotlib toolkit installed,
which isn't available from pypi.</p>
<pre><code class="bash">wget http://sourceforge.net/projects/matplotlib/files/matplotlib-toolkits/basemap-1.0.6/basemap-1.0.6.tar.gz
pip install basemap-1.0.6.tar.gz
</code></pre>
<p>If your version of the HDF5 C libraries is >=1.8.10, you may have to install
the netCDF4 Python module from the source repository in order for it to work properly.
This requires an SVN client to be installed on your system. (Please let us know if
you have problems importing netCDF4 in Python after running this command.)</p>
<pre><code class="bash">pip install -e svn+http://netcdf4-python.googlecode.com/svn/trunk#egg=netCDF4
</code></pre>
<p>If your NetCDF4 and HDF5 libraries are in non-typical locations, you will need to pass the locations to the <code>pip</code> command:</p>
<pre><code class="bash">NETCDF4_DIR=path HDF5_DIR=path pip install netCDF4
</code></pre>
<p>If there is problem with gevent or greenlet, or if you would like gunicorn
to use an alternative worker, you can install the <code>eventlet</code> worker. With some configuration
of the sci-wms gunicorn configuration files, you can also use <code>tornado</code> workers.</p>
<pre><code class="bash">pip install eventlet
pip install tornado
</code></pre>
<h3 id="run-migrations">Run Migrations</h3>
<p>Be sure to run the the <code>south</code> database migrations after setting up your environment. This will add sample data and allow you to set the default user for sci-wms.</p>
<pre><code class="bash">python manage.py syncdb # Prompts to create superuser account
python manage.py migrate
</code></pre>
<h2 id="developing">Developing</h2>
<h3 id="testing">Testing</h3>
<p>To make sure that dependencies have been installed correctly, and that sci-wms is fully functional.
Run the following command from the root sci-wms directory to run the tests.</p>
<pre><code class="bash">python manage.py test
</code></pre>
<h3 id="running">Running</h3>
<p>You can start a development/testing service on port 8000 from the command line by using the following command.</p>
<pre><code class="bash">python manage.py runserver
</code></pre>
<h3 id="static-assets">Static assets</h3>
<p>If you make changes to any of the static assets within sci-wms, run the following command and commit the results:</p>
<pre><code class="bash">python manage.py collectstatic
</code></pre>
<h2 id="deployment">Deployment</h2>
<h3 id="start-the-services">Start the services</h3>
<p>You should NOT run the development service on a production server! You will need to run all production sci-wms application servers using gunicorn. <a href="http://gunicorn.org/">Learn about gunicorn wsgi server configuration by clicking here.</a>.
A helper script for starting a gunicorn sci-wms server is included with the source. To manage the service, you may use two helper scripts included with sci-wms:</p>
<pre><code class="bash">bash start_server.sh
</code></pre>
<p>and</p>
<pre><code class="bash">bash stop_server.sh
</code></pre>
<p><code>start_server.sh</code> loads the config file <code>gunicorn_config_prod.py</code> that is in the root of the sci-wms source tree. Please look at the gunicorn documentation for additional config options and edit this file as necessary.</p>
<p>In production, you will also need to use a webserver (apache or ngnix) to serve static assets inside of sci-wms. See <a href="http://docs.gunicorn.org/en/latest/deploy.html#nginx-configuration">this nginx</a> example to get started.</p>
<h3 id="locking-down-the-deployment">Locking down the deployment</h3>
<p>You should edit the <code>sciwms/settings/prod.py</code> file after deployment and replace the <code>*</code> in <code>ALLOWED_HOSTS</code> with specific host(s) that that server should be accessible on. Example:</p>
<pre><code class="python">#ALLOWED_HOSTS = ["*"]
ALLOWED_HOSTS = ["sciwms.external-host.com", "YOUR_IP_ADDRESS", "sciwms.internal-host"]
</code></pre>
<h2 id="local-cache-data">Local cache data</h2>
<p>Sci-wms caches data on disk so it does not have to read static data from each dataset every request. By default, the path is <code>SCIWMS_ROOT/sciwms/apps/wms/topology</code>. To change this, edit the <code>sciwms/settings/dev.py</code> or <code>sciwms/settings/prod.py</code> files and add a TOPOLOGY_PATH variable.</p>
<pre><code class="python"># Where to store the Topology data?
TOPOLOGY_PATH = "/data/sci-wms-topology"
if not os.path.exists(TOPOLOGY_PATH):
os.makedirs(TOPOLOGY_PATH)
</code></pre>
<h2 id="caveats">Caveats:</h2>
<p>Look at <a href="https://github.com/asascience-open/sci-wms/issues?state=open">https://github.com/asascience-open/sci-wms/issues?state=open</a> for a list of known issues and problems.</p></body></html>