from-source.md 11.7 KB
Newer Older
Patipat Jo's avatar
Patipat Jo committed
1
# วิธีการติดตั้ง CKAN 2.9 จาก Source บน Ubuntu 18.04 และ 20.04
Patipat Jo's avatar
Patipat Jo committed
2
3
4
5
6
7

### 1. Update Package ของ Ubuntu:
```sh
sudo apt-get update
```

Patipat Jo's avatar
Patipat Jo committed
8
### 2. ติดตั้งและตั้งค่า PostgreSQL:
Patipat Jo's avatar
Patipat Jo committed
9
10
11
```sh
sudo apt-get install -y postgresql

Patipat Jo's avatar
Patipat Jo committed
12
# สร้าง postgres user สำหรับเขียน ckan_default, datastore_default 
Patipat Jo's avatar
Patipat Jo committed
13
# ใส่ ***{password1}***
Patipat Jo's avatar
Patipat Jo committed
14
15
16
17
18
19
20
21
sudo -u postgres createuser -S -D -R -P ckan_default

# สร้างฐานข้อมูล ckan_default
sudo -u postgres createdb -O ckan_default ckan_default -E utf-8

# สร้างฐานข้อมูล datastore_default
sudo -u postgres createdb -O ckan_default datastore_default -E utf-8

Patipat Jo's avatar
Patipat Jo committed
22
# สร้าง postgres user สำหรับอ่าน datastore_default 
Patipat Jo's avatar
Patipat Jo committed
23
# ใส่ ***{password2}***
Patipat Jo's avatar
Patipat Jo committed
24
25
sudo -u postgres createuser -S -D -R -P -l datastore_default

Patipat Jo's avatar
Patipat Jo committed
26
27
28
29
#ตรวจสอบ database list ให้มี database ckan_default และ datastore_default
sudo -u postgres psql -l
```

Patipat Jo's avatar
Patipat Jo committed
30
### 3. ติดตั้งและตั้งค่า Solr:
Patipat Jo's avatar
Patipat Jo committed
31
```sh
Patipat Jo's avatar
Patipat Jo committed
32
sudo apt-get install openjdk-8-jdk
Patipat Jo's avatar
Patipat Jo committed
33

Patipat Jo's avatar
Patipat Jo committed
34
35
# ใช้คำสั่งนี้เพื่อให้เปลี่ยนไปใช้ openjdk-8-jdk
sudo update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
Patipat Jo's avatar
Patipat Jo committed
36

Patipat Jo's avatar
Patipat Jo committed
37
wget http://archive.apache.org/dist/lucene/solr/6.5.1/solr-6.5.1.tgz
Patipat Jo's avatar
Patipat Jo committed
38

Patipat Jo's avatar
Patipat Jo committed
39
tar xzf solr-6.5.1.tgz solr-6.5.1/bin/install_solr_service.sh --strip-components=2
Patipat Jo's avatar
Patipat Jo committed
40

Patipat Jo's avatar
Patipat Jo committed
41
sudo bash ./install_solr_service.sh solr-6.5.1.tgz
Patipat Jo's avatar
Patipat Jo committed
42

Patipat Jo's avatar
Patipat Jo committed
43
sudo su solr
Patipat Jo's avatar
Patipat Jo committed
44

Patipat Jo's avatar
Patipat Jo committed
45
cd /opt/solr/bin
Patipat Jo's avatar
Patipat Jo committed
46

Patipat Jo's avatar
Patipat Jo committed
47
./solr create -c ckan
Patipat Jo's avatar
Patipat Jo committed
48

Patipat Jo's avatar
Patipat Jo committed
49
cd /var/solr/data/ckan/conf
Patipat Jo's avatar
Patipat Jo committed
50

thepaeth's avatar
thepaeth committed
51
52
mv solrconfig.xml solrconfig.xml.bak

53
wget https://raw.githubusercontent.com/ckan/ckan/master/contrib/docker/solr/solrconfig.xml
Patipat Jo's avatar
Patipat Jo committed
54
55

rm managed-schema
Patipat Jo's avatar
Patipat Jo committed
56

Patipat Jo's avatar
Patipat Jo committed
57
ln -s /usr/lib/ckan/default/src/ckan/ckan/config/solr/schema.xml schema.xml
Patipat Jo's avatar
Patipat Jo committed
58

Patipat Jo's avatar
Patipat Jo committed
59
exit
Patipat Jo's avatar
Patipat Jo committed
60

Patipat Jo's avatar
Patipat Jo committed
61
sudo service solr restart
thepaeth's avatar
thepaeth committed
62
63

# เปิดการทำงานของ firewall ufw
thepaeth's avatar
thepaeth committed
64
65
## เพื่อแก้ปัญหาช่องโหว่ของ solr 
### https://issues.apache.org/jira/browse/SOLR-13669
thepaeth's avatar
thepaeth committed
66
67
68
69
70
71
72
sudo ufw enable

# กำหนด firewall อนุญาตให้เข้าได้เฉพาะ ssh http https
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https

Patipat Jo's avatar
Patipat Jo committed
73
74
```

Patipat Jo's avatar
Patipat Jo committed
75
### 4. ติดตั้ง Package ของ Ubuntu ที่ CKAN ต้องการ:
Patipat Jo's avatar
Patipat Jo committed
76
77
78
79
ตรวจสอบเวอร์ชั่นของ Ubuntu โดยใช้คำสั่ง 
```sh
cat /etc/os-release
```
Patipat Jo's avatar
Patipat Jo committed
80
81
- สำหรับ Ubuntu 20.04:
```sh
Patipat Jo's avatar
Patipat Jo committed
82
sudo apt-get install python-dev libpq-dev redis-server git
Patipat Jo's avatar
Patipat Jo committed
83
84
85
86
87
88
89
90
91

sudo add-apt-repository universe

sudo apt install python2

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1

sudo update-alternatives --config python

Patipat Jo's avatar
Patipat Jo committed
92
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
Patipat Jo's avatar
Patipat Jo committed
93
94

sudo python2 get-pip.py
Patipat Jo's avatar
Patipat Jo committed
95
96

sudo apt install virtualenv
Patipat Jo's avatar
Patipat Jo committed
97
98
99
```
- สำหรับ Ubuntu 18.04:

Patipat Jo's avatar
Patipat Jo committed
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
```sh
sudo apt-get install python-dev libpq-dev redis-server python-pip python-virtualenv git-core
```

### 5. ตั้งค่า python2 และ pip2:
```sh
#ตรวจสอบเวอร์ชั่นของ python และกำหนดให้เป็นเวอร์ชัน 2.7
python -V
# Python 2.7.x

#ตรวจสอบเวอร์ชั่นของ pip และกำหนดให้เป็นการรันจาก ... (python 2.7)
pip -V
# pip x.x.x from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
```

### 6. ตั้งค่า CKAN path:
```sh
#เตรียม ckan path
sudo mkdir -p /usr/lib/ckan/default

sudo chown -R `whoami` /usr/lib/ckan/default

#เตรียม storage path
sudo mkdir -p /var/lib/ckan/default

sudo chown -R `whoami` /var/lib/ckan && sudo chmod -R 775 /var/lib/ckan
```

### 7. ติดตั้ง CKAN:
```sh
Patipat Jo's avatar
Patipat Jo committed
130
virtualenv --python=python2 /usr/lib/ckan/default
Patipat Jo's avatar
Patipat Jo committed
131
132
133

. /usr/lib/ckan/default/bin/activate

Patipat Jo's avatar
Patipat Jo committed
134
135
cd /usr/lib/ckan/default

Patipat Jo's avatar
Patipat Jo committed
136
137
138
139
140
141
142
143
144
pip install --upgrade pip

pip install setuptools==44.1.0

pip install -e 'git+https://github.com/ckan/ckan.git@ckan-2.9.1#egg=ckan[requirements-py2]'

deactivate
```

Patipat Jo's avatar
Patipat Jo committed
145
146
147
### 8. ตั้งค่าและสร้างฐานข้อมูลสำหรับ CKAN
#### 8.1 ตั้งค่า who.ini:
```sh
Patipat Jo's avatar
Patipat Jo committed
148
sudo mkdir -p /etc/ckan/default
Patipat Jo's avatar
Patipat Jo committed
149
150

sudo ln -s /usr/lib/ckan/default/src/ckan/who.ini /etc/ckan/default/who.ini
Patipat Jo's avatar
Patipat Jo committed
151
152

sudo chown -R `whoami` /etc/ckan/
Patipat Jo's avatar
Patipat Jo committed
153
```
Patipat Jo's avatar
Patipat Jo committed
154
#### 8.2 แก้ไขไฟล์ config และสร้างฐานข้อมูล CKAN ดังนี้:
Patipat Jo's avatar
Patipat Jo committed
155
```sh
Patipat Jo's avatar
Patipat Jo committed
156
157
. /usr/lib/ckan/default/bin/activate

Patipat Jo's avatar
Patipat Jo committed
158
159
160
ckan generate config /etc/ckan/default/ckan.ini

sudo vi /etc/ckan/default/ckan.ini
Patipat Jo's avatar
Patipat Jo committed
161
    - แก้ไข {password1} (จากการตั้งค่าในขั้นตอนที่ 2) ของ sqlalchemy.url
Patipat Jo's avatar
Patipat Jo committed
162
        > sqlalchemy.url = postgresql://ckan_default:{password1}@localhost/ckan_default
Patipat Jo's avatar
Patipat Jo committed
163
    - เปิดการใช้งาน และแก้ไข {password1} (จากการตั้งค่าในขั้นตอนที่ 2) ของ ckan.datastore.write_url
Patipat Jo's avatar
Patipat Jo committed
164
        > ckan.datastore.write_url = postgresql://ckan_default:{password1}@localhost/datastore_default
Patipat Jo's avatar
Patipat Jo committed
165
    - เปิดการใช้งาน และแก้ไข {password2} (จากการตั้งค่าในขั้นตอนที่ 2) ของ ckan.datastore.read_url
Patipat Jo's avatar
Patipat Jo committed
166
        > ckan.datastore.read_url = postgresql://datastore_default:{password2}@localhost/datastore_default
Patipat Jo's avatar
Patipat Jo committed
167
    - กำหนด ckan.site_url
Patipat Jo's avatar
Patipat Jo committed
168
        > ckan.site_url = http://localhost:5000
Patipat Jo's avatar
Patipat Jo committed
169
170
    - เปิดการใช้งาน และแก้ไข solr_url
        > solr_url = http://127.0.0.1:8983/solr/ckan
Patipat Jo's avatar
Patipat Jo committed
171
172
173
    - เปิดการใช้งาน ckan.redis.url
        > ckan.redis.url = redis://localhost:6379/0
    - แก้ไข ckan.plugins (ให้เหมือนตามนี้)
thepaeth's avatar
thepaeth committed
174
        > ckan.plugins = stats text_view image_view recline_view resource_proxy datastore webpage_view
Patipat Jo's avatar
Patipat Jo committed
175
176
177
178
    - แก้ไข ckan.views.default_views (ให้เหมือนตามนี้)
        > ckan.views.default_views = image_view text_view recline_view webpage_view
    - เปิดการใช้งานและแก้ไข ckan.storage_path
        > ckan.storage_path = /var/lib/ckan/default
Patipat Jo's avatar
Patipat Jo committed
179

Patipat Jo's avatar
Patipat Jo committed
180
181
sudo service solr restart

Patipat Jo's avatar
Patipat Jo committed
182
ckan -c /etc/ckan/default/ckan.ini db init
Patipat Jo's avatar
Patipat Jo committed
183
184

deactivate
Patipat Jo's avatar
Patipat Jo committed
185
186
```

Patipat Jo's avatar
Patipat Jo committed
187
### 9. สร้าง CKAN SysAdmin และกำหนดสิทธิ์ DataStore:
Patipat Jo's avatar
Patipat Jo committed
188
189

```sh
Patipat Jo's avatar
Patipat Jo committed
190
191
. /usr/lib/ckan/default/bin/activate

Patipat Jo's avatar
Patipat Jo committed
192
193
194
#เปลี่ยน {username}
ckan -c /etc/ckan/default/ckan.ini sysadmin add {username}

Patipat Jo's avatar
Patipat Jo committed
195
#กำหนดสิทธิ์ DataStore
Patipat Jo's avatar
Patipat Jo committed
196
ckan -c /etc/ckan/default/ckan.ini datastore set-permissions | sudo -u postgres psql --set ON_ERROR_STOP=1
Patipat Jo's avatar
Patipat Jo committed
197

Patipat Jo's avatar
Patipat Jo committed
198
ckan -c /etc/ckan/default/ckan.ini run
Patipat Jo's avatar
Patipat Jo committed
199
200
```

Patipat Jo's avatar
Patipat Jo committed
201
### 10. ทดสอบเรียกใช้เว็บไซต์ผ่าน http://localhost:5000 และ login ด้วย SysAdmin
Patipat Jo's avatar
Patipat Jo committed
202

Patipat Jo's avatar
Patipat Jo committed
203
### 11. วิธีการ set CKAN Production 
Patipat Jo's avatar
Patipat Jo committed
204

Patipat Jo's avatar
Patipat Jo committed
205
#### 11.1 ติดตั้งและตั้งค่า uwsgi 
206
```sh
Patipat Jo's avatar
Patipat Jo committed
207
. /usr/lib/ckan/default/bin/activate
Patipat Jo's avatar
Patipat Jo committed
208
209
210

pip install uwsgi

Patipat Jo's avatar
Patipat Jo committed
211
212
deactivate

Patipat Jo's avatar
Patipat Jo committed
213
sudo cp /usr/lib/ckan/default/src/ckan/ckan-uwsgi.ini /etc/ckan/default/
Patipat Jo's avatar
Patipat Jo committed
214
215

sudo cp /usr/lib/ckan/default/src/ckan/wsgi.py /etc/ckan/default/
216
```
Patipat Jo's avatar
Patipat Jo committed
217
#### 11.2 ติดตั้งและตั้งค่า supervisor สำหรับรัน uwsgi
218
219
```sh
sudo apt-get install supervisor
Patipat Jo's avatar
Patipat Jo committed
220

221
222
223
224
# สร้าง log โฟร์เดอร์สำหรับ CKAN
sudo mkdir -p /var/log/ckan

# สร้าง supervisor config สำหรับ ckan-uwsgi
Patipat Jo's avatar
Patipat Jo committed
225
226
227
sudo vi /etc/supervisor/conf.d/ckan-uwsgi.conf
```
เพิ่มคำสั่งต่อไปนี้
228
229
230
231
232
233
234
235
236
237
238
```sh
[program:ckan-uwsgi]

command=/usr/lib/ckan/default/bin/uwsgi -i /etc/ckan/default/ckan-uwsgi.ini

; Start just a single worker. Increase this number if you have many or
; particularly long running background jobs.
numprocs=1
process_name=%(program_name)s-%(process_num)02d

; Log files - change this to point to the existing CKAN log files
239
240
stdout_logfile=/var/log/ckan/ckan-uwsgi.stdout.log
stderr_logfile=/var/log/ckan/ckan-uwsgi.stderr.log
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257

; Make sure that the worker is started on system start and automatically
; restarted if it crashes unexpectedly.
autostart=true
autorestart=true

; Number of seconds the process has to run before it is considered to have
; started successfully.
startsecs=10

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600

; Required for uWSGI as it does not obey SIGTERM.
stopsignal=QUIT
```
Patipat Jo's avatar
Patipat Jo committed
258
#### 11.3 ติดตั้งและตั้งค่า nginx
Patipat Jo's avatar
Patipat Jo committed
259
```sh
Patipat Jo's avatar
Patipat Jo committed
260
261
sudo apt-get install nginx

Patipat Jo's avatar
Patipat Jo committed
262
263
264
sudo vi /etc/nginx/sites-available/ckan
```
เพิ่มคำสั่งต่อไปนี้
265
```sh
Patipat Jo's avatar
Patipat Jo committed
266
proxy_cache_path /var/cache/nginx/proxycache levels=1:2 keys_zone=cache:30m max_size=250m;
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
proxy_temp_path /tmp/nginx_proxy 1 2;

server {
    client_max_body_size 100M;
    location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_cache cache;
        proxy_cache_bypass $cookie_auth_tkt;
        proxy_no_cache $cookie_auth_tkt;
        proxy_cache_valid 30m;
        proxy_cache_key $host$scheme$proxy_host$request_uri;
        # In emergency comment out line to force caching
        # proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
    }

}
```
Patipat Jo's avatar
Patipat Jo committed
286
#### 11.4 เริ่มการใช้งาน CKAN
287
288
```sh
# ลบไฟล์ default ของ nginx ออก
thepaeth's avatar
thepaeth committed
289
sudo rm -r /etc/nginx/sites-enabled/default
Patipat Jo's avatar
Patipat Jo committed
290

291
# เปิดใช้งาน CKAN สำหรับ ngixn
Patipat Jo's avatar
Patipat Jo committed
292
293
sudo ln -s /etc/nginx/sites-available/ckan /etc/nginx/sites-enabled/ckan

Patipat Jo's avatar
Patipat Jo committed
294
295
296
297
298
299
300
301
#เตรียม proxycache
sudo mkdir -p /var/cache/nginx/proxycache && sudo chown www-data /var/cache/nginx/proxycache

#ปรับแก้ไขสิทธิ์ที่จำเป็น
sudo chown -R www-data:www-data /var/lib/ckan

sudo chown -R www-data:www-data /usr/lib/ckan/default/src/ckan/ckan/public

Patipat Jo's avatar
Patipat Jo committed
302
303
sudo chown -R www-data /tmp/default/

Patipat Jo's avatar
Patipat Jo committed
304
#แก้ไข CKAN config
Patipat Jo's avatar
Patipat Jo committed
305
306
307
308
sudo vi /etc/ckan/default/ckan.ini
    - กำหนด ip ที่ ckan.site_url
        > ckan.site_url = http://{ip address}

Patipat Jo's avatar
Patipat Jo committed
309

Patipat Jo's avatar
Patipat Jo committed
310
# Restart Service
Patipat Jo's avatar
Patipat Jo committed
311
sudo supervisorctl reload
Patipat Jo's avatar
Patipat Jo committed
312
313

sudo service nginx restart
314
315
```

Patipat Jo's avatar
Patipat Jo committed
316
### 12. ทดสอบเรียกใช้เว็บไซต์ผ่าน http://{ip address}
Patipat Jo's avatar
Patipat Jo committed
317

318
### 13. cronjob สำหรับ page view tracking:
319

thepaeth's avatar
thepaeth committed
320
321
322
323
324
สร้าง background jobs config
```sh
sudo cp /usr/lib/ckan/default/src/ckan/ckan/config/supervisor-ckan-worker.conf /etc/supervisor/conf.d/ckan-worker.conf
```

Patipat Jo's avatar
Patipat Jo committed
325
ทำการ reload supervisor
326
327
328
```sh
sudo supervisorctl reload
```
Patipat Jo's avatar
Patipat Jo committed
329
330

```sh
Patipat Jo's avatar
Patipat Jo committed
331
crontab -e
Patipat Jo's avatar
Patipat Jo committed
332
333
334
335
336
```
เพิ่มคำสั่งต่อไปนี้

    @hourly /usr/lib/ckan/default/bin/ckan -c /etc/ckan/default/ckan.ini tracking update && /usr/lib/ckan/default/bin/ckan -c /etc/ckan/default/ckan.ini search-index rebuild -r

Patipat Jo's avatar
Patipat Jo committed
337

Patipat Jo's avatar
Patipat Jo committed
338
### 14. การแก้ไขปัญหาการ download file จาก DataStore
Patipat Jo's avatar
Patipat Jo committed
339
เฉพาะกรณีตรวจสอบพบปัญหา หรือที่ตรวจสอบพบว่ามีไฟล์ /usr/lib/ckan/default/src/ckan/ckanext/datastore/blueprint.py
Patipat Jo's avatar
Patipat Jo committed
340
341
342
```sh
mv /usr/lib/ckan/default/src/ckan/ckanext/datastore/blueprint.py /usr/lib/ckan/default/src/ckan/ckanext/datastore/blueprint.py.bak

Patipat Jo's avatar
Patipat Jo committed
343
wget https://gitlab.nectec.or.th/opend/installing-ckan/-/raw/master/config/datastore/blueprint.py -O /usr/lib/ckan/default/src/ckan/ckanext/datastore/blueprint.py
Patipat Jo's avatar
Patipat Jo committed
344
345
346

sudo supervisorctl reload
```
347
348
### 15. ติดตั้งและตั้งค่า [CKAN Extensions](ckan-extension.md)
### 16. [หากต้องการติดตั้ง ssl ให้ทำดังนี้](nginx-ssl.md)
349
350
351